diff --git a/Dockerfile b/Dockerfile index 1b3b99bf..170cba16 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,7 @@ RUN cd /go/src/github.com/documize/community && \ # build release image FROM alpine:3.10 +RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/* COPY --from=builder /go/src/github.com/documize/community/bin/documize-community-linux-amd64 /documize EXPOSE 5001 ENTRYPOINT [ "/documize" ] diff --git a/Gopkg.lock b/Gopkg.lock index 4d7cf55f..624bdd04 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -27,14 +27,15 @@ [[projects]] branch = "master" - digest = "1:cf0505eb7d4704d5ab445353dc64122acf56d13937e20dac5570b995cb21232c" + digest = "1:159f2147aa2b2e5fa020480ab46ab26f3e6c3ebe5d0191632622cc9aa81bcffe" name = "github.com/denisenkom/go-mssqldb" packages = [ ".", "internal/cp", + "internal/querytext", ] pruneopts = "UT" - revision = "a8ed825ac8537383ef814eaf5a16174751796a2b" + revision = "db2462fef53bd29c619fe40f73cbfcc12be79d9f" [[projects]] digest = "1:217f778e19b8d206112c21d21a7cc72ca3cb493b67631680a2324bc50335d432" @@ -93,12 +94,20 @@ version = "v1.0" [[projects]] - digest = "1:adea5a94903eb4384abef30f3d878dc9ff6b6b5b0722da25b82e5169216dfb61" + digest = "1:ec6f9bf5e274c833c911923c9193867f3f18788c461f76f05f62bb1510e0ae65" name = "github.com/go-sql-driver/mysql" packages = ["."] pruneopts = "UT" - revision = "d523deb1b23d913de5bdada721a6071e71283618" - version = "v1.4.0" + revision = "72cd26f257d44c1114970e19afddcd812016007e" + version = "v1.4.1" + +[[projects]] + branch = "master" + digest = "1:1ba1d79f2810270045c328ae5d674321db34e3aae468eb4233883b473c5c0467" + name = "github.com/golang/glog" + packages = ["."] + pruneopts = "UT" + revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" [[projects]] digest = "1:ffc060c551980d37ee9e428ef528ee2813137249ccebb0bfc412ef83071cac91" @@ -160,15 +169,16 @@ revision = "d161d7a76b5661016ad0b085869f77fd410f3e6a" [[projects]] - digest = "1:8ef506fc2bb9ced9b151dafa592d4046063d744c646c1bbe801982ce87e4bc24" + digest = "1:12cb143f2148bf54bcd9fe622abac17325e85eeb1d84b8ec6caf1c80232108fd" name = "github.com/lib/pq" packages = [ ".", "oid", + "scram", ] pruneopts = "UT" - revision = "4ded0e9383f75c197b3a2aaa6d590ac52df6fd79" - version = "v1.0.0" + revision = "3427c32cb71afc948325f299f040e53c1dd78979" + version = "v1.2.0" [[projects]] branch = "master" @@ -298,6 +308,14 @@ revision = "379148ca0225df7a432012b8df0355c2a2063ac0" version = "v1.2" +[[projects]] + digest = "1:d095b21d330637ad0e1025231ef91023f64c65dda093a437001fe8becfb77099" + name = "gopkg.in/cas.v2" + packages = ["."] + pruneopts = "UT" + revision = "1b87d011d1fc0430cdbdfe3115c9843ec33d9da6" + version = "v2.1.0" + [[projects]] digest = "1:e9a0fa7c2dfc90e0fae16be5825ad98074d8704f5fcebfdc289a8e8fb0f8e4b5" name = "gopkg.in/ldap.v3" @@ -306,6 +324,14 @@ revision = "9f0d712775a0973b7824a1585a86a4ea1d5263d9" version = "v3.0.3" +[[projects]] + digest = "1:4d2e5a73dc1500038e504a8d78b986630e3626dc027bc030ba5c75da257cdb96" + name = "gopkg.in/yaml.v2" + packages = ["."] + pruneopts = "UT" + revision = "51d6538a90f86fe93ac480b35f37b2be17fef232" + version = "v2.2.2" + [solve-meta] analyzer-name = "dep" analyzer-version = 1 @@ -334,6 +360,7 @@ "golang.org/x/oauth2", "gopkg.in/alexcesaro/quotedprintable.v3", "gopkg.in/andygrunwald/go-jira.v1", + "gopkg.in/cas.v2", "gopkg.in/ldap.v3", ] solver-name = "gps-cdcl" diff --git a/domain/auth/cas/README.md b/domain/auth/cas/README.md new file mode 100644 index 00000000..99a530c9 --- /dev/null +++ b/domain/auth/cas/README.md @@ -0,0 +1,25 @@ +# Authenticating with Aperao CAS + +## Introduction + +Documize can delegate user authentication to aperao CAS integration. + +This document assumes that the Documize administrator has installed and is familiar with CAS server. + +https://www.apereo.org/projects/cas + +Documize is tested against the CAS version 5.3.x. + +## Run a CAS server + +Refer to the following like [https://apereo.github.io/cas/5.0.x/installation/Docker-Installation.html](https://apereo.github.io/cas/5.0.x/installation/Docker-Installation.html) to run CAS server. Usually the server address is `https://localhost:8443/cas". + +## Configuring Documize + +CAS authentication is configured and enabled from Settings. + +Type in the CAS Server URL, Redirect URL. + +* **CAS Server URL**: The CAS host address, eg: `https://localhost:8443/cas` +* **Redirect URL**: The CAS authorize callback URL. If your documize URL is `https://example.documize.com,` then redirect URL is `https://example.documize.com/auth/cas`. + diff --git a/domain/auth/cas/endpoint.go b/domain/auth/cas/endpoint.go new file mode 100644 index 00000000..d7f20bc7 --- /dev/null +++ b/domain/auth/cas/endpoint.go @@ -0,0 +1,177 @@ +package cas + +import ( + "database/sql" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "strings" + + "github.com/documize/community/core/env" + "github.com/documize/community/core/response" + "github.com/documize/community/core/secrets" + "github.com/documize/community/core/streamutil" + "github.com/documize/community/core/stringutil" + "github.com/documize/community/domain" + "github.com/documize/community/domain/auth" + "github.com/documize/community/domain/store" + usr "github.com/documize/community/domain/user" + ath "github.com/documize/community/model/auth" + "github.com/documize/community/model/user" + casv2 "gopkg.in/cas.v2" +) + +// Handler contains the runtime information such as logging and database. +type Handler struct { + Runtime *env.Runtime + Store *store.Store +} + +// Authenticate checks CAS authentication credentials. +func (h *Handler) Authenticate(w http.ResponseWriter, r *http.Request) { + method := "authenticate" + ctx := domain.GetRequestContext(r) + + defer streamutil.Close(r.Body) + body, err := ioutil.ReadAll(r.Body) + if err != nil { + response.WriteBadRequestError(w, method, "Bad payload") + h.Runtime.Log.Error(method, err) + return + } + + a := ath.CASAuthRequest{} + err = json.Unmarshal(body, &a) + if err != nil { + response.WriteBadRequestError(w, method, err.Error()) + h.Runtime.Log.Error(method, err) + return + } + a.Ticket = strings.TrimSpace(a.Ticket) + + org, err := h.Store.Organization.GetOrganizationByDomain("") + if err != nil { + response.WriteUnauthorizedError(w) + h.Runtime.Log.Error(method, err) + return + } + + ctx.OrgID = org.RefID + // Fetch CAS auth provider config + ac := ath.CASConfig{} + err = json.Unmarshal([]byte(org.AuthConfig), &ac) + if err != nil { + response.WriteBadRequestError(w, method, "Unable to unmarshal CAS configuration") + h.Runtime.Log.Error(method, err) + return + } + service := url.QueryEscape(ac.RedirectURL) + + validateURL := ac.URL + "/serviceValidate?ticket=" + a.Ticket + "&service=" + service + + resp, err := http.Get(validateURL) + if err != nil { + response.WriteBadRequestError(w, method, "Unable to get service validate url") + h.Runtime.Log.Error(method, err) + return + } + defer streamutil.Close(resp.Body) + data, err := ioutil.ReadAll(resp.Body) + if err != nil { + response.WriteBadRequestError(w, method, "Unable to verify CAS ticket: "+a.Ticket) + h.Runtime.Log.Error(method, err) + return + } + userInfo, err := casv2.ParseServiceResponse(data) + if err != nil { + response.WriteBadRequestError(w, method, "Unable to get user information") + h.Runtime.Log.Error(method, err) + return + } + + h.Runtime.Log.Info("cas logon attempt " + userInfo.User) + + u, err := h.Store.User.GetByDomain(ctx, a.Domain, userInfo.User) + if err != nil && err != sql.ErrNoRows { + response.WriteServerError(w, method, err) + h.Runtime.Log.Error(method, err) + return + } + + // Create user account if not found + if err == sql.ErrNoRows { + h.Runtime.Log.Info("cas add user " + userInfo.User + " @ " + a.Domain) + + u = user.User{} + + u.Active = true + u.ViewUsers = false + u.Analytics = false + u.Admin = false + u.GlobalAdmin = false + u.Email = userInfo.User + + fn := userInfo.Attributes.Get("first_name") + ln := userInfo.Attributes.Get("last_name") + if len(fn) > 0 || len(ln) > 0 { + u.Initials = stringutil.MakeInitials(fn, ln) + u.Firstname = fn + u.Lastname = ln + } else { + u.Initials = stringutil.MakeInitials(userInfo.User, "") + u.Firstname = userInfo.User + u.Lastname = "" + } + + u.Salt = secrets.GenerateSalt() + u.Password = secrets.GeneratePassword(secrets.GenerateRandomPassword(), u.Salt) + + u, err = auth.AddExternalUser(ctx, h.Runtime, h.Store, u, true) + if err != nil { + response.WriteServerError(w, method, err) + h.Runtime.Log.Error(method, err) + return + } + } + + // Password correct and active user + if userInfo.User != strings.TrimSpace(strings.ToLower(u.Email)) { + response.WriteUnauthorizedError(w) + return + } + + // Attach user accounts and work out permissions. + usr.AttachUserAccounts(ctx, *h.Store, org.RefID, &u) + + // No accounts signals data integrity problem + // so we reject login request. + if len(u.Accounts) == 0 { + response.WriteUnauthorizedError(w) + err = fmt.Errorf("no user accounts found for %s", u.Email) + h.Runtime.Log.Error(method, err) + return + } + + // Abort login request if account is disabled. + for _, ac := range u.Accounts { + if ac.OrgID == org.RefID { + if ac.Active == false { + response.WriteUnauthorizedError(w) + err = fmt.Errorf("no ACTIVE user account found for %s", u.Email) + h.Runtime.Log.Error(method, err) + return + } + break + } + } + + // Generate JWT token + authModel := ath.AuthenticationModel{} + authModel.Token = auth.GenerateJWT(h.Runtime, u.RefID, org.RefID, a.Domain) + authModel.User = u + + response.WriteJSON(w, authModel) + return +} diff --git a/embed/bindata.go b/embed/bindata.go index 476945ef..fdc1a904 100644 --- a/embed/bindata.go +++ b/embed/bindata.go @@ -26,11 +26,11 @@ // bindata/onboard/dmz_space.json // bindata/onboard/dmz_space_label.json // bindata/public/assets/.DS_Store -// bindata/public/assets/assetMap-b09cb67e695840127becaface267f2e3.json +// bindata/public/assets/assetMap-658d7e9ba92595f60c663f0bb9bdb49e.json // bindata/public/assets/assetMap-cd33192964e8c20af9391de38dbf449b.json // bindata/public/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js // bindata/public/assets/documize-2fe00df20667e7f3343cc39c5fd05a6a.css -// bindata/public/assets/documize-db6507931a581fdde126de11f6da71d1.js +// bindata/public/assets/documize-bdc2602422339ee7de6884898daccc3b.js // bindata/public/assets/font/MaterialIcons-Regular.eot // bindata/public/assets/font/MaterialIcons-Regular.ttf // bindata/public/assets/font/MaterialIcons-Regular.woff @@ -1126,7 +1126,7 @@ func bindataCrossdomainXml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/crossdomain.xml", size: 585, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/crossdomain.xml", size: 585, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1146,7 +1146,7 @@ func bindataDbErrorHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/db-error.html", size: 2985, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/db-error.html", size: 2985, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1166,7 +1166,7 @@ func bindataFavicon32x32Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/favicon-32x32.png", size: 1174, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/favicon-32x32.png", size: 1174, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1186,7 +1186,7 @@ func bindataFaviconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/favicon.ico", size: 4414, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/favicon.ico", size: 4414, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1206,12 +1206,12 @@ func bindataFaviconPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/favicon.png", size: 1174, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/favicon.png", size: 1174, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _bindataIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x57\x59\x73\xea\x3a\x12\x7e\x3e\xf7\x57\x30\x54\xa5\xee\x43\xae\x83\x17\xbc\xcd\x84\x3b\xc5\x62\x02\x09\x5b\xd8\x12\xce\x4b\x4a\x96\x5a\xb6\x88\x37\x6c\x99\x25\xb7\xee\x7f\x9f\x32\x06\x62\x02\x99\x39\xf3\x44\xa9\xfb\xeb\x4f\xfd\xb5\x5a\x2d\x7c\xff\x8f\xd6\xb0\x39\x5d\x8c\xac\x92\xcb\x7d\xef\xcf\xdf\xee\xf3\x9f\x1f\xf7\x2e\x20\xf2\xe7\x6f\x3f\x7e\xfc\x76\xef\x03\x47\xa5\x00\xf9\x50\x2b\x93\x10\xa7\x3e\xfb\x80\x0a\x0e\x03\xca\x9c\x0a\x04\x6b\x16\x87\x81\x0f\x01\x2f\x97\x70\x18\x70\x08\x78\xad\x7c\xa3\x37\x6e\x64\xd9\x0f\x49\xea\xc1\x28\x06\xca\xb6\x37\xb2\x7c\xa3\xd4\x6f\x64\xf9\x48\x90\x19\xe4\xe6\x8d\x2c\x47\x21\xe9\xff\x77\x60\x3b\x0a\x49\x72\xc2\x7b\x21\x46\x9c\x85\xc1\x74\x17\xc1\x09\x8c\x52\x1e\x9e\x10\x85\x9c\x4e\x80\x28\x0e\x49\x8a\xb3\xb8\x13\x2c\x0e\x43\x3e\x1b\xf7\x4e\x90\x1b\xb9\x7d\xf2\xa1\x88\x75\xc2\x84\x17\x7c\x9f\x8e\x01\xf2\x21\x89\x10\x2e\xec\x1e\xb1\x13\xe0\x50\x83\x09\xe0\x34\x66\x7c\x37\x0a\x3d\x86\x77\x1d\x40\x04\xe2\x13\xbe\x99\x63\x84\x23\x48\xc8\x51\xc2\x18\xa2\x30\xe6\xc2\x30\xf0\x76\x27\x3e\xcb\xb7\x21\xb6\x06\xf3\x43\xf0\xbe\xb0\x6d\xab\x3e\x9d\x8d\xad\xc9\xa7\x4d\x6f\xe5\xe8\xb7\xfa\x68\xd4\xeb\x36\xeb\xd3\xee\x70\xf0\x36\xb5\xfa\xa3\x5e\x7d\x6a\xbd\xbd\x8c\xeb\xa3\x91\x35\xce\xe1\x14\x79\x09\x1c\xd0\x8f\xcf\x33\x6b\xbc\x78\xeb\x0e\xa6\xd6\xc3\x78\x1f\x94\x63\x78\x9c\x1e\x21\x27\x92\xe1\xa0\xb7\x78\x7b\xe8\x75\xfb\x7d\x6b\xfc\xd6\x1c\xf6\x47\xc3\x81\x35\x98\x4e\x0a\x01\xc7\x24\x20\x4b\xb9\xce\x39\xc2\xee\x49\xf4\x3e\x6f\x14\xc7\xe1\xe6\x22\x0b\x14\x30\x1f\x1d\x4f\x66\x5f\x1f\xca\x3c\x2f\x5b\x9c\x11\x0a\xd8\x63\x82\xcf\x62\xe4\x40\x91\x13\x02\x64\x7b\x40\x2e\x58\xd3\x84\x05\xce\x28\x0e\xb7\xbb\x2b\x2e\x68\x01\x45\xa9\xc7\x47\x28\x49\xb8\x1b\x87\xa9\xe3\x26\xdf\x09\x11\x12\xe6\x47\x1e\x08\x28\xe5\xee\x99\x98\x94\xbb\x10\x70\x96\x77\xe3\x38\x4c\xf9\x59\x3b\xba\x77\x5e\xe8\xb0\x62\xb7\xa5\x1c\xea\x94\x43\x5c\x3f\x0b\xfc\x14\x1d\x7a\x04\xe2\xe4\x3c\xa0\x4b\xeb\x5e\x0c\x88\xec\x0a\x41\x47\xb1\xe7\x31\xe7\x39\xf3\xd0\x71\xbc\xb3\x3a\xb1\x00\x7b\x29\x01\x32\x75\xc1\x87\x83\xd8\x1b\x35\xf3\x78\xcc\x71\xf9\x69\x5b\x16\x7e\xa6\x40\x3d\x16\x65\x0b\xf5\xc8\xbd\xfd\x8e\x23\x79\x87\x4d\x9e\xd7\x17\x6c\x03\x25\x30\xe1\x3b\xef\x08\x2f\x1c\x03\xc9\xcf\x60\xe2\x86\x9b\x1e\xb2\xc1\xfb\x16\xb1\xdf\xee\xa4\xb9\x98\xe0\x91\xe2\x30\x4f\xf6\xfe\xc4\x47\x79\xf7\x14\x11\x43\x4a\xf7\x7b\x9c\x50\x43\x4a\x2f\x30\xc1\x17\x48\x50\xac\x6b\x7d\x34\x2a\x96\xb3\x37\x7c\x78\x1b\x5b\x93\x61\x6f\x7e\xe5\x5e\x65\xce\x7a\x73\xda\x9d\x5b\x6f\x0f\xd6\xc0\x2a\xde\xac\x2f\xa8\x79\xd7\x7a\x79\xeb\x0d\x87\x4f\xb3\xd1\xe4\x2a\x60\x3a\xae\x0f\x26\xdd\x2c\xfe\x7f\xfa\xf7\xd7\x78\x3c\xa8\xf7\x2e\x80\xd9\xe8\xfe\x7e\x00\xaf\x21\x4e\x8a\x8d\xa8\xdc\x49\x77\xf2\x8d\xdc\x30\x89\x66\x6b\x14\x70\xb1\x0a\x57\xa7\x5b\x1e\x19\xa4\x59\xd9\xf3\xa3\xcf\xc6\x58\x3d\x8a\xbc\x43\x8f\x3f\x78\xa1\x8d\xbc\x62\x5a\x7a\xab\x5c\xaa\x64\x8f\x4b\xfe\xb6\x60\x17\xc5\x09\xf0\x5a\x39\xe5\x54\x30\xca\x9f\x0e\x97\xf3\x48\x80\x55\xca\xd6\xb5\xf2\xab\x30\xab\x0b\xcd\xd0\x8f\x10\x67\xb6\x07\x85\xe7\xa6\x6b\xd5\x80\x38\x90\xc7\x71\xc6\x3d\xf8\xb3\x75\x50\x79\x5f\xc9\xd7\x27\xc6\x28\x0e\x23\x88\xf9\xae\x56\x26\x76\x56\x97\x02\xcd\x5f\x7f\xdd\xb5\x1a\x99\xed\xef\xbf\xcf\xb2\x2b\x86\xb8\x28\x71\xbf\x86\x64\xb6\x6f\x43\x80\xb0\xac\x04\xe7\x31\x56\x6e\xfc\x12\x94\xbf\xb0\xd9\xec\x08\xe3\x02\xfe\x28\xe5\x0a\x96\x40\x82\x63\x16\x7d\xd9\xe0\x14\xf0\x15\xbe\x66\xb0\xc9\x8e\xa6\x80\xdd\x30\xc2\xdd\x1a\x81\x35\xc3\x20\xec\x17\x7f\x94\x58\xc0\x38\x43\x9e\x90\x60\xe4\x41\x4d\xba\x13\xff\x28\xf9\x68\xcb\xfc\xd4\x2f\x9a\xd2\x24\x9b\x8d\x18\x79\xd9\xfc\xad\x05\xe1\x31\x3d\x8f\x05\xef\xa5\x18\xbc\x5a\xd9\x47\x01\xa3\x90\xf0\x72\xc9\x8d\x81\xd6\xca\x95\xa3\xe1\x6e\x99\x84\x41\xf9\x0b\x3a\x71\xc3\x98\xe3\x94\x97\x18\xce\xd4\x1c\x42\x28\x5a\x67\xeb\x3b\x86\xc3\x7f\xaf\x6b\xf2\xe5\x26\x39\x9a\xef\x22\xa8\x95\x99\x8f\x1c\xa8\x44\x81\xf3\x35\x5c\x50\xe4\xad\x22\xdf\x45\x81\x93\x93\x24\xec\x03\x92\x5a\x79\x6f\xbd\xa4\x4c\xf6\xf3\xca\x05\xf8\xcc\x1c\x25\x09\xf0\xa4\xb2\x86\x80\x84\xb1\x00\xc4\x36\x74\x0d\xd9\x8a\xa6\x2a\x20\xe1\x2a\x60\x51\x27\xba\xa9\x19\x6a\x55\x35\x55\x51\xbc\xc3\x49\x52\x2e\xb1\x80\x83\x93\xdd\x92\x4c\x1b\x92\x55\x4d\x08\xd3\x61\x87\x9b\xcf\x3a\x31\x52\x3d\xec\x63\x3c\xb3\x7b\xeb\x49\xc7\x68\xcc\xe7\xcb\xd5\x30\xf5\x95\x65\x7b\xd1\xb4\x3e\x0c\xbf\xb3\x4d\x6a\xa5\xc4\x45\xaa\x24\x0b\x95\xf9\xf8\x96\xcd\x43\x3c\xb7\x23\x32\x6f\xec\xc6\x9c\x30\xfa\x2c\x35\x9d\x9f\x33\xa3\xdf\xae\xae\x14\x6b\x29\x1a\x56\x58\x99\xb4\xda\xbc\x95\xc2\x63\xc0\x52\x5f\xef\xad\xc4\x5e\xd3\x19\x90\xc9\xad\x7f\xbb\x7a\xb5\xfa\xd6\x3a\x7c\x9a\x59\xe9\xd3\xf0\x43\xa4\x9b\x68\x51\x07\xa7\x56\x2b\x97\x7e\x59\xf5\x71\x62\x08\x32\x05\x51\x24\x54\x16\x35\x4d\x07\x9d\x2a\x4a\x55\xc1\x58\x31\xb1\x4a\x89\xa8\x22\x0d\x7d\xa7\x7b\xbe\x7e\x7d\xaa\xb7\x53\x4d\xe7\xaf\x95\x61\x9a\x6a\xcd\x5b\xc5\x5a\xbe\xc8\xf6\xcc\x7e\x1e\xdb\xe2\xab\x3e\xed\x78\x06\x52\x86\x55\xd5\x7f\x3f\xe9\xee\xb4\x5f\xf9\x4c\x05\xf3\x11\x0f\xda\xab\xad\xf5\x73\x1e\xa4\xab\x8d\xde\x1f\x75\xda\x11\x5a\xc9\x8e\xf9\xe0\xa5\x93\xd9\x2d\x7d\x7d\x09\x49\xa5\xa7\x80\x5d\x4f\x57\x2b\x3e\x1e\x76\xe7\x9b\x4a\x1b\x3f\x01\x5a\x46\x0b\xac\xcc\x37\xbd\x8f\x5e\xfc\xfa\xea\x3a\xcb\xc7\xd5\xb2\xbd\xac\x9f\x74\xe7\xf7\xe6\xd0\x37\x1c\xb6\xbc\xb2\x44\x6b\x94\x5b\xf7\x9d\xf9\x63\xc3\x02\x12\x6e\xee\xf6\x35\xe8\xa3\x28\x62\x81\x53\xaa\x95\xfe\xca\x5c\xa5\x52\x09\x45\xd1\x3f\x4b\xbf\x5f\x54\x88\xd8\x9a\x2a\xea\xa6\x22\x21\xd5\x90\x28\x21\x20\xc9\x1a\x01\x49\xa2\x1a\x41\xba\x44\xa4\xbb\x65\xf2\xfb\x1f\x07\x8a\xbc\x99\x0a\x2c\x87\xee\x32\x45\x2a\x61\x6a\x18\x55\x5d\x03\x05\xcb\xaa\x28\x1b\x59\xab\x99\x08\xd1\x2a\x35\xe5\x33\x0e\x9e\x3d\x8d\x87\xf7\xeb\x5a\x3e\xbf\x72\x62\xe7\x64\xd9\xff\x7a\x88\x21\xc0\x50\xe0\xdb\x7b\x84\x4f\x97\x40\x44\x13\x11\xac\xeb\x0a\xd5\xaa\x2a\x21\x32\x18\x54\x51\x14\x5b\xa1\x9a\xa8\x99\x94\xca\x97\xbc\x34\x8c\x21\xe1\x17\x9c\xb9\x59\xd0\x31\xaa\x4a\x9a\x5d\xa5\x44\x36\x0c\xb0\xb1\x81\x0d\x05\xe9\x86\x8d\x34\x83\x88\x06\x95\x2e\xf9\xec\x18\xad\x2f\x53\xdc\x5b\x05\x90\x0c\x03\x54\xd3\x44\xaa\x08\x8a\x84\x35\x84\xaa\xa6\xac\x53\x55\x35\xb4\xaa\x6e\xab\xca\x25\x9b\x8b\xe2\xf5\xb5\xf4\x0e\x76\x41\xd2\xab\xa6\x24\x11\x90\x45\x1b\x23\x55\x24\x0a\x51\x4d\x11\x01\xa6\xb8\x4a\x54\x19\xc3\x25\x63\x92\x06\xd4\x0b\x37\x10\x5f\x70\x9e\x3c\x82\x2a\x6b\xd5\xaa\x49\x4c\x05\x14\x19\x1b\xaa\xa4\x11\x6c\x50\x89\x56\x65\x59\x51\x0d\x4d\xa6\x57\x58\x99\xb7\xbe\x46\xb9\x37\x0b\x48\xd2\x65\xd5\x34\x15\xd0\xb1\x2e\x2a\x58\x54\x75\x6a\x1a\x62\x55\x44\xa0\x18\x18\xa4\x42\x96\x7f\xff\x2b\xbb\x04\x95\xbc\xdf\xf7\x1f\x79\x3f\xee\x2b\x87\x0f\xbe\x7b\x3b\x24\xbb\xdc\x76\xba\x27\x49\x8c\x2f\xa6\xe0\x2f\xf4\xe9\xb5\x61\xd0\x48\x59\xb8\xf8\x68\x49\xcb\x6d\x7d\x9d\xcc\xe4\x91\xd3\xeb\xbe\xa7\xf6\xb6\xcd\x57\xcd\x5d\xdc\xa2\xde\x6c\xee\x8d\xa2\xce\x54\x55\xbb\xd6\x69\x18\x6c\x83\x0f\xd7\x1f\xc9\xcf\xf5\xf7\x0f\x2a\x37\x6d\x57\x95\xf4\x86\x9e\xe8\xb4\xb5\x20\xad\xde\x4e\x0b\x9c\x66\x3a\x9c\xae\x67\x5a\xdb\xf2\x46\x86\x8b\x9f\x3a\x6b\xef\x71\x8a\x5e\x37\xf3\xe4\xa5\xa7\x4a\x5e\xb4\x9a\x6e\x91\xd7\x58\x6c\xdf\xf5\x47\x5a\x79\xde\x3c\xd3\x46\xb4\x08\xf2\x61\x50\x2c\xc2\x55\xb5\xff\xcf\xdd\xbe\xa6\xb7\xd9\x46\xba\xed\x3b\x4b\x1a\xbb\x9b\x45\x67\xdc\x77\xbd\x46\xff\xe7\x40\x1f\x0d\x1f\xaa\x7d\xdb\x7b\x18\x57\x37\x49\x0c\x0b\xd7\xb1\xbc\xcd\x49\x6f\x23\xe5\x6a\xcb\xf7\x77\x3f\x1f\xb4\xce\x87\xb1\xb6\x87\x60\x74\xe6\x9e\xd3\xe7\x54\xff\x68\xd5\x83\xf6\x10\x2c\x45\xbc\x85\xbe\xb5\xf4\xb5\xb6\xac\xb1\x5b\x79\xa5\x55\x87\x8f\x95\x97\xe7\xc1\x66\x1a\x7c\xb0\xa4\x59\x61\xd3\xc7\x4a\x73\xdc\xf0\x7f\x9a\x2b\x25\x94\x5e\x88\xb6\xdd\x5c\xe8\xcd\x0e\x3d\x3f\xec\xfb\x4a\xfe\xd5\xff\x9f\x00\x00\x00\xff\xff\x7c\x90\xd1\xc1\x0d\x10\x00\x00") +var _bindataIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x57\x5b\x73\xea\x38\x12\x7e\x3e\xf3\x2b\x58\xaa\x52\xf3\x90\x71\xf0\x05\xdf\x76\xc3\x6c\x11\x30\x81\x84\x5b\xb8\x25\x9c\x97\x94\x2c\xb5\xb0\x88\x6d\x19\x5b\xe6\x92\xa9\xf9\xef\x5b\xc6\x40\x9c\x40\x76\xcf\x3e\x51\xea\xfe\xfa\x53\x7f\xad\x56\x0b\xdf\xfe\xa3\x39\x68\x4c\xe6\x43\xa7\xe4\x89\xc0\xff\xf3\xb7\xdb\xfc\xe7\xc7\xad\x07\x88\xfc\xf9\xdb\x8f\x1f\xbf\xdd\x06\x20\x50\x29\x44\x01\xd4\xca\x84\xe3\x34\x60\xef\x50\xc1\x3c\xa4\x6c\x51\x81\x70\xcd\x62\x1e\x06\x10\x8a\x72\x09\xf3\x50\x40\x28\x6a\xe5\x2b\xf3\xee\x4a\x55\x03\x4e\x52\x1f\x86\x31\x50\xb6\xbd\x52\xd5\x2b\xad\x7e\xa5\xaa\x47\x82\xcc\xa0\x36\xae\x54\x35\xe2\xa4\xf7\xdf\x81\xad\x88\x93\xe4\x84\xf7\x39\x46\x82\xf1\x70\xb2\x8b\xe0\x04\x46\xa9\xe0\x27\x44\x21\xa7\x13\x20\x8a\x39\x49\x71\x16\x77\x82\xc5\x9c\x8b\xe9\xa8\x7b\x82\x5c\xa9\xad\x93\x0f\x45\xac\xcd\x13\x51\xf0\x7d\x38\xfa\x28\x80\x24\x42\xb8\xb0\x7b\xc4\x4e\x80\x43\x0d\xc6\x80\xd3\x98\x89\xdd\x90\xfb\x0c\xef\xda\x80\x08\xc4\x27\x7c\x23\xc7\x48\x47\x90\x94\xa3\xa4\x11\x44\x3c\x16\xd2\x20\xf4\x77\x27\x3e\x27\x70\x21\x76\xfa\xb3\x43\xf0\xbe\xb0\x2d\xa7\x3e\x99\x8e\x9c\xf1\x87\xcd\x6c\xe6\xe8\xd7\xfa\x70\xd8\xed\x34\xea\x93\xce\xa0\xff\x3a\x71\x7a\xc3\x6e\x7d\xe2\xbc\x3e\x8f\xea\xc3\xa1\x33\xca\xe1\x14\xf9\x09\x1c\xd0\x0f\x4f\x53\x67\x34\x7f\xed\xf4\x27\xce\xfd\x68\x1f\x94\x63\x44\x9c\x1e\x21\x27\x92\x41\xbf\x3b\x7f\xbd\xef\x76\x7a\x3d\x67\xf4\xda\x18\xf4\x86\x83\xbe\xd3\x9f\x8c\x0b\x01\xc7\x24\x20\x4b\xb9\x2e\x04\xc2\xde\x49\xf4\x3e\x6f\x14\xc7\x7c\x73\x96\x05\x0a\x59\x80\x8e\x27\xb3\xaf\x0f\x65\xbe\x9f\x2d\x3e\x11\x4a\xd8\x67\x52\xc0\x62\xb4\x80\x22\x27\x84\xc8\xf5\x81\x9c\xb1\xa6\x09\x0b\x17\xc3\x98\x6f\x77\x17\x5c\xd0\x04\x8a\x52\x5f\x0c\x51\x92\x08\x2f\xe6\xe9\xc2\x4b\xbe\x13\x22\x25\x2c\x88\x7c\x90\x50\x2a\xbc\x4f\x62\x52\xe1\x41\x28\x58\xde\x8d\x23\x9e\x8a\x4f\xed\xe8\xdd\xf8\x7c\xc1\x8a\xdd\x96\x0a\xa8\x53\x01\x71\xfd\x53\xe0\x87\x68\xee\x13\x88\x93\xcf\x01\x1d\x5a\xf7\x63\x40\x64\x57\x08\x3a\x8a\xfd\x1c\xf3\x39\x67\xc1\x17\x0b\xff\x53\x9d\x58\x88\xfd\x94\x00\x99\x78\x10\xc0\x41\xec\x95\x9e\x79\x7c\xb6\xf0\xc4\x69\x5b\xc6\x3f\x52\xa0\x3e\x8b\xb2\x85\x7e\xe4\xde\x7e\xc7\x91\xbc\xc1\x26\xcf\xeb\x0b\xf6\x0e\x25\x30\x16\x3b\xff\x08\x2f\x1c\x03\xc9\xcf\x60\xec\xf1\x4d\x17\xb9\xe0\x7f\x8b\xd8\x6f\x77\xd2\x5c\x4c\xf0\x48\x71\x98\x27\x7b\x7f\x12\xa0\xbc\x7b\x8a\x88\x01\xa5\xfb\x3d\x4e\xa8\x01\xa5\x67\x98\xf0\x0b\x24\x2c\xd6\xb5\x3e\x1c\x16\xcb\xd9\x1d\xdc\xbf\x8e\x9c\xf1\xa0\x3b\xbb\x70\xaf\x32\x67\xbd\x31\xe9\xcc\x9c\xd7\x7b\xa7\xef\x14\x6f\xd6\x17\xd4\xac\xe3\x3c\xbf\x76\x07\x83\xc7\xe9\x70\x7c\x11\x30\x19\xd5\xfb\xe3\x4e\x16\xff\x3f\xfd\xfb\x6b\x3c\xea\xd7\xbb\x67\xc0\x6c\x74\x7f\x3f\x80\xd7\x10\x27\xc5\x46\xd4\x6e\x94\x1b\xf5\x4a\xbd\xa3\x14\x61\xaa\x98\xb8\x58\x85\x8b\xd3\x2d\x8f\x0c\xd3\xac\xec\xf9\xd1\x67\x63\xac\x1e\x45\xfe\xa1\xc7\xef\x7d\xee\x22\xbf\x98\x96\xd9\x2c\x97\x2a\xd9\xe3\x92\xbf\x2d\xd8\x43\x71\x02\xa2\x56\x4e\x05\x95\xac\xf2\x87\xc3\x13\x22\x92\x60\x95\xb2\x75\xad\xfc\x22\x4d\xeb\x52\x83\x07\x11\x12\xcc\xf5\xa1\xf0\xdc\x74\x9c\x1a\x90\x05\xe4\x71\x82\x09\x1f\xfe\x6c\x1e\x54\xde\x56\xf2\xf5\x89\x31\x8a\x79\x04\xb1\xd8\xd5\xca\xc4\xcd\xea\x52\xa0\xf9\xeb\xaf\x9b\xe6\x5d\x66\xfb\xfb\xef\x4f\xd9\x15\x43\x3c\x94\x78\x5f\x43\x32\xdb\xb7\x21\x40\x58\x56\x82\xcf\x31\x4e\x6e\xfc\x12\x94\xbf\xb0\xd9\xec\xe0\x71\x01\x7f\x94\x72\x01\x4b\x20\xc1\x31\x8b\xbe\x6c\x70\x0a\xf8\x0a\x5f\x33\xd8\x64\x47\x53\xc0\x6e\x18\x11\x5e\x8d\xc0\x9a\x61\x90\xf6\x8b\x3f\x4a\x2c\x64\x82\x21\x5f\x4a\x30\xf2\xa1\xa6\xdc\xc8\x7f\x94\x02\xb4\x65\x41\x1a\x14\x4d\x69\x92\xcd\x46\x8c\xfc\x6c\xfe\xd6\x42\x7e\x4c\xcf\x67\xe1\x5b\x29\x06\xbf\x56\x0e\x50\xc8\x28\x24\xa2\x5c\xf2\x62\xa0\xb5\x72\xe5\x68\xb8\x59\x26\x3c\x2c\x7f\x41\x27\x1e\x8f\x05\x4e\x45\x89\xe1\x4c\xcd\x21\x84\xa2\x75\xb6\xbe\x61\x98\xff\x7b\x5d\x53\xcf\x37\xc9\xd1\x62\x17\x41\xad\xcc\x02\xb4\x80\x4a\x14\x2e\xbe\x86\x4b\x9a\xba\xd5\xd4\x9b\x28\x5c\xe4\x24\x09\x7b\x87\xa4\x56\xde\x5b\xcf\x29\x93\xfd\xbc\xf2\x00\x3e\x32\x47\x49\x02\x22\xa9\xac\x21\x24\x3c\x96\x80\xb8\x96\x69\x20\x57\x33\x74\x0d\x14\x5c\x05\x2c\x9b\xc4\xb4\x0d\x4b\xaf\xea\xb6\x2e\xcb\x37\x38\x49\xca\x25\x16\x0a\x58\x64\xb7\x24\xd3\x86\x54\xdd\x90\x78\x3a\x68\x0b\xfb\xc9\x24\x56\x6a\xf2\x1e\xc6\x53\xb7\xbb\x1e\xb7\xad\xbb\xd9\x6c\xb9\x1a\xa4\x81\xb6\x6c\xcd\x1b\xce\xbb\x15\xb4\xb7\x49\xad\x94\x78\x48\x57\x54\xa9\x32\x1b\x5d\xb3\x19\xc7\x33\x37\x22\xb3\xbb\xdd\x48\x10\x46\x9f\x94\xc6\xe2\xe7\xd4\xea\xb5\xaa\x2b\xcd\x59\xca\x96\xc3\x2b\xe3\x66\x4b\x34\x53\x78\x08\x59\x1a\x98\xdd\x95\xdc\x6d\x2c\xfa\x64\x7c\x1d\x5c\xaf\x5e\x9c\x9e\xb3\xe6\x8f\x53\x27\x7d\x1c\xbc\xcb\x74\x13\xcd\xeb\xb0\xa8\xd5\xca\xa5\x5f\x56\x7d\x9c\x18\x92\x4a\x41\x96\x09\x55\x65\xc3\x30\xc1\xa4\x9a\x56\xd5\x30\xd6\x6c\xac\x53\x22\xeb\xc8\x40\xdf\xe9\x9e\xad\x5f\x1e\xeb\xad\xd4\x30\xc5\x4b\x65\x90\xa6\x46\xe3\x5a\x73\x96\xcf\xaa\x3b\x75\x9f\x46\xae\xfc\x62\x4e\xda\xbe\x85\xb4\x41\x55\x0f\xde\x4e\xba\xdb\xad\x17\x31\xd5\xc1\x7e\xc0\xfd\xd6\x6a\xeb\xfc\x9c\x85\xe9\x6a\x63\xf6\x86\xed\x56\x84\x56\xea\xc2\xbe\xf7\xd3\xf1\xf4\x9a\xbe\x3c\x73\x52\xe9\x6a\xe0\xd6\xd3\xd5\x4a\x8c\x06\x9d\xd9\xa6\xd2\xc2\x8f\x80\x96\xd1\x1c\x6b\xb3\x4d\xf7\xbd\x1b\xbf\xbc\x78\x8b\xe5\xc3\x6a\xd9\x5a\xd6\x4f\xba\xf3\x7b\x73\xe8\x1b\x01\x5b\x51\x59\xa2\x35\xca\xad\xfb\xce\xfc\xb1\x61\x21\xe1\x9b\x9b\x7d\x0d\x7a\x28\x8a\x58\xb8\x28\xd5\x4a\x7f\x65\xae\x52\xa9\x84\xa2\xe8\x9f\xa5\xdf\xcf\x2a\xe4\x12\xac\x1a\xb2\x5a\x55\x55\x4d\xb3\x01\x4c\x02\x86\x65\x55\x2d\xdb\x22\x08\x63\xac\xb9\x37\xcb\xe4\xf7\x3f\x0e\x14\x79\x33\x15\x58\x0e\xdd\x65\xcb\x54\xc1\xd4\xb2\xaa\xa6\x01\x1a\x56\x75\x59\xb5\xb2\x56\xb3\x11\xa2\x55\x6a\xab\x4a\x91\x43\x64\x4f\xe3\xe1\xfd\xba\x94\xcf\xaf\x9c\xd8\x67\xb2\xec\x7f\x3d\xc4\x10\x62\x28\xf0\xed\x3d\xd2\x87\x4b\x22\xb2\x8d\x08\x36\x4d\x8d\x1a\x55\x9d\x10\x15\x2c\xaa\x69\x9a\xab\x51\x43\x36\x6c\x4a\xd5\x73\x5e\xca\x63\x48\xc4\x19\x67\x6e\x96\x4c\x8c\xaa\x8a\xe1\x56\x29\x51\x2d\x0b\x5c\x6c\x61\x4b\x43\xa6\xe5\x22\xc3\x22\xb2\x45\x95\x73\x3e\x37\x46\xeb\xf3\x14\xf7\x56\x09\x14\xcb\x02\xdd\xb6\x91\x2e\x83\xa6\x60\x03\xa1\xaa\xad\x9a\x54\xd7\x2d\xa3\x6a\xba\xba\x76\xce\xe6\xa1\x78\x7d\x29\xbd\x83\x5d\x52\xcc\xaa\xad\x28\x04\x54\xd9\xc5\x48\x97\x89\x46\x74\x5b\x46\x80\x29\xae\x12\x5d\xc5\x70\xce\x98\xa4\x21\xf5\xf9\x06\xe2\x33\xce\x93\x47\xd2\x55\xa3\x5a\xb5\x89\xad\x81\xa6\x62\x4b\x57\x0c\x82\x2d\xaa\xd0\xac\x7b\x74\xcb\x50\xe9\x05\x56\xe6\xaf\x2f\x51\xee\xcd\x12\x52\x4c\x55\xb7\x6d\x0d\x4c\x6c\xca\x1a\x96\x75\x93\xda\x96\x5c\x95\x11\x68\x16\x06\xa5\x90\xe5\xdf\xff\xca\x2e\x41\x25\xef\xf7\xfd\x47\xde\x8f\xdb\xca\xe1\x83\xef\xd6\xe5\x64\x97\xdb\x4e\xf7\x24\x89\xf1\xd9\x14\xfc\x85\x3e\xbd\x34\x0c\xee\x52\xc6\xe7\xef\x4d\x65\xb9\xad\xaf\x93\xa9\x3a\x5c\x74\x3b\x6f\xa9\xbb\x6d\x89\x55\x63\x17\x37\xa9\x3f\x9d\xf9\xc3\xa8\x3d\xd1\xf5\x8e\x73\x1a\x06\xdb\xf0\xdd\x0b\x86\xea\x53\xfd\xed\x9d\xaa\x0d\xd7\xd3\x15\xf3\xce\x4c\x4c\xda\x9c\x93\x66\x77\x67\x84\x8b\x46\x3a\x98\xac\xa7\x46\xcb\xf1\x87\x96\x87\x1f\xdb\x6b\xff\x61\x82\x5e\x36\xb3\xe4\xb9\xab\x2b\x7e\xb4\x9a\x6c\x91\x7f\x37\xdf\xbe\x99\x0f\xb4\xf2\xb4\x79\xa2\x77\xd1\x3c\xcc\x87\x41\xb1\x08\x17\xd5\xfe\x3f\x77\xfb\x92\x5e\x73\x34\x5d\x1b\xca\xc3\x2e\x35\x64\x6f\xeb\x22\x85\x18\x3f\x2b\x2b\x58\xc9\x9c\x8d\x9c\x69\xb5\xbd\xb3\x3a\xeb\x46\xef\x61\x6a\x74\xc9\xfc\xa4\x57\x59\x8e\x95\xf6\xf5\x7c\xc1\xdb\xcf\x30\x59\xcb\x95\x11\xaa\x0c\x97\xc8\x11\xfd\xe1\x7a\xf3\x60\x85\x23\xcf\x7a\xaa\x3c\xb8\xaa\x79\x3d\x54\xa7\xa3\x79\xb7\xb1\xda\xe1\xd8\x5e\x80\xff\x34\x1f\xff\xec\xf4\xb5\x1e\x7d\x41\x90\x3e\x0e\x67\x29\xaf\xde\x37\x12\x77\xfa\xe8\x79\x51\xbc\x39\xd3\x9b\x1d\x7a\x7e\xd8\xb7\x95\xfc\xab\xff\x3f\x01\x00\x00\xff\xff\xcd\xb9\x3a\x73\x0d\x10\x00\x00") func bindataIndexHtmlBytes() ([]byte, error) { return bindataRead( @@ -1226,7 +1226,7 @@ func bindataIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/index.html", size: 4109, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/index.html", size: 4109, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1246,7 +1246,7 @@ func bindataMailDocumentApproverHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/document-approver.html", size: 7010, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/mail/document-approver.html", size: 7010, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1266,7 +1266,7 @@ func bindataMailEmailHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/email.html", size: 7545, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/mail/email.html", size: 7545, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1286,7 +1286,7 @@ func bindataMailInviteExistingUserHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/invite-existing-user.html", size: 6937, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/mail/invite-existing-user.html", size: 6937, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1306,7 +1306,7 @@ func bindataMailInviteNewUserHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/invite-new-user.html", size: 8277, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/mail/invite-new-user.html", size: 8277, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1326,7 +1326,7 @@ func bindataMailPasswordResetHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/password-reset.html", size: 7737, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/mail/password-reset.html", size: 7737, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1346,7 +1346,7 @@ func bindataMailShareSpaceExistingUserHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/share-space-existing-user.html", size: 6875, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/mail/share-space-existing-user.html", size: 6875, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1366,7 +1366,7 @@ func bindataMailShareSpaceNewUserHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/share-space-new-user.html", size: 7176, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/mail/share-space-new-user.html", size: 7176, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1386,7 +1386,7 @@ func bindataManifestJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/manifest.json", size: 616, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/manifest.json", size: 616, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1406,7 +1406,7 @@ func bindataOfflineHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/offline.html", size: 28734, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/offline.html", size: 28734, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1426,7 +1426,7 @@ func bindataOnboardDmz_categoryJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_category.json", size: 2216, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_category.json", size: 2216, mode: os.FileMode(493), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1446,7 +1446,7 @@ func bindataOnboardDmz_category_memberJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_category_member.json", size: 5881, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_category_member.json", size: 5881, mode: os.FileMode(493), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1466,7 +1466,7 @@ func bindataOnboardDmz_docJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_doc.json", size: 23877, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_doc.json", size: 23877, mode: os.FileMode(493), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1486,7 +1486,7 @@ func bindataOnboardDmz_doc_attachmentJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_doc_attachment.json", size: 22013, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_doc_attachment.json", size: 22013, mode: os.FileMode(493), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1506,7 +1506,7 @@ func bindataOnboardDmz_doc_linkJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_doc_link.json", size: 3584, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_doc_link.json", size: 3584, mode: os.FileMode(493), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1526,7 +1526,7 @@ func bindataOnboardDmz_sectionJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_section.json", size: 6093422, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_section.json", size: 6093422, mode: os.FileMode(493), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1546,7 +1546,7 @@ func bindataOnboardDmz_section_metaJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_section_meta.json", size: 6093846, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_section_meta.json", size: 6093846, mode: os.FileMode(493), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1566,7 +1566,7 @@ func bindataOnboardDmz_spaceJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_space.json", size: 1666, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_space.json", size: 1666, mode: os.FileMode(493), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1586,7 +1586,7 @@ func bindataOnboardDmz_space_labelJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_space_label.json", size: 505, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_space_label.json", size: 505, mode: os.FileMode(493), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1606,27 +1606,27 @@ func bindataPublicAssetsDs_store() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/.DS_Store", size: 8196, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/.DS_Store", size: 8196, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _bindataPublicAssetsAssetmapB09cb67e695840127becaface267f2e3Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\xd2\xdb\x4e\xe3\x4c\x0c\x07\xf0\x7b\x9e\xa2\xea\xf5\x17\xf0\x8c\xe7\x60\xf3\x0e\xdf\x43\xcc\xf8\x20\xa8\xa0\xa9\x92\xd0\x95\x76\xc5\xbb\xaf\x4a\x61\xb7\x40\xba\x57\x91\xfd\x8f\x7f\x76\xa4\xfc\xba\xd9\x6c\xb6\x6d\x9e\x6d\x99\xb7\xf7\x9b\x53\xf5\xa7\xbe\x7b\x7b\xfc\xdf\x0e\xb7\xbb\x79\xdc\x6f\xef\xbf\xf5\x07\x51\xc4\xc0\x91\x4b\x32\x92\x08\xcd\x19\x39\xa8\x21\x69\xf7\x94\xb8\x9f\x07\xff\xfb\x8c\xbe\x2c\xe3\xf0\xf8\x7c\x18\xa7\x65\xf0\x36\x2f\x7d\x1c\x97\xdb\xdd\x7c\xc9\xaf\xbc\x31\x68\x0a\x4a\xa2\x4c\x0e\xd0\x23\x24\x63\x02\x60\x26\x13\xa7\x14\xab\x9d\x88\xcf\x8b\x74\x94\x97\xe7\xc7\x9f\x76\x2b\xf3\xa5\xfe\xd1\x1e\xa2\x1b\x80\x7a\x84\x52\xaa\x55\x47\x4c\x28\x82\x2c\xd9\x15\x72\x2b\xed\x6d\xee\x0a\xb9\x5b\x15\xb5\x97\x0c\x95\x31\xb4\x4c\xc1\x55\x2d\xc4\xa2\x16\x82\x17\x6d\x35\x68\xf8\x7e\xe3\xf2\x60\xcf\x36\xf4\xa9\x1d\xbf\x9e\x79\x91\x0c\x16\x88\x2c\x33\xb7\x0c\x86\x41\x4a\x6b\x89\x63\xf5\x9c\xa9\xa4\xda\x33\xae\x5c\x7a\x1e\x97\x71\xef\x36\xd9\x5e\xd6\xf5\xbf\xf1\xa0\xc0\x4d\xa5\x56\xf4\x92\xb2\x6a\x34\x72\x44\xec\xe8\x05\x0a\xbb\xc7\xab\x2b\x7c\x9c\x6c\x5e\x56\xf9\x73\x34\x54\x69\x29\x94\x9e\x5c\x23\x91\x75\x21\x21\x6c\x95\x7a\x2b\xa4\x40\x1e\xae\xd2\x0f\x6d\x3a\x5e\xb3\xdf\xb3\x21\xd4\xc4\x21\xa8\x45\xe8\xd2\x32\x28\x6a\x66\x68\x26\x2e\x49\x73\x7c\xff\xee\x35\x7c\x7e\x7c\x3a\xda\xb4\x6a\x9f\xa3\xa1\x85\x1a\x33\x33\x5a\x95\x0a\x28\x90\xab\x33\x41\x82\x66\x48\x62\xe1\x1f\xf4\xcb\xde\x9f\xc6\x1f\xd7\xf4\x8f\x74\xc8\xb1\xa4\xc4\xca\x68\x18\x85\x72\x28\x2a\xe4\xc1\x53\x8c\x98\xa9\x44\x5f\x59\x70\xb4\xbd\x8e\x5f\xdd\x73\x73\x30\xed\x54\x4b\xeb\x58\x32\x5a\x90\x64\x02\x55\x2b\x17\xca\x29\x73\x06\xb8\xce\xed\x56\x34\x06\x0f\xe2\x44\xa9\x16\x43\x89\x19\x22\x9d\x68\x6e\xcd\x93\x73\x7c\xfb\x97\x6f\x36\x9b\xd7\x13\xb8\x3d\x4c\x76\xb0\xbd\x9e\x94\xbb\xed\xcd\xeb\xef\x00\x00\x00\xff\xff\x61\x5c\x14\x7f\x54\x04\x00\x00") +var _bindataPublicAssetsAssetmap658d7e9ba92595f60c663f0bb9bdb49eJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\xd2\x5b\x4e\xec\x48\x0c\x06\xe0\x77\x56\xd1\xea\xe7\x09\xb8\xca\x75\xb1\xd9\xc3\x2c\xa2\xca\x17\x41\x0b\x3a\xad\x24\xf4\x48\x33\x62\xef\xa3\xd0\x70\x0e\x97\xf4\x79\x8a\xec\x3f\xfe\xec\x48\xf9\xef\x66\xb7\xdb\xb7\x79\xb6\x65\xde\xdf\xef\xd6\xea\x57\x7d\xf7\xf6\xf8\xbb\x9d\x6e\x0f\xf3\x78\xdc\xdf\xff\xe8\x0f\xa2\x88\x81\x23\x97\x64\x24\x11\x9a\x33\x72\x50\x43\xd2\xee\x29\x71\xbf\x0c\xfe\xf5\x15\x7d\x59\xc6\xe1\xf1\xf9\x34\x4e\xcb\xe0\x6d\x5e\xfa\x38\x2e\xb7\x87\xf9\x33\xbf\xf1\xc6\xa0\x29\x28\x89\x32\x39\x40\x8f\x90\x8c\x09\x80\x99\x4c\x9c\x52\xac\xb6\x12\x5f\x17\xe9\x28\x2f\xcf\x8f\xff\xda\xad\xcc\x9f\xf5\x8f\xf6\x10\xdd\x00\xd4\x23\x94\x52\xad\x3a\x62\x42\x11\x64\xc9\xae\x90\x5b\x69\x6f\x73\x57\xc8\xc3\xa6\xd8\x55\x62\x81\x98\x62\x44\x64\xb3\xaa\x56\x88\x12\x31\x69\x13\x11\xec\x3f\x6f\x5c\x1e\xec\xd9\x86\x3e\xb5\xf3\xf7\x33\x3f\x25\x83\x05\x22\xcb\xcc\x2d\x83\x61\x90\xd2\x5a\xe2\x58\x3d\x67\x2a\xa9\xf6\x8c\x1b\x97\x5e\xc6\x65\x3c\xba\x4d\x76\x94\x6d\xfd\x77\x3c\x28\x70\x53\xa9\x15\xbd\xa4\xac\x1a\x8d\x1c\x11\x3b\x7a\x81\xc2\xee\xf1\xea\x0a\x1f\x27\x9b\x97\x4d\xfe\x12\x0d\x55\x5a\x0a\xa5\x27\xd7\x48\x64\x5d\x48\x08\x5b\xa5\xde\x0a\x29\x90\x87\xab\xf4\x43\x9b\xce\xd7\xec\xf7\x6c\x08\x35\x71\x08\x6a\x11\xba\xb4\x0c\x8a\x9a\x19\x9a\x89\x4b\xd2\x1c\xdf\xbf\x7b\x0b\x9f\x1f\x9f\xce\x36\x6d\xda\x97\x68\x68\xa1\xc6\xcc\x8c\x56\xa5\x02\x0a\xe4\xea\x4c\x90\xa0\x19\x92\x58\xf8\x03\xfd\x72\xf4\xa7\xf1\x9f\x6b\xfa\x47\x3a\xe4\x58\x52\x62\x65\x34\x8c\x42\x39\x14\x15\xf2\xe0\xeb\xef\x93\xa9\x44\xdf\x58\x70\xb6\xa3\x8e\xdf\xdd\x4b\x73\x30\xed\x54\x4b\xeb\x58\x32\x5a\x90\x64\x02\x55\x2b\x17\xca\x29\x73\x06\xb8\xce\x1d\x36\x34\x06\x0f\xe2\x44\xa9\x16\x43\x89\x19\x22\xad\x34\xb7\xe6\xc9\x39\x86\x75\xe8\x66\xb7\x7b\x5d\xc1\xfd\x69\xb2\x93\x1d\x75\x55\xee\xf6\x37\xaf\xff\x07\x00\x00\xff\xff\xd2\x17\x54\xb2\x54\x04\x00\x00") -func bindataPublicAssetsAssetmapB09cb67e695840127becaface267f2e3JsonBytes() ([]byte, error) { +func bindataPublicAssetsAssetmap658d7e9ba92595f60c663f0bb9bdb49eJsonBytes() ([]byte, error) { return bindataRead( - _bindataPublicAssetsAssetmapB09cb67e695840127becaface267f2e3Json, - "bindata/public/assets/assetMap-b09cb67e695840127becaface267f2e3.json", + _bindataPublicAssetsAssetmap658d7e9ba92595f60c663f0bb9bdb49eJson, + "bindata/public/assets/assetMap-658d7e9ba92595f60c663f0bb9bdb49e.json", ) } -func bindataPublicAssetsAssetmapB09cb67e695840127becaface267f2e3Json() (*asset, error) { - bytes, err := bindataPublicAssetsAssetmapB09cb67e695840127becaface267f2e3JsonBytes() +func bindataPublicAssetsAssetmap658d7e9ba92595f60c663f0bb9bdb49eJson() (*asset, error) { + bytes, err := bindataPublicAssetsAssetmap658d7e9ba92595f60c663f0bb9bdb49eJsonBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/assetMap-b09cb67e695840127becaface267f2e3.json", size: 1108, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/assetMap-658d7e9ba92595f60c663f0bb9bdb49e.json", size: 1108, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1646,7 +1646,7 @@ func bindataPublicAssetsAssetmapCd33192964e8c20af9391de38dbf449bJson() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/assetMap-cd33192964e8c20af9391de38dbf449b.json", size: 39, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/assetMap-cd33192964e8c20af9391de38dbf449b.json", size: 39, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1666,7 +1666,7 @@ func bindataPublicAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs() ( return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js", size: 0, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js", size: 0, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1686,27 +1686,27 @@ func bindataPublicAssetsDocumize2fe00df20667e7f3343cc39c5fd05a6aCss() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/documize-2fe00df20667e7f3343cc39c5fd05a6a.css", size: 414840, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/documize-2fe00df20667e7f3343cc39c5fd05a6a.css", size: 414840, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _bindataPublicAssetsDocumizeDb6507931a581fdde126de11f6da71d1Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xeb\x72\x1b\x37\x9a\x00\xfa\x5f\x4f\x41\x21\xa7\x34\xec\x35\x44\x4b\xce\xcc\xec\x2e\x33\x1d\x97\x63\x3b\x33\xda\xb1\x13\xaf\xa5\xcc\x6c\x95\x8f\x2b\xd5\x62\x43\x24\xe2\x26\xc0\x69\x80\x92\x15\x89\xef\x7e\x0a\xf8\x00\x34\x80\x46\x37\x9b\x92\x12\x3b\x73\x92\x1f\xb1\xd8\xb8\xdf\xbe\xfb\x05\xad\x05\x19\x09\x59\xd3\x99\x44\x7b\x25\xb9\xa0\x8c\x8c\x51\xc9\x67\xeb\x25\xfd\x99\x3c\x2e\x56\x2b\x84\xdf\x21\xf2\x71\xc5\x6b\x29\x10\x6e\x4a\x6a\x22\x78\x75\x49\x6a\x84\x11\x59\x9e\x93\xfa\xb0\xe2\x45\x79\x48\x19\x95\xb4\xa8\xe8\xcf\xa4\x0e\x6a\xcf\x38\xbb\xa0\xf3\xc7\x84\x5d\xd2\x9a\xb3\x25\x61\x12\xbd\xc7\x17\x6b\x36\x93\x94\xb3\x31\xc1\x12\x33\xcc\xb3\x9b\x8a\xc8\x91\xd8\xfb\xfe\xfc\x27\x32\x93\x13\x98\xcc\x9b\x9a\xaf\x48\x2d\xaf\xc7\x04\xa3\x1f\x7f\x24\xe2\x35\x2f\xd7\x15\x41\xf8\xe6\xb2\xa8\xd6\x64\xba\x7f\xb4\xc9\x30\x51\x75\x8b\x75\x25\xf3\x4b\x4e\xcb\xd1\x11\x16\xf9\x4b\x35\xa7\xc9\xb3\xd5\xaa\xa2\xb3\x42\x0d\x32\x21\x1f\x25\x61\xe5\xf8\x66\xa9\x3b\x78\x53\x93\x0b\xfa\x71\xca\x6d\xcb\x89\xff\x19\xaf\x78\xf9\x3a\x5d\x2d\x2a\xc1\x6f\xcd\x36\x4c\xa5\xad\xb2\xc9\xf0\xf8\x08\x33\xfb\x33\x1b\x0b\x9c\x1e\x25\xdb\xbb\x2c\xea\x11\xcd\xc5\x5e\x33\x7f\xba\xc9\x70\xfb\x10\xd6\x72\x41\x98\x54\x0b\xe1\xb5\x78\x5c\x30\xce\xae\x97\x7c\x2d\xc2\x93\x81\x53\x10\x74\xb9\xaa\xc8\xa1\x6a\x12\xb7\x3b\x2f\x04\x89\x76\x3d\xbb\xb9\xf7\x5e\xeb\x45\xb0\xdc\x2d\xdf\xed\x73\x4d\x84\xe4\x35\x99\x92\xfc\x6b\x38\x8c\xb7\xa7\xff\x78\x33\x31\xd7\x66\x4c\x32\xec\x4d\xaf\xbb\xd6\x26\xf3\x76\x87\x0d\xd8\x1d\xfb\xbd\xe3\xda\xae\x25\xad\xc4\x63\xc2\x66\xbc\xa4\x6c\xde\x2e\x61\x44\xde\x71\x2f\xe1\x06\x3f\xcc\x7e\x8a\x9c\xb7\xf6\xb3\xf8\xa9\xf8\x38\x85\x3d\xa2\x4c\x0f\x22\x48\x7d\x49\x67\x64\x9c\xe1\x62\xb5\x7a\x4d\x64\xd1\x55\x5c\xf1\x59\x51\x9d\x4a\x5e\x17\x73\xd2\x55\xc7\x3b\x2e\xf2\x34\x79\x14\xd3\xe0\xab\x6a\x3e\x0e\x0f\x71\x4c\xe0\x05\x73\x2c\x72\x77\xff\x27\x73\x22\x4f\xd7\xe7\x25\x5f\x16\x94\x8d\xb3\x3d\x7a\x31\x46\x5c\x6f\x12\xca\x73\x79\xbd\x22\xfc\x62\x04\xed\x6e\x56\x85\x10\x57\xbc\x2e\xa7\x0c\x93\x65\x41\xab\x29\xdd\xe4\x44\x35\xd8\x37\x73\x16\x6f\x6a\x22\x08\x93\x63\x96\xdd\xde\xb6\x3e\xd2\x2c\xab\x89\x5c\xd7\x6c\xd4\x9e\x28\xa2\xec\xb2\xa8\x68\x89\xb2\x3d\xee\xdd\xd5\x6f\x0a\x41\xfe\xfc\xc7\x89\xbe\x0e\x64\x8c\xd0\x64\xc6\xd9\xac\x90\x63\x81\xd1\x14\x65\xf6\x17\x0d\x7e\xb1\x2c\xdb\x90\x4a\x90\x1b\xb5\x12\x05\x38\xd9\x1c\xed\x37\x2b\x19\x36\x05\xb2\x51\x1b\x45\xf3\x9b\x67\x6b\xb9\xe0\x35\xfd\x59\xc3\xa8\x29\xfa\xa6\x10\x74\x36\x42\x8f\xf8\x66\xcf\x74\x24\x17\x54\xa8\x3d\x1c\x23\x75\x01\x50\x36\x59\x71\x21\xc7\x68\xb5\x3e\xaf\xe8\xcc\xbf\x96\xea\x5e\x2d\x48\x51\x92\x5a\x4c\xe9\x26\xdb\x60\x33\x9e\x3a\x98\xec\xa6\xd5\x9b\x7f\x27\xd4\xe2\x2a\x52\xd4\xcf\xaa\x6a\x9c\xe1\xc4\xe1\x67\x9b\xe0\x1d\x8a\x01\xef\xf0\x03\xb9\x9e\x55\xbc\xf8\xd0\xfb\x0e\xef\xf3\xda\x1e\xea\xad\x71\xef\xae\x3e\xc0\x5b\xfb\x30\x53\x47\xfa\x19\xbc\x44\x73\xe2\x64\x02\x4f\xcf\xbb\xf5\xe1\x8b\xc4\xf1\x3b\x22\x13\xc9\x3f\x10\x96\x3d\x6d\x17\xe8\x67\x99\x3d\x1d\x7e\x27\xbd\x6b\x70\x53\x16\xb2\x98\xfe\xcf\xe9\xf7\xdf\x4d\xe0\xd5\xd0\x8b\x6b\x85\x06\x66\x9c\x49\xc2\xe4\xd9\xf5\x8a\x4c\xd1\x4f\x82\x33\xb4\x49\x2d\x10\xa9\xe6\x30\x81\x11\x15\x23\xb2\x5c\xc9\x6b\xd4\x5d\x51\x2f\xc1\xab\x78\xf7\xe7\xd0\xd4\x81\xa3\x45\xd9\xa4\xe2\x73\xbe\x96\xf1\xab\xe0\x03\x5e\x45\x55\x16\x5d\x04\xd5\xef\x98\xe9\x37\x81\x99\xd6\x82\xd4\xac\x58\x92\xdf\x91\xd3\x4e\xc8\xc9\xdc\xfc\x4f\x8a\xa1\x66\x7c\xb9\xe2\x8c\x30\x29\x1e\x17\x52\x16\xb3\xc5\xe1\x8a\xaf\xb8\xe6\x61\xda\x84\x34\xd4\x20\x75\x4f\xab\x7b\xd3\xd2\x9d\x0d\xcc\x32\x10\xbe\x21\x6c\xbd\x24\x75\x71\x5e\xa9\x26\x78\x4e\xe4\xd4\x8d\xd9\x6c\x99\x63\x3d\x36\xd9\xb0\x75\x4b\xce\x2b\x49\x57\x3b\xae\xdb\xb6\xfa\x0d\xae\x7b\xb6\x16\x92\x3b\x80\x7c\x28\x88\x94\x94\xcd\x23\x0e\xea\xa7\x7f\xad\x49\x7d\xed\x43\xde\x25\xfd\x48\x99\x78\xcc\xb8\xa4\x17\x54\xf3\xba\x71\xd1\x92\x97\x45\xd5\x03\xc6\xdb\x90\x18\x8b\x87\x82\xc5\xd4\x70\xb9\xcf\xed\x3a\x2d\x44\x76\x20\xba\x61\x43\xf1\xcd\x16\x48\x3c\xaf\xf8\x79\x51\x9d\x5e\xce\xd2\x15\x10\x94\xa3\x0c\x53\xf1\xc2\xac\xf5\x4d\xcd\x2f\x69\x49\x6a\xd3\x42\x6d\xf7\x5a\x92\x72\x8c\xd4\x1e\xdb\x42\x84\x13\x07\xd7\x80\x0d\xbf\x66\x96\xe7\x79\x53\x34\xe3\x4c\xc8\x82\x49\x81\xb2\xc9\x33\xaf\xda\xc4\x0e\xbf\x51\x73\xf9\xbb\xa1\x2f\x3e\xd1\x5c\xec\xf0\x7a\x2e\xaf\x5e\x3c\x7b\xf3\x89\xe6\xa1\x86\xde\x64\xd8\x4e\xe7\x87\xba\x7a\x59\xd7\x3c\x9e\xc5\x44\x13\x43\x63\x64\x89\xb2\xe7\x5a\x2a\x33\x59\xd7\xea\x5c\x6d\xdb\xb7\xa4\xa8\x96\x3b\xb4\xae\x55\x7d\xaf\xfd\xf3\x8a\x12\x26\x4f\xca\x1d\xba\x98\x99\x26\x5e\x2f\x6f\x34\x0a\xf9\x3b\xb9\xde\xa1\x9b\x95\x6d\xe3\xf5\xf3\xac\x5c\x52\xf6\x83\x20\xf5\x0e\xfd\x14\xb6\x4d\xdc\xcf\x1b\x43\x06\xec\xda\x97\x6d\x87\x32\x6c\x8b\xbf\x2d\x68\xb5\xae\xc9\x14\x21\xac\x30\xa3\xee\xf1\x94\xd4\x97\xa4\xfe\x1b\x17\xb2\xa3\x6f\x55\xd3\xf4\x2b\x5c\x5d\x94\xc5\x3d\xbc\xe1\x75\xdc\x43\xa2\xad\xaa\x95\xba\x88\x3f\x4e\xa8\x78\xa9\xc7\xf3\x50\x71\xb2\x71\xa6\x08\x1d\x55\xfd\xbb\xb5\x1a\x6c\xbc\x2a\x6a\x41\x4e\x98\x1c\xd0\x50\xc1\x6b\x37\xeb\x6f\x28\x2b\x5f\x7c\xb7\x7d\xcd\xe7\xba\x1e\x8a\x5a\xda\xcd\x1d\xd6\xde\x3b\x0a\xd7\xcb\x77\xfc\x5b\x5a\xc9\xc4\x9b\xf5\xda\xde\x28\xba\x0f\xaa\xe1\x79\xcd\xd7\x2b\xf8\x7b\x73\x87\x1d\x6c\x7a\x42\x59\x76\x70\xb0\xa5\xb6\x37\x18\x0a\xb7\xed\x99\x94\x35\x3d\x5f\x4b\xa2\xae\xea\xdb\x21\x1b\x58\x44\x2d\x50\x57\x6f\xdf\xd2\x5a\x48\x4d\xe5\xee\xd6\xa7\x6b\xd7\xd9\xf3\xab\xe2\x4e\x1d\xdb\x66\x9d\xfd\xbe\xd4\x02\xa3\xdd\x3a\xd5\x6d\x92\x3d\xfe\x55\x6d\xfa\x6b\x4d\x10\xf5\x5e\x0a\xef\x70\x70\x91\x68\x9c\xba\x1e\xfb\x3b\x1d\xf8\xd6\xfb\x91\x1a\xb6\xb9\x28\x6f\x6a\x72\x49\xc9\xd5\x94\xad\xab\x0a\x37\xad\xe0\x37\x65\x54\x8e\xb3\x1b\xdd\xed\x8f\x62\xbd\x22\xf5\x78\x32\x99\x14\xf5\x7c\xbd\x54\x44\x93\x61\x7d\x43\x80\x96\xdf\xac\xeb\x4a\x41\x2d\x0d\xf6\xd5\x1f\x16\x78\xab\xbf\x1d\x04\x56\x3f\x1c\x18\x75\x3f\xdc\x53\x45\x08\x1e\x91\xfa\xa3\xa4\x42\x91\x79\xaf\x34\x4f\x3d\xdd\x3f\xc6\x86\x62\x79\x43\xea\x25\x15\x82\x72\xf6\xac\x2c\x4f\x57\xc5\x8c\x4c\xf7\x8f\x37\x1b\x5c\xd2\xf2\x2d\x99\x11\x7a\x49\xd4\x71\x89\xbe\x05\xec\x29\x3e\x86\xe4\x5d\xa8\x15\xcb\x34\x6a\xdd\x13\x57\x54\xce\x16\xb0\xdf\xc2\xee\xb7\xd9\x4a\x84\x6f\xa8\x00\x04\xb0\x7f\x84\x97\x44\x08\xc5\xba\xa2\x1f\x98\x5a\xc4\x48\xf2\xd1\x8c\x33\xa6\x78\x48\x45\xb5\x65\x37\xb3\x42\x90\x91\x4c\x13\x30\xd3\xf3\x9a\x14\x1f\xf6\x52\x55\x2c\xda\x99\xde\xa4\x96\x00\x47\x81\xb2\x3d\x75\x37\x7e\x60\x40\x46\x96\x63\x92\xdd\xde\x02\x38\xae\x2a\xf7\x03\xae\x0e\xc9\x9e\x92\xfc\x66\x33\x1d\x8f\x49\xae\x45\x30\x1a\x56\x8f\x49\x96\x35\x58\x33\x17\x31\xeb\x59\x12\xcd\x7a\x92\xa6\x8e\x47\x89\xb6\xcf\x27\xdf\xdf\x27\x93\x45\x21\xbe\xbf\x62\x8e\xa6\x45\x9d\xb5\x51\x76\x70\xd0\xd3\x99\x1a\xc8\xbf\x19\x79\xaa\x6f\xbf\x02\xca\x6e\x6f\xa3\x36\xe6\x06\xeb\x23\x0c\xaf\x31\xc2\x24\xdb\xd3\xdb\xbf\x49\x6d\xbf\x22\xa7\x7e\x85\xad\xff\xed\xec\x24\x26\x93\xa2\xaa\xf8\xd5\xb7\xbc\x5e\x0a\xb5\x55\xc9\x19\x86\x55\x60\x5a\xe1\x37\xff\x44\x1a\x70\xe4\x9d\xc6\x66\x83\x0b\x0d\x2f\xc5\xf4\x86\x33\xfb\x52\xc6\x59\xeb\x30\xfc\xf7\xda\xf4\x19\x52\xd9\x24\xfd\xee\xb2\x0d\xe6\xcc\xbe\xb0\x87\xe9\xda\xf6\xa6\xbb\x56\xb7\xe7\x61\xba\x55\x3d\xb9\x2e\x5f\xb2\x59\x7d\xbd\x02\x56\xd2\x00\xbd\x68\x1f\x27\xc4\x55\x39\xbb\x5e\x11\xb5\xad\xb6\xb1\x81\x5e\x89\x69\x79\xc7\x90\xed\x11\x8f\x4c\xcb\x77\xa0\xe7\x3c\x29\xa9\x63\x24\x51\x36\x59\xc1\xa8\x7a\x43\x48\x36\x91\x0b\xc2\xc6\x24\xff\xfa\xa6\x03\xb2\x12\xd3\x8f\x66\xaa\xbf\x5f\x11\x36\x46\x5f\xa8\x0a\x87\xa6\x9f\x43\xc3\x6d\xdf\x88\x05\xbf\x02\xc6\x58\xd7\xd7\xfc\xf9\xf5\xe9\x7a\x36\x23\x42\x8c\xd1\x69\x71\x49\x4a\x94\x6d\xf4\xe2\xd5\x8f\xfe\xc3\xc0\xac\x1b\x43\xf0\xae\xe7\xdf\x42\x11\x11\x61\x8f\x30\x52\x3d\x1b\x04\xd0\x71\x11\xa7\x3c\xbf\xd9\xec\x79\x58\xa0\xe3\x56\x4d\xe9\x85\x77\x06\x31\x93\x87\x9c\x68\xf1\x92\xd3\x72\x7c\x84\x65\xa3\x7b\x46\x5f\xd8\x79\x1d\x6a\x2e\x6f\x72\xc1\x67\x6b\x01\xc2\xce\x76\x8f\x0d\xeb\x37\xb0\x4f\xc3\xfb\xf5\xf7\x1a\x30\x84\x03\x3b\x6e\x38\xc2\xfe\xbe\x43\x36\x71\x60\xe7\x1e\x9f\xd8\xdf\x7b\xc8\x3c\x0e\xec\x5d\x53\x3a\x87\x6b\xcd\x3e\x0e\xe8\x3e\xe0\x29\x77\x1a\x62\xe5\x58\x19\x3b\xcc\x57\x63\x9e\x5b\x72\x75\xe5\xd3\x8b\x11\xf2\xcb\xb2\x4c\x31\xfd\x39\x57\xff\x9f\xc8\x9a\x2e\xc7\x19\xe6\xc0\xc9\xe7\xe6\xdf\xe6\xb3\x3d\x8b\xbc\xf9\xb3\x29\x6c\xa8\x07\xef\xef\xa6\x58\x53\x79\x79\x88\x2b\xcd\xd7\xec\x29\x42\x53\xf3\x77\xd3\xc0\x11\x8d\xb9\xf7\x77\x54\x6c\xb7\x2c\x8f\x7e\x37\xd5\x7a\x10\x2b\xdf\x05\xaf\xde\xde\xf6\xf4\xa5\xc6\x09\xf1\x6a\xa2\xef\x18\xaf\x46\x6d\xf0\x8f\x13\xc2\x4a\xf1\x4f\x2a\x17\x63\x7d\x1a\x18\x3d\x56\x78\x13\x7e\x98\x03\x12\xeb\x73\x10\xe5\x8f\x8f\x30\x7c\xa9\x08\x9b\xcb\xc5\xe1\x71\x66\x65\xe1\x0a\x04\x71\x8c\x9a\x9b\x8d\x5b\xc4\x9c\xd1\x23\x74\x5d\x0a\x5f\x7a\x92\x65\x3d\x40\x49\xd3\x46\xc1\x7d\x4e\x08\x30\xfa\x2f\xb2\x86\xe9\x0b\x5d\x2d\xfd\x42\x12\x02\x8d\x01\x3d\xae\x74\x35\xbf\xc7\xae\xf7\xe0\xe3\xbc\x2c\xf3\x84\x29\x39\xf7\x7e\x34\xf7\xe9\x8e\x48\xd1\x63\xf5\xb8\xcf\xd7\x05\x5c\x1d\x4f\xb2\x70\xdb\x57\x9b\x66\xfc\xec\xea\xad\x0a\xc7\xc7\x67\x53\x86\x1b\x1c\x16\x6b\x62\x79\xb6\xd9\x6b\x96\x04\x78\x13\x65\x63\x6a\xb0\xf6\x38\xcb\xbf\xbe\xa1\x13\xbf\xbb\x3c\xcf\x3b\xf0\xd5\xc1\x41\xd0\xd3\x35\x9b\xd9\x12\x94\x8d\x4d\x87\x52\x91\x01\x13\xc3\x4a\x3d\xed\x43\xa4\x72\x62\xb8\x2c\xad\x2b\x16\xbc\x22\x93\x8a\xcf\xc7\xde\xe7\x68\x5e\x1d\xd8\x16\x6f\x5b\xde\x26\xcb\xa6\xad\x25\x7a\xf8\x1f\x04\xe8\x93\x90\x44\x78\x9a\x9e\xd3\xd4\x1f\xec\xf9\xa2\x60\x73\x18\x6e\xd3\x9a\x6d\x6b\x17\xd5\x03\x6b\xef\xa0\xfa\xfa\xfb\xee\x6d\x23\xf8\x42\x2d\x60\xd2\x9a\x2e\xa9\x15\x3a\x2f\x66\x1f\xd6\xab\x43\xa3\x6a\x7e\x28\xb5\xd0\x2f\xa9\x86\xef\x50\xfd\x34\x0a\x1f\x3e\x58\xf5\x53\xf3\x75\x23\xfd\x6c\x95\x9e\xd7\xfc\x4a\x90\xba\x5b\x33\x64\x2a\xa0\x0c\xc3\x2e\xbe\x2a\xce\x49\x35\x45\xdf\xe8\x1f\xc8\x7c\x3c\xbd\x16\x92\x2c\x4d\x11\xfc\x18\x45\x35\x56\x64\x06\x72\x29\xf8\xfd\x2d\xad\x88\x96\x14\x22\x5b\xc3\x48\x5d\x8e\x6d\x03\x38\xfe\xe6\xc3\xdb\x35\x63\x94\xcd\xd5\x07\x73\x90\x4d\x9f\xe6\xc3\x37\x6b\x29\x39\x33\xd3\x78\x6b\x4f\xdb\x14\xfe\xb0\xaa\x78\x51\xbe\x25\x45\x79\xad\xfa\xd0\x36\xab\xf5\xd2\xd4\x02\x51\xd5\x60\xd1\x93\xc7\xe7\x36\xcb\x43\xf8\xa6\x26\xb2\xa0\x6c\xba\x7f\x84\x79\x3d\x9f\xb6\x9f\x07\xaf\xe7\x27\xfa\x2a\x7b\x1d\x78\x8b\x41\xf8\x86\x5f\x92\xfa\xaa\xa6\x92\x7c\x5f\xcf\x55\x3f\x35\x99\xd5\xa4\x00\x89\xa6\xf0\x98\x22\xbf\xa9\xda\x4b\x84\xd5\x46\xf8\x85\xe1\x02\x81\x63\x89\xa7\x0d\x7c\xe4\xcd\x19\x61\x05\x93\x6a\x38\x38\xbb\xe9\xfe\xb1\x62\xaf\x4a\x5a\x9e\x30\x41\x6a\xf9\xb2\x22\x6a\xdd\xbd\x3b\x12\x63\x31\x33\xb7\xc3\x0b\x35\xb9\x6c\xc2\xd9\x18\xcd\xe0\xa9\xfb\x42\x53\x75\xdb\x49\xae\xdf\x97\xba\xe6\x73\x62\xc7\xfa\xe6\xfa\xa4\x74\x0b\xb4\x9d\xa8\x7f\xc4\xbb\xa3\xf7\x13\x75\x73\xbe\x0a\x47\x54\x33\xcb\x26\x8c\x7c\x94\x63\x34\x81\xa7\xaf\x9b\x1d\x56\xea\x3a\xa0\x6c\xb2\x90\xcb\x4a\x9b\x9c\x6e\x70\xc9\xe1\x72\x8e\x7d\x46\x3b\xbc\x97\xe9\xfd\x32\x97\x12\xe1\xfd\xe3\x76\xa1\x02\xca\xa4\x4c\x97\x99\xcb\x8b\xf0\xfe\x51\x5b\x6e\xe9\x5d\xa1\x2c\xc0\xd2\xe6\x09\x65\x6d\xee\x3a\x02\x91\x0a\x50\x54\x44\x2a\x30\xd9\x1a\x5a\x3f\x07\x84\xd1\xa9\x2c\x6a\x69\x5f\x65\xdf\xd2\x8e\x12\x4b\x73\xbb\x42\xfa\xd6\x76\x9c\x6d\xb0\xc6\x16\xde\x1c\xf5\xb3\x1e\x23\xb3\x39\xdd\xd3\x7b\xbb\x66\xdd\x93\x73\x5b\x9b\x98\x5b\x30\x7c\x16\x08\x98\x3a\x4f\x59\xed\xb5\x7a\x8c\x08\x77\xbe\x51\x33\x50\x73\x55\xb4\xb8\x41\x3f\x8f\x01\xdd\xa2\xff\x40\xe9\x0e\x16\xfc\xca\xbc\xc8\xd7\x0a\x89\xd8\x4e\x7c\x99\x88\x79\xb8\x16\x5d\xb5\xc4\x22\xb8\x55\x05\xe9\xbe\x4d\xbf\x63\x92\xdd\x10\x2d\x9b\x21\x4c\xbe\x80\xe7\x31\x86\x4b\xc7\x42\x11\x89\x0f\x1e\xc0\x40\xca\xf6\xb7\x9f\xe7\x63\x96\xb3\x89\xe4\xaf\xf8\x15\xa9\x9f\x17\x82\x8c\xb3\xec\xf6\x16\xa1\x3c\xcf\x59\x1f\xf1\xda\x9a\xd9\xa4\x28\xcb\xe7\x55\xa1\x6e\x29\x15\x87\xce\x10\xc9\xd1\xf1\xfd\x00\x6b\x7b\xf7\x35\x59\xf2\x4b\x92\x18\xc1\x13\x36\x3d\xaf\xb8\x20\x9d\x3b\x0b\x7b\xe3\xcb\x82\x7c\xb8\xaa\x37\xc6\x09\x7f\xb9\xa5\xdc\xf7\x5a\x50\xd8\x43\x3e\x08\xa3\x37\x15\x51\xdc\xd5\x55\x41\x25\x1e\x99\x1a\xa3\x1a\xae\xea\x64\x32\x41\x29\x0c\x90\x06\x2e\x76\x32\x0d\x74\xd1\xf3\x15\xed\xf9\xb6\x20\x88\x20\x9a\xa5\x9d\x50\xf1\x57\x2d\xb6\xd3\x22\x09\xcd\x80\x0a\x75\x4d\xf3\xe6\x96\x1a\x80\xe3\x6e\xc3\x58\x60\xee\x93\x7f\x77\x05\x3a\xae\xc3\xbe\xe5\x1e\xf9\x93\x00\x72\x05\x65\x13\x59\x17\x4c\x50\x2d\xed\xe4\x20\x9e\x33\x96\x99\x68\x27\x28\x03\xa3\x0d\x9e\x95\x07\x69\x14\x30\x59\x6b\xa2\x21\x94\xc8\xb6\xe9\x89\xae\x23\x6b\xf0\xf2\x9e\x96\x48\x8e\x64\x4e\x26\xb2\xa8\xe7\x44\x3a\x5c\xd6\xbe\x48\xd0\x4c\x26\x3a\x0c\x87\x3c\x8a\x09\xe2\x6d\x66\x71\x0d\x41\x0c\x98\xf8\xb0\xe2\xf3\x5d\x89\xe1\x5f\xce\x4e\x7b\x2b\xc9\x3b\xcc\xc6\xa9\xab\x14\x96\x5c\xf1\xb9\x22\xf5\xb6\xe9\x46\x3d\x14\x8d\x59\xfe\x88\x91\xab\xd1\x8b\x42\x92\xbd\xc6\x7c\xb3\xf8\xa9\xf8\x38\x06\x6d\xe9\x42\xca\x95\x98\x3e\x76\xbe\x29\x13\xf1\xe5\x21\x59\x1f\x5e\x11\x21\x0f\x8f\x27\xc5\xb2\xf8\x99\xb3\xe2\x4a\x4c\x66\x7c\xf9\x98\x91\x2b\xf1\x58\xac\x97\xcb\xa2\xbe\xd6\x14\xc9\xd3\xd9\x79\x8e\x1a\xfb\x4e\x2c\xb5\xa1\xf4\x5f\x5f\x9e\x21\x5c\x16\xb2\x00\xbb\x69\x55\x11\x61\x61\x28\x62\x77\x00\x52\x01\x7a\x00\x9d\x76\x71\xea\xde\x6c\x02\x2c\x38\xc0\x8a\x39\x79\x45\xe6\x84\x91\xba\xa8\xee\x6c\x4c\xf7\x19\x5f\x94\x7e\x8e\x68\x59\x7c\x3c\x2b\xe6\x62\xfa\x25\x06\xdb\x61\x75\x5f\x24\x95\x15\xd1\x02\x9d\x0e\x23\x84\x25\x2f\x49\x35\x31\x7b\x36\xd1\xd5\x51\x66\xf5\xc7\xc3\x1b\x9a\x06\x48\x73\xf3\x97\xa4\x56\xd0\xfb\x25\x2b\x57\x9c\x32\x39\xbc\x97\x76\x5b\x94\xe1\x45\x21\xce\xd4\xb4\x4e\xd8\x6a\x2d\x93\x26\x4e\x05\x2b\xc7\xa8\x59\x29\xc2\xe6\x07\x88\xae\x55\x07\xaf\x61\x7a\x5b\xba\xf0\x57\x8d\xb0\xfb\xd9\x74\xf3\xbc\x35\xbf\x2d\x3d\x76\x6c\x06\xc2\xa9\x12\x33\xce\xdd\xb8\x39\x73\xf8\x3e\x5d\x18\x9d\x90\xa9\x90\xf9\xad\xe0\xa2\x74\x37\x32\xe5\xd9\x8e\x3c\x95\x0f\x85\x64\x42\xd8\x42\x9a\xd3\x65\x89\x62\x43\xc8\x62\x9e\x37\xd6\xe5\x12\xa3\xc7\xbc\x9e\x17\xcc\x98\x7d\x3f\xf6\x8c\xcb\x31\x7a\xac\x10\x2c\xca\xb0\xc8\xdf\xa1\x2f\x00\xf5\x1d\xea\x4f\x38\xf8\x39\xfa\x7a\x54\xd2\x4b\xf4\x7e\xef\x82\xd7\x63\x30\x55\x3d\xfa\x8a\xfe\xe5\xc9\x57\xf4\xd1\x23\xd0\xc5\xc9\x5c\x83\xcc\x9a\xaf\x7e\xe6\x8c\x8c\xc5\x3b\xfa\xbe\x31\x0e\x6f\x19\x9e\x93\xa2\x26\xf5\x08\x3d\x22\x21\xd5\xa2\x50\xfe\x19\xff\x40\x98\x42\xf8\x0a\xd2\x72\xbc\x24\x72\xc1\xcb\x29\x5a\x71\x21\x11\x5e\x15\x75\xb1\xfc\x4e\x0b\x11\xc0\x86\x59\x7b\x9e\xe2\x59\x45\x67\x1f\xac\x6d\xf1\xb2\xf8\xa8\xf0\xa9\xa0\x3f\x93\xe9\x9f\x8e\x74\x93\xaa\x22\x15\x60\x52\x31\x3d\x36\x18\xfe\xf5\xba\x92\x74\xa5\x9a\x1c\xe3\xa2\x2c\xdf\x6a\xa2\xf2\x15\x65\x1f\xb4\x00\xa2\x58\x4b\xfe\xa6\xe6\x0a\xfa\xfe\xef\x9a\x68\xf0\x84\x81\x2d\x3f\x59\x16\x73\x72\xb6\x58\x2f\xcf\x59\x41\x2b\x5d\x59\xe1\x16\xdf\x9c\x59\x1f\x8c\x62\x7f\x85\x25\x78\xbc\x42\xcb\xce\xab\xf2\x7f\xa9\xae\x67\x86\xa8\x0a\x6a\x91\x98\xf4\x7a\xa5\x4e\x01\x66\x4e\x3c\x79\x82\xea\x85\xe8\xfb\xdf\xb4\xd6\xa0\x97\x04\x64\x12\x53\xa0\xd5\xff\x20\xb5\x70\x2d\xdb\x93\xc0\xa6\xb7\xa7\xa0\xe8\x1f\x43\x69\xab\xdd\x04\x36\xda\x43\x32\x80\x7f\xc6\xd9\x0d\x90\x39\x24\x8f\xe9\x76\xf7\x6c\x14\xf7\x2e\x48\x45\x66\x92\x94\xdf\x6b\x5d\xb6\x66\xe8\x35\xd4\xdf\x4b\xbc\x43\x27\x90\x27\xea\xf5\x08\x50\xf7\xd2\x8b\xb1\xf5\xc0\x88\x6d\xa7\x92\x80\x38\xf2\xce\x50\x23\xe8\x47\xe5\x03\x38\x4d\x86\xc6\xd3\x16\x54\x92\x33\xe8\xc3\x57\x3c\x0c\x1b\xdc\x01\xf3\xce\xe1\x03\xd0\xd8\x39\x81\xd7\xb6\x9f\xdd\xa7\x90\xc2\x04\x9d\xb3\xe9\x82\xa5\xc9\x89\xa5\x7a\x76\xf3\x8b\x05\x1c\xdb\x27\xb5\xe7\x69\xca\x88\xd1\x92\x79\xb7\x61\x5b\x7b\x4c\x02\x35\x1a\xf1\x55\x68\x5d\xdd\xa4\x40\xbd\x03\xee\x2d\x76\x39\x0d\xd0\xf7\x7d\x19\xb8\xfd\x18\x72\xcd\x7b\x5d\xe3\xb7\x91\x46\xba\x83\x90\x43\xfb\x61\x55\x16\x92\x34\xaa\x02\xd0\xdc\x18\xed\x5a\x5a\x70\x8e\x7b\x6f\xfd\x71\xbb\x3c\xba\x96\x89\x1a\xdd\x57\xe5\x58\x9b\x45\x0c\x66\xe7\xd4\x72\x37\x60\xca\x71\xb6\x20\x4b\x02\xda\x00\xc7\x6f\xf9\xf8\x0c\x65\x6a\x02\xba\xd6\x98\x74\x1f\xab\x54\x15\xac\x6d\x8c\x11\x7f\x28\x70\x39\xf6\xbb\x0c\x4a\x50\x36\xde\x26\x05\x8a\x36\xf6\x07\x41\xd9\x7c\x64\x5e\xc3\x08\x90\xe6\xe6\xae\x84\x36\x65\x92\xcc\x6b\x8d\x0b\x3b\x88\xed\x81\x34\xf6\xc3\xb9\xfb\x77\x50\xd8\xb2\xa1\xb0\x79\x3d\xef\x56\x19\xf8\x04\x06\xda\xea\x24\x78\x1f\x8b\xcf\x9f\x68\x5d\x80\x84\x66\xdf\x37\xc9\x03\x05\x2c\xec\x86\xb6\xd7\x1b\x13\x67\xd9\xea\x3c\xfc\x10\xc2\x82\xcc\x6a\x22\xa7\x08\x05\x52\x75\xd5\xe9\xf3\x9a\x94\xa2\x91\x76\xf6\x49\x53\xda\xd6\x47\xb2\x26\x55\xc5\x8d\x15\x61\x34\x8b\x62\xb5\x02\x03\xda\x60\x48\x68\xe1\x06\x0d\xcd\xe4\x3a\x6c\x9c\x62\x32\x4f\x46\xfb\xa2\x7b\x03\xef\x0f\x1f\xba\xca\x16\x74\x0d\x2b\x63\x19\x80\x52\xd9\x02\xa5\xf0\x80\xf4\xf9\xab\x27\x59\x5c\x92\xef\xeb\xf9\x29\x5c\x5c\x75\xd7\xf4\x99\xe0\xc4\x5c\x50\xd6\x92\x28\xf5\x4b\xa9\x3a\x86\x83\x5a\x76\x44\x74\xfa\xf2\xf9\xd9\xc9\xf7\xdf\x1d\x9e\xbd\x7d\xf9\xea\xd5\xf7\xfe\xc8\xfe\xae\x76\xbc\xe4\x2e\xdd\x62\x32\x16\x45\xf2\xf9\x56\x74\x46\x98\x20\x87\x1f\xc8\xf5\xc0\x57\x3b\x54\x9f\xf8\x8b\x73\xcc\xf2\xce\x8e\x64\x9d\x0e\xbf\xb0\x19\x7d\x1e\x34\xa6\x8a\xe2\x32\xd6\xe7\x62\x56\x53\x4d\x04\x82\x1a\x6f\x55\x15\xec\x79\xc5\xd7\xa5\xa2\xa3\xd5\x8f\x53\x52\x5d\x2c\xb8\x90\xa0\xb0\x5b\x2a\x28\x30\x45\xdf\x71\xb9\x50\xf0\x97\xb2\xd1\xaa\xa8\x25\x9d\xad\xab\xa2\x1e\x1d\x1e\x8e\x7e\x5a\x0b\x39\x5a\x15\x42\x43\x67\xb9\xa8\xf9\x7a\xbe\x98\x8c\x8c\x24\x76\x56\x71\x41\x46\xcb\xeb\x91\x55\x79\x8f\x8a\xd9\x8c\xaf\x99\x9c\xdc\x41\xf3\xe7\x99\x42\xa2\xcc\x78\x1a\xbb\xb5\x8c\x93\xa6\x90\xfe\x6a\x35\x60\x41\x27\x4c\x48\xc5\x8c\x94\x48\x5b\x09\xa8\xf5\xfa\xba\x7e\xb7\x19\xb1\x74\xd1\xdf\x18\x4d\x9c\x65\xd3\x8e\x66\x47\x3d\xcd\x8e\xb3\x50\x5b\xa2\x5e\xd6\x2b\x38\x9b\x00\x55\xba\x55\x0a\x22\x6d\xb9\x67\x1c\x63\x4f\x73\x9b\xb0\xd8\xd2\x22\x57\x94\x95\xfc\x6a\x52\x71\x13\xb7\xa7\x26\x5a\xc0\x6a\xcc\x39\xdf\x92\x7f\xad\x89\x90\xcf\x2b\x2e\xd6\x35\x49\x29\x47\x4a\xa2\x66\x7c\x09\xe8\xb2\x86\xea\x49\x0d\x89\x3a\xee\x43\x73\x67\x90\x21\x06\x4c\xd3\xb0\x63\xab\x1c\xe8\xe9\xb9\x8d\x78\x5c\xc7\x7b\x89\x9d\x2a\x9b\x81\xc8\xd0\x7d\xe9\x5f\xa8\x51\x5c\xc0\x8f\x96\x99\x6c\x0b\x7a\x0d\x27\x3e\x04\x29\xea\xd9\xe2\x90\xb2\x92\x7c\xfc\xec\x89\x8e\x2d\xa0\xe9\x3c\xd4\xfe\x9f\xaf\x69\x55\xa2\xe6\x82\xd7\x44\xaf\x32\x54\xdb\x05\x3a\x9b\xb7\x2d\xf5\x0c\x1c\xd6\x09\xbb\xe0\x63\xd0\x9f\x2a\xc8\x02\x7b\x36\xaa\x09\x6c\xdb\x68\x05\x92\x81\x40\x95\x62\x06\x43\x59\xcf\xc9\x87\xdd\xa8\x9e\x1d\xe7\x7d\x1f\x84\x24\x96\x72\xf5\xef\x28\xb5\x3d\x7d\x7d\xf6\xe6\x6f\x5c\x80\xe8\xaf\x0f\xc3\x00\x3f\xa0\xb6\x61\x02\x56\x88\xba\xe9\x1b\x5e\xef\xd4\x14\xcc\x0d\x75\xd3\x53\xc2\x4a\x52\xef\xd2\x58\xe8\x16\x0a\xc7\xe9\x3f\xbe\x2b\x96\xbd\x38\xb1\xd5\xf2\x3b\x70\x86\x83\xeb\x79\x46\x3e\xca\xa9\x06\x14\xa3\x83\xd1\x19\x51\xd0\x5b\x12\x21\xd5\xcc\x00\x6d\x06\x30\x5c\x7d\x0e\x00\x78\x7b\xdf\x50\xf6\xb4\x25\x67\x50\x97\x26\xb4\xd9\x9c\x86\x5d\x84\xfb\xd7\xd5\x45\x68\xa4\x19\x75\x11\xef\x63\x57\x27\x76\xf7\x12\xdd\x44\xfb\xd9\xdf\x03\xec\xa2\xeb\xc5\x43\x92\x76\xff\x14\x14\xb5\x76\x46\x9e\xbb\x57\x48\x9c\x37\xa7\x10\xea\x75\xbb\xe0\x04\x61\xa5\x26\x40\x88\x90\x23\x88\x68\x23\xf9\xe8\x9a\xaf\x03\x00\x61\x8f\xaa\xe1\xe4\x43\x72\x21\x18\xd4\x3f\xfb\x80\x6d\x70\xcb\x08\x18\x62\xcb\x19\x40\x58\xbe\x75\x6d\x2d\x27\xc8\xc4\x2c\xf6\x69\x02\x1e\x91\xc8\x3c\xcf\x97\x0f\x36\x65\x9b\xec\x1e\xb8\x66\x55\xcc\x08\x58\xb7\xff\xbb\x99\xe0\xe9\xa5\x75\x33\xc4\x17\xbc\x02\x70\xb0\x83\xb5\x9d\xb5\x89\xea\xae\x6b\x6b\x28\x30\xa3\xc6\x17\xc6\x0f\x54\x23\xc0\xd8\xaf\x55\x83\x98\x40\xa8\xec\xfb\xb8\x34\x22\x2e\x94\x19\x86\xcf\xf8\xb6\x1c\x4f\x41\x5a\x88\xf4\x10\x3a\x86\xa4\x5a\x72\xf0\x55\xa0\xcd\x26\x1b\xe8\x6f\xaa\xa8\xbd\x17\x85\x2c\xc6\xd9\x4e\xbe\x9e\xc6\x96\x86\x28\xec\x08\xa6\xfe\x37\x54\x3b\x9a\x1a\x56\x7e\xb3\xc1\x4d\xcf\x3e\x6f\x69\x0e\x06\x65\x93\x65\xc1\x8a\x39\xe9\x20\xce\x61\x19\x98\xc4\x16\x44\xa7\x0b\x7e\x15\x6a\xff\xbd\x39\x4c\x68\x99\xf6\x6a\x82\x9b\x0e\x35\x53\xc4\xa9\x29\x81\x6a\xe0\xf8\x0c\x04\xaa\xfa\x9c\x60\xf5\xbd\x31\xb5\xae\x47\x8d\x8c\x79\x4e\xb4\x1d\x1c\xf6\x2d\x41\xcc\x42\xb2\xc9\x05\x65\xe5\x37\xd7\x63\xa4\xa6\xc8\x32\x28\x84\x91\xf6\x78\x9e\xe7\xe2\xe0\x00\xa1\xfd\x3c\xe7\xe6\x5f\xf1\x74\xdc\x02\xa4\xed\x45\x64\xb0\xca\x31\x5a\xd0\x92\x24\xac\x73\xfa\x9a\x94\x54\xac\xb8\x20\x21\x10\x6c\x4e\x07\x1a\x8d\x59\x8b\x5e\x4e\x6e\x7a\x68\x9b\xe7\x97\x46\xb6\x7b\xcd\xa5\x48\xb2\xff\xb0\xe3\x5a\x00\x90\x4d\xe3\xd5\x24\x4e\x69\x8b\x31\x93\x3a\xc4\x97\x1a\xac\xb9\x43\x04\xd0\x00\xfe\xd3\x3a\x44\xda\x8f\x93\x65\xb1\xf2\x5e\x1d\xc0\x06\x45\x3d\x22\x6d\xb5\x74\xa1\x7d\x08\x40\xef\x0f\x6f\xce\x58\xee\xfb\x38\x06\x06\x49\xd8\x13\x19\x39\xb2\x03\x1d\x28\x9b\x00\x9c\x6d\x9b\x10\x82\xe9\xa1\x03\x48\xea\x0c\xf8\x15\x53\x1b\x06\x2a\x9e\x06\xe6\x6a\x43\x05\x94\xde\x41\x33\x93\x59\x63\x0b\x04\x9c\xdc\xf7\x57\x8c\xd4\xa1\x1c\xd7\x3b\xed\x79\x5d\x30\xa9\xab\x34\x8e\x37\xdb\x79\xa5\x67\x65\x49\xca\x51\x21\x46\x5c\xb5\x4c\x10\xc9\xc3\x0d\x60\xe0\x50\x35\xa8\x1c\x4a\x23\x7f\x22\x21\x8d\x47\x20\xeb\xe9\x7e\x67\x64\x97\xfa\xc7\x73\x5e\xf1\x7a\x8a\xbe\x78\xf2\xe7\x2f\x9f\x7c\xf9\x5f\x08\x93\x92\x4a\x60\x80\x34\x2a\x80\x1b\xec\x7d\x50\x30\x08\xee\xfc\x0b\x5a\x54\x5c\x1b\x53\x47\xd0\xee\x59\x59\x06\x96\x89\xe0\xc7\x69\x47\x8e\x9f\x5e\x33\x0b\xaf\xc4\x07\x85\x45\x59\xc2\x36\xa7\xe0\x60\x53\xd8\x00\xc1\x53\x37\x45\x98\x46\x02\xf8\x1a\x7e\x2d\xa0\x79\xe2\x95\x21\xbc\xef\xdd\xbc\xb8\x30\x73\x43\x81\x3e\x25\x31\x94\xdb\xca\x68\x20\x6f\x2b\x88\x0f\x56\xbb\x76\x85\x58\x81\x41\xa5\x1d\x00\xdb\x3b\xa4\x06\xea\xde\x22\xaf\xd4\xdb\x23\x22\x75\xef\x91\xa7\xb0\x3f\xaa\xae\xf7\xac\x2c\x1b\x40\xa4\x31\xa5\x27\xb9\x71\xeb\xc8\xac\x27\x94\x9e\x63\x5c\x05\x3a\xb4\x75\x36\x7b\x08\xa4\x55\xba\xee\xc1\xc1\xd8\xfc\x95\xbb\x3b\x98\x61\x4f\x12\xaf\xc1\x71\x9b\x46\x8f\xcf\x7d\x0b\x58\x9d\xb6\x70\x53\xab\x83\x5d\xac\x40\xe3\x2b\x19\x2a\xd8\x9e\x95\xa5\x36\xb8\xd6\x1b\x08\xb7\x23\xe5\x56\xdd\xde\x3d\x16\x17\x87\x3b\x17\x38\x1b\x37\x97\x0b\x94\x04\x2e\x96\x40\xbc\xd0\xd6\xf1\xef\xbc\x55\xed\x1e\x76\xd9\xab\xd6\xe5\x04\x7f\x39\x7b\xeb\xd5\xd3\xe0\xd6\x7a\x57\x5f\x3c\xd6\xa1\xae\xe4\xfe\xfb\xf0\xde\x96\xb6\x8e\x1c\x42\xfd\xd8\xed\xf2\x03\x6a\x75\xbd\xfc\xe3\x70\x12\x50\xaa\x4e\x15\xbe\xd0\x32\x32\xdf\xf1\xa1\x0a\xb8\x51\xec\x1f\xdd\x99\xcd\x59\x0b\x52\xef\xc4\xe5\x14\x6b\xb9\x18\x12\x7b\xae\x87\x29\x82\xb0\x74\x26\x22\x64\x2a\x28\x1d\xa6\x0f\x85\xa8\x8a\x5d\x18\x23\xd1\x20\xaf\xf3\x75\xf5\x01\x9c\x58\x14\xd5\x4e\xae\x74\xe8\x98\x1d\x02\xd5\xc0\xa5\x83\x76\x08\xdf\x5c\xb8\x18\x46\x1a\x17\x36\x7f\x43\x6c\x69\x04\xb8\x10\xc2\xb8\x5c\x52\x68\xa6\x99\x7c\x2d\x55\x85\x05\x06\x94\xbe\x82\xc6\xaa\x52\xa7\x59\xbe\x02\x1b\xfa\x6c\x13\x50\xda\xcc\xcb\x0b\x90\x64\xc0\xaf\xfa\x0a\x06\x2b\xa9\x40\x3f\xa6\xd9\xe4\xa2\x69\xd7\xeb\x19\xda\x1e\x66\x9b\x75\x3d\xbd\x68\x01\x84\x44\x27\xdd\x10\xa1\x6f\xd6\x55\xb1\xcb\xa4\x9b\x18\x4f\x77\x9f\xb3\xd7\xc7\xdd\xa6\x4c\x20\x26\x54\x76\x7b\xbb\x4f\x9d\x29\xaf\xaa\x5e\xd0\xaa\xa7\xfa\x80\xe5\x99\x68\x53\x5b\xd6\xf6\xd5\x96\xd6\x9d\xab\x6a\x29\x20\xec\x4b\x08\x1d\x86\xcc\x8d\xf3\x3c\x86\x22\x46\x6a\x97\x07\xe4\xbd\x94\x24\xe9\x0f\xe4\x38\x84\x42\xd8\x74\x21\x5a\xef\xc5\xf8\x6f\x42\x31\xfb\xa9\x83\x72\x50\x02\x65\x6d\x64\xe8\x15\xee\x8c\x06\xfd\xb6\x5b\x10\x60\xb8\x97\x22\x30\x0f\xf1\xe7\x97\xdc\xe0\xa6\x42\x43\x0f\x77\xee\x9b\x18\xb8\x71\x31\x9f\x53\xec\x86\x8c\xb4\x6f\xfa\x50\x36\xa7\x17\x1b\x7d\x2e\xf2\x36\xbd\xa2\x9e\x68\xa6\xaa\x18\x65\xda\xd6\xa3\xbb\x16\xdc\x5c\x85\x8b\xb4\x8f\xbd\xe1\x90\xb4\x56\x06\x44\xee\x60\x2c\x62\xc4\x6a\x4b\xed\x82\x6f\x7e\xa8\xef\xaf\xe8\x92\xca\xe9\x93\x3f\xed\x2e\xc6\x52\x3c\xb6\x1e\x52\x8c\x1b\xe4\x66\x0c\x92\xb4\x14\xc1\xaf\xe0\xab\x62\xcd\xaa\x41\xe5\xac\x83\x25\xa7\x84\x59\xf6\xb8\x41\x98\x15\x74\x1d\x42\x02\x3d\x04\xc2\x37\xf6\xe5\xaf\xd6\xf5\x8a\x0b\x90\x7f\x7b\x93\xd0\x22\x87\x36\x59\x66\x36\x44\x57\x99\xd0\xd8\x02\xa5\xd9\xc7\x50\x47\x1a\x2c\xc1\x8b\x6d\x20\x3a\x22\x08\x99\x51\x22\x53\x9c\xb5\x93\x59\x2c\x0b\x39\x5b\x00\x44\x91\x51\x05\x7d\x40\xee\x9d\xca\xfc\xeb\x1b\x30\xea\x33\xc9\x63\xc6\xef\xde\x67\x7b\x72\x72\xc1\xeb\x97\xc5\x6c\xe1\xca\x79\x4e\x9c\xf0\x4c\xf5\x72\x52\x22\x2c\x3d\xba\x31\x0a\x0d\xc6\xb3\x83\x03\x36\x59\xad\xc5\xc2\x18\xfa\xc8\xd0\xbb\x17\x9e\x39\x66\xd9\x26\x25\x5a\x7c\x56\xc2\x16\xf7\x12\x1d\x7a\xcf\x3a\xa8\x0e\x53\x18\xd0\x1c\xba\xc7\x81\x5e\x80\xee\x16\xf8\x7c\x08\xeb\x60\xdb\xe2\xf1\xb6\x02\xe1\xe4\xb9\x17\x65\x99\x10\xf3\xf9\x57\xbe\x13\x26\xfa\x3b\x91\x7a\x39\x43\x05\x08\xf1\xc5\xa7\xe5\x94\x6c\x92\x3a\x78\x2d\x01\xec\x3c\x80\xa0\x3c\x96\xe3\xee\x72\x0c\xfe\xb4\x42\x4e\xd1\x3c\xe6\x48\xa0\x3b\xa1\x65\xe2\xc0\x6e\x6f\xb9\x2f\x91\xd8\xcf\x73\x28\x68\x1d\x64\x62\xde\x77\x3b\x4b\x2b\xb5\x55\xf3\xd9\xf9\x44\x13\xbb\xdb\xe6\xca\x12\x47\xa5\xc0\x93\x3b\xe9\x97\x25\x95\x1d\xd2\x1b\xd3\x74\xcb\x5e\x92\x4e\x99\x4c\xe7\xb1\x7b\xa5\xcd\xa1\xbf\xb4\x23\x0e\x3c\xf2\x66\x86\xe1\x49\xfa\x22\xa5\xb4\x38\xe0\xfe\xc7\xb6\x06\xb1\xc6\x1d\x5e\x61\x6b\x63\x62\xb6\xde\x6c\x7a\xc3\xd6\x83\xc7\xb3\x22\xb8\x00\xd0\x27\x0e\xcb\xc7\x24\x77\x3b\x2f\x98\x11\xd0\x75\x87\xd0\x5d\x57\x34\xb9\x10\xab\x78\x41\x13\x22\x7c\x67\xe7\xfe\xac\x2c\x7f\xf1\x89\x2b\xd8\xd6\x31\x6b\xdc\xae\x23\x0e\x01\xb9\xa2\x14\x9e\x89\x82\x40\x78\x68\x38\x54\x8a\xc4\x2b\xd5\xf5\xc6\xd9\x0d\x20\xc7\x7a\xad\xc8\xae\x73\xbe\x66\x33\xb0\xf6\xc2\xb1\x43\x4b\xab\x8f\x3f\xfe\xe9\x08\xc2\x11\x92\xe2\xb2\x81\x7d\xe0\x0c\xd4\x43\x34\xa4\x69\x83\x4a\x75\x32\x96\xb8\xcd\xc5\x44\xe3\xb6\x09\x2a\x50\x3f\xfc\x0f\xa7\xec\xbe\x93\xf8\x89\x53\x76\x9f\x39\x68\xfa\x23\xbc\x30\x0d\x59\xe2\xe8\x99\x78\x23\xef\xaa\xd1\xd0\x94\x7e\x45\x85\xfc\x5d\xea\x24\x76\x66\x14\x14\xe4\x6a\x04\x52\x80\x79\x9a\xdf\xa0\x92\x53\xd8\x67\x51\x88\x53\xe3\xbc\x64\x04\x4a\xc7\x49\x9d\x8a\xfa\xf6\x86\xd4\xcb\x97\x1f\x57\x95\x0e\x08\x73\x3c\x50\xca\x65\xa3\xfe\xe5\x37\x1b\xfb\x8a\xbd\xe1\xf2\x77\xef\xef\xa0\x35\xbf\x2b\xef\xd0\x92\x39\x18\x96\x75\x8f\x38\xa2\x59\x35\x26\x16\x16\x3a\x5d\x87\x7a\x52\x41\x74\x28\x6b\xe1\xed\x7b\xf6\xd9\xd4\x31\xa5\x8e\x98\x3e\x01\x99\x2c\xb1\x50\x0b\x16\x6d\x62\x7a\xb4\xc1\x1c\xc9\x36\xe6\x54\xac\x30\xc1\xe7\xdc\x6d\x78\x6d\x5f\xcb\xea\x42\xac\xfb\x24\x38\x54\x7c\x6e\x9d\xd7\xba\x60\x9f\xee\xc6\x1b\x0e\x7f\xa9\x61\x9d\xe4\xf3\x79\x45\xd4\x31\x87\x9c\x55\x74\xf8\x2d\x4d\x94\x5f\xe6\xe4\xd0\xe1\xf7\x18\xf1\x4f\x56\x6a\x14\x94\xe9\x7a\xe3\x96\xaa\xda\x15\x2f\x68\x49\xc6\x6e\x6a\x70\x55\x81\x1e\x89\xf7\xd5\xf9\x5a\x9a\x2f\xc6\xe5\x29\x64\xe1\xbc\xab\xa7\x8f\x3d\x6a\xf2\x54\x6a\xc6\x27\x10\xab\x4f\x65\xfe\xa3\x4d\x3b\x24\xb1\xef\xaa\x6e\x05\xf7\x5a\x7d\xe4\x1a\x6c\x42\x6c\xe5\x8f\x18\x86\x40\x88\x9f\x1e\x72\xae\x09\x5f\x37\x87\xf1\x4c\x8b\xac\x22\x98\xaf\xef\x4c\x84\x8a\xf7\xa4\x31\x95\xd2\x0d\xd4\x11\x19\xa7\x0a\xf8\x1d\x39\x5d\x99\x80\x68\xd2\x8d\xf3\x52\xcb\x96\x77\x18\x07\x84\xd1\xcd\x38\xe6\xf7\xb6\x71\xb4\x2b\xc4\x2e\xcb\x01\xb5\x83\x5b\x8d\xf1\x50\xd9\x32\x08\x2b\xaa\x6b\x49\x67\x62\x97\x81\x6c\x1b\x6f\x30\xf7\x69\xdb\x80\xf0\x66\x87\x0f\xe6\xe4\xf7\xcd\x60\xcd\xa7\xee\xc1\x1a\x06\xc1\x8e\xc5\xba\xc7\x52\xed\x0d\x76\xa2\x44\xc0\x57\x04\x3e\xbe\xea\xaf\x9a\x5c\x52\xa1\xff\x6a\x64\xf5\x18\x39\x09\x38\x46\x20\x2a\xc6\xc8\xa4\xc8\x55\xa8\xd7\xde\x2d\x77\xf8\xf6\x78\xfc\x05\x21\xe3\x85\x10\x86\x8d\xb6\xf8\xa8\xd1\xa7\x81\x09\xbf\x8d\x09\x8b\x9b\x9c\x65\x08\x61\xdf\x3a\x1c\x8c\x17\x93\x7c\x83\x2f\x51\x04\x87\xe4\x05\xbf\x9a\x9c\x1b\x82\x34\xf4\xf6\x6d\x40\xa1\x98\x2d\x88\x42\xd2\x63\x54\x5c\x48\x52\xbf\x05\xdb\x4c\x08\xc0\x92\x1c\xc6\x53\x66\x38\xbb\x98\x6c\xd0\x9c\x5a\x96\x42\x43\x9b\x78\xa6\xf0\x7d\x4a\x5b\xb7\xab\xa1\xb2\xb6\x89\xb4\xbb\x17\xe8\x69\x48\xa3\x97\xc9\xb2\xad\x4b\xdd\xa2\xd4\x20\x95\x20\xa3\xa8\x7b\x7b\x7d\x3a\x7a\xaf\x06\x6b\x4c\x6c\xe7\xbe\x13\x9c\xc9\xe6\x78\x70\xd0\x56\x74\xd8\x32\xad\x97\x1a\x7c\x2c\x1d\x36\x5f\x03\x8e\x31\xf1\x3e\x49\x10\x3e\x95\x39\xba\x27\x3b\x38\x08\xbe\xfb\x57\x1b\x24\x6d\x96\x40\xca\xf3\xa8\x34\x20\x01\x9a\x44\x30\x63\x82\xbd\xee\x37\x3a\x7f\x5e\x72\x0d\x64\x90\x06\x27\x94\x30\xa5\x84\x4b\xf0\x6e\x3b\x01\xcd\x16\xa3\x95\xa3\x50\x17\xbe\x8b\xb6\x3b\x85\x42\xdf\xbd\xef\xc7\xa1\x9d\xaa\xf2\x58\x36\xf5\x43\x43\xa4\xa5\x74\x1a\xc6\x90\xce\x68\x83\xb0\x62\x5c\xfd\x7d\xfa\x66\x5d\x7d\x48\x8b\x37\x6d\x34\xed\x2e\x6b\x49\xbd\x1d\xaa\xb9\xdb\x92\x4e\x02\x25\xa0\x4a\xd3\xfa\xff\x5e\x72\x63\xf0\x5e\x75\xac\xdd\x76\x67\x55\x3b\x49\x21\x66\x7a\xbd\xee\x5a\x01\x07\xe9\x44\x0d\x31\x49\xb6\xb6\x2b\x8d\xf0\x64\x72\x49\x8a\x80\xb2\x62\xa7\x50\x2e\x91\x94\x30\xee\xf1\x60\x03\x4d\x18\x0f\x37\x94\xae\x76\x52\x06\x44\x3e\x64\x14\x50\x3f\x84\x89\x50\x0c\xaf\xba\x11\x8f\xcb\x2c\xdc\x72\xcb\x5f\xf0\x4e\x59\x48\x97\xf4\x66\xbb\x6c\xc1\x5f\x7b\x92\xad\x6f\xef\x5c\x6b\xf6\xc7\xa0\x3f\x6e\xa7\xfe\xf0\x97\x74\x7b\xdb\x23\xb4\x20\x58\xb6\x04\x06\x01\xab\x32\x40\x40\xf1\x10\x2b\x39\xba\xc7\x4a\xb4\xe4\x63\xe0\x42\xfc\xf8\xcf\x11\x1f\x16\x87\x86\xb6\xd5\x4d\x06\x8d\xb8\xaa\x8d\x81\x3c\x5c\x76\x12\x4e\x67\x37\x1d\xa9\x35\x92\x7d\x5c\x94\xe5\xa1\x20\x33\xf0\xcb\xfc\xf7\x72\x4b\x70\x86\xc0\x20\xef\x18\xe0\x47\x00\xfb\xd0\x5f\xdf\x6e\x56\x86\x21\x74\x6e\x87\xbf\x16\x23\x57\xa7\x50\xd3\x9a\xac\x86\x5f\x5e\x53\xed\xa8\xdb\xe1\x12\x15\xd6\x55\x63\x69\x40\x70\x8c\xf5\x0e\x9f\x94\x53\xd0\x08\x99\xb9\x58\x70\x31\x2b\xb4\x1c\xbe\xe5\xfd\xb0\x72\x56\xc6\xce\xb5\x51\xed\xdd\xaa\xe6\xd2\x9e\x7c\x5f\xce\xc6\x54\x83\x30\xf6\x87\x9f\xba\xf1\x8d\xab\x74\x76\xbd\x22\x93\x57\x7c\x16\x84\x4c\xf7\xe6\x32\xb1\x1d\xab\x49\x6b\x5e\x78\x51\x88\x6f\x2a\x3e\xfb\x20\x5a\x4b\x38\xd7\x9f\xfb\xe7\x09\x75\x0c\x5b\x8c\xb2\xaf\xd5\x35\xe2\x4c\x63\x93\x33\xcd\x79\x99\x5e\xf9\x39\x44\xb2\x07\x72\x22\xe8\x33\x11\xba\x45\x6d\x37\x8a\x42\xf8\xeb\x76\x59\x0b\xa3\x93\x96\x7e\xd2\x1e\x90\xf1\x3d\x68\xb8\xb0\xc8\x14\x86\x28\x96\x84\x68\x2a\xb3\x24\xac\x83\x2b\x61\x0d\x0d\x64\xc3\xbd\x6a\xd2\x37\x46\xb4\x24\x26\x53\x49\x3f\x15\x4b\xda\x44\xeb\x26\xc3\x45\x59\x9a\x2b\xe8\x00\x91\x37\x46\x62\x8b\xac\x08\xe5\x08\xb3\xfc\x38\xc0\xb1\xe7\xe4\x82\xd7\xe4\x0d\x84\x76\x13\x1d\x89\x6a\x68\xc0\x93\xcc\x89\x80\x4d\xa7\xc6\xa4\xd4\x1d\xaa\x3d\x24\x5b\x50\x08\x09\xc0\x45\xe1\x89\xfc\xc9\x7f\x90\xa6\x8b\x89\x20\xff\x5a\x13\xe6\xdc\x46\x9a\x82\x8a\x5c\x12\x45\x77\x18\x96\xc4\x28\xaf\x79\x96\xdd\xb0\x9c\xdb\x11\x75\x15\x23\x06\xfc\x51\x23\x9c\x13\xed\x42\xdb\x9a\x67\x70\x4a\x2e\x35\x7d\x33\x9a\x91\x08\x72\x5f\xee\xa3\xd6\x76\x78\xbc\x9f\xe7\x21\x73\xee\x77\xfb\x8e\x1c\x1e\xbf\xdf\x93\x51\x86\x11\x96\x3d\xe5\x16\x4f\xda\xd5\x3d\x7e\x32\x1d\xb7\x3e\x3e\x62\xc9\x9d\xc8\x1e\x3f\xd9\x6c\xdc\x24\x4d\xa1\xdf\x10\x4b\x05\x7d\x9b\x02\xd8\x88\xd0\xb4\x35\x09\x12\xf2\x3c\x17\xf1\xf3\x7f\xab\x73\x1b\x1d\x1c\x04\x23\xc9\x42\xae\xb5\x85\x10\x78\xfe\xab\x02\xe3\x36\x5c\x15\x92\x5e\x12\x75\x9b\x9e\x8a\x09\x48\x26\x4f\x65\x21\xc9\xe4\x0d\xb8\x15\x7e\x47\xae\xa6\xc9\x82\x90\x8e\x87\x18\x73\xa7\x76\x62\x8a\xf2\xf5\x05\x9f\x41\xf1\x38\x71\x00\x31\xf8\x0d\x39\x63\xb6\xcd\x22\x2e\x7a\xf6\x41\x60\x28\xff\x5d\xd8\x20\xbe\x20\x68\x79\x4b\x66\xbc\x2e\xe1\xbc\x34\x3d\x2a\xfc\x9d\xd6\x86\x18\xed\xfd\x07\x9e\xc4\xd4\x85\x78\x5f\xea\xa4\x9c\x55\x32\x93\x84\x49\x93\x2f\xcb\xbd\x39\xf7\xad\x69\xaa\x06\x0d\xaa\xb9\x0f\x99\x0d\xb8\x7b\xa3\x3e\x41\x14\xba\x62\x7a\xd3\xcc\x6b\xda\x31\x2d\x5c\x17\x57\xdf\xf0\xf2\xda\xc9\x68\xe6\xda\x53\xcd\x23\xd7\xa3\x6d\x6e\x54\x74\x1e\xec\x11\x49\x41\xbd\xe4\x1a\x67\x60\x87\x8d\xf5\xdd\xd3\x37\xc9\x4e\xfc\xa9\x42\xba\x86\x4a\x83\x03\xd7\xa8\xe5\xdf\xef\xb8\x9b\xf0\x86\xe6\xe8\x5c\xd8\x37\x5b\xf1\x9c\x97\xd7\xee\x60\xf5\x8f\xec\x81\xaf\x88\x1b\x49\x6d\x71\x8b\x4d\xba\xe7\xfd\xb1\xd0\x01\x7e\x42\x74\x50\x75\x9b\x9a\xd9\xea\x5c\x37\x58\xd1\x82\x35\x2b\xaa\x53\xbe\xae\x67\xc4\x16\x87\x5f\x51\x76\xaf\x1b\xb8\xb3\xcf\x95\xa3\xb3\xf5\xce\x1c\x5a\x59\x68\x43\x68\xbf\x0f\x90\xc7\xc3\x90\xc9\xb2\x8b\x4c\xbe\xe9\x25\x59\xdb\xaa\xb5\x98\x1c\xea\xbb\xc1\xa1\xfd\x5b\x67\x45\x88\x65\xe6\x38\xe7\xe0\x9a\xeb\x3d\x0a\x75\x61\x10\xde\xa9\x55\xc7\xc5\x27\x23\xed\x67\x83\xca\xf5\x72\xa9\xae\x09\x49\xdc\xf0\xb8\xa3\xe8\xaa\x93\xf8\xaa\xc7\xf5\xfd\x3b\x4f\x82\x67\x18\xd7\xb4\xaf\xd0\x56\x83\x47\x18\xd7\xb2\xaf\xd1\x54\xb2\x77\xbc\x55\xcf\x5d\x7e\x57\x95\x7c\x9c\x91\x7a\x25\xdb\x55\x6d\x41\x96\x61\xd9\x2c\x27\xb5\x8b\x46\xa0\x35\x6c\xa7\x65\xcf\x4e\xcb\xe1\xb3\x97\xee\x50\x74\x6e\xcc\xc4\x79\x40\xe2\x2a\x5b\x31\x7a\xbe\x89\xd5\x86\xcf\x3b\x54\x18\xcc\xe3\x9c\x0d\x0a\xf8\x44\xaa\x35\x78\x93\x70\xdc\x16\x9f\x3c\x46\x8f\x7a\x6f\xca\x23\xf4\x58\x5e\xaf\x88\x7d\xcf\x21\x79\xf1\xbc\x60\x33\x52\x45\x2c\x3e\x7c\xb4\x0c\xfe\x33\x2f\x82\x8c\x5f\xeb\x99\xa3\x58\x74\x24\xeb\x00\xd4\xc8\xa1\xa0\xc6\xcc\xf4\xb0\xa2\xec\x03\xa9\xb7\x71\xf5\x81\x19\xc3\x67\xc4\xd2\x7b\x8c\xbc\x5a\x48\x77\xcc\x2d\xf6\xe1\x3b\x17\xd0\xae\x82\xe3\x03\xc3\x05\x59\x9c\x1f\x5b\x21\xe6\x74\xff\x48\xfd\x7e\xd2\xfc\x3e\x56\xbf\xbf\xf4\x7f\x2b\xc6\xca\x00\xfd\x36\x03\xea\x77\xd6\xcf\x86\x06\x35\x15\x27\xa5\xfa\x7d\xe6\x22\xf4\x26\xbb\x7e\x32\xb8\xeb\x27\xad\xae\xc1\x78\x29\xd5\xeb\x97\x83\x7b\xfd\xb2\xd5\xeb\x77\x44\x5e\xf1\xfa\x43\xaa\xdb\x3f\x0e\xee\xf6\x8f\x41\xb7\x0c\xba\x7c\x65\x82\x5f\xa9\x13\xfb\x40\xae\xaf\x78\x5d\x0a\x63\x5d\xf2\xba\x90\xb3\x05\x69\xef\xd0\x12\xbe\xf7\xb3\xea\xa6\x8e\xf3\x91\x23\x4e\xbe\x60\x65\x02\xb7\xb7\x40\x1e\xfa\xbf\x9b\xd0\xc9\xf6\xeb\x26\x73\x52\x96\x96\x20\xa5\x88\x12\xf8\x98\x38\x10\x5f\x84\x4f\x0e\xe4\x31\x87\x3e\x0c\x71\x7c\xa0\xd9\x5e\x2d\x95\x18\x6e\x18\x63\x16\x97\x3b\xb2\x49\x4c\xdf\xbd\xc7\x7a\x2d\xea\x0f\x6f\x11\xd3\x77\xef\xef\x99\x47\x3c\x90\x79\x44\xc6\x1b\xaf\x8d\x47\x86\x47\x10\x27\xc4\x0f\x9e\x2d\x45\xa0\x6a\x04\x67\x7f\x20\xee\x78\xde\x45\xf6\x89\x3c\xb1\x6d\x9e\x08\x58\xed\x31\xd8\xf1\x3c\x2f\x58\x49\xcb\x42\x12\x31\xd6\x06\x57\x86\x50\x0b\xe3\x36\x03\xba\x71\x35\x01\x1f\x78\x4a\x0e\x78\xef\x46\x74\x0f\x29\xae\xe1\x92\x64\x96\x6b\xb5\x17\xc3\x6f\xe7\xbd\xe7\xb0\xa9\x77\x14\x90\x22\xba\x75\xbf\x32\x6b\x50\xef\x0f\x9f\xdd\xde\x36\x5f\xfd\xce\xb3\xdb\xdb\xb1\x19\x36\x04\x41\x5a\x1f\xe3\x0a\x9e\x74\x15\x78\x30\x40\x07\xc4\x73\x05\x7f\x0c\x5a\x64\x6d\x03\x70\xd2\x32\x1e\x85\x32\xf6\x37\x5a\x92\x31\xc1\x91\xeb\x4f\x73\x3d\x6c\x2a\x22\x7d\x09\x59\xa9\x5d\x00\xbb\xef\x77\x22\xb4\xb2\xff\x94\x0c\xd0\xb0\x11\xf3\xfa\xfc\x97\x36\xf8\x8a\x56\xd5\x0b\x22\x64\xcd\xaf\x87\x24\xed\xea\x9a\x7c\x4b\x75\x95\x92\x76\x6d\xf0\x05\x91\xda\x68\x34\x7e\x40\x16\xa8\x39\x9a\x38\x74\x72\xf6\x88\x11\x0b\xd6\x86\x3d\x6b\x3f\x12\x94\x79\x04\x60\xe0\xea\xbd\x03\xd2\xfd\x06\xdc\x68\xed\x30\x2f\xdb\xcc\x5f\x41\xdd\xa0\x96\x8b\xff\x53\x1b\x7f\x09\x22\x4f\x2d\xb2\x4d\xa9\x70\xbc\xf7\x16\x5a\x1b\x34\x50\x3a\xd6\xda\xd9\xc0\x90\xd2\xbc\x39\xdf\x33\xc5\x0b\xc0\x8c\x3d\x33\x2e\x05\x30\xb4\x08\x89\x96\xfa\xfe\x06\x8f\x6d\xf7\xf6\xcc\x43\x18\x77\x69\x7d\xd7\x79\xb3\xfb\xcd\x5b\xd1\x93\x21\xc9\x99\x7a\x8f\x4e\x0a\xf2\x8a\xb2\x54\x5e\xf8\xe6\x10\x22\x59\x77\x88\xc6\xdb\x47\x1d\x61\xf5\xb4\xc7\xbf\x07\xf9\xf7\x48\x7e\xa3\xdf\x38\xf8\x98\x0d\x90\x03\xd8\x18\x32\x1c\xd3\x72\xea\x34\x3d\x93\x65\xf1\x81\x9c\x94\xe3\xe3\x3f\x03\x11\x08\x31\x63\xcc\x6c\x10\x86\x3c\x43\x10\x79\xc6\xf2\x08\x6a\x0c\x48\x66\x32\x95\x9b\x4d\x03\xb4\xcd\x9b\x4c\x2c\xf7\xe0\x60\x67\xf0\xb4\xc5\x25\xa1\x2d\xa6\x7c\xa5\x9f\xf2\x18\x62\x56\x9c\x15\xe7\x8d\xdd\xa2\x27\xef\x0a\x40\xff\xb1\x3a\xfc\x20\x12\x5a\x80\x00\x9e\x24\x8a\x3d\x34\xf0\x65\xa2\xd8\x43\x06\x7f\xd4\xc5\x77\x15\x73\xd8\x3f\x3e\xb9\xa4\xa3\x83\x02\x1a\xc6\xf1\x69\xb2\xe3\xb7\xc3\xf0\xb9\x4d\x07\xee\xb6\x2f\x8e\x69\x8a\x9d\xfb\x35\x83\x98\xce\xd4\xd3\x50\xfc\x9a\x98\xbe\x43\xc1\xbc\x0f\xaf\xea\x62\xb5\xd2\x6a\x65\xc6\xd9\xe1\xaa\xa6\x4c\x16\xe7\x15\x41\xef\xb7\x86\x50\xdf\x5d\xcf\xab\x15\x90\xdb\xf4\xbc\xba\x12\xca\xf0\xac\x90\x64\xce\xeb\xeb\xfe\xfa\xb6\x16\xda\x96\x61\xc9\xc2\xf1\xe7\xd0\x80\x3a\x7e\x47\xfb\x64\x62\x59\xcc\x7f\x0e\x3e\xac\x85\x35\xd2\x8e\x19\xa3\x09\xe3\x10\x94\x12\x84\x5c\x3a\x63\x36\xaf\x5f\x8b\x39\xca\xf0\x9a\x15\x42\xd0\x39\x23\x6d\x2e\xa6\x3d\x01\x84\x91\x1a\x36\xc5\xcf\x1d\x45\xa6\xec\xad\xa6\x36\x62\xde\xc1\x41\x58\x55\x77\x98\x35\x3c\xd5\x9d\xfc\x84\xad\x3b\x70\xf0\xb6\xa2\xf3\x00\x5e\xe0\x85\x39\xde\x66\x66\xe3\x2e\xf9\x79\x32\x04\x5e\x62\x4f\x3c\x2f\x80\x77\xef\x5d\x94\x7d\xcf\x80\xa4\xdd\xbf\x84\xfc\x19\xbe\xc2\x3b\x2a\xb3\x56\xdb\xc7\x6d\x4c\x1a\xd7\x14\xab\x8a\xca\x31\xfa\x02\x22\xd8\x6b\x9a\x20\x30\x29\x6f\x2c\xc0\x35\xa7\x12\x3a\xe1\x6e\x7c\xf8\xae\x8e\xd6\x5e\x29\x12\x79\x01\x68\x0b\x61\x7f\x7b\xbb\x35\xf4\xfe\xb2\x3a\x32\x5b\xb8\x35\xb8\x10\xbc\xce\x3d\xd0\x6c\xed\xf5\x2f\x39\x18\xbe\xd1\xf2\xad\x37\x45\x5d\x2c\xc5\xf4\x46\x16\xe7\xd3\xe6\x61\x9a\x4c\x1b\x80\xea\xfe\x01\x09\x3c\x92\xf6\x47\x10\x69\x70\x6f\xf0\xf8\x81\x8b\xb4\xfd\x5b\x54\x6b\xad\x94\x98\x34\x14\x4e\x4a\xa3\x03\xd5\x76\x8d\x77\xdc\x06\xfd\x20\x9a\xf8\x64\xd8\xf6\x17\x36\xb5\x21\xe0\xe7\xaa\x13\x54\xa9\xbf\xdf\x14\x73\x02\x42\x3e\x5d\xa2\x90\x03\xfc\xfa\xb8\x2a\x58\x09\xe2\xbe\x36\xc0\xb1\x74\xed\x16\x67\x21\x2a\x0c\x0f\xa9\x28\x40\xdf\x46\xcc\x15\x50\x36\x77\x42\x90\x96\xfc\x24\x25\xb3\x48\xba\xfe\xb8\x3b\xae\x28\xc8\x8b\x8a\x5f\x8d\xfd\x59\x18\x15\x67\xa6\xc8\xb1\x61\x06\x34\x2e\xab\x05\x2b\x15\x69\x01\x1f\x7d\x41\xb7\xd9\x1c\x10\x58\xb0\x59\xb5\x2e\x03\x28\x09\xe5\x5a\xad\xae\xb6\x5c\xc1\x89\x66\x66\x11\xf9\xa4\x8d\x39\x70\xb8\xe8\x50\xf8\x6e\x0f\x26\xc8\x30\xa4\x95\x3f\x59\x2b\xbf\x87\xea\x0d\x28\x91\x44\x9e\x5e\x6b\x21\xb2\xb7\xdd\xfc\x80\x75\x99\x1f\x44\x36\x1b\x13\x63\x82\x00\x6d\x02\x73\x82\xf5\x79\x45\xc5\x82\x94\x0a\xa4\x82\x52\xa3\x31\x4a\xc0\x89\x43\xce\xe2\x8f\xdd\x5d\x3b\x13\x86\x64\xdf\x28\xb1\x7d\xbc\x24\x6d\x23\x65\xbb\x61\x96\x68\xc4\xcd\xa7\x67\xc2\xe9\xb8\x53\x2d\x4c\xb1\x63\x36\x9e\xf3\xd5\x35\x6c\x7d\x44\xba\x9a\xef\x81\x21\xb4\x5b\xb1\x89\xae\xf7\x9a\xdb\x73\x0b\x1b\xdb\xef\xbd\x8d\xc1\x68\xd8\x36\x8f\x01\xb0\x51\x89\x1b\x2d\x7c\x60\x4e\xeb\xbd\x39\xa6\x83\xe0\x06\x90\x17\x58\xbb\x40\x0b\x8e\x67\x0b\x5a\x95\x35\x61\x53\xb2\x09\x82\x05\x35\x53\x40\xd9\x98\x39\x2c\x15\x60\x27\x77\x08\x5a\x0a\x17\x3f\xcd\x28\x18\xa4\x77\x62\x47\x99\xc7\x95\xfb\xbd\xb6\x8f\xf6\xde\x34\xbf\xe4\xbc\x3a\x2f\xb6\xaa\x79\xee\xe9\xf7\x9a\xf2\x6f\x7d\x28\xb4\x42\xb7\xab\x80\x58\xca\xbb\xb5\x57\x99\x3d\x34\x26\xb5\x81\xcc\x5d\xdd\x6c\x61\x3d\x56\x94\x35\x14\x76\x3b\x25\xc3\x2f\x15\xef\x5a\x07\x15\xb8\xa4\x22\xa9\xa9\xba\x8b\xb5\xe7\xfe\xfe\x00\x5c\x35\x4e\xd5\xf2\x5c\xd1\x02\x30\xdb\x05\xa2\x93\xa0\x3d\x06\xdb\xdf\x71\x46\x6e\x6f\xf7\xb7\x75\x37\xd4\x06\x15\xb0\xc0\xed\xed\x7e\x3f\x16\x7d\xb6\x5a\xd5\x5c\xbb\x3f\x66\x4e\x6d\x37\x93\xf4\x92\xb6\x12\xcf\x46\x9b\xdc\xa7\x05\x73\xd9\x4a\x4b\xba\x7d\x0f\xca\xf5\x4c\x4e\x5e\x32\x49\xea\x55\x4d\x85\xf6\xb3\xa4\x9c\x75\xec\xfc\x1d\xce\x67\xbf\x63\x07\xf4\x63\xf9\x07\x25\x57\x08\x96\xbe\x28\xc4\x19\x80\x95\x2d\xb7\x2b\xb8\x89\xe6\xb7\xdd\xb3\xd4\x35\x8b\xf5\x49\x4d\x5b\x35\xbb\xb0\xcc\xf5\x93\x29\xe8\x1b\x34\x4d\x9e\x5e\x59\x46\x9d\xa4\x6a\x59\x67\x18\xe8\xb2\xe7\x98\xfa\xee\x56\xfa\x98\xb6\xde\x2f\x20\xc8\xb2\xdb\x5b\x80\x7d\x7a\xa7\xcb\xf5\xaa\xd2\x27\x68\x75\xd8\x03\x1d\xe5\x29\xd3\x44\x45\x7e\x43\xc5\x1b\x80\x41\xfb\xc7\x0a\x1a\x81\xc0\x93\x91\x2b\xd3\x9f\xf5\xa3\x2f\x2e\xc9\x19\x59\xae\x2a\xdd\xc6\x46\x93\x29\x49\x93\x81\x4a\x07\x91\xbf\x8f\xda\xb0\x81\x4f\x1e\x9a\x05\xf8\x88\xb2\x09\x15\x96\x41\x87\xe9\x06\x5e\xd3\x4d\x88\xaa\x06\x49\xda\x15\x4e\xf4\xa2\x22\x93\x0d\x57\x68\x57\xaf\x70\xb1\x3a\xb1\x64\x25\xb3\x1b\x71\xc4\xe2\xd0\x19\xca\xdb\x20\x13\x45\x3d\x01\x7c\xda\xb1\x8e\x83\x76\xde\x7e\x26\x9b\x37\x96\x39\xbb\xaa\xaa\x5a\xa1\xb3\xec\x98\x9d\xa1\xb3\x1a\xfa\xc0\xd4\xec\x0a\xa1\xe5\xca\xa3\x20\xd4\xf6\x62\x6e\x1f\xc1\xdd\xe1\x64\x90\x28\x57\xd8\x1d\xe4\xba\xb7\xf3\x1e\xc7\xb8\x17\xc1\xa3\x4e\xa7\xb5\x4a\xf6\x13\x79\xfd\x45\xb0\xa1\x71\x73\x7c\x53\x53\x26\xed\x1c\x53\x7c\x5e\x67\x3c\x08\x2d\xbe\x0c\x54\xaf\x9b\xd8\x32\x49\xa4\xb3\x27\x34\x1c\xbd\xea\x22\xbd\xf0\x37\x4d\xef\x5e\x50\x9a\xf4\xc2\xfd\x6e\x62\x66\x25\x76\x1b\x04\xb2\x3a\x36\x5d\xd7\xb9\x16\xe6\xed\x55\xb5\xe3\x79\xaa\x26\x87\x5e\x3e\x7f\x5f\x1b\x12\x0a\x75\xdb\x7a\x5f\xdd\x56\x23\xa2\x7a\x68\x17\xfc\xe0\xa0\xe5\xc0\xdb\x9e\x42\xa0\x2f\xbe\xf3\x2c\xfa\x7a\x51\x67\x6b\x32\xbb\xe9\xaf\x70\x81\x7e\x60\x2b\xca\x42\x61\x97\x85\x86\x6b\x55\x74\x22\xc9\x72\x1c\x14\xfa\x00\xaf\x23\xc0\x66\x02\xf2\x45\xe9\xf1\x22\xb8\xe9\x78\x14\x1d\x90\xeb\x9b\xb5\x98\xac\x80\xc5\xd5\x55\x81\x3f\xb5\x66\xd2\x6f\x68\x63\x58\x73\xb3\xa2\x6c\x9a\x98\x9d\x05\xa6\xd9\x2e\x9a\xbb\x48\xb6\x06\x86\x30\x7b\x2d\x5a\xc9\xed\x8f\xdd\x9d\x74\x50\xc4\xd4\x1e\x1c\xf5\xed\x41\x3b\xf0\xf5\x96\xcd\xb0\x1e\xbc\x1e\x70\x4f\xa9\x4c\x5b\x38\x23\xd4\x75\x77\xe2\x86\xd8\xd3\xbe\xed\x01\x9f\x00\xcc\x43\xbc\xe0\x6f\x42\x2f\x78\x67\xb9\x3e\xa4\xfb\xee\xb0\xb0\xbd\xad\xd5\xba\xb6\x07\x95\xed\xc2\xb1\xa8\xbb\x42\x80\x4c\x51\xc2\x8f\xde\xd6\x04\x27\xf7\x64\x88\xbd\x0e\x1c\xa8\xce\x37\x15\x8b\xb8\xb5\xaa\x2d\xce\xf0\x1a\x07\x59\xfc\x96\x0a\xdd\xee\x13\x77\x89\x44\xbd\x1d\xa7\x13\xa3\xcc\x41\x9b\x1b\x8e\xd5\xda\x30\x37\x4d\x88\x3e\xd0\x87\x28\x23\x6c\x9e\xdc\xac\xd6\x14\xef\x9e\x19\x26\x25\x13\x87\x22\x05\x63\x0a\x59\x4c\xdf\xbd\x0f\xd2\xc2\x38\x42\x73\xb3\x47\x26\xaa\x02\x84\xe1\xe9\xd2\xf6\x24\x08\xb1\x7b\x66\x86\xe9\x94\xe2\x3f\x42\xdb\x73\xc5\x24\xf3\xed\xd2\x5d\xa5\x3e\x22\x11\xeb\x2c\x29\xea\xf9\x74\x9a\xde\x7e\x25\xe8\x4e\xf2\x8e\x92\xcf\x4c\xe4\x61\x7d\x33\x4c\x98\xb2\x3b\x05\x02\x0b\xaf\x00\xc4\x02\xfb\xe6\x5a\x27\x4f\x1a\xa7\xb0\x54\x12\x01\xa9\xf9\x34\xc4\x5b\xa3\xd2\xce\xdf\xa1\x92\xce\x42\xe2\xdf\x67\x1d\x4f\x66\x9c\x4d\x9e\xd5\x35\xbf\x3a\x5d\x16\x55\xf5\x82\x5f\xb1\xf7\xb1\x29\x96\x9e\x89\x59\x0b\x6c\x61\xa4\x74\xb2\xa6\x34\x90\xb3\x14\x26\x65\xa6\xeb\xff\x52\x37\xf2\xce\x5a\x25\x4d\x05\x2d\x48\x51\x6a\x9b\xf0\x87\xf1\x0a\x6f\x99\x9c\x4b\x3e\xfb\x34\x62\xc5\x87\x72\x16\x2f\xea\xd9\x62\x9b\x02\xcb\x44\xaa\xec\x7f\x0c\xdb\xec\x1b\x34\x5f\xf2\xdc\xca\xb1\xf7\x8f\xb1\xf6\x48\x38\xd3\xd2\x6e\x84\xe0\xd7\x4b\xe0\x2d\xd5\x6f\x30\x7d\x3a\x6d\x9e\x0a\x7c\x78\xe1\x5e\x91\xfb\x0d\x3f\x39\xfb\x3b\x58\x2c\x02\x01\xd4\xf2\x92\x2e\xf9\x0c\x2c\x04\x4d\x64\x39\x5f\xae\xd3\x6b\x31\x08\xcb\x57\xe3\x82\xd9\x60\x86\xb5\x7b\x7b\x87\xc1\xba\x1b\xe6\x2d\x11\xeb\x4a\x26\xe5\x6a\xa1\x89\x41\xdc\xc2\xb9\x7e\x6f\xb2\x1d\x7d\xe1\x11\xb6\x2c\x59\x8f\x85\xb9\xef\xad\x1c\xa8\x2b\xbc\x2e\x23\x0a\x30\x2d\xaa\x0b\x4c\xe3\x7c\x0b\x63\x94\x7d\x7d\xb4\x67\x25\xb2\x63\x7e\x70\xc0\x0e\x0e\x64\x08\xb8\xda\xca\xf1\x2e\x49\x2b\x49\x49\x55\xb3\xdb\xdb\xae\x9e\x9d\xf8\xf3\x4e\x9d\x83\x8c\x35\x1b\x9c\x09\x51\x80\xf8\x0a\x40\x9f\x62\xa3\xb4\x4a\x77\xff\x18\xaf\x57\x2f\xa8\x50\x1f\x40\x89\xcb\xaf\x98\xff\x5b\x81\x3d\x26\xfd\x2f\x7c\x2d\xe3\x4f\xe0\xef\xb4\xb3\x48\xcb\xa3\x8a\x4e\xd8\x6a\x2d\xbf\xd5\xc4\x0b\xfa\xc2\xf0\x08\x5a\xc5\xde\x67\xda\x8f\xd1\x17\xe0\xe5\xa7\x55\x4f\xe9\x3a\x0d\xc9\xa6\x39\x94\x94\x8a\x0c\x2c\xa7\xc1\x36\x70\x80\x68\xa8\x5b\xff\x1c\x5c\x52\x2b\xe0\x2c\x56\xab\xbf\xe9\x44\xb7\xde\xec\x9c\x79\xc3\x9c\x30\x52\xab\x69\x79\x34\x14\xe0\x99\xd0\xae\x62\xb6\xae\x6b\xc2\xb4\x12\xf8\xa4\x9c\x92\xcd\xc6\x5e\x7b\xcc\x73\x46\xae\x46\xcf\x2b\xba\x3a\xe7\x45\x5d\xfe\xcf\xa9\xe5\xa9\x67\x7c\x75\xad\x8d\x26\x0f\xd1\x23\x82\x6f\xb4\xf9\x67\xfb\x7d\xb3\x98\x68\x7a\x45\xd9\x87\xd1\x8c\xaf\x28\x29\x47\x92\x8f\x66\xb6\x63\xb5\x3a\x85\xdc\x1a\xa4\xac\x8a\x10\xe6\x3b\x8b\xd6\xda\xc9\xcd\x55\x47\x71\xa0\x7b\xf5\x70\x34\x4f\xa2\x7a\x1d\x1b\x0b\x68\x09\x39\xce\x93\xfa\x4b\x00\x05\x10\x36\xa0\x23\x14\x64\x74\x5c\xea\x55\x6d\x14\x6c\x70\x2a\x2e\x55\xc1\x5c\x13\xcc\x02\x3d\xbb\x27\x62\x35\x80\x4e\xab\x28\xf9\x24\x7c\x4f\xf9\xfe\x31\xe6\x93\xe6\x45\xe5\x7c\xe2\x3f\xa8\x9c\x4f\xc2\xf7\x94\xf3\x49\xf4\x9c\xf2\x90\xb3\xd6\xaf\x16\x76\x39\x12\x48\x1a\x4f\x86\x7f\xd2\x9f\x8b\xba\x6c\x29\xa0\xe3\x0a\x4e\x05\x6d\x94\xa3\xa9\x3b\x0c\x0c\x53\xcb\xd7\xb8\x53\x2e\x6f\x6a\x4c\xce\x8a\xf3\x2c\x71\xb7\x3b\x4d\x87\xac\xe9\xb9\x27\x24\x00\x66\xda\x5f\x01\x6c\xb1\xe5\xf9\x1a\xed\x75\x96\x08\xb5\xd5\xd2\x7e\x87\x08\x3c\x4c\x83\x17\x85\x83\xdf\x06\x63\x1a\xd1\x24\x00\xa5\x4e\x01\xea\x60\xa0\xe5\x0b\x6b\xb7\x83\xaf\x94\xb5\x41\xd7\xf1\x61\x96\xc7\x5d\x7a\x9b\x1c\x46\x08\x71\x04\x4d\x2c\x1c\xe1\x3d\xde\xf7\xac\x8b\xef\x34\x1e\xe7\x76\x74\xc5\xcd\x47\x83\xd3\x78\xf0\x97\x56\x36\xbf\x47\x73\x3a\xa9\xc9\xaa\x52\x84\xf8\xe3\xff\x97\x3d\x9e\x6b\x66\xba\x99\x11\x8d\x03\xd3\x8b\xae\x69\x24\x78\xdb\xc0\x66\xf1\x8d\xf1\x87\xee\xe2\x5d\x71\x5b\x49\x52\x18\x29\x6d\x95\x62\xa0\x7d\xff\x2a\xcf\x7a\x79\x9a\x72\xeb\xc7\xf6\x45\x4d\x5b\x2f\xcc\xd8\x51\x70\x7c\xee\x79\xdf\x83\xa3\x32\x36\x2a\x8c\x29\x75\xde\xf9\x85\x79\x67\xb1\x77\x7e\xe1\x06\x4d\x7a\xe7\x17\xd6\xe6\x28\xf2\xce\xdf\x8b\xc5\x3c\xa1\xe1\x4a\x10\xde\xdd\xbb\x35\x91\x24\x29\x38\x52\x5d\xd6\xba\x39\x43\xe5\x5d\x62\xb7\x94\x81\x43\xdf\x9d\xcf\x94\xd6\xe4\xa2\x26\x62\xa1\xe1\x8b\x7b\xe0\xcf\xf9\xea\x3a\x4a\x45\x0a\x76\x5d\x20\x7f\x87\x74\xc8\x38\x3e\xfc\x64\x8e\x4d\x8d\x7b\x87\x03\x02\x37\x85\xd7\xfc\x92\x3c\xd0\x14\x74\x6a\x82\x1d\xa7\xe0\xcc\x93\xda\x00\xc6\x71\x30\x06\x51\x1b\x3f\x0e\x6b\xa5\x13\x9c\xc8\xa0\xd5\x87\xd2\x32\xcf\x00\xaa\x2d\x3b\x8e\x8f\x2c\xb4\x86\xba\xdf\x5c\x07\x6d\x53\x38\x57\xcf\xde\x6a\xe0\x5c\xbd\xd3\x8b\xbd\x4c\x1c\xe3\x18\x65\x1c\x4a\x82\x2f\x4f\x74\xb2\x4d\x9b\xdb\x70\xa0\x26\xbc\x90\xab\x1e\x30\x74\x1e\x00\x7b\x9a\x68\x9c\x52\xaa\xea\xa0\xdb\x9e\x21\x74\xba\xd9\xbb\xa3\xf7\x99\x6f\xfd\xfb\x82\xcf\x52\x4b\xd7\x95\x15\x61\xa2\xf6\xfa\x87\x55\x32\x02\x86\x96\xa1\x02\x65\xd2\x10\x56\xbe\x95\xe8\xbd\x4c\x55\x34\x8f\xe6\x19\xb9\x3d\x0c\x59\x39\x01\x8e\x68\x13\x53\xb5\x4c\xdd\x42\x96\x47\xb4\x25\xc4\xad\x69\xa8\x50\x75\x29\x7f\x58\x99\x84\xcf\x6a\xe5\xbc\x09\x3d\x1e\x85\x9d\x9d\x93\x53\x13\x46\xca\x2a\x53\xc6\x76\x70\x45\x34\xc2\xc6\xbe\xe0\x57\x0c\xac\x71\xf7\x13\x64\x6c\x97\x59\xad\xd9\x79\xfc\xb9\xec\x88\x5e\xc5\x83\xed\xc9\x89\xa6\xc3\x7f\xdb\xbb\x02\xbc\xc4\xc0\x3d\x79\x45\x2e\x49\xd5\xb3\x21\xdf\x03\x1f\xf2\xdb\xde\x11\xc3\x4c\x3d\xc0\x96\x68\xfd\x49\xc1\xca\xd0\x90\xb4\x31\xe8\x6e\xfa\x72\x1f\x23\x3c\x01\xed\x3b\xac\x72\x93\xcd\x2d\x0e\x36\x1e\xa3\x1e\xab\xed\xb3\xff\x69\xab\xe8\xbb\x2a\x38\x6c\x28\xad\xc6\x23\x76\x88\x3f\xdb\x0e\x86\xab\xbf\x78\xc6\x7a\x99\x30\x5a\xbd\xd9\x22\xe1\xdd\x62\x84\xea\x7b\x3f\x58\x5d\xd4\xff\xae\x49\xad\x43\xab\xad\x57\xea\xe7\x90\x60\x15\x1d\x4c\xb6\x89\x61\xa1\xa9\x0e\xe8\xcc\xb7\x7d\xb0\x4e\xca\x50\x02\xc9\xf4\xd1\x0f\xfa\xc7\x28\x08\x82\xb0\xbb\xed\x18\x42\x09\x0f\x09\x08\x8a\xb0\xae\xc9\x19\xff\xa0\x78\xe5\xa7\x24\x47\x4f\x85\xfe\x92\xfb\xd4\x50\x93\x54\xc5\xab\x3c\xdd\x2a\x7a\x3d\x38\x18\xab\x0e\xa5\xaa\x9f\xec\x4f\xd5\x37\xbd\x05\xea\x55\x7f\xdb\x81\x46\x18\x14\xde\xa0\x59\x6a\x18\x40\xf4\x37\xb6\xda\x00\xc0\x38\xa3\x78\x0b\x82\x2f\x78\x3d\x06\xff\xa0\xa3\xaf\xe4\x5f\x9e\x7c\x25\x1f\x3d\x4a\x28\xc3\x7f\xe6\x8c\xa0\x47\x32\x22\x82\xdb\x62\xb6\xb1\x27\x67\xf3\xe7\x64\xda\xdb\xe4\x6a\x8d\xa7\xc8\xae\xb1\x44\x02\xe6\xdf\x19\x7e\xb2\x72\xc5\xa9\xd6\xec\x14\x79\x13\x52\x8f\x62\xd4\x28\x5d\x1f\xa3\xcc\x7e\xe7\x18\x3d\xf6\xbc\xf6\x9f\xaa\xce\xf3\xa6\x58\x64\xb8\xf2\x03\x97\x9b\x37\x8a\x32\x5c\xe7\xef\xd0\x17\xe8\x51\x85\xf5\xff\x1f\xa1\xd1\xd7\xa3\x92\x5e\xa2\xf7\x6e\x13\x67\xf9\xd1\x57\xb3\xbf\x3c\xf9\x6a\xd6\x6c\x22\x23\x57\xa3\x17\x35\x5f\xa9\x1d\x18\xd7\xef\x66\xef\xf1\xcd\x82\xa8\x67\x2a\xa6\x37\xcf\xd6\x72\xc1\x6b\xfa\xb3\x09\xa9\xf3\x0d\x29\x6a\x52\x8f\x90\x0d\xfe\x99\x38\xe8\x0d\x5e\xd7\xd5\xb4\xc0\x4b\x22\x17\xbc\x9c\xa2\x15\x17\x12\xe1\x55\x51\x17\x4b\x30\x1a\xf5\x61\xef\xac\xa2\xb3\x0f\x8a\xc4\x9d\xee\x1f\xe1\x65\xf1\xf1\x5b\x5a\x11\x41\x7f\x26\xd3\x27\x7f\x3a\xd2\x6d\xaa\x8a\x54\x00\x0e\xc4\xf4\x4f\x06\x4a\xbc\x5e\x57\x92\xae\x2a\x0d\xaf\x8a\xb2\x84\xfc\x77\x0a\x8b\xe8\x8c\x51\xc5\x5a\xf2\x37\x35\x9f\x11\x21\xfe\x77\x4d\x34\x90\xd5\x3a\x83\x69\x9c\x64\x4d\x27\xe9\x00\x41\x70\x00\xc7\xac\x25\x9d\x2a\xff\x97\xea\x41\xc1\x3c\x6d\xba\xe7\xd7\x6a\x89\x92\x61\x96\xa4\x1c\x5d\x50\x6d\xfa\xc5\x2c\x66\x6c\xc0\x18\x54\x01\x3e\xbc\x19\xa3\x28\x4b\x52\xea\x46\x5d\xb3\x20\x75\xcd\x7d\xbd\x98\x56\xb5\xdb\x09\xbc\x54\x85\x63\xa9\x06\xf4\x3f\xe8\x28\x1c\x1a\x49\xaa\x1e\x12\x4b\x90\xd9\x0d\x31\xa2\x07\x6d\x78\x10\xa5\x56\x35\xef\x61\xa6\x60\x51\x20\x8d\x8d\x72\x33\x44\xbb\xa0\xba\x1a\x81\xb0\xb1\x95\xf2\xd9\xed\x43\x93\x32\x40\x43\xff\x10\x97\xf3\x4d\xb6\x37\x10\x97\x83\x57\xe6\xa1\xf3\xc0\xdc\x51\x95\xfc\xab\xe3\xee\xe1\x18\x7b\x27\xfb\x85\x9d\x1d\xc8\x5b\x3e\xe0\xb3\xb4\xaf\x38\x23\x57\xd6\xab\x56\xc7\x3f\x5b\x70\xf7\xdb\x05\x98\x5a\x14\xa2\xe5\x69\xde\x10\x09\x33\xcf\xdf\xb9\xcf\x8d\x61\xd6\x76\xf8\xd6\xf1\xb5\x67\x85\xe1\xa8\xdd\x3c\x1e\x74\x84\xc1\x91\xc3\x67\x05\x7b\x56\x96\xf7\x9e\x44\xcb\x29\xe2\xfb\x2b\x46\xea\xd0\x0b\xb4\x55\xe7\x75\xc1\x0a\x63\x37\x78\x67\x27\xf7\x5d\x34\x7e\xf8\x6e\xe9\x89\x8a\xb2\x3c\x94\xc5\xfc\xf0\x82\x92\xaa\x3c\x3c\x6e\xac\xb3\x62\x03\xbf\x89\xaa\x45\xd9\x6a\x2d\x51\x36\xe1\x17\x17\x3a\xa2\x91\x22\x09\x4c\xe2\x24\xfb\x2b\x11\xf6\x7a\x7f\xbc\x4f\x26\x62\x41\x2f\xe4\xdf\xc9\xf5\xed\xed\x7f\xef\x2b\x16\xea\x6a\x41\x67\x8b\xec\xf6\xd6\x2b\x3a\x38\x18\xff\x77\xee\xca\x6e\x6f\x8f\xbf\x0c\x7e\xfd\xd9\xff\xf5\xe5\x7f\x06\xbf\xfe\x2b\xf8\x15\xf4\xf2\xc7\xa3\xe0\xd7\x9f\x82\x3e\xff\x2b\xa8\x1a\xf4\x72\xfc\x24\x18\xc2\xfc\xf1\x75\xfe\xe7\x3f\x1d\x1c\x98\x1f\x7f\xc9\xff\xfb\xc8\x2b\xf9\xef\xff\xf4\x4a\x8e\x9f\x3c\xf1\x8a\xfe\xf8\x5f\x5e\xd1\x9f\xfe\xd3\x64\xbe\xde\x31\x32\xd5\xf0\x13\x19\x1a\x1f\xe1\x07\x41\xea\x7f\x50\x41\xcf\xab\xad\x86\x4e\x20\x77\x6a\xe2\x05\xf8\x4a\x56\xef\x1d\x49\x1f\x7b\xfc\x7a\x31\x19\x30\x49\x98\xac\xcb\x30\x1f\x88\x4b\x10\x1d\x33\xec\xad\x44\x80\x81\x76\x33\x5c\x1d\x9c\x9c\xa5\xe0\x8f\xb1\xcc\x03\xd0\x9b\xa0\x21\x97\xc5\xc7\x33\x1d\xba\xe1\x17\x0a\x16\x91\xa4\x73\x3b\x83\x45\x70\xcc\x15\x14\xe0\x39\x37\x11\x99\x7c\xb0\x4a\xfe\x92\xb3\x83\x83\xb1\xf4\xc3\x46\xdc\xb0\xb5\x5a\xe0\x94\x60\x40\xa0\x5c\xe1\xcf\x47\x8f\xd4\x2e\x28\xe2\xd4\xa4\x87\xff\x8a\xff\x25\x67\x5f\xf1\x47\x8f\xb2\x64\x63\x6e\x1a\x23\x14\x68\xe7\x21\x06\x85\x6c\xbb\x7e\xa7\xcc\x66\x03\x12\x9e\xc5\x91\x19\xda\xf1\x03\x03\xd4\x01\xa6\xa2\xea\x2a\x84\xc7\x2c\x76\x6a\x70\xac\xb8\x84\x77\xef\x71\x91\xbf\x7b\xef\xa5\x06\x6a\xd2\xe4\x3b\xf5\x1b\xf3\x0d\xe1\x89\xc3\xf5\x27\x81\x6b\xf2\x66\x8f\x82\x95\x2a\xd7\x9e\x85\x0f\xd0\x5f\xe1\x6f\x3e\x77\xa4\x61\xc7\x63\x14\xc4\x21\x68\x48\x91\x23\x16\x74\x35\x2e\x30\x5a\x33\x13\x49\x2e\x72\x36\xd8\xa9\x1f\x8a\x51\xab\x17\xf7\x74\xaa\x56\x4c\x18\xc5\x03\xbd\xb7\xb7\xb4\xc2\xbe\xe3\x89\xbe\x3b\x13\xc9\x5f\xf1\x2b\x52\x3f\x2f\x04\x19\xdb\x70\x62\x7b\xcc\xbb\xbd\x63\x2f\x7e\x41\x8d\x99\x66\x23\x85\x2c\x6a\x29\xfe\x49\xe5\x62\xcc\x30\x3a\x44\xed\xf4\xe1\x21\x02\x44\x8f\xc8\x04\xee\x6c\xa7\xfa\x76\x5c\xc3\xa1\xb1\xb6\x0d\x7c\x77\x5f\x9d\xca\xc2\xcc\xee\xc8\x2c\x47\x5f\x20\xbb\xfe\x5a\xaf\x7f\xf6\x28\x27\x78\xf6\x48\x15\x98\x4a\x65\xda\xb5\xae\x74\xcf\x49\x20\x3c\x6b\x1b\xc5\xbf\x70\x55\xc7\x29\xc2\x7d\xa8\x10\xce\x10\xee\x60\x0f\x54\xf5\x8b\xe0\x3a\xc8\xf5\x5f\xd3\xd6\x78\x57\x6b\x62\xeb\x6c\x59\xf2\x99\x67\x37\xb9\x28\xb4\x19\xaf\x66\xcf\x3a\xf2\xf2\x98\xb6\xe8\x0e\x94\x9e\xb5\x1c\xfe\x6e\xb8\x73\x61\x33\xbd\xad\xee\x84\x6d\xa8\x1a\xc8\x9b\xfc\xa5\x35\x72\x9b\x50\xb2\xde\xe3\xb2\x6a\xea\x07\x33\xf3\x26\x1d\x4e\x0e\x36\xc8\xe2\x1c\x9c\x68\x94\x08\x5d\xee\x2d\x35\x6a\x9a\xbe\xdc\x49\x45\xe0\x5d\xcd\x9d\xdd\x7d\x97\xc5\xce\xe6\xce\xbf\xf3\xa8\xbf\xf3\xa8\xbf\xf3\xa8\xbf\xf3\xa8\xbf\x00\x8f\x7a\xfc\x9f\x5f\xfe\xce\xb2\xfe\xce\xb2\xfe\xce\xb2\xfe\xce\xb2\xfe\xce\xb2\xfe\xce\xb2\xfe\xce\xb2\xf6\x91\xf0\xb4\x24\xe7\x45\xfd\xef\x66\x37\xd2\x1d\x2e\x19\x61\x34\x8a\xe3\x24\xef\xec\xc3\xb8\x43\x80\xb2\xfb\x59\xb0\x84\x49\x2d\xba\xc3\x18\x5f\xd0\x4a\x1b\x6a\x0d\xf0\xde\x0b\xe9\xeb\xcf\x3a\xad\xad\xce\x5a\xaf\xf3\xd5\x27\x2d\x78\xee\xe2\xc9\xec\xed\xe6\xae\xa4\xf9\xbf\xa1\x49\x4a\xf7\xee\x6f\x35\xcc\x1d\x1a\x92\x4e\x1d\x78\xdb\x30\x37\x40\xf5\x21\x11\xc0\xfb\x8d\x4c\x84\x67\x64\xc2\x3b\x8c\x4c\x58\x68\x64\xa2\x2d\x57\xde\xa1\x2f\xc0\xc8\xe2\xd0\x81\x03\xfd\x68\x46\x08\x77\x95\x8c\xbe\x1e\x51\xcf\xc0\xa4\xc8\x8f\xbe\x2a\xfe\xf2\xe4\xab\xa2\xc3\xc0\x84\xbe\x2b\x86\x18\x98\xc8\x2d\x06\x26\xe2\xdf\xdd\xc0\x44\x6e\x33\x30\x91\xed\x87\x7a\x4f\xab\x12\xd6\x8c\x0a\x46\x24\x4c\x8d\x72\x6f\xab\x92\xcd\x06\xc7\x33\xbd\x69\x5f\xeb\xd0\xf6\xdf\xab\xbc\x0b\x83\x04\x00\xbe\x9d\x82\x26\x32\x5a\xe9\x18\x18\xec\x56\x9a\xb1\x7b\x1c\xa7\x68\xd9\x22\x10\x87\x59\xc2\x44\x07\x76\x5f\x82\x44\xf2\x59\x07\x25\xd2\x15\x05\xe1\x17\x17\x9c\x87\x54\x85\x75\x80\xbc\x03\xf9\x00\xde\xfc\xb2\x90\x24\x69\x7c\x3a\xc0\x83\x3f\x74\x7e\xff\xdd\x6d\xff\x77\xb7\xfd\xdd\xdd\xf6\xdb\x0e\xdc\x81\x79\x7a\xc3\xd2\x83\x2b\x75\x90\x8b\x0b\xa1\x29\xd9\x55\xb2\xa9\x4b\x5c\x00\x31\xb1\x3e\x17\xb3\x9a\x9e\x7b\x2f\x43\x7b\x2c\x96\xda\x2e\x5f\xd3\x08\x5e\x88\xc1\xa6\xe8\x8e\xd9\xca\xdc\xb8\x6b\x76\x8f\x91\x13\x9f\x15\xe8\x1d\x26\xb3\x0d\xb7\x13\x20\x79\xec\x0d\x9f\xc8\x66\x8f\xb9\x75\xbe\x60\x3b\x78\xc3\x8b\x5c\xb6\xbd\xe1\x19\x0e\x05\x55\x3c\x7b\xca\xa7\x3c\x74\xc5\xf0\x45\x02\x8d\x83\xbc\x48\x38\xc8\x0b\xdf\x41\x5e\x84\x0e\xf2\x22\x76\x90\x17\xc3\x1c\xe4\x83\x88\x9d\x9f\x8d\x33\xd9\xc3\x9c\x4a\x97\x4b\x0c\xd7\x11\x08\x72\xde\x76\x89\xf1\x0f\xd1\x39\x93\x31\xcc\xf5\xca\xc5\x9d\x1c\xa7\xc4\xc3\x38\x93\x7d\x2e\x3b\x62\x9c\xc9\x1e\x68\x4f\xee\xeb\x4c\xf6\x39\xec\x8a\x73\x26\x1b\xb2\x27\x1d\x9e\x53\xe2\xc1\x9c\xc9\x3e\x87\x1d\x69\x9c\xc9\xee\xbb\x25\x9c\xfd\x95\x4b\x6e\xb3\x2f\xd0\x8b\x31\x42\x3a\xe9\x5b\xa4\xe6\xb7\x10\x3d\x94\xd8\x2d\xf8\x95\x75\x37\xbe\xb3\xc2\x5d\xd1\x1c\x87\x26\x1c\xc1\x6f\x49\xe1\x7e\x87\x20\x61\x3b\xa5\xb9\xe9\xcd\x68\xb0\x45\x02\x57\x51\xf6\xa1\x5b\x90\x07\xc2\x6e\xbc\x28\xc4\x9b\xa2\x37\x91\x98\xbd\xdd\x62\xc1\xaf\x80\x26\x32\x81\x5b\x9c\xb2\x9e\x11\x1b\xcb\xc5\xcf\xe4\x0c\x39\x31\xd4\x5f\xbb\x91\xf0\x9f\xa1\xb8\xee\x92\x4b\x72\xb6\x28\x8c\x34\x41\x6d\xc4\x2b\xfa\x81\xb8\x1f\xc0\xaa\xea\x80\x14\x9e\x50\xaf\xf9\x08\x21\xd8\xef\x66\x1f\xe4\x06\x6b\x87\x55\x98\x14\x55\x65\x0b\xd3\xb4\x3e\x15\xaf\xa8\x4e\x5f\x70\x17\x82\xf6\xa7\xf5\x72\x75\xc6\xcd\xc1\x8e\x3b\x89\xe9\xc1\x69\x7d\x75\x89\x79\xe2\xaf\x28\xfb\xf0\xb7\x82\x95\x95\x6a\xb3\xc1\xa9\xaf\x2d\xda\xc8\x5c\xe7\x08\xf6\x7a\x4f\x0b\x98\xb1\x38\x32\x69\xf1\xae\x2c\x64\x71\x68\xa1\x47\xfe\x07\x59\xaf\xc9\x1f\xde\x5b\x1d\xb4\x96\x36\x19\x13\x01\xf8\xbb\xb9\x73\x02\x26\x41\x21\xd8\xb5\x9a\x9d\x55\x55\x35\x33\x12\x46\x50\xa0\xc1\x6f\xf3\x72\xf3\x3c\xa7\x13\x9b\x84\xf4\xf6\x16\xc9\xe2\x3c\xfc\x96\x1d\x1c\x50\x2f\x11\x98\xce\x0d\xe4\x34\x63\x76\xf1\x3c\xc0\x2f\x81\x7a\x98\x4e\x6c\x3e\xd3\x76\x60\xaa\xa7\x74\xc2\xeb\xd5\xa2\x60\xf9\xfe\xd1\x34\x3d\xa5\x83\x03\x1e\x1d\xb0\xd7\xe1\xc6\x3c\x35\xdb\xcd\xd3\x28\xa6\xb6\x5e\xaf\xa7\x6f\x3a\xaf\xf9\x07\xc2\x0e\x0d\x44\x11\x93\x55\xad\x99\x92\x17\x50\x7f\xac\x3e\x09\xc9\x57\x0a\x10\x17\xf3\x02\x9e\x33\xde\x3f\xce\xa6\xe3\x81\x75\x89\x9e\xf7\x73\x75\x3c\x63\x86\x69\x66\xf3\x49\x87\x2b\x20\xd9\x8d\xcf\xca\xa5\x3c\x09\x03\x47\xc3\xe6\x12\x39\xa5\xc6\x44\xcc\x6a\x5e\x55\x67\xbc\x15\x37\x1c\x92\xe4\x95\xe5\x69\x4f\x8a\x63\x2f\x33\xd5\x30\x60\x95\xe7\xb9\xec\x4a\x50\x05\x08\xba\xe1\x21\xd6\x0a\x46\x22\x47\x34\x40\xaf\x5e\xba\xa8\xec\xa9\xec\x48\x2e\x35\x4d\x16\x84\x48\x3c\x00\xec\x26\x16\x57\x22\x25\xd7\x0e\xe9\xa4\x92\xca\xd8\x56\x5c\x9b\x26\xe1\x54\x9c\x07\xd5\x8f\xb8\x62\x92\x5a\x35\x09\xa6\xe2\xca\x7e\xc8\x13\x53\x39\x4c\x28\xe5\x57\x0e\x62\x72\x91\x20\x80\x55\x3a\xe5\x58\x0b\xc6\xb4\xcf\x5b\x5c\x51\x39\x5b\x8c\xad\xf7\xbf\x77\xc6\xd9\xcd\xac\x10\x64\xc4\x53\x08\x68\x7a\x5e\x93\xe2\xc3\x5e\xba\x02\x5c\x84\xa9\x23\xc6\xda\x27\xae\x2e\xc9\xdc\xbb\x1f\xea\x3e\xf1\x8e\x4b\x90\x79\x66\x0c\x71\xb2\xaa\xe8\x14\xcd\x26\xea\x90\x67\x23\x3d\xfc\xfe\x5d\x87\xb7\xb9\xd3\xcc\x01\x78\xef\x47\xf3\xc0\x53\x82\x97\x8a\x80\x91\x9b\x74\x6c\x7b\x6f\xa6\x9b\x6c\xa3\xe6\x73\x8f\xb9\xc0\x56\xd8\x94\x44\xbb\xec\x44\xb6\xd7\x77\x4e\x8a\xa7\x9e\xee\xdc\xe7\xc6\x86\x54\x4a\x87\xc9\xd3\x5d\xb5\xe9\xaa\x26\x08\x8f\x23\x0e\xda\x24\x19\x24\x97\x08\xb2\x6a\xe8\x67\x09\x81\x9b\x82\x11\x02\x22\x25\xd1\x79\x8b\xb2\x71\x7d\xff\x83\x6f\x17\xce\x2b\xb2\xa9\x5b\x20\xef\x8f\xd5\x10\x58\x30\xc0\x1d\x45\xec\x9a\x8b\xa8\x4d\x06\xa1\xcf\x3b\xed\xf1\xce\x8c\x43\x49\x2f\x2e\x14\x19\x69\x97\x07\x91\x7a\x17\x85\x78\xa1\x0a\x5a\xa1\x73\xe9\xc5\xc5\x16\xea\x59\xd5\x88\xad\x62\xdf\xf2\xaa\x3a\x2f\x66\x1f\x1e\x52\xcd\xde\x23\x7d\x1f\x88\x26\xf7\x13\x62\x6a\xa0\xdf\xc7\x43\x08\xf8\xbb\xcb\xd8\x77\xb3\x8d\x6d\xc9\x0a\xdc\x4d\x8c\x22\x1c\x10\xa3\xb6\xb2\x72\xbd\x0b\x22\x67\x0b\x75\x8c\x0d\x57\x0e\x6e\xd6\xd8\x2b\x09\x51\x5e\x67\xf4\x40\x9b\x3f\x4b\x37\xea\x7c\x7b\x58\xa6\xc3\x98\xeb\x5b\xd3\x52\xc5\x41\xe4\xb7\x6d\x79\x79\x6a\x73\x77\xd2\x09\x6a\xec\xcd\x4a\x5c\x08\x6f\x9b\x7c\x80\x69\x5b\xf8\xc2\x0a\xbd\x2d\x7d\xb9\x0a\xa2\x49\xec\x2a\x8f\xd0\xe6\x60\x87\x2b\xbe\x5a\x91\xfa\x10\xe8\x61\xca\xe6\x87\xab\xa2\x6e\xc9\x25\xfc\xaa\xc3\xbb\xb8\x37\xc0\xe9\x6c\x60\x96\x88\xf0\x0d\x61\xeb\x25\xa9\xad\x06\x7d\x4e\x52\x61\x75\x1d\x24\xda\x6c\xb2\x1d\xf6\x64\xf7\x2d\xf8\x2d\xae\x58\x5b\x98\x1b\x53\xe5\x5f\x29\x81\xf2\x19\xf9\x28\xbf\xa5\xa4\x2a\x9b\x04\xca\x3b\x33\xec\xff\xcf\xd8\x4b\x44\xb2\x4b\x0a\x51\x58\xaf\x24\x1f\x65\x51\x93\xe2\xd7\x5c\xf2\xb3\x9a\x14\x9f\x66\xc5\x55\x49\xea\x26\x65\xaa\x6f\x34\xfd\xa9\x32\x66\x07\x3a\x78\x6f\x42\xef\xef\xb5\x32\x30\xb2\xfc\x2c\xd6\xb4\x28\xc4\x42\x4f\xe7\xfd\x56\xd5\x72\x90\x64\xbf\x8d\xc5\xce\x86\x26\xce\x3f\xfb\x25\xf2\xe6\x07\xbc\xb1\x35\xbc\x3e\x2b\xe6\x21\x39\xec\x15\xa4\x24\xe3\x3b\x9e\x63\x3b\xbd\xcb\xaf\x7b\x90\x15\x9f\x15\xd5\xa9\xe4\x75\x31\xef\x4e\xb0\xeb\x18\x86\x46\x0a\x2a\x4c\xd0\x58\xef\x8b\xb1\x4f\xb7\xfa\xe6\xd0\x37\xac\x71\x97\x30\x49\x28\x1b\xc3\x0e\x45\xdc\xbf\x20\x4c\x50\x79\x3d\x45\xc7\xe0\x37\xf6\xac\x4c\x44\x39\xeb\x48\x05\xda\x50\xaa\xc3\x12\x49\x40\x55\x67\xd0\xb1\x4d\x58\xac\xb3\x8d\x1a\xd3\x4e\x45\x9c\xf2\xf5\x30\x63\xd5\x07\x99\xda\x90\x4c\xa8\x90\xc5\xd5\x6e\xfb\x33\x73\x81\xfb\xa6\xe8\x98\x14\x38\x55\x67\x0e\xa4\x0e\x74\x33\xdc\x25\x2d\xec\xa5\xdb\x2d\xcd\xef\x7e\x57\xbf\xb4\xb6\x9e\x4e\xc7\xac\xcd\xb0\xcc\x7f\x9c\xd4\x04\x1e\x73\x58\x28\x50\x86\x6f\x68\x39\xf5\x42\xcf\x06\xde\x1e\x4b\x7e\x49\xbe\xd7\xb7\x50\x20\x6c\xef\xa8\x0c\x73\x7d\xc6\x77\xb9\xa9\xf8\xee\xbd\x51\xd8\xf9\x82\x24\xff\x15\x01\xc9\x7e\x0a\x86\x45\x3a\xb7\x9d\xf1\x0c\x11\xbc\x96\xdf\x5c\xfb\x3c\x03\x6b\xc9\x32\x99\xdd\xc4\x26\xfe\xb2\x3c\xe5\xb5\x44\x98\xd9\x98\x93\x77\x18\xf5\xfb\x5a\x07\x6b\x6e\x06\xe6\xad\x81\x79\xe7\xc0\xdc\xe9\x27\x77\x1b\xb8\x84\x27\xed\x0f\x2b\x5a\xc3\x8a\x66\x58\x39\x46\x1e\x24\x88\x0c\x2b\xdc\x7c\x14\x4c\x34\x32\x39\x02\x12\x38\x48\xf2\xea\x09\x6a\x60\x9f\x8d\xbf\x72\x64\xb3\x01\x45\xb3\x9a\x14\xb2\x9d\x50\xd1\x94\xae\x57\xa5\x2b\xf5\x04\x44\xc8\xb6\xea\x1c\x2a\xd5\x59\x33\x54\x6a\x22\x5d\x43\xd9\xef\x77\x1c\xaa\x7f\x55\x47\xc1\x50\x85\x98\x25\x86\x51\x5f\xd3\x53\xd6\xf9\xf2\xe2\xf9\xea\x8f\x5d\xbd\xa4\x66\x63\x7a\x39\x32\xe2\x32\xfd\x31\x16\xe7\x42\x0e\x22\x52\x26\x7d\xc0\x85\xcd\x50\xa0\xef\xc2\x3f\x28\xb9\x0a\x05\x60\xc1\x55\x0a\x14\xdb\xd1\xe5\xd5\x8a\xd8\x9e\xeb\x8b\x49\x24\x72\x73\x30\x21\x08\x94\x1a\xe3\x48\x27\x4f\x6b\x37\x6a\x41\xb4\x16\xb0\x09\xe5\x27\x43\x20\x52\x52\xbc\xe7\x66\x72\x1c\x65\x08\x0c\xa6\x04\x69\x02\x4d\x1a\x4c\x8b\xd5\x3b\xd7\xd8\xe0\x7c\xb7\xc2\xb8\xc1\x80\xf5\x05\xd6\x99\x0e\x68\xb3\x1c\x21\xb7\xf2\x28\xd5\x6e\xd0\x93\xf6\x2d\x70\xd9\x6b\x21\x0a\x6d\x06\x79\xa1\x59\x20\x07\x6e\xcd\xf8\x78\x07\x28\xdf\x8a\xbd\xee\xef\x18\x66\x99\x5d\x7f\x94\xee\xf0\x97\x38\x58\x33\x09\x18\xa9\x7d\x70\xc2\x46\x3a\xd7\xdf\x53\x2a\x2c\xef\xd9\x84\xce\xa8\xb1\x39\x6c\x7b\xc6\xb2\xe5\x96\x2a\xe3\xd3\x30\x06\xf0\xfe\xa7\xa7\xcc\x27\xb7\x49\x36\x65\xf9\x8f\x93\x2b\x2a\x17\x7c\x2d\xc7\x2c\x12\x48\x87\xb4\x21\xc2\xce\x9b\xee\xf8\xa9\x37\xf3\xa9\x2f\x35\x1d\xb4\x81\xac\x15\x28\x62\x20\x75\xee\xc2\x44\xe8\xec\x12\x62\x40\xf6\xc5\xcf\xc9\x8c\x25\xe9\x5f\xd6\x9f\x97\x4e\xbf\xc1\x6e\x9b\x12\x9b\xee\xc1\x59\xb9\x74\xd6\xf4\x2c\x5c\x12\x5c\x43\xcb\x76\x82\x0a\x9d\x55\xe0\x59\xb9\xa4\xac\xdf\x8c\xe4\xb3\x8a\x93\x00\x70\xc7\x9b\x7b\xc8\x46\x34\xbb\x64\xa8\x23\x55\x4f\xaf\x5a\x0c\x4f\x3d\x69\xaf\x5e\x52\x6a\xeb\x6f\x6c\x88\xf8\x92\x88\x08\xf7\x68\x86\x5c\x6e\xa6\x00\xfd\x76\x24\x53\x32\x06\x2a\x7a\x6e\xbe\xe1\x8a\xe7\xfb\x1c\x7f\x84\x84\xa9\x66\x20\x4f\xef\xb4\x0d\x7d\x1e\xb7\x69\xff\x70\xee\x09\x2d\x43\xb0\xf1\x5e\xed\x84\xda\x3a\xb5\x19\xa8\x23\x9f\xeb\x8b\x44\x10\xd5\x87\x3f\x63\x0d\xcb\x77\x53\x90\xc5\xe0\x6a\xc7\xf0\xab\x3b\xbb\xc6\x62\xfe\x50\xc0\x4b\xec\x94\xb2\x73\x28\x78\x9a\xd7\x7c\xbd\xea\xae\xa7\x8b\xfd\x08\x38\x9d\x35\xbd\xe8\x37\xdb\xdc\x61\xfb\x0c\xf9\x48\x49\x25\x00\x3a\xf5\x97\x8b\x45\xa5\xaf\x13\x7c\x8f\x62\xe6\x0c\x73\xcd\x58\x0b\x52\x8b\xfc\xdd\xfb\x3b\xe4\x3c\xb4\x11\x5e\x76\xf3\x48\xe8\x8b\xe3\xe1\xa5\xd7\x1d\x7e\xf1\x9b\x8b\x4a\x92\xb1\x01\xdc\xab\x5a\x2f\x97\x45\x7d\xdd\xd7\xb1\xd4\xf4\x61\x3b\xea\xc6\x8f\x26\x76\xc2\x58\xe2\x1b\x2f\x4e\x81\x9f\x1a\x4c\x06\x59\xa6\x05\xd2\x39\xf9\x8e\xf6\x58\xd0\x1b\x7f\x94\x93\xc9\x8c\xaf\x99\xdc\x58\x4e\x78\x70\xd7\xfa\xa0\x54\xb7\x34\x3f\xda\x13\x41\xb7\xd4\xeb\x16\x93\x30\x6c\x96\x50\x5c\xb7\xfd\x08\x7d\x60\xda\x11\x45\xc1\xee\xd4\xc0\x10\x2a\x3a\x59\x4f\x2b\xc2\x83\xcb\x96\x41\xb4\xe4\x44\x06\x92\x93\xb6\x84\xc2\x44\x2a\x29\x8c\x3f\xe5\x7e\x5c\xc3\x04\x27\x51\x78\xab\x41\xbb\x6f\xc9\x8c\xd7\xa5\x25\x81\x4c\x5c\x09\x35\x18\xe6\xf5\x3c\x48\x6e\x06\x93\xd6\x5f\xbd\xc7\x1a\x54\x31\xb6\x8a\xf6\xe9\x00\xe6\xb9\x5a\x70\x55\x49\xfd\x3b\x25\x58\x71\xca\x53\xe6\x9a\x2b\x16\x71\xba\x7f\xbc\x09\x42\x6d\xe8\xc7\x8b\xb2\x09\xe3\xf5\xb2\xa8\xe8\xcf\xde\xcb\x3f\x6c\x66\xae\x65\x20\x6d\x5c\x63\xda\xea\x20\x0c\x02\x3c\x63\x00\x8f\xa6\x4c\x8d\x1a\x80\x12\xd1\xdf\xb6\xe3\xce\x5d\x76\x41\xf8\xb1\xcc\x30\x0b\x28\x81\x67\xa5\x36\x2c\x21\x2d\x63\xbb\x96\x80\xca\x03\x33\xe0\x85\xa2\x4d\x8f\x58\x77\xc2\x3d\xc8\x92\xef\x36\x63\x50\xee\xf7\x64\xa2\xfd\xb8\x8b\xce\x08\x14\x2e\xfe\x53\x60\x27\xe3\x66\xad\x90\xb3\x91\x80\xb9\x37\x37\x65\xb8\x9d\x1a\xaf\xb9\xf2\x9b\xbd\xae\xf7\x52\x94\xe5\x98\xb7\x48\x02\x80\x71\x49\x0a\xc0\x4e\x63\x54\x18\xc7\x2a\x27\x14\xb0\xa4\x53\xcb\x68\xb0\xf3\xc0\x9b\xf5\x01\x7a\x40\xd8\x7b\x6f\xfe\xf2\x2d\xce\x70\x15\x9a\x3e\x53\xa9\xdf\xec\x46\xab\x66\x2d\x5d\x3d\x46\x5f\xe8\xef\xae\x16\x35\xee\x61\x0d\x35\x79\xd7\x55\x58\x74\x96\x5a\x47\x72\x82\x26\x01\x66\xd2\x9c\xc0\x4c\xc5\xb7\x47\x70\xd9\xdd\x92\xed\xbb\x81\x22\x54\x6b\x25\xe7\x3c\x69\x80\x61\x7c\xf4\x1b\x67\x33\x98\xe0\xe6\xdd\x69\x34\xef\xc7\xfa\x51\xc4\xf7\x3e\xdc\xe9\x41\x6f\x07\xef\x1f\xb7\x1e\x6d\xc7\xe6\x87\x53\xd2\xcb\xd9\x63\x5d\x68\x35\xbd\x83\xde\x15\x69\x47\x8f\x49\xce\x7e\x4b\x62\xc4\xc4\xf6\x0b\xb5\x8d\xac\x7f\xa7\x17\xfc\xea\x99\x7e\x61\x6f\xe8\xec\x03\xa9\xdb\x9c\x8c\x7d\x77\xcf\x2c\xaa\x39\xca\xf6\xc2\x08\x60\x71\xb8\xab\x21\x37\x36\xc2\x1e\x08\xb3\x44\xa0\xad\xeb\x37\x3e\xfb\x29\x5b\x8c\x8d\xc3\xbc\x5e\xbd\x6d\x04\x50\x32\x3a\x98\x6a\xd2\x46\x93\xd0\xcb\xd5\x82\x37\xc9\x41\x35\x7e\x6b\x7e\x9a\x28\xa2\x7b\xed\xb8\x61\xc7\x19\x0e\xc2\x5f\xb1\x2d\xb4\x83\xbf\x02\xdf\x5a\x7d\xcb\xc4\xdd\x06\xc3\xc4\xa2\x69\xf6\x10\x0e\x41\xec\xab\xcd\xf6\xbd\x37\xaa\x13\xd8\x0e\x6c\x17\xbe\x31\xb7\xe8\x8c\xcf\xe7\x15\x01\x44\x18\x77\xdf\x12\x1c\xea\x16\x7f\xad\x0b\x26\xe1\x4a\xb5\xb8\xd0\xd6\x8d\x4b\xf0\xa1\x8d\x0e\xaa\x93\x22\x41\xe9\x5b\xe9\xaf\xab\x33\x1a\x58\x27\xda\x12\x44\x2a\x32\x86\xd4\x62\x1c\xd0\x9a\xde\xdf\x3d\x0f\x2e\x64\x2d\xc5\x8e\xac\x25\x00\xcf\x81\x8c\xe5\xae\x22\xb1\x4f\xc5\x57\x3e\x8c\x50\x6c\xbb\x0e\x3d\x52\x3a\x18\x0e\x50\x8b\x0c\x2c\x53\x98\x8c\x90\x31\x80\xb2\x33\x77\xd1\x07\x09\x61\x96\xa4\x70\x28\x94\xed\xf1\x5c\x8b\xc9\xb5\xb8\x9c\x9b\x7f\x5b\xae\x20\x2e\x4d\xb5\xee\x7f\x17\x2c\xe0\x01\xc7\x16\x06\x6e\x01\x45\x13\x8d\xad\x5b\x3d\x33\xab\x48\x51\x07\xea\x19\xb7\xed\x03\x85\x55\x02\x65\xd9\x74\xc8\xe2\xfa\x11\xf4\x3d\x9f\xcf\xa0\xf8\xda\xff\x7f\x92\x24\xd3\x59\x9f\x18\x59\x95\xde\xe9\x65\x7d\x1e\x02\x65\xe1\xbf\xec\x01\xc1\xc6\x45\xf3\x3c\xa1\xed\xd9\xf5\xca\xda\x28\x84\x66\x34\xb6\x70\x7a\x84\x2b\xed\xaa\xa8\x40\x87\x73\x17\xd4\x76\x38\xaa\xca\x2b\x7a\x41\x66\xd7\xb3\xaa\xbb\x13\x57\x03\xec\xcd\xd5\x86\xbf\xa2\x42\xb6\x2b\x9e\xcc\xc0\xed\x53\xff\x78\x41\xc4\xcc\xfd\x30\x29\x02\x87\x4a\xad\x34\x8a\xb5\xe3\xf8\x64\xac\xb9\x0a\x9e\x1c\xf5\xc4\xd4\x1a\x3b\x2f\xc4\xbb\x06\x08\xe9\x88\x08\x63\x31\x38\xf3\xe9\xc8\xbd\x40\x67\x05\x26\x24\xa7\x76\xc3\x27\x6f\x6a\x7a\x59\x48\x82\x2b\x58\xb5\xf9\x39\x3a\x1c\x5d\x52\x72\x55\x9c\x57\x64\xc4\x59\x75\x3d\x3a\xbf\x1e\x2d\x09\xda\x64\x78\x4b\x67\xda\x28\x9d\x94\x4d\x77\xe6\xc3\xe8\x70\x04\x72\x95\x11\x15\xa3\x9a\x08\x59\x53\xfd\x59\xf2\x91\x25\x12\x46\x4e\xac\xd4\x3f\xc6\xfa\xbc\xa2\x33\x37\x80\xfe\x35\x3a\x1c\xcd\x0a\x36\x3a\x27\x23\x41\x08\x53\x93\x25\x97\xa4\xbe\xe6\x4c\x4f\xd9\xa3\x84\xa2\x4b\x18\x91\xc8\xae\x18\x61\x16\xf2\x26\xde\xf6\x42\x8a\xf9\x80\xa3\xf5\x1c\x5b\x6d\x55\xdf\xd7\xd5\x87\xe9\xfe\x77\x2f\x43\x74\x15\x34\xae\x4c\xbb\x69\xab\x02\x7a\x41\x4b\xfd\xa0\x47\x0b\x52\xad\x46\xd7\x7c\xfd\x14\xb5\x56\x10\x07\xe8\x07\xf4\xd4\x8e\xce\xef\xae\x7e\xbb\xb2\x36\x64\x68\x57\xd6\x4f\xa3\x5d\x5b\x9f\x05\x10\xc7\xb1\x31\x8f\x41\x8d\x33\xe7\x55\x00\xee\x8e\x3c\x3b\x38\x18\xf3\x9c\x4c\xd4\x93\xd0\x91\xe5\x9e\xad\x56\xa2\x35\x9e\x2a\x45\x98\xb7\x4d\x66\xec\x41\x44\xac\x55\x73\x7e\xc6\xbc\xc1\x54\x75\x50\x21\x51\xdf\x95\x79\x8d\xd4\xb8\x89\xaa\x30\x1d\x57\x4b\xef\x46\xaa\x47\xd8\x25\xe2\xb3\xdd\x61\xd8\x86\x50\xc7\xd6\x19\xbb\x01\x5e\xf3\x1e\x69\xad\x2e\xaa\xa3\xdf\x05\x75\xfb\xef\x43\x04\xff\xbe\xd9\x8e\xec\x65\x7b\xea\x91\x27\x50\x63\x6a\xa5\x51\x2d\x52\x2c\xc8\x89\xb0\x77\xa4\x68\x2b\xa3\xcd\x3e\x38\x18\x9b\x7e\xc1\x88\x87\x39\x11\xaf\x3e\xf5\x78\xae\x7a\x0f\xb3\x46\x36\x9c\xba\x7e\x2f\xcc\xed\xb3\xf3\x35\xd7\x2b\xae\x06\xfb\x9c\x75\x50\x69\x9a\x51\x6f\x2b\xc8\x22\x09\x98\x3a\x1e\x2d\xf8\xda\xd5\x89\x2b\xa6\x84\x02\x24\xbc\x5b\x40\x88\xe1\x1a\xac\x98\x92\x82\x08\x6c\x0a\x98\xb2\x79\x82\xfb\xc0\x02\xd3\x87\x22\xa6\x8a\x5d\x38\x10\xd1\x90\x55\x03\x75\x57\x43\xe9\xab\x75\x6f\xb4\xd7\x35\x84\x7a\xed\x27\xe5\xee\xa3\xf9\xd2\xd3\xf4\xb8\x5d\xa0\x32\x34\xe2\x82\x3f\x05\x29\xea\xd9\xe2\x8c\x7c\x94\x40\x41\x5c\x52\x49\x5e\x2e\x0b\x5a\x35\x3f\x5f\x13\x21\x14\xe1\x67\x72\x49\x9c\xda\x2e\x5f\x7e\x5c\x55\x05\x65\x2e\x4a\x83\x0d\x70\x15\x16\x7d\x1e\x94\x20\x15\xdf\x71\x00\xad\xba\xe1\x8e\x13\xe9\x30\xff\xf5\x27\x72\x17\xf3\x05\x23\x25\xb1\x07\x00\x8a\xef\xd0\x18\x39\x38\x01\x67\x92\x6f\x8c\x1c\x44\xbb\x86\x03\x2d\x86\x53\x3d\x51\xa5\xda\xb5\xd5\xd4\x70\x59\x5e\xac\x06\xd2\x68\x14\x01\x96\xfb\x54\x67\x97\xeb\x7d\xf3\xd5\x3e\x95\x46\xf1\x68\xa0\x17\x0b\x94\x8c\xba\x1a\x90\x2e\x8d\x4a\x8f\xb9\xa0\xe6\x69\xc1\x9b\x9c\xfc\x73\xc1\x35\x9e\xf8\xab\x6a\x8e\x99\x2f\x5c\x09\x05\x6f\xdc\xd8\x13\x43\xac\x71\x64\x8b\xed\x6f\x0d\x97\xa3\x38\xe8\x06\xed\xef\x1f\xef\xed\x26\x4d\x34\x76\x17\x1e\xe7\xac\xd6\x41\x2f\xc6\xcd\xc2\xc6\x0c\x0b\x05\xbc\x99\x27\x39\xd4\x71\x08\x82\xf5\x3c\x25\x29\xc3\x3a\x23\xb2\x73\xb1\x2a\xcc\xef\x83\x03\x8d\x58\x0c\x28\xa4\x44\x68\x49\xe2\x74\xcc\xa2\x56\xb9\x9c\xbc\x34\x64\xe4\x0f\x82\xd4\x27\xe5\xc1\x81\xcd\x66\x00\xa8\x0e\x35\x69\x8a\x2d\x75\xc5\x75\x38\x35\x12\x8a\x29\xb5\x11\x04\xcf\x7a\x25\xa3\xcd\x82\xd4\x58\x38\x1e\x5a\x8f\x15\x7e\x54\x28\x59\x61\xac\x50\x22\x1a\xd1\x22\x81\xc4\x91\xf4\x49\x1c\xb7\xab\x34\x69\x13\xf1\xab\xf8\x40\x4e\xca\xf1\xf1\x9f\xb3\x96\x96\xd3\x1c\xa9\x55\x73\xb6\x15\x59\xde\x99\xa7\x55\x9b\xba\x89\xd1\x6b\x62\x0f\xf0\xb8\x9f\x00\x72\x74\x20\x6a\xe7\x2f\xe0\xff\xd4\xc1\x7b\xbc\xdf\x20\x78\xf2\xbf\xbc\xe6\x97\xc1\xef\xe7\x7c\x75\xed\xff\x3e\x23\xcb\x55\x55\x84\x6d\x4c\x98\x4a\xff\x53\xc3\x6c\x7a\x1f\xff\x41\x6a\xed\xef\x3c\x40\x29\x0b\x72\x9a\x9d\x35\xb2\xbd\xe0\xc8\x80\x58\xf4\x37\x72\x3d\x92\x0b\x52\x13\x3c\x3a\x19\x15\xcb\x91\x58\x14\x8a\x4a\x50\xdf\x46\x7e\xd4\x6a\x73\x1c\x70\x15\x1e\xa1\x91\x9e\xd3\x68\x4c\x59\x50\xcb\xc6\x7f\x96\x54\x56\xba\x5e\x36\xba\xa2\x72\xa1\x18\x90\x91\xe0\xa3\x2b\x02\xfc\x17\x97\x8b\xd1\x8c\x57\x55\x71\xce\x6b\xc5\x45\x72\x36\x6a\xdc\x3f\xd0\x06\x2f\x0b\x39\x5b\xa8\xbb\x2b\x52\x5a\xb9\xd6\x85\x8d\x19\xd9\xa6\xaa\x21\x03\x50\x36\x09\xba\xec\x93\xec\xf3\x4e\xc9\x3e\x4d\x88\xf5\x15\x83\x12\xd9\x7a\x06\x9c\xe4\x85\xb1\xe2\xfe\x01\xcc\x18\x58\x68\xcd\x26\xb5\xec\xde\x61\xf6\xb6\x38\x3e\x46\xfa\xc8\x0f\x06\x9e\xac\xe0\x98\xb1\x44\x61\x9c\x75\x61\xd2\x5c\x2c\xed\x4e\xb6\xe0\x57\xe3\x96\xb0\x30\xaa\xb4\xa0\x25\x51\xf8\x0b\xa6\xee\x13\x1f\x09\x8b\xf0\x36\x69\xd2\x5a\x40\xaa\x8e\xbf\x86\x44\x79\x6b\x19\xce\x2b\x70\xcb\x4a\x5a\xf5\xec\x62\x40\x17\x77\x02\x28\xbd\xcb\x23\x1c\xf6\x01\xf0\xfe\xa1\xba\x58\x29\x2d\x73\x50\x89\x28\x82\xae\xd1\x33\x3f\x2b\xcb\x2d\x9d\x17\x65\xd9\xd9\xb3\xfe\x0e\x54\x0b\xba\x1f\xc7\xd8\x0d\x14\xda\x42\xa2\xf8\x99\xc5\x00\x41\x8b\xdb\x6f\x2c\xa9\x4a\xb0\x4f\xf3\xca\x10\xb0\xf9\xc2\x28\x6a\x2d\x6e\x24\x26\xf9\xd7\x31\x1a\xce\x45\x1b\xa1\x12\x6f\x52\x0a\xe8\x23\x1d\x70\x20\xb0\xee\xd6\xee\x60\xad\xaf\x36\x24\x6a\xf4\xb9\xf1\xda\x8a\x0a\xc0\x4d\xab\xf5\x59\x81\xfe\xc4\x67\x8b\x01\x52\xd3\xb1\xf1\x8a\x5b\x25\x8d\x28\xa1\x5d\x66\xd0\x82\x96\x1c\x15\xf9\xd1\x5e\xd2\x13\xc0\xec\xd4\xfe\xef\x3b\xa5\x77\xea\xe0\x60\x5c\x3c\xca\x8f\x15\xe4\x0d\xa1\x33\xcd\x9e\x16\x5f\x1f\x3f\x65\x93\x65\x51\x7f\x78\x26\xde\x3a\x79\xe2\x38\x9b\xda\x8f\x46\x92\xe9\x7f\xd1\xb2\xc2\x71\x8f\xbc\xa0\x43\x63\x8c\xdb\x46\x35\x69\x31\x42\xe0\xd6\xf0\x36\x0e\x1e\x75\xaa\x1f\xf9\xd8\x0f\x53\x5c\x92\x73\xbe\x66\x33\x50\x26\xf5\x45\x21\xf1\xd8\x9a\x40\x0a\x43\x0c\x0b\x03\xb2\x9c\x00\x19\x4e\x3b\xb1\x95\xef\x89\xb1\xc1\x4f\xfe\x04\x0e\x1f\xc6\xec\x6a\x10\x56\x4e\xbf\xfe\xdd\x51\x6c\x98\x0c\x2b\x4d\x19\xb3\x90\x32\xf6\x55\xc4\xe6\xef\x8b\x75\x55\x19\x5a\xb6\x25\x42\x4c\x9a\x3b\x34\xde\x80\x00\x76\xe1\x78\x34\xa9\xaa\x21\x7c\x87\x92\x12\x82\xe5\xc4\xdc\xe4\x4b\xc0\x06\xe6\x54\x26\x35\x59\x55\xc5\x8c\x8c\x1f\x8f\x1e\xcf\x35\x07\xca\x7b\xf8\x4f\x73\x92\xf4\x62\x7c\xa4\x23\x40\x39\x91\xda\xbd\x18\x52\x3e\x00\x25\x64\xd8\x17\xe2\x65\x37\xa0\x65\x76\x10\x9f\xe3\xb7\x64\x46\x57\x54\x7b\x3c\xbf\x7b\xbf\xd9\x63\x3a\xa0\xed\xc7\xef\x2f\xc6\x08\xa3\xec\xeb\xc3\xe3\x83\x83\xb1\x98\x34\x95\x72\x66\xdd\xd6\xb1\xc2\xf3\x5e\xf5\xaf\x4c\xf5\x23\x8d\x00\x9a\x16\xcd\x62\xd3\xfd\x7c\xa5\xfa\xe9\x6c\xe4\xa7\xa6\x0a\x2a\xd8\xec\x51\xf1\x0e\xc2\x31\x45\x71\xae\xfc\xf7\xbf\x28\x6a\x92\xe6\x4d\xb1\xd8\xf6\xfe\xe1\xda\x88\x91\x00\x37\x9e\x58\x2f\x9b\xa2\x1e\xb6\x69\x9d\x03\x13\xa7\x2e\x1a\x25\x14\x3e\x40\xcc\xb1\x41\x83\x6f\xd1\x0a\x63\xce\xbe\x59\x57\x1f\x9a\xc7\x03\xe6\x9f\xbe\x24\x5a\xa3\x20\xf5\xa2\xfc\x8f\x46\x44\x14\x7f\x06\xa1\x8e\xf7\x35\xf0\x26\x6f\x7f\x86\x50\x4d\xed\xef\x06\x65\x25\x4a\x34\xce\x4a\x7c\xd7\x48\x2b\xf1\xdd\x61\xad\xd4\xa4\x0c\xda\x4a\x14\x79\xca\x82\x76\xa1\x45\x5c\x3a\x5c\x5a\x20\x4c\x2e\x06\x0a\x93\xf5\x49\x99\xc4\x1b\x03\x74\xea\x9f\x2e\x1c\x98\x2c\xe6\xa0\x07\x2e\xe9\x25\xc2\x41\xd8\x8c\x65\x21\xa4\xa2\x68\xcd\x2a\xde\x6f\x91\xc6\xee\x1c\x58\x0c\xf6\xaa\xbf\xfa\x3d\x6c\x58\xfa\x32\xf9\x4e\xe6\x41\x1e\x43\x1b\xd0\x00\x1f\x35\xe6\xdc\xaf\x28\xfb\x00\x3b\x63\x9f\x02\x80\x18\xa3\x26\xf8\x84\xba\x7b\xa3\x65\x05\xf7\xe3\x9d\xd4\xdb\xeb\xd5\x78\x37\x7d\x75\xd4\xd2\xfc\xd1\x8e\xac\xe6\x65\x84\xc4\x29\xf3\x5c\xe3\x26\x61\x7d\x68\x53\x3c\xbd\x63\x37\x6e\x62\xaf\x07\x9c\x76\x61\xd0\x29\x19\x5a\xd9\x17\x8e\xa6\x1c\xbc\x16\xf6\x9a\x37\xfd\x5c\xfd\x46\x58\x64\x58\x28\x24\x03\xa6\xe5\x29\x0f\xdd\x96\x9d\x9f\xcd\x9a\xda\x36\x00\xb4\xd7\x43\x11\x46\x16\x7f\x3d\xb5\x57\x65\x8a\x34\xfd\x3e\x30\xf3\xb0\x36\x70\x6a\xef\x19\x9c\x6f\xa3\x5c\x06\x42\xc7\x72\xdb\xa6\x14\x7b\x26\xb5\xdd\x5d\x38\x0a\xb2\xa3\x0f\xd0\x4f\xb6\xe3\x3c\x9b\x7d\x09\xd3\x23\x05\x8d\xfb\xe3\x96\x8a\x9e\x54\xa3\xa9\x94\xa2\x36\x2d\x26\xf2\xf3\x87\x46\xd1\x14\xdc\x7a\xa7\x45\xfe\xe3\x64\x59\xac\xc6\xce\xdb\x45\x04\xde\x2e\x72\x93\x35\xe1\x4d\x4e\x40\x3c\xee\x5f\x3b\x2f\x0b\x66\x11\x50\xb7\x07\x07\xb4\x47\x5e\x14\xed\x2d\x96\x61\x60\x04\x66\xd7\xf8\x33\x29\x9b\x29\x8a\xbb\xcd\xe4\xf6\x76\x97\x99\x20\x14\x4c\x05\x0e\x75\x1a\x0e\x75\x8f\xfe\xa4\x45\xb4\x53\xbf\x13\x5f\x09\x60\x6b\x88\xd0\xe0\x60\x4b\xbf\x65\x5d\x5c\x48\x34\xa5\xa9\xfb\xf3\x42\x97\xed\xd0\x59\x45\x2f\x49\x47\x5f\x10\x91\x7c\x78\x57\x45\x59\x86\x3d\xd5\x64\x66\x39\xf3\xe1\xbd\x40\x58\x8b\x54\x47\x3f\x40\xc9\x96\xbe\x36\x3c\x12\x2f\x44\x16\xc4\xde\x75\xc9\xf3\x5c\x86\x27\x1a\xa2\x8a\x34\x24\xd3\x20\x8e\x87\x0c\xaf\x17\xd9\x82\xee\x1a\xc9\x30\xa0\x80\x24\xe7\x55\x8b\x02\xda\xd9\xdd\x73\x77\x6b\x5d\x2c\x1e\x8a\x86\xa2\x77\xd4\x96\x1b\x62\xe1\x81\x68\x9b\x0c\xdb\xb7\xd5\xdf\xa5\x7b\xa3\x3b\x25\x54\x75\x94\x5b\x67\xdd\x20\x8f\x44\x6f\x7a\xd5\x2d\x3a\xf9\x15\x65\x8c\x94\xbd\x4a\x79\x6b\x96\x38\xe3\xab\xeb\x46\x7d\x73\xa4\x7f\x37\x6c\x8c\xfd\x62\xd1\x91\xd3\x29\x7d\x7a\x02\x2d\x61\x3c\xbd\x28\x84\x5d\x4a\x7b\x62\x0d\xd8\xec\x9d\x96\xab\xe6\xa5\x7a\xdb\xf4\x93\xb9\xe1\x23\xef\xeb\xbc\x4d\x0b\xbb\xde\xe3\x78\x69\x5e\xac\xdf\xbe\xd8\x61\x09\x08\x1c\x76\xad\x4d\x4b\x5f\xf0\x99\xdd\x23\xff\x37\xd8\xa2\xee\x1f\xbb\x6b\xef\xd5\x8b\x3e\xb9\xaa\x16\xd8\xb9\x3b\x83\x10\x2e\x4d\x26\x51\x63\x43\x3a\x88\x4e\xa6\x4b\x05\xa8\xbc\x78\x1d\x8a\x12\xf1\x4a\x4e\x75\xa0\x6f\xf7\x71\x56\x71\x46\x4a\x7d\xda\x5a\xb7\x8a\xd0\x06\x0a\x56\x94\x9d\x42\x8a\x3a\x2a\xde\xc0\xb5\xdf\x3f\x56\x0f\xc0\x39\x56\x9b\x15\xdd\x33\xc7\xdc\xc3\x04\x1c\x2b\xbf\xd5\xd0\xc8\x99\x53\x06\xfe\x44\xf0\x6a\x51\x36\x31\xca\x0b\x58\x8e\xef\xe3\xe1\x7b\xef\xba\x7e\xed\x0e\x4c\xf4\xa2\x7d\xa1\x9d\x5f\x68\x77\x07\x41\x80\x9c\x74\x25\xb3\x5b\x28\xf2\x2d\x4a\xb9\x0d\x99\xbc\xf4\x6d\xa4\x09\x18\xe8\xd4\x77\x43\xda\xdc\x29\x41\x89\xc6\x53\x27\x6c\xb5\x96\xdf\x6a\x29\x8b\x95\xcc\x84\x7e\x83\x49\x23\xfe\xfe\x0e\x8c\x68\xc7\x75\x90\xd6\x55\xed\x98\xac\xcf\x45\x37\xf3\x5e\xa4\x79\x16\x9a\xc4\x4c\x7e\x9f\x94\x30\x40\xe0\xee\xea\x8a\xb1\x7a\x4e\x99\x65\x08\x4f\x96\x26\xbe\xd0\x2f\x37\x92\x77\xe9\xdb\x1a\x30\x90\xec\xb1\xfe\x24\xc7\xdc\x4b\x72\xcc\x30\x7a\x0c\x6f\xd9\x52\x2b\x4d\xa2\x63\xa9\x18\x93\x20\x09\x31\xfa\x02\xea\x36\xb9\x8c\xcf\xd7\x52\x72\x86\x06\x64\x26\x76\xee\x5d\x36\x41\x35\xfc\x6b\xd2\xce\x84\x59\x3d\x27\xd2\xcf\x59\xcc\x87\xe5\x2c\x2e\x66\x33\xb2\x02\x0a\x8f\x88\xa9\x56\xa0\x62\xf5\xbf\x8f\x78\xb2\x2c\xb1\x56\x97\x94\xfc\x8a\xe1\xc9\x42\x2e\xf5\xff\xaa\x9e\x3c\xc7\xc7\xed\x34\xc7\x5f\xfe\x1a\x69\x8e\x8d\x3c\x32\x64\x4e\x4f\x0c\x18\x46\x58\x6a\x9b\x06\x2c\xb3\xde\x8c\xc4\xd9\xcd\x8c\x33\xc1\x2b\x32\xa9\xf8\x7c\x8c\x9e\x73\x76\x09\x52\xbc\xd1\x45\x41\x2b\x52\x8e\x2e\x54\x7d\xb0\x9e\xc6\x64\x6b\xfe\xe3\x9e\x39\x51\x36\xb7\x93\x32\x29\x8e\x45\x57\x8a\x63\x92\xdd\x08\x3f\xc5\x71\xc4\x71\x35\xd7\x3c\x0a\x26\xf8\x03\x5b\x51\x16\x84\xb3\x70\x20\x78\xad\x8a\xb4\xa7\x51\x50\xe8\x03\xda\xb6\xfb\x70\x17\xc4\x0d\xe3\x8d\xc5\xf0\xda\x49\xd8\x5d\xaa\xcf\x15\xe4\xd5\xd0\x55\x6d\x46\x37\x50\x89\xbd\xa1\x8d\xb2\xeb\x66\x45\xd9\x34\x31\x3b\x0b\xc4\x1b\x8a\x13\x50\x61\xbf\x8f\x7c\x9b\x3e\xb3\x5b\x61\x37\x82\x24\x43\x78\xa4\x96\x7b\xd4\xb7\x5c\x1f\x9d\x0d\x5a\xb7\x17\x94\xee\xa5\x21\x5e\x3a\xcd\x07\x34\x75\xa3\x40\x48\xd2\xf3\xdd\x15\x02\x96\x30\x4a\x3c\xdb\xe9\x40\x4f\x3b\x9f\x80\x02\x27\xf0\xc6\x4c\x9f\x59\x4b\x03\x2f\xb2\x5b\x8b\xe0\x82\x0d\x4a\xc5\x5a\x88\x27\x68\xd5\x0b\x7b\xfd\xbd\x05\xb7\x2b\x98\x5e\x73\xb7\x02\xed\x48\xbc\x4b\x3e\x7a\x8f\x38\x20\x45\x8d\x00\x3d\x56\x5c\x36\x44\x5f\xd2\x97\x0f\xa3\x23\xe4\x1c\x4f\x49\x98\x17\x28\xed\x99\xd7\x04\xff\x4d\xf6\x17\x7f\xb4\x21\xa4\xda\x0a\x4d\x28\xf1\xdc\xc9\xcf\x1a\xea\x35\xb8\x2b\xb1\x00\xa5\x9f\xeb\xd7\xa4\x4b\x3b\x82\x81\x6d\xdf\x75\xcf\x82\xf2\xe6\xaa\x01\x49\xe4\xb6\x90\xdc\x63\x4a\xed\xcf\x47\x29\x81\x44\xa3\xb4\x31\xf9\x26\xf4\x7d\xf7\xf6\x66\xe0\x95\x8f\x78\x81\x21\xb7\x3e\xc5\x3e\x74\x5f\xfc\xc4\x8e\xb9\xbb\xdf\xf2\x90\x89\x17\x17\xfa\xc9\xc4\x46\x51\x5f\x5c\xd1\x72\x4e\xa4\x8e\xaf\x7d\xb8\xd2\xf1\x05\x3a\xd5\x79\xd3\xf1\xd6\x05\x04\x6f\x2d\xde\x97\x8e\xe7\x96\xb8\x2f\x0f\xf4\xe2\xf8\xa7\x7e\x6f\x8d\xcd\xd8\xd2\xc4\xa4\xec\x04\xcd\x0d\x79\xd7\x0e\xf9\xe1\x29\x40\x2c\x99\xeb\x3f\x3b\x3d\x42\xba\x0f\x8f\xf4\x19\xa6\x06\xb0\xe1\x02\x5a\xc4\x46\xca\x96\xc3\x67\x45\x23\xe2\xb7\xc5\xbf\xea\x18\x99\x9e\xd8\xd7\xd0\x46\xaa\xeb\x51\x93\x66\x0e\xa3\xc9\x64\x02\x0a\x7f\xad\x78\x0f\x64\x85\xc1\x70\x21\x1f\xd7\x1e\x0e\xb3\xc4\x3a\x48\xd2\x24\x65\xc7\x65\xd0\x8b\xd0\xcc\x04\x19\xb5\xfd\xc5\xba\xaa\xae\x47\x33\x58\x16\x29\x47\x7e\xf2\x3c\xb5\x1e\xbe\xba\xdf\x72\xb4\xf1\x42\x63\x61\xd1\x7e\x48\xad\xe3\xef\x36\x20\x72\x14\x83\x8d\xca\xda\xba\x8f\xc0\xf5\x01\xb7\x9a\x0e\x42\x13\x45\x74\xbd\xe9\x23\xa0\x70\x59\xc8\x62\xfa\xee\x3d\x06\x25\x89\xf6\xcd\x45\x28\x11\x7a\x28\xe4\x9b\x21\x0e\xd7\x3c\xc1\x37\x6b\xab\x7b\xd5\x29\xdc\x13\x19\xaa\xd0\x4c\x91\x53\x89\x91\x49\x33\x6e\xee\x29\x6f\xc6\x61\x81\xd1\x40\x05\x1d\x27\x16\x13\xb8\x88\x79\x62\x4b\x94\x4d\x60\x96\x6d\x5a\x50\x57\x6d\x84\xa1\x8a\xe1\xe4\x57\x4c\xf1\x34\x40\x91\x77\x00\x97\x47\x08\xb8\xa5\x74\xb8\x25\x38\x00\xf0\x37\xeb\x34\xf2\x08\x4e\x30\x16\xa3\xd3\x2d\x62\xf4\xaa\xb8\xe6\x6b\xf9\x58\x71\x8a\x05\x65\x61\x02\x9c\x5f\x37\x03\xc3\x76\x0b\x81\x66\x92\xbb\xa5\x0c\x31\x6b\x9c\xd7\xb4\xfc\x6d\x2c\x54\xcd\xf4\xc1\x56\x1b\x25\x76\xfa\xdc\xd6\x6a\xa7\x78\xf7\x45\x1a\xc3\x91\xc3\xd9\x5a\x48\xbe\x3c\x2c\x4c\x86\xb6\xcf\x70\xc9\xe1\x0c\xef\xbf\xe2\x39\x3f\x94\x7c\xf5\x59\x2e\x75\xce\x25\x4c\xee\xbd\x2f\x6f\x80\x0c\xb7\x59\x1b\x62\x06\x99\x69\x01\x20\xee\x18\xb1\x3a\xb1\x3f\x9f\xe5\xc6\x44\xd6\x4e\x18\x31\xce\x0e\x57\x35\x65\xb2\x38\xaf\xc8\xdd\x2e\x45\xc5\xe7\xfc\x70\x41\x8a\x52\x8b\x8c\x3e\xd5\xa2\xb7\xa8\xe4\xe8\xcc\xe6\x74\xd4\x29\x51\xf5\x5f\x6a\xe2\xda\x15\xaa\xa5\x97\xb0\x69\x91\xb6\xc4\x9e\x56\x1d\x34\xe9\xa4\x1f\x69\x81\x6a\x21\x89\x1f\xe3\xac\x98\x2d\xc8\x37\x6b\x61\x14\xd3\x77\xbb\x55\xe6\xd0\x58\x71\x49\xe7\x45\x0c\x5e\xb6\x6a\x9a\x3f\x65\xfe\xfe\xed\x37\xd1\x5f\x54\x7c\x19\x9d\xb2\xeb\x44\x92\xe5\x14\xa1\xdd\x6c\xe9\xb6\xf9\x4d\xf7\x6b\x78\x7b\xdd\xaa\xfb\xf5\xbb\x84\xa9\xe9\xbf\xe2\x73\xbe\x96\xd3\xfd\x23\xbc\x28\xc4\x1b\xda\xca\x05\xa4\x88\x2d\x60\x9a\xd1\x8a\x6a\x33\xf5\x45\xe1\xf4\x4e\x3d\x95\x85\xad\x82\x02\xbd\x65\x7f\xa3\xd2\xab\x05\xed\xfe\xb9\x28\xa4\xf8\x0e\x9c\x16\x19\xb9\x12\xcf\x01\x11\x6a\x35\x2e\x2d\xc9\x77\xee\x58\xb4\x13\xf7\xb0\x7c\x62\x1e\xb1\xed\x39\x0c\xdb\xb7\xa4\x56\xe9\xf4\x89\x81\x02\xa3\x58\xcb\xc5\x9b\x9a\x5f\x52\x7d\x70\xda\x4b\xe0\x99\xf7\x69\xf2\xc2\xdc\xeb\xb6\x49\x9e\xdf\xc3\x73\xce\x2e\xe8\x1c\x65\x7b\x24\xff\x9f\xd3\xef\xbf\x9b\xac\x8a\x5a\x90\x90\x23\xf2\x4f\x46\x87\xa5\x2b\xa9\x68\xbe\x18\x67\x54\x5f\x97\x81\xb2\x89\xb7\x57\xe3\xa4\x04\xd6\xab\x00\x21\xc4\x5b\xf2\x1b\x3b\xcb\x4b\xeb\x29\x12\x98\x8b\x39\x35\x4e\x49\x21\x66\xff\x44\xf2\x57\xfc\x8a\xd4\xcf\x0b\xa1\x6f\x22\x28\x84\xa8\x0f\x5f\x9c\x67\x6b\xf1\x53\xf1\x71\x7c\xb3\xae\xab\x29\x5a\x48\xb9\x12\xd3\xc7\x8f\x2d\x14\x98\x88\x2f\x0f\xc9\xfa\xf0\x8a\x08\x79\x78\x3c\x29\x96\xc5\xcf\x9c\x15\x57\x42\x5d\x8f\xc7\xea\xc4\x1f\x3b\xfe\x91\x63\xe4\xe9\x86\x18\x06\xa6\xe0\xe9\xec\x3c\x6f\xbe\x52\x1b\x4c\xf9\xaf\x2f\xcf\x90\xe6\xb6\x80\xc7\x02\x65\x8b\xd1\x76\x4c\x43\x95\x80\xf1\x04\x33\x5a\x3c\xa2\x7d\x7d\xe2\xaf\x0a\x67\xe8\xcf\x36\xd4\xac\xbd\x89\x00\x2e\xef\xa4\xb9\x0c\xb4\x51\x81\xf6\x49\xa7\x2c\x09\x85\xde\x62\x7d\x2e\x66\x35\x3d\x27\xbe\xd8\x5b\xf7\x83\x91\x96\x88\x98\x37\xd3\x88\x48\xd4\x87\x71\x4b\x78\xee\xf5\x03\x6c\xd4\x0f\x42\x1b\xce\xe9\x8e\x56\xa0\x36\xfa\x4e\xdb\xf2\x98\x5c\xd3\xbb\xeb\x38\xc3\x01\xd7\x6c\xf7\x21\xfb\xba\xe8\x5d\x3d\xfd\x99\x9e\xf1\x42\xc8\x46\x8f\x69\xd4\xa2\xb0\x19\x1e\x49\x15\x9d\x77\xa2\xc0\x1c\x79\x42\xd5\x61\x02\x68\x43\x9f\x29\x0e\x77\x70\xe7\xe3\x40\x01\x12\x9b\xb7\x36\x30\x14\x13\x2f\xfc\xa3\xd1\xfb\x6b\x39\x69\xa0\xc0\xf2\xa1\x67\xd4\xc2\xa5\x81\xd1\x8d\xc0\x33\xbd\xbd\xf3\x60\x40\x1a\xbb\x48\x7a\x6b\x09\x72\xcc\x85\x8b\xc9\x8c\xb0\xb7\x31\x00\x96\x59\xf6\x95\xce\x1e\x6f\x8c\x46\xa5\x31\x1a\xa5\xec\x82\xa3\xa9\x3b\x2a\xf5\x73\x7c\xa3\x5d\xa0\x15\x58\x5f\x5a\xe7\xc8\x4d\x68\x40\x69\x14\x95\x4d\x3b\xf3\x65\x7b\xd3\xab\xa2\x66\x5e\x3b\xf5\x93\xb2\xf9\xf6\x76\xa0\xd5\x6c\x1a\xea\xdf\xe9\x66\x1b\x4f\x61\xf8\xd3\x7a\xb9\x3a\xe3\x6f\x28\x6b\x64\x6c\xbe\x8f\x21\x98\x9c\xe6\x91\x77\x9e\xce\x50\x11\x8b\xcb\xdb\xee\x6a\xd6\x67\x9d\x90\x0f\xc6\x8d\xcb\x12\x12\x58\xfa\x8e\xdc\xbd\x31\x0e\x11\x96\xb1\x84\x56\x1d\xd3\x83\x8f\xe6\xc9\x91\xc3\xf1\x30\xc3\x9e\x11\x9b\x16\xc2\x69\xb4\xe5\xbd\x20\x0f\xc2\x7a\x86\x4a\x41\xaa\xef\x06\xf7\x09\x42\x54\x07\xc6\x51\x24\xb0\x5d\x08\xb0\x5e\x98\xda\xaa\x63\xd6\x60\x23\x6a\x33\x86\x7d\x43\xab\x4a\x5d\x16\x7f\x6e\x16\x64\x53\x91\xc8\xe6\xd2\xd1\x2b\x30\xb5\x0a\xdd\x9d\x43\x8f\xa0\xec\x01\x62\x60\x5d\x93\xf2\x01\x47\x10\x4b\xb9\x6a\x71\x86\xdb\x02\x2f\x85\x34\x7c\xd2\x54\x74\x08\xdd\xfe\x79\x79\xcb\xf4\x51\xed\xb1\x1d\xed\xde\x80\xdd\x59\x15\x73\x72\x08\xb1\xb5\x3e\x39\xd3\xbc\x4a\x2f\xb9\x99\xe2\x9d\x98\x64\xdd\xfc\x93\x33\xc9\x6e\x91\x8b\xe3\x9e\x55\xda\x69\xee\xb6\x50\xce\xce\x79\x51\x97\x8f\xb5\x63\xe2\xa1\x85\x67\x09\x46\xf5\x57\xbe\xd8\x37\x3b\x71\x8d\x82\xd4\xb4\xa8\x1a\x66\xd3\xd8\x6e\x54\xeb\xb9\xfa\xd7\xa0\x76\xca\xe6\x4e\x6e\xc0\x4a\x52\x07\xce\x42\xad\xfc\x0b\x42\xaa\x4d\x3d\x3e\xbc\xa0\xb5\x90\xa1\x76\xb5\xed\x79\x19\xd7\xc5\x23\xf7\xad\x2a\x5c\xf3\x0f\xe4\x7a\xbd\x1a\x7b\xca\xb7\x21\x63\x5e\x16\xd5\x58\xd1\xbf\x1d\x55\xbd\xee\x75\xcd\x56\x78\x0b\x55\x78\x28\x8c\x16\x6b\x52\x48\x59\x8f\x91\xa8\x67\x08\xa3\xc7\x85\x10\x44\x8a\xc7\x74\x39\x77\xd7\x60\x45\x6a\xc1\xd9\xe1\xbc\x26\x84\x4d\x56\x0a\x2e\xb7\xe2\x60\xdc\xa9\xc3\x9a\x94\xd0\xdd\xa6\x7b\xf7\x18\xf8\x9d\xf3\x8b\x8b\x31\xd2\x76\x60\xea\x07\xb3\x7f\xb7\xcd\x78\x07\xef\x5e\x3b\x3e\x73\xaa\x6a\xb7\xa7\xec\xf0\xbd\x1f\x50\xb3\x7b\x18\x63\x9f\xd0\xdc\x56\x40\xd1\x09\xd5\xff\xc4\xf4\xab\xae\x64\x51\x92\xef\xd7\x9a\x96\xe0\x57\xc1\x26\x19\x1a\xc3\xeb\x4e\x51\xd8\xa9\x41\x8e\x5a\x4b\x34\x03\x3c\x31\x03\x9c\xb0\xce\x4b\xff\xe4\x70\x55\x08\x71\xc5\xeb\x72\xeb\xfb\x68\xaa\x1e\xce\x14\xa2\xaf\x97\xc3\xdf\x44\x30\x8c\xde\x6c\x43\x07\xfd\xe5\xcf\xb7\xb7\x3b\x36\xf9\xfa\x4f\x47\xb7\xb7\x1d\x47\xd5\x6e\xb4\xcb\x62\x74\x03\xad\xe0\xcf\xb2\xe9\x90\xcb\xb0\x0d\xa0\x78\x55\xd3\xc6\x17\xc9\xdb\x71\xbf\x17\xda\x37\xf5\x3b\x01\xc3\x5f\x75\xf2\x9d\xf0\xe5\xc9\xce\xf0\x65\x7f\xe8\x15\xd9\xf9\x06\xde\xed\xd2\x76\x81\x97\xe4\x13\x4c\x19\x0c\x25\xaa\xa7\x0f\xa6\xf3\x06\x04\x6d\x77\x05\x98\xdd\x4f\xa6\x65\x7e\xb4\xad\xc1\x7e\x9e\x0f\xdd\xbf\x41\xbb\x36\xfc\x7e\xf6\x4d\xed\x93\x6f\xe6\x03\xe2\x96\x27\xbd\xb8\x85\x5e\x8c\xf7\x13\xf8\xc5\xc5\x6e\x18\x86\x5e\xbe\xf4\xd0\x8b\xa1\x06\xff\x70\x33\x42\x6e\x57\xa6\x23\xf4\x87\x47\x43\xcf\xf9\xd1\x1f\x10\x1e\x21\x20\x04\xa1\xa5\x9a\x8b\xfa\x05\x25\x0d\x38\xea\xe9\x36\x41\x3c\x40\x6b\x07\x88\x7b\x1b\xc7\x04\xc1\xa3\x3f\xa0\xd1\xe6\x0f\x98\x0f\xbe\xac\x7b\xc4\xf7\x71\x6e\x6c\xdb\x0c\xb8\x1b\x93\x89\xa5\x6f\x9d\x0d\x9b\x6f\x15\x0e\x22\xec\x1b\xdb\xeb\x94\x63\xed\x98\x31\x95\x13\xfd\xef\x66\x8f\xc4\xb2\x02\x5f\xce\x3a\x46\xde\x2f\x5e\x4f\x2d\xbb\x80\xc2\xc4\x28\x57\x94\x95\xfc\x6a\x52\x71\x10\x92\x4d\x16\x35\xb9\xc8\xd1\xe3\xc7\xe8\x51\xab\x84\x0b\xf9\x08\x3d\x16\x8f\xd1\xa3\x66\xe2\x8f\x90\xfe\xa9\x68\xf3\x4d\xb6\xf1\x2f\x55\x47\xc7\x48\xdb\xb1\x0f\x78\x45\xde\x43\xd8\x05\x0a\x6e\x7f\xc0\xc6\x92\x7e\xb8\x9f\x29\xc4\x51\x32\xff\x1c\xd6\x44\xac\x2b\x29\x3e\x1d\xff\xb8\x7b\x7c\x0a\x98\xf2\x9b\x45\x5d\x08\x08\x21\xac\x57\xf2\xbf\x8a\x11\x6c\x79\xda\x7d\x20\xd7\x6a\x1b\x93\x8e\x76\x84\xcd\x78\x49\x7e\x78\x7b\xe2\x26\xe5\x49\xac\x5c\x43\x8d\xb5\x21\x68\xe8\xf4\x46\xc7\xe7\xdc\x3f\xc2\x26\x23\xbf\xe2\xd8\x4c\xfa\x7d\xed\xcd\x21\x66\xaa\x50\x71\xf4\x3a\xf6\xe5\x7d\x9c\xd3\xec\xb9\x64\x58\xe6\xef\xde\x63\x96\xa3\xef\xb8\x5c\x50\x36\x1f\x5d\xf0\x35\x2b\xd1\x1e\xbd\x18\x37\x01\x14\xb2\x1b\x99\xff\x38\x59\x33\xfa\xaf\x6f\xd4\xd9\xf8\xe7\x67\x17\xdb\x96\x61\xba\xa0\xb5\xc7\xb9\x17\x45\x0b\xd5\xe4\x82\xd4\x84\xcd\x08\x9a\x36\x7f\x0b\x84\x85\xae\x27\x5d\x3d\x27\x15\x0c\x42\x4e\x50\xd7\x13\x2e\x5c\xe5\x3d\xe6\x39\x11\x51\x8c\x46\x8d\x12\x88\x63\x34\xa2\xcc\xfb\x50\x04\xc5\xc2\x0f\xe7\xea\x1f\xbc\x7a\xf7\x2d\x43\xe2\x28\xc5\xcc\x9c\xc8\x30\xff\xbf\xbe\x28\x26\x02\xac\x31\x32\xd6\x6e\x57\x3c\xbb\xbd\x8d\x03\x62\x18\x55\x40\x13\x27\x4b\x9e\xf2\x5a\xea\xf8\xa4\x90\x2b\xf4\x2e\xc3\x7e\x5f\x6b\x91\x40\x33\xb2\x68\x8d\x2c\x3a\x47\x76\x51\x45\x78\x2d\xdf\xc2\xf5\x18\xcb\x6c\x83\xfd\xdf\x09\x53\xd1\xe8\xf5\x04\x71\xed\x5b\x3b\x41\x14\xbd\xc8\x34\x9d\x7b\x70\x30\x26\x79\x13\x2f\xd7\x4f\xd1\x3e\xd1\xe2\xe6\x9e\xbd\x75\x81\x75\x31\x9b\x98\xb7\x12\x75\x67\xbe\x0e\xec\xcd\xd5\x56\x1d\x9a\x17\x17\x75\x58\x93\x4b\x2a\x06\x77\x68\xfa\x80\x0e\xd5\x83\x7d\xaa\x3b\xab\xc9\x25\xa9\x05\xb1\x11\x1a\xb6\xf6\x05\xe7\x89\x91\x49\x16\x31\x1d\x58\xbd\x50\xb5\x13\xda\x20\xad\x54\x6a\xa7\x7a\x00\xf3\xcc\x9b\x28\x9e\x07\x60\x7c\x4f\x03\xa5\xd7\x06\x61\x6c\x63\xef\x01\x28\xb2\xbb\x18\xd9\xbc\x9b\x52\xbb\x25\x3a\x31\x9a\xa7\x5a\xb1\xad\x3a\x87\x4a\x75\xd6\x0c\x95\x9a\x48\xd7\x50\xf6\xfb\x1d\x87\xea\x5f\xd5\x51\x18\xa4\x42\xcc\x12\xc3\xa8\xaf\xe9\x29\x83\x24\x39\x9a\xaf\xfe\xd8\xd5\x4b\x6a\x36\xa6\x97\x23\x63\xcd\x0c\x57\xd7\xa5\xcf\xf0\xdf\x75\xcb\x58\x57\x63\xa2\xdd\x6c\x7d\x42\x4c\x7f\xa9\xa3\x95\x7d\x2a\x34\x0f\x93\xe8\x0e\x94\x60\xc3\xbf\x1a\xec\x1e\xe6\x35\xd2\xb4\x0e\x44\x2a\x54\x08\xd6\xe2\x66\xad\xd8\x2b\xe4\x6c\x61\x22\x3a\x69\x0b\xac\xbb\xc5\xcc\x6f\xe8\x84\x66\xe7\x2f\x6c\x10\x20\xaf\x9e\x37\x9c\x5f\xd5\xff\x6c\xeb\x5f\x10\xf5\x5a\x15\x15\x09\x7f\x58\x9b\x73\x37\xfb\x14\xb1\x81\x4b\x3e\x9b\x26\xfb\x85\xc8\x96\x2f\xb8\x82\x1c\x8d\x23\x6b\x5f\xdd\x6f\x69\xa5\x1d\xa7\x8b\x79\x5f\xad\xb3\x62\x8e\x32\x6c\x8c\x56\xfb\x2a\x5a\x23\x8a\x0c\x8b\x8a\x77\x75\xa9\x8a\x50\xa6\x68\x79\xbb\xa6\xbc\xf9\xd3\xc4\x7a\xc4\x47\xfb\xfe\x47\x2f\x87\x4a\xc9\x67\xb7\xb7\x64\x22\x8b\xb9\xfa\xc7\xcc\x49\xfd\xd9\x2c\x38\x7b\xea\xab\xde\xcc\x9d\x32\x29\x41\x3b\xfc\x19\x1d\x89\x4b\xb2\x8d\x1f\x12\xd4\x7d\x0f\x83\x81\x06\xc0\xd7\x84\x2b\x4d\x1d\x95\x8d\x76\x69\xa4\x26\x5f\x7a\xb9\x8c\xbc\xfb\xaa\x01\x81\xef\x85\x14\x96\x1d\x85\x97\x65\xf7\x17\xae\x27\xfb\xb8\xa0\xb5\x56\x95\x3d\x96\xd7\x2b\xa2\x93\xc0\xf2\x4f\x68\x2c\xaa\x1d\x27\x10\xea\x7a\x8a\x80\xf2\x0a\x59\x04\x2f\x88\xc8\x62\x52\x17\x57\xdf\xf0\xf2\x1a\x05\xc7\x40\xc5\x0b\xaa\xe6\x97\x08\x90\x11\x36\x0a\x82\x81\xe9\xfe\x41\x6f\x5b\xb0\x19\x09\xdd\x05\xed\x47\xed\x57\x82\x39\x7b\xe6\xb6\x26\x26\x9e\x56\x6d\xa2\x49\x0d\xaa\x3d\x83\xc0\x61\x4c\x87\x83\xc7\x44\xd1\x11\x70\xab\xcc\x74\x70\x3c\x97\xd0\xb3\x05\x86\x44\xd9\x58\x62\xf6\x30\xa7\x5e\x6b\xbd\xd1\xa7\xf4\x03\xb8\xd3\x22\xce\x0b\x61\x6f\xec\x21\x65\x15\x65\x43\x53\x91\x76\x05\x3d\xfa\xec\x72\x91\x9e\xaf\x85\x4e\xad\xb0\xe4\x6b\x41\x64\x5d\xac\x4c\x9e\x9c\x05\xbf\x7a\x45\xd9\x07\xed\x5e\xa7\xca\x07\xa4\x13\x54\xd7\xd1\x66\x20\xd0\xa6\x9a\x44\xcc\xb6\xd6\x27\x1f\x67\xa4\x5e\x29\xc0\xad\x7e\x9e\x94\xed\x00\x3f\x3a\x4a\x63\x4f\xe8\x65\x78\x05\xc6\xa1\x5c\xff\xb2\x27\xd6\x38\x8c\x69\x77\xd4\x0c\xaf\x14\x1d\x4e\xae\x20\xfd\xcf\x1b\xf8\x81\xf4\xc0\x67\xd6\x16\xe7\x6e\x18\xda\x75\xe1\xbf\x2c\x7f\x3f\x6c\x80\x46\xa3\x3d\xdd\xc6\x6a\x5b\xba\x4a\x75\x64\x2c\xe5\xbe\xb9\x3e\x29\x15\x56\xd1\xdb\xe0\x56\xf8\x28\xb0\x41\x05\x0f\x96\x13\xe0\x1c\x7c\xa8\x60\x0f\xd7\xe7\xa6\x58\xa6\x83\x25\x32\x72\x35\x7a\x6d\xcb\x8d\x6b\xdd\xb9\xc2\x57\x48\x93\x83\xe3\x2c\xff\x7a\x1c\xb0\x7c\x16\x3a\x29\xdc\xe1\x2a\xbf\x43\x33\x59\x57\x8f\xd4\x9b\x98\xf1\xe5\xb2\x60\xe5\x23\xf5\xc0\xdb\xad\x2d\x68\x81\xd6\x1e\xed\xe2\xa6\x88\x59\x5b\x72\xeb\xaf\x13\xee\x09\xca\xac\xac\xaa\x53\x03\xa6\x9a\x64\x13\xb0\xa9\x86\x18\xdf\x77\xb1\x3f\x74\x59\x15\xdc\x73\x48\x67\x67\x4e\xee\x31\x01\xc5\xe1\x9a\x35\x3b\xaa\x5e\xad\xf9\x9d\xde\xb4\x08\xcd\x3f\xf3\x24\xc7\x9e\x23\xc7\x5a\xe8\x60\xef\x8d\x99\x57\xb8\x41\x67\xe6\xda\xd9\x4c\x04\x41\xe3\x81\x56\x85\xb6\x6d\x1a\x33\x24\x87\x0b\x50\x5a\xbc\x43\x06\x57\xa2\x6c\x4f\x81\x98\xfd\x3c\x27\xe3\xec\xe0\x80\x8c\x0d\xd5\xe4\x3b\x4b\x96\x54\xcc\x8a\xba\x04\x2f\xbb\xc3\xf8\xf4\xc1\x03\xb2\x71\x9e\x9c\x76\x23\xcf\x17\xd0\x51\x32\xb3\xff\x80\x41\x42\xb4\x18\x76\x6d\xe0\x47\x0a\x22\x35\x60\x06\x85\x09\x63\x44\x5c\x8c\x1d\x18\xca\xf3\x9c\x3c\x45\x2f\x4b\x2a\x47\xaf\x79\x49\x50\x03\xa0\xc2\x49\xb8\xaf\x4d\x02\x0d\x77\x33\x5b\x99\x40\xfc\x3b\x0b\x51\xe4\xc1\xb4\x58\x7d\xf7\xe4\x6f\x7d\x17\x3d\x18\xbc\x69\x8d\xb2\x71\xcb\xbd\x63\x5b\x76\xe2\x04\x56\xfd\xcd\x78\x76\xcc\xf4\xd9\x9b\xdc\xb3\xfa\x06\xd9\xe4\xd9\xe6\xdb\x69\x71\x49\x10\xb6\xe8\xf4\x97\x47\x97\x69\x63\x9c\x3d\x07\xca\x7d\x20\x9e\x10\x2f\xa7\xc0\xf9\x26\xc3\x51\xf3\x0e\xb0\xde\xd7\x9f\x07\xe0\x13\x1a\x65\x8d\x9e\xcd\xa2\x77\xd0\xdc\x01\x56\xb7\x6b\xdf\xb5\xa1\x1d\x6f\x47\x7c\xb1\x6d\x16\x3b\xa3\x1f\xdf\x35\xef\xa1\x81\x24\x7a\x60\x78\x88\xfa\x40\x5f\x1f\x4e\xf2\x30\x4e\x17\x72\x72\x44\x91\x8d\xe3\x91\x52\x36\x05\x27\xd7\x1f\x0e\x3f\xc4\x6e\x8b\x42\xbc\xb4\x67\x74\x70\xd0\x39\x07\x77\x8e\xdb\x67\xd1\x1c\xf9\x96\x79\x0c\xc0\x94\x0d\x41\xb8\x9b\x59\x6d\x00\x3b\x7f\xa3\xdc\xd4\x8c\x97\x9f\x89\x10\xc0\xbc\x32\x1d\xba\xb1\x98\x13\xc5\x13\x43\x70\xd2\x92\x9c\x5e\x33\x59\x7c\x04\x2e\x48\xfd\x7e\xa9\xa7\x0a\xbf\x61\xda\xf7\x67\x52\x54\xbf\x9d\x4c\x8a\xd0\x13\x78\xd8\x41\xa0\xcf\xf6\x58\x03\x63\xcc\xeb\xd6\x26\x88\x64\xfe\xee\x7d\x57\xdc\xbe\x50\xe2\xe1\x32\xad\xa0\xbf\x3c\x5e\xd5\xe4\x6b\x08\x57\xc3\xf2\xb1\xcc\xa5\x2b\xfb\xc3\x5f\x56\x35\x19\x69\xcb\xdc\x1c\x66\xbc\xa4\x0a\x07\x8e\x66\xcb\x43\x71\x28\x78\x55\xe8\x98\xdb\xf0\xb3\x2c\xea\x0f\x68\x54\x16\xb2\x38\xac\x0a\x36\xcf\xd1\x1f\x54\x97\x99\x4b\x65\xf2\x07\xf4\xf5\x1f\x74\x5e\xac\x25\x2f\x8d\xab\xd6\x92\x7e\x24\x25\x82\xd4\x85\xe8\x6f\x67\xaf\x5f\xa1\xcd\x57\x87\xc7\xfb\x10\x29\x9e\xe7\x52\xbb\x31\xe9\xfc\xbc\xe3\x23\x9d\x6c\x3c\xf8\xc4\x1e\x3d\xc9\x62\x36\xcf\xc8\x4f\xac\xa2\xed\xdd\xfb\xbd\x1f\x27\xa4\x98\x2d\xc6\x3f\x5a\x6d\xcf\x73\x5e\x92\xd7\x7a\x15\x0a\xbe\x92\x13\x76\xc1\xad\xca\x09\x27\x6c\x0e\xf4\x64\xa5\xae\x0a\xf3\x84\x20\x74\x9b\x3d\x11\xa6\x8e\xc4\x50\x27\xcf\x73\x6e\x32\x64\x8e\x51\x73\x61\x21\xc7\x9d\xcf\xb2\xf8\x87\xa6\xf5\x73\x89\x40\x8e\x5e\xfb\x2c\xf3\xd3\xac\xfa\x1d\x0b\x97\x34\x48\x8d\x8f\xb0\xb7\xb1\x59\xda\x5f\x4d\x3d\x3e\x92\x7b\xfb\x70\x51\xf3\xa5\xa2\x77\x9f\xd5\xa4\x18\x77\x31\xb7\xcd\xb4\xec\x3b\x53\x04\xf8\x8d\x5c\x10\x75\x78\xcb\x42\x82\x85\x0a\xae\x28\x23\xdf\xad\x75\x48\xf9\xe9\xfe\x91\xfe\xf9\xcf\xba\x58\xad\xb4\x95\xf2\x11\x56\xb7\x81\xc9\x1f\x18\x95\xd3\x3f\x62\x59\x9c\x9f\xd2\x9f\xc9\xf4\x8f\x18\x80\x85\x8e\x1e\x5b\xcc\x5f\xd4\x7c\x35\x55\x04\xca\x9e\x37\x49\x43\xe1\x08\x9d\x6a\x2a\xf7\xde\x59\x43\x14\xc9\x9a\xce\xe7\xa4\x1e\x5b\xb2\x28\xdb\xb4\x32\x7a\xfb\x5b\xba\x17\xfb\x31\xdd\xde\xfa\xb7\xa3\x58\x4b\xfe\x8a\x17\xa5\xa2\xf7\x15\x45\xab\xcf\xd7\x58\x1c\xc1\xc1\xd9\x2d\x37\x45\x41\xa0\x6f\x07\x9b\x20\x95\x79\x92\xb7\x6d\xfb\xa9\xba\x46\x6d\x2e\x55\x72\x77\x44\x19\x26\xb9\x86\x78\xe9\xf1\x6c\xa0\xd0\x39\x91\x6f\xde\xbe\xec\x18\x07\x36\x41\x4f\x3c\xce\x1f\xe1\xcd\x42\x7d\x79\xc1\x67\x63\xfd\xc7\x3f\xd4\x19\x8d\x2d\x04\xbb\x27\x6c\x68\x62\x20\x69\xb8\xe0\x42\x81\x62\x0b\x8f\x22\x71\xba\x9e\x2e\x78\x04\xa6\x84\xad\xc1\xd6\x75\x1d\xa2\xc4\xc4\x1c\xa2\x6c\x1f\xa2\x2b\x72\x7b\x6a\x89\xbd\x48\xab\xe7\x3f\x3e\x75\xb4\x3d\x42\x66\x47\x2e\xde\xde\xee\x1f\x07\xa9\x94\xd3\x9b\x4c\xc5\xf3\x8a\x14\x6c\xfc\x4b\x0a\x9f\xbb\x64\xcd\xfa\xaa\x98\x9d\xf1\x65\xd3\xe6\xc3\xb9\xae\x6c\xd2\xba\x35\xc2\xf6\x07\x17\x4c\x37\x54\xc8\xa7\x27\xa3\xd4\x5c\x12\xc4\x87\x8f\xba\xee\x1c\xac\x61\x47\x29\x4f\x9a\x98\x30\x94\x7d\x37\x42\x7f\x48\x4c\x8e\x65\x4e\x42\x64\x0e\xb8\x5a\x06\x09\xd7\x82\xd7\x11\xe0\x6f\xd9\x02\x90\x70\x01\xfd\x5a\x52\xa1\x74\x85\x0b\x87\xe3\x6c\x9b\xcd\x46\x1a\x5c\x4d\x3c\x5c\x4d\x0c\xae\x26\x16\x37\xa7\x11\x41\x17\x6a\x95\x5d\xb1\xaa\x7f\xcd\x33\xc6\x32\x07\xb1\x79\x40\x1e\x62\x74\x38\xd3\xa0\xdb\xd8\x97\xee\x8c\xcd\x7f\x59\xd4\x8d\x6b\x52\x94\xdf\xb3\xea\x5a\xbf\xbb\x96\xb1\x55\x0f\x16\xe6\x7d\x58\x98\x61\x6e\xa0\x34\x6b\x03\x70\xde\x8f\x85\xd9\xce\x12\xe6\x44\x1c\x89\xdd\xf0\x73\xe7\x54\x54\xd9\xdd\xc0\xe3\x45\xc5\xaf\x66\x8b\xa2\x96\x9f\x07\xa7\xb6\x35\xaa\x89\x9e\x49\x9f\xe9\x86\x95\x47\x79\x3c\xdf\x55\x41\xa5\xf3\x69\x2b\xe6\x75\xb1\x04\xd5\x8f\xfe\xf3\xff\x5e\xbf\xd2\x09\x09\xac\x46\x48\x5d\xb4\xeb\x33\x7e\x5a\x40\x72\x71\x23\xbd\xfd\x46\x47\x0b\x7f\x5e\xac\x20\x36\xb8\x53\x26\xa9\xed\x7b\x5e\x54\xd5\x79\x31\xfb\xf0\xb0\x4c\xa3\x3b\x98\x4e\xce\xf1\x6e\xba\x2b\xb3\x19\xb1\x51\x90\xd9\x8d\x1e\x35\xb8\x1f\x99\x74\xbb\xee\x6b\x78\x4c\x8b\x61\x81\x35\xed\xe0\xeb\x15\x5c\xfa\xbb\x6b\x78\x24\x29\xea\x92\x5f\x31\xd7\x0f\x0e\xba\xbd\x09\xb8\x5d\x9f\x81\xd3\x56\xae\x29\x38\x1c\x7f\xf5\x81\xb0\x16\x33\x8d\x82\xa8\xe6\x65\x5d\x5c\x4d\x28\x1f\xb9\xd7\x38\x2a\x9b\xde\x6c\xf2\x51\xe9\x87\x60\xdc\xde\x17\xe3\x23\x1d\xf6\x62\x04\xfa\x7d\x13\xa3\xa5\x0b\x58\x93\x16\xdf\x65\x04\xe3\x5e\x64\x19\x98\x40\x66\x33\x77\x71\x08\xab\xe1\x42\x31\x50\x89\xa6\x2e\x06\xfe\x3f\xc1\x20\x7d\xc5\x85\xb4\x19\x4d\x75\x4f\x80\x84\xe9\xc5\xf5\xf8\x06\x48\xef\x29\xaa\x78\x51\x22\x1d\x6b\x5e\xb1\x5d\xd3\x63\xfc\x71\x59\xad\xd8\xdc\xa6\xb5\xb0\xd7\x50\xdd\x6f\xf4\x1f\x51\x2e\xac\xe2\x92\xa0\x29\x09\xee\xeb\xff\xbd\x7e\xa5\x00\xf5\xc7\x65\xa5\x40\x0d\x65\x97\xfc\x03\xb1\x81\x35\x03\x13\x3b\x33\x60\x4f\xfb\x20\x03\x95\x9a\xe5\xd4\x8f\xe9\xf0\x51\x2d\x18\xc4\xde\x86\x48\xf6\x88\xe7\x20\xfa\x83\x1e\x3d\x1e\x47\x0d\xa2\xf7\xd3\x3a\x98\x78\x60\xc6\x18\xe1\xed\x19\xb3\xfe\xa2\x2c\x5f\x5e\xea\xe4\x96\x42\x12\xa6\xb8\xcf\xa5\xcb\x36\x1b\xe4\xbc\xf7\x40\x8f\x26\x2d\x70\x7c\xb3\xad\xa3\x00\xc8\xcf\x3b\x3b\x6d\x8c\xcc\xfc\x1e\xd5\x3b\x0e\xf7\xf3\xa6\x43\xc6\xeb\x6d\x65\x28\x5d\x1d\xf9\xf6\x4d\xe1\x72\xf7\x76\x92\x0a\xdc\xe1\x9e\x99\x63\xc0\x17\xbc\x5e\x16\x72\x8a\xe0\x9a\x21\x75\xdd\xa6\xe9\xa9\x63\xb1\xa2\x6c\x8a\x74\x46\x2f\xf5\x82\xcd\x0d\xdc\xe0\x39\x20\x03\x80\x53\xfc\x5c\xe1\x1a\xb5\x81\xc1\x92\x42\x97\x9f\x66\x00\xbf\x52\x22\x30\x87\xa3\xc8\x62\xae\x2a\x60\xb4\xdc\xa3\xd8\xf3\xc3\x7c\x68\x75\x7e\x0f\xb4\x8e\xd8\x32\xe6\xae\x5e\x0b\x7a\x5b\xc0\xdd\x8b\x25\x62\x96\x4c\xe7\x72\xd8\x64\x83\x6c\xa3\x3c\xb6\x35\xb1\xaa\xc0\x56\x2a\x5c\x46\x9b\x6d\x8d\xef\xf8\x76\xb5\x05\xf1\xb5\xa4\xcd\xba\x8e\x12\x08\xcd\x72\xeb\xe1\xbd\xbf\x23\xe3\x19\x51\x56\x9f\x9e\xfb\xbc\xd3\x2a\xe6\x64\x49\x19\xed\x22\x0e\x7b\x74\xb8\x96\x12\xfb\x94\x5a\x5c\x4b\x2e\xf6\xc6\x46\xd8\x46\x32\x06\x11\xb6\x86\x84\x8b\x83\x3b\xb4\x16\xa4\xce\x6f\x4c\x1a\xa9\x2b\x5e\x7f\x80\x2c\x4e\x4d\xca\x29\x1d\xc2\x25\xbf\x49\x26\x8e\x32\xe6\xb9\x9b\x3d\x59\x5f\xdf\x04\x01\xdf\xa2\x97\x32\x33\x51\xe1\xb2\xcd\xac\x50\x68\x9a\x65\x37\x9b\x06\x48\x90\x4c\x3b\x26\xdc\x3c\x7b\x73\xf2\x77\xa2\xa5\x0e\x60\x47\x3c\xbd\xd9\x60\x2a\xc9\x52\xe7\x54\x9d\x1e\xe9\x5c\x35\x08\x61\x35\xe5\x93\x52\xfd\x16\xa4\x66\x26\x53\x97\x9b\xba\x2e\x71\xbf\x6c\xda\xab\x90\x25\xd1\x93\xc1\x24\xf3\xc4\xa4\xd6\x38\xb1\xfd\xf2\x8c\xdd\xac\x7f\x44\x28\x33\xd6\xa7\x2d\x10\xa9\x2a\xd6\x44\x06\x46\xd1\x6e\xf1\x91\x83\x9f\x7a\xf1\x29\x30\xe6\xcf\x72\x02\x7b\x82\x30\x99\x14\x2b\xfa\x81\x5c\xc7\xe5\xeb\xba\x52\x85\xeb\xba\x6a\x95\x98\xdd\xd1\xc5\xe6\xef\xcc\xf5\xe3\x25\x42\xd7\xad\xc3\xdf\xa6\xba\xf7\x51\x1a\x55\xba\xce\x8f\xe8\xfb\xf9\x75\xae\x62\x1e\xcd\x45\xa1\xc8\x44\x4f\x20\xb0\xfd\xa7\xbb\x79\x9d\x1c\x07\xb6\x07\xd5\x03\x25\xfb\xce\x8a\x60\xe4\xae\xc5\xc0\xe3\x31\x21\x04\x83\xa5\x78\x17\x0d\x29\x48\xd5\x6c\xd1\x51\x93\xea\xf7\xdd\xd1\xfb\xc9\x49\x19\x9f\x88\xdf\x54\xab\x75\xcc\x32\xdc\xda\x9d\xe0\xb1\x22\xb3\x66\x4b\xc6\x6c\x28\xf7\x61\x08\x29\x17\x45\xf7\xc8\x25\xbf\x99\x9c\xf3\xf2\xda\x14\xfc\x8d\xd0\xf9\x02\x32\x1c\xb5\x0f\x2e\x7d\xb2\xde\x0c\xdf\xbd\x4f\xb7\x83\x73\x3c\x91\x64\xf9\x8b\x1e\xa1\x82\x07\xc3\x5f\x57\x52\x1c\x95\x62\x83\x6e\x6f\xc7\x66\x51\x66\x00\x12\x1f\x9e\x03\x44\x4d\x16\xe6\xe4\x46\xb4\x76\xf0\xee\x73\xe8\xd8\x6a\xbd\xd7\xf1\x1d\x09\x64\xe1\x01\x59\xe6\x1d\x5e\xb6\xd7\x64\xe8\x75\x93\x64\x36\x69\x84\x1a\x88\x61\x2f\x9f\x0a\x9b\x9c\x94\x79\x9e\x6b\xb1\x13\xfc\x75\x70\x30\x0e\x77\xc5\x38\x7c\x60\x36\x01\x6f\x86\xde\x2b\xdf\xda\xd3\x00\x4c\xab\x4e\xb4\xc5\x5e\x94\x1e\xdb\xbf\x7c\xac\xb9\x24\xe6\xa6\x0d\xb3\x7a\x77\x94\xdd\x46\xe3\xc9\x6e\x26\xc1\x83\xaa\xfd\x26\x18\x40\x70\x1c\xea\x8a\x03\x0c\x41\xfa\xc6\xb2\x70\x7a\xd8\x80\xae\xf6\xfd\x46\x35\x78\x65\xd0\x98\x80\x31\x06\x1a\x9a\xb4\x90\x53\x7a\x73\x8d\x2b\x48\x1b\x2f\x7b\x78\xab\x67\xab\xba\x9b\x5b\x84\xd9\xb9\x62\xdb\x34\x15\x2e\xd7\x4d\x0f\x44\xfc\x8d\xdc\x1f\x3d\x6e\x9e\xfd\xe1\x71\x24\x39\xf7\x11\xb1\x2f\xf9\xf7\x1a\xb4\xc3\xd1\x1a\x88\xc8\xef\x07\x11\x19\x06\x3c\x3a\x0c\x20\x72\x18\x22\x0c\xc6\xaa\x07\x32\x25\x6b\x61\x52\x37\xf3\xd6\x91\x40\xd6\xb2\x6f\x0a\x41\x5e\x32\x49\xe5\xf5\x84\x96\xae\x5a\x80\xf9\xf9\x24\xc2\xe7\x21\x40\xec\x98\xc3\x71\x34\x07\x90\x23\xa7\xa7\x71\x94\x1c\x18\xd2\x95\xb8\x81\x1b\x9d\x69\xbf\x66\x33\x06\xa3\x9f\xd2\xff\x25\x92\x12\x78\xf0\x4b\x23\x84\x2c\x73\x4d\x2c\x0d\xdb\xd9\xc2\xdd\x02\xd7\x44\xf1\x1d\x35\x2b\xaa\x53\xbe\xae\x67\x24\xbe\x5f\xfd\x5a\xcc\xa1\x76\x60\x3e\x1b\xf6\x5b\xe5\x24\xa9\x5c\xac\xcf\xef\xc0\x49\x3a\x27\x9a\xe1\x4c\xe6\xaf\xe0\x5e\xd3\x38\xd5\x3c\x08\xc3\x69\x2d\x89\x5b\xdc\x26\xbf\x62\xa4\x16\xbb\xe4\x3e\x1e\xc0\x59\xb6\x6c\xb9\xe0\x6d\x7d\x15\x47\xe2\x8d\x41\xf8\xac\xa2\x26\x60\x43\x2b\x56\x40\xbb\xae\x91\x24\xfe\x00\x28\x5f\xb1\x3f\xbd\x1c\x1f\x76\x6f\xef\x66\x13\x83\x58\x06\x13\xe7\x8a\x25\xe6\xf9\x8d\x9d\xc6\x94\xd9\x19\xbd\xc0\xde\x70\x53\x08\x8b\xed\x72\xb9\x5a\x99\xe6\x0f\x6f\x5f\xc1\x76\xc2\x6e\xea\x3f\x7f\xb4\x7c\x6e\x45\x85\x14\xd3\x77\xef\xf1\x79\x5d\xb0\xd9\xe2\x94\xb2\x99\xfe\x0e\x3f\x5f\x51\x46\xc4\x14\x1d\x1f\x1d\x39\x36\x19\x21\xeb\xc3\xe4\x65\x4f\xd2\x9e\x54\xaf\x69\x45\x84\xe4\xaa\xc5\xfe\xb1\xfe\x72\x22\xc4\xba\xf9\xf5\x9c\x2f\x97\x54\x0a\x75\xeb\x34\x83\x0f\x80\xce\x8f\xea\x9e\xe2\xf0\xf7\xf8\x44\xcf\x38\x97\xf0\x2f\xe6\x13\x3d\xe7\x5c\xc2\xbf\x98\x4f\xbc\xa9\xe7\xd2\xff\x85\xb9\x81\xf1\xb9\x34\x7f\x60\x3e\x81\xd9\xe7\xd2\xfc\xa1\x40\x7f\x30\xf9\x5c\x46\x1f\x4c\x0d\x58\x8c\x29\x85\x1f\xa6\xc4\x2c\xcc\x14\x99\x5f\x46\x32\x41\x8d\x64\xc2\xd3\xcc\xfa\xb5\xb2\x83\x83\xf0\x43\xae\xc0\x28\x09\x81\x32\x8f\xbe\x98\x99\x23\xec\xe7\xaf\x32\x96\x7a\x71\x90\x1c\x70\xd0\x55\xc4\x9b\xc8\x45\x63\xdb\xf0\x54\x2b\xf2\x15\x3c\x02\x83\xc5\x76\x00\x8c\x56\x7c\x0c\x20\xfc\xd4\x2f\x84\xf2\x3c\x17\x99\xdd\x5c\x4d\xd8\x98\x3b\x1e\xe6\x0a\x0e\x73\x04\xab\xda\xda\xdf\xe4\xe0\x60\x1c\x68\x73\x00\x44\x8e\x54\xed\xd1\x55\xcd\xd9\x7c\xa4\xaa\x8e\x4e\x5e\x60\x13\x0b\x5b\xb3\x33\xd1\x1e\x34\x34\xc4\x2e\x43\x67\x4d\xb6\xbd\xee\xf7\xb8\x20\xb3\x0f\xcf\x34\x15\x44\xfa\x49\xa0\x26\xcf\xae\x1a\xee\x54\x16\x73\xf2\x24\x10\x66\xc8\x30\xb3\xaf\x84\x45\xf8\xd2\x8a\x3d\x17\x4b\x9a\xf9\xe7\x73\x30\x53\xe7\xa3\xcf\x66\x6f\xeb\x84\x45\x71\x49\x4e\xb5\x9c\x08\xe1\x1b\x9d\x89\x79\xca\x5a\xb0\xe4\x01\xe6\xba\xd9\x74\xe6\x2c\x26\x96\x61\xff\x5e\xbd\xd1\x57\xea\x61\x06\x6e\x3a\xda\x6a\x5e\x6b\x40\x62\x2a\x19\x00\x7d\x44\xe0\x98\x33\xd6\x65\xa1\x37\x5f\x0c\x7f\x59\xf6\x94\x34\xfe\xeb\x20\x2a\x69\x13\xf1\xd0\x11\x66\x99\xef\x7c\x1e\x96\x11\x67\xff\x49\x35\xab\x4a\xcb\x80\x1b\x70\x3d\x38\x1a\xe7\xfb\x7a\xfe\x96\xac\xb8\x30\x8b\xc5\x5d\x78\x41\x61\xaf\x17\x85\x24\x67\x74\x49\xde\x98\x54\x99\x3a\x61\x81\x4b\xf7\x50\x16\x92\x48\xba\x24\x90\x48\x53\x8d\xf7\x8a\xcf\x8a\x8a\x8c\x11\x61\x09\x6f\x0f\x00\x70\x87\x42\x41\x38\x94\x45\xad\x83\x70\xde\x89\xa1\x31\x7a\x01\x29\xcd\xe1\xb4\xc2\x35\x6c\x39\xb0\x04\xea\xdc\xdb\x2e\xd2\xc4\x88\xd7\xf3\x5a\x8d\xb2\xf5\x3d\x39\x73\x61\x2f\x1c\xc0\x9e\x0c\x72\xb7\x32\xdf\x5c\x18\xaa\x19\x8a\x07\x82\x90\x8c\x35\xbb\x6f\x2c\x65\x82\xe1\x00\x5d\x80\xaa\x59\x21\x42\x30\x31\x1e\xf3\xfc\xdd\x7b\x45\xd3\x36\x71\x9c\x60\xc1\xfb\x47\x29\xe1\x86\x9b\xe1\xfe\x31\xd0\x49\x29\xb3\x1b\x91\xf3\xe0\x32\x49\xb8\x4c\x6d\x18\x3b\x56\x6f\xde\xca\x47\x30\xc9\xad\xb8\x16\x3e\xe8\x30\x62\x44\xdd\xea\x77\x47\xef\x9b\xaf\xfb\x47\xd9\x26\x04\x85\xb0\x30\x4f\xd5\x65\x0e\xef\x38\x7a\xde\x71\xa9\xad\x9e\xe0\x9d\x42\x48\xb0\xb9\x9b\x58\x04\x80\x4c\xe8\xb9\xf5\x20\x40\xbc\x6b\xe2\x47\xf1\x0e\x1c\x65\x2d\xcb\x65\x73\x6f\xb7\x02\x55\x03\x97\x06\x5c\xd9\xae\x6d\xb5\x3d\x48\x83\x73\x7c\xd0\xf8\x20\x07\x83\x7e\xd0\x99\x6f\x46\x92\x8f\xf4\xb4\x47\x0e\x96\x26\x8e\x0f\xc4\x54\x89\x07\xee\xc1\x8b\xf6\x78\xe6\xf5\xbb\x34\x34\x80\xaa\x75\xb6\x99\x8a\xcf\x29\x7b\xcc\x55\x9b\xc7\x96\xee\x24\x4f\x81\x30\xfd\x91\x96\x79\xe4\xb5\x1d\xd2\xd1\x8f\xd0\x81\x98\xf1\x15\xc9\x15\x60\x38\xa8\x49\x49\x6b\x32\x93\x3f\xae\x6b\x9a\xa3\x47\xbd\x51\xe1\x92\x64\xb6\xea\x4e\x16\x92\xa4\x1b\xa7\x02\x07\x66\x7b\xc9\x70\x82\x44\xf1\xe2\xfa\xa0\x86\xf2\xfb\x6d\x44\x92\x28\x32\x2f\x54\x0b\x60\x2d\xfa\x08\x6e\x03\x87\x74\xee\xa9\x41\x4d\x17\x7a\x7d\x60\x29\xbd\xa3\x40\xa1\x0b\xa8\x27\x64\xbb\x81\x10\x29\x65\xee\xdc\xc8\x1a\x78\x24\x6b\x50\x54\x24\xdf\x5d\x98\xc0\x87\x08\x13\xba\x85\x55\x2e\x19\xe5\x2e\xf2\xaa\x2e\xf9\x08\x69\xec\x07\x9a\xa7\x28\x75\x8c\x61\x31\x71\x3b\xaa\xb8\xec\xa4\x56\x63\x5b\x9b\xbb\x3a\x12\xfb\x12\x84\xdf\xa8\x10\xe4\x27\x5a\x17\xdd\x22\x90\x61\xe2\x8d\x5f\x33\x57\xc6\x2f\xa4\x41\xd7\x4c\xe3\x5f\x6b\xaa\xb9\x68\xf8\xa5\x20\xc0\x2e\x52\x8e\x40\xbf\x0e\xda\x92\x81\xca\xf5\xce\x8e\xf7\xee\xac\x76\x97\x49\xb5\xfb\x4f\xff\xd2\x6a\x75\x4f\xd3\xde\xa1\x2e\x4f\x1a\xde\xdc\x4d\x4d\xbe\x45\x68\x1d\x46\xa3\x4a\x90\x0d\xfd\x26\x40\x8c\xd4\x85\x24\x2e\x14\xc2\x06\xf7\xf7\x77\xdc\xd5\x1f\xf0\x48\x51\x6f\xbd\x66\x3a\xbb\xed\x82\xb1\xda\x05\xe1\xc4\xe0\xed\x68\x2e\x62\x74\x28\x3b\xef\x53\xe7\x5c\xcf\xc8\x47\xd9\x3d\x5f\xf5\x22\x76\x9c\x2d\x34\x21\xe6\x28\x42\x4e\x14\xa7\x2b\x23\x30\x0e\x18\x50\x1f\xb6\xc2\x21\xeb\xdd\xcf\x78\x47\x5a\xd9\x8f\xb2\xd1\x75\xe3\x3e\x47\x25\x42\xb3\x59\x9f\x4e\x93\xb0\x3d\xd4\x72\x8c\x81\x7e\xa3\x28\x74\x59\xd4\x1f\x4a\x7e\xc5\x3e\x0f\x87\x85\x8a\xb2\x0f\x9d\x79\x54\x3d\x5f\x73\xf5\xb7\xb9\xc5\xea\xa7\x9a\xf6\x6b\x5e\x42\x00\xe7\x5f\xc9\x0d\xdd\x6e\xdc\xb6\x78\x59\x0f\x38\x92\xe9\x71\x77\x4f\x74\x83\x8a\xbb\x44\x49\xf0\x64\xb3\xa7\x08\x4d\x65\x87\xe9\xa8\xd1\x46\x7b\x0a\xe0\xc6\x9d\x9b\xf4\xf8\x28\x40\x78\xc7\xc6\x39\x60\x77\x47\xdb\xe6\xb3\x3d\x65\x2d\xe9\xbd\x83\x47\x0f\x9e\x13\xa9\x66\x9c\x02\x9b\xdb\xbc\x6a\xcd\xfa\x37\x38\x5c\xd0\x2f\xe2\xac\x6d\x5e\x0c\xc2\xe0\x89\x6f\x8f\x3f\x72\x00\x3b\xbe\x97\x03\x18\xf9\x28\xeb\xe2\xef\xe4\x5a\x4c\x6f\x5e\x32\x49\xea\x29\x62\xe4\x4a\x75\xf8\x8c\x95\x27\xba\x9f\xe7\x9c\x49\xca\xd6\xe4\xb5\x19\x5e\x03\xe4\xcd\x03\x38\x7d\x77\xba\x61\x3f\xa0\x37\x78\xb3\x69\x49\x8f\x70\xaf\x38\xf4\x63\x4e\x51\x4f\xee\xda\xe1\xfd\xd4\x5d\x1c\x6a\xf4\x16\x18\xb2\x7b\xcd\x13\xcf\x04\x84\xf7\xa9\xa7\x66\x7b\x80\x6b\x6c\xdf\xb5\x11\x39\xd8\x45\x51\x09\x80\x94\x5e\x5c\xeb\x8c\xd2\x72\x59\x69\x60\x3c\x01\x14\x35\x8e\x3b\x09\x07\x72\xce\x58\x26\xa3\x6e\x1c\xf5\xaa\x15\x84\x5c\xc7\xb3\x9a\x9c\xaf\x69\x55\x9a\x3a\x7b\x03\x9f\x97\x51\x4b\x9c\x6a\x11\x24\xc8\xac\xf0\xfe\x51\xdb\x65\xfb\xb3\x71\xce\x1e\x1c\x19\xd4\x6c\xed\x83\xbb\x5f\x87\xd8\xfa\x37\x4a\x72\xac\x0a\x35\x8d\xba\xa0\xd5\x70\xde\xfd\x0e\x56\x0b\xbf\xa2\x69\xfc\x2f\xcf\xe2\xef\x66\xaa\x60\xfc\x2e\x24\x59\x8a\x87\x36\x89\x4f\xf3\xe6\xcf\xde\x9c\x9c\x69\x05\x21\x42\x58\x1b\x9e\x40\x00\xef\x8f\xd3\xe3\x23\x3c\xaf\xf9\xda\x06\x46\xbd\x16\x92\x2c\xf5\xdf\x5b\x78\x77\xdf\x86\xbb\xa4\x62\x55\x15\xd7\x3a\xbc\x5b\x42\x41\x78\x47\xcb\xca\x01\xce\x43\x76\xed\x06\x14\xdc\xc7\x1e\xd8\x08\x12\x62\xe1\x21\xcf\x6e\x58\x27\x53\xcc\x02\x2b\x5b\x1e\xb1\x42\x13\xbb\xe7\x08\xa3\xff\x30\xff\xa9\xa9\x6e\x9b\x09\xb7\x41\x6d\x5a\x93\x21\x6e\x32\xae\x4e\x03\xe2\x7c\x5e\xd4\xa8\xc1\xcc\x50\xb6\x72\x86\xd5\x65\xdb\x13\x79\x13\x2a\x67\xa2\xcf\x3e\x7b\xca\xe1\x0f\xf1\xee\xe8\xfd\xf4\x47\x08\xe8\x6d\x3f\xe1\x1b\xaa\x4d\x3e\xd4\x8f\x09\x2d\x37\x29\x7d\x56\x63\xf7\x2b\x31\xd2\x35\x11\x16\x91\xb0\xb4\x63\x1b\x8f\x93\x0b\xe8\xde\x49\xbd\x83\xd1\x85\x0b\x95\x23\x73\xb5\x76\x58\xf2\x68\x56\x54\xd5\xe8\xa2\xa0\x15\x29\x41\x0a\xf0\x49\x66\xa4\x0d\x1c\xb4\x7e\x7e\xe4\x8c\x5d\x01\x73\xff\x55\x6f\x71\x5f\x58\x96\xe0\x82\xf7\x5b\x7c\xf6\x6b\x29\xcc\xb1\xdc\x43\xfa\xc6\x3a\x5f\x49\x23\x62\x8f\x2c\x38\x43\x4b\xf8\xa4\x01\x67\xd4\x22\xda\x48\xd8\xa6\x53\x0d\x96\x7e\x9d\x7d\x02\x10\xf8\x1b\xdd\xa8\x3b\x92\x55\xf7\xd4\x05\x25\xe4\x38\xad\x44\x3d\xee\x84\x68\x7e\x7c\x64\x0c\x3b\x14\xd4\x18\x6b\xa4\x76\xc2\xe4\x58\x4c\x96\xc5\x47\x6d\x21\x41\xf3\xf8\x23\x6e\x20\x8c\x50\xcc\xc1\x47\x84\xe9\x43\x9c\xcf\x10\xe5\x51\xec\xcf\xa1\x97\x56\x58\x6f\x1e\x63\x51\xbb\x57\x80\xc3\xb8\xcd\xa9\xf0\x35\x3d\x38\x18\xdb\x6f\xb9\x2b\x14\x95\x22\x2f\x8e\x30\xcd\xb6\x29\xcd\x44\xd6\x56\xb5\x45\x55\x8a\x2c\xe9\xd6\xb1\x83\xe6\x2a\x25\xdc\x4c\x74\xd8\x32\xf8\xb9\x9b\x51\x6f\x4c\x56\xfe\x56\xa9\xe3\xf2\xe2\xf3\x90\xc5\x75\x84\x79\x7c\x28\xf9\xd9\xaa\xbc\xe8\x16\x9d\x95\x17\xc0\xb0\x03\xd9\xb8\x2a\x2f\x8c\x83\xe4\x40\x42\xd8\xb5\xff\x75\xa8\xdf\x85\xf6\x54\x9b\xfe\xf9\xe8\x08\x0b\x5a\x92\xf3\xa2\x9e\x22\xc6\x19\x41\x58\xc8\xa2\x96\x6f\x8a\x39\x99\x1e\xe3\x0b\x5a\x11\x6d\xe8\x1a\x90\xbe\x6e\xaa\x01\x4a\x78\xf3\xe2\xdb\x31\x48\xd5\xb4\x03\xfd\x0e\x21\x49\x4c\x4b\xfb\x57\xeb\x10\x9a\x7c\x2b\xc6\x66\x29\x98\x0a\x38\x38\x21\x94\x9c\xe1\x04\x56\xd0\x58\x76\x3e\xab\xeb\x42\xab\xb7\x2f\x78\x3d\x06\x70\x7f\xf4\x95\xfc\x8b\x35\x9c\xfb\x4a\x3e\x7a\x94\x69\xf7\x1e\xc2\x4a\xf1\x4f\x2a\x17\x63\xf2\x4e\xbe\x37\x12\x10\x75\xcb\x20\x1b\x24\x56\x43\xa0\xec\xe0\xa0\x29\xb5\x61\xea\x03\xbe\xbf\x09\x2c\x7e\x93\x98\x74\xd3\x58\x4d\xd3\x26\x29\xeb\x5b\x46\xd3\x02\x2c\x5d\x75\xd8\x89\x4d\x2b\x47\x17\x9c\x68\x68\xf1\xd0\x74\x66\x0e\x7c\x78\xac\xb9\xfb\x8b\x27\xdc\x8d\xe9\xa1\x47\xfa\x11\xab\xf9\x70\x9e\x54\xc4\x6c\xc5\x1d\x72\x3b\xee\x90\xff\x1f\x7b\xff\xbe\xdc\xc6\xad\x2c\x8e\xc2\xff\xe7\x29\x60\xac\xfd\x39\xe4\xf6\x90\xba\xf8\x96\x30\x8b\xf6\x96\x25\xd9\xd6\x8a\x2c\x69\x8b\x72\xb2\xf3\xb3\x5c\x2e\x70\x06\x24\x11\x0d\x81\xc9\x00\x23\x89\x91\x55\xf5\x3d\xc4\x79\x89\xf3\x1a\xe7\x51\xce\x93\x9c\x42\x03\x98\xfb\xf0\x22\xcb\xb6\xbc\xb6\x93\x2a\x6b\x08\x34\x6e\x8d\x46\xa3\xd1\x68\x74\x37\xe9\x3e\x60\xaf\xb8\x99\xee\x23\x65\x8c\x5f\x9f\xb1\x2f\xf4\xab\x04\x76\x66\x8d\x17\x19\xc1\xe8\xad\x79\x22\x7e\xce\xe8\x85\x79\xe6\xda\x7b\xaa\x99\x47\x8e\x5b\xe8\xd9\x84\x2b\x0d\xcb\x49\xbe\xac\x27\xbb\xf9\xac\x11\x16\xe2\xd0\x86\xf3\x29\xda\xa3\xdf\x80\x31\x36\xb3\xc3\x8a\x42\xd8\xe2\x5d\xf3\x93\x48\x30\x88\x58\xc5\x6b\xb2\x45\x3c\xd6\xcc\xa3\xb0\x14\x2a\xcb\xbf\xf4\xf2\x50\x14\x30\x20\xfb\x18\x17\x6c\x50\x8d\xe1\xe0\x84\xc8\x01\xf5\x93\x98\x9a\xc3\x59\xfb\xb9\xec\xe3\xe7\x12\x52\x0a\x76\x69\x99\xc1\x61\x0e\xb8\x57\xcd\x2f\x0a\x48\x1a\x69\xba\x42\x38\xca\xd5\xd6\xa7\xe1\x6d\x6d\x25\xa4\xbd\x85\x67\x7d\x55\x1b\xb5\x2c\x38\xa7\xf2\xf0\x5a\x94\x0c\x43\xe6\xaf\x65\x7b\xc0\x5a\x16\x8f\x93\x7b\x38\xf7\x4b\xe4\xe2\x74\xae\xec\x83\xea\x5e\x03\xf5\xd9\xe7\x88\x35\xd4\xb7\xaa\xef\xa9\x1b\x72\x90\x90\x70\x95\x4c\x1b\xd5\x8e\x77\x8c\x89\xdc\x8e\x73\x36\x13\xaf\x27\x75\xd0\xe6\x6e\x4d\x8d\x60\x35\xdf\x1d\xdb\xad\x89\x7a\x16\xef\x9f\xff\xaa\x34\x6d\xa9\xf1\xaa\x74\x35\x3b\x19\xb3\xbc\x6a\xb0\x84\x3d\xfc\xca\xd4\xc4\xf8\x18\x59\x88\x6e\xb7\x8b\x4b\x86\xed\x26\x62\x5a\xd6\xdd\xdc\xa4\xe0\xf6\xf5\x0f\x2b\x78\x6b\x2b\x9c\x38\x4d\x60\xbc\xf9\xe6\x3a\x35\xfa\x81\xcc\x26\xb8\x48\x0d\xd8\x53\x45\x7f\x5a\x85\xf3\x19\x9d\x8b\x86\x34\xa4\x4a\xad\xed\x71\xb9\x1d\x73\x4b\xfb\x29\xad\x38\xa7\x9f\xb7\xee\xac\xcf\x84\x94\x69\xba\x00\x6f\x36\xda\xfa\x54\x97\x4d\x86\x16\x56\x72\xdb\x54\x2b\x31\x2e\x63\xec\xb3\xc8\x89\x53\x83\x59\xfb\x2a\x8e\x8a\x4b\xe3\xaa\x73\x59\xdc\x74\x29\xd6\x64\xfa\x94\xde\x41\x6a\xe8\x73\x06\x28\x6e\x98\xbe\x1f\x4f\xf9\x7f\x81\x6c\x91\x4c\xc3\x53\x0e\x6d\xa2\x01\x8d\xcf\xf5\xb8\xb6\x5d\x8c\xaf\x53\x7e\xca\x5b\xff\xd9\x46\x9d\xce\xe9\xe5\x43\x8a\xf0\x76\xc8\xfc\x33\x0b\xd5\x9d\x10\x1e\x84\xf4\x98\xfe\x95\x50\xa9\x5a\x6d\x7c\xca\x1d\x18\xa7\x17\x48\x8b\x2c\x58\x97\x67\x23\x84\xf5\x8f\xae\x3e\x24\xf8\x49\xcc\xd4\x6c\x7b\x42\xfd\x33\x8c\xf4\x92\x3b\xe5\x08\x21\xd4\x79\xf6\x4e\xc5\x09\x7d\x9f\x42\xee\xc1\xe9\x15\x9b\x5c\xf3\xaf\xae\x87\xc9\x97\x22\xbe\x20\x71\xf0\xbc\x54\x9a\x0b\x5d\x36\x16\x3e\x95\x12\xf9\x82\xab\x58\x84\xb2\x52\xdc\xb7\x37\xf5\x28\x32\x90\x8c\x8f\x0b\x15\x41\x65\x30\x86\x77\x33\x2a\xdf\xa3\x7e\xbf\x7f\xbc\x7b\xb0\xb3\x7b\xbc\x77\xf0\xaa\xdf\xef\x1b\x20\x1a\x4a\x5a\x01\xd7\xed\x03\xf4\xce\xde\xf1\xee\xf6\xc9\x87\xed\xd7\xbb\xdb\xbf\x66\x45\x78\xc0\x46\xf9\xce\x64\x75\x2c\x6e\xae\x5c\xd6\xe0\x01\x1d\x09\xa9\x8a\x58\xc8\xd5\xe4\xd0\xa8\x81\x52\x34\xba\xd9\xb1\x79\x2e\xac\x0f\x46\x44\x22\x73\x52\x28\xc0\xcd\x19\x4e\xb9\xf7\x06\xfb\xa6\xda\x57\xb4\xd2\x62\xbe\xf2\xc2\x70\x2a\x15\x8d\x48\x28\x69\x13\x26\x6d\x51\x43\x51\x3b\x02\xb9\x47\x0b\x65\x5a\x30\x18\x70\xb9\x28\x36\x04\x8a\x4b\x83\x7b\xb1\xfb\xf2\xf0\x78\xf7\xc3\xce\xee\xe0\xe4\xf8\xf0\x0f\xd3\x40\xda\x1d\xdb\x42\x2d\xb1\x85\x74\xa4\xd2\x56\x2c\xc4\x0a\x8d\x94\x10\x18\x6b\xb9\xdf\x11\xb0\x99\x12\xa4\x59\x09\x52\x74\x1a\x85\x44\xd1\x65\xab\x34\xc8\x49\x71\x54\x9a\x6c\x2b\x30\xe6\x56\x69\xeb\x3f\xdb\xa7\xfc\xbf\x28\x0f\x92\x69\xf8\x63\x33\xcf\x76\x0c\x65\xa0\x07\xc8\xb5\xbc\xd5\xc4\x50\x70\x81\xa1\x10\x5f\x89\x18\xbd\x10\x43\xf4\x8f\x98\x06\xa7\xfc\x47\x74\x32\xa1\x48\xf0\x70\x86\x02\x36\xb2\x11\xf5\xd1\x90\xaa\x0b\x4a\x39\x02\xe8\x53\xfe\x23\xe1\x01\x8a\x48\xac\x98\xcf\x22\xc2\x15\x62\x52\x63\x1e\x05\x31\xb9\x60\x7c\x7c\xca\xf3\x79\x5b\x21\xf3\x69\x31\xe9\x14\xef\xa1\x09\x39\xa7\x88\xa0\x98\x92\x30\x9c\x85\x82\x8f\x11\x27\x53\x7a\x0a\x54\xbe\x8f\xfe\xf1\xf3\xcf\x2f\x5f\xfe\xfc\xf3\x29\x5f\xfb\x11\xfd\x21\x12\xe4\x13\x8e\x48\x28\x05\x0a\xa8\x1f\x92\x98\xf6\x0c\x36\xf3\x95\xee\xeb\x92\x95\x9a\x51\xbe\xea\xac\x5a\x5d\xf8\xc7\x35\x3d\x01\xd0\xbd\xce\xb3\x17\x62\xd8\x43\x5b\xd9\xe9\x85\x09\x8e\x2c\xcb\x3c\xe5\x2f\xc4\xb0\xf3\x0c\x00\x6b\x60\x64\x24\xb8\x26\x13\x00\xda\xef\xa1\x7d\x31\x46\x2a\x26\x5c\x9a\x6d\x34\x9d\x3c\xbc\x78\xf2\xde\x4a\xba\x4d\xe4\x9c\xb9\x2b\x6e\x06\xbd\x37\x84\x71\xb4\x15\x4c\x19\xef\xe9\xc1\xc3\xd7\x29\x6f\xbd\x95\x14\xa6\x83\x44\x51\x68\xfb\xd9\xd6\xf9\x3a\xa3\xad\xc7\xfc\x56\xd2\x18\x75\x9e\xa1\xd6\x40\xd7\xd5\x76\x09\x86\x14\x53\x28\xa8\x0e\x75\xca\xc9\x5c\x28\x8a\x60\x39\x20\x31\x32\x6d\xa2\x1e\x3a\x99\x30\xa9\xc9\x80\x70\x44\x2f\xc9\x34\x0a\x69\xb7\x0a\x6c\xeb\xd0\xc8\xdf\x42\x90\xe5\xe6\xd5\x24\x0e\x35\xe5\x21\x49\xcf\x69\x4c\x42\x14\x32\x4e\x25\x2c\x15\x80\x4d\xab\xc3\xd0\x16\x7c\x32\xd8\x44\x38\xbc\xf7\x43\x4a\xa4\x45\x85\x09\x8a\xdf\x05\x6a\x3a\xd8\x3c\xe5\x76\xa4\xa8\xdb\x85\x9f\x07\x9b\xfa\xcb\x76\xc7\xce\xcf\x29\x5f\x62\x79\x19\x2f\x3c\x4b\xae\x2d\xf0\x7e\x8f\x5e\x0a\xb1\x81\xae\xcc\x00\x1d\x29\x27\x8e\xaf\x94\xc6\xaa\x93\xba\x5d\xf3\x97\x48\x34\x13\x09\xba\x20\x5c\xd9\x04\x1e\x20\xb8\x94\x34\x3f\x1d\x47\x51\x13\xc6\xc7\x12\x29\x31\xa6\x6a\x42\x63\x5b\xfa\xc3\x87\x62\x8b\x66\x51\x48\x34\x25\x7c\x66\x6a\x91\x0d\xcd\x74\x3a\xe6\xef\x2e\x0f\xf4\x9c\xc1\x20\x4e\xf9\xb5\x46\xbf\x19\x10\x10\xcb\x95\xeb\x2c\x1a\x30\x3d\xdb\xe8\x15\x55\x8a\xc6\x69\xef\x1f\xa0\x31\x55\x07\x64\x4a\x5b\xed\x5c\xc2\x56\x10\xc4\x54\x23\x30\x2b\x2d\xa6\x14\xc9\x72\x59\x59\x2c\xfb\xe1\x03\x8a\x62\x76\x4e\x14\x05\xff\xc5\xe9\xe0\x18\x57\x88\x8c\xd3\xad\x09\x51\xee\xc7\xb3\x48\xd3\x82\x1b\xc4\x00\x14\x78\x28\x22\x52\x5e\x88\x38\xb0\xe3\x58\x7e\x45\x3a\xf9\xec\xa0\x74\xb0\x9a\x33\xeb\xa7\x1c\xbe\x4f\x79\x6f\x9e\x14\xf6\xcb\x29\xef\x69\xf1\x4b\xef\x21\xbf\xc0\x56\xd9\xaa\x13\xbe\xda\xb0\xa3\xa1\x96\x96\xba\x2c\x32\x7a\x05\xd1\xeb\x97\x74\x23\x6c\x65\x42\x97\x2b\xc5\x45\x5a\xa6\x24\x72\xe5\x8a\xd5\x09\x5b\x95\x0a\x80\x56\x95\x88\x9a\x65\x9d\x16\x93\x20\xea\xb8\xa2\x33\x2a\x73\x65\x7b\x05\x41\xe7\x97\x6c\x7b\x2d\xb5\xd1\xcb\x4b\x27\xbf\x54\x5a\xeb\x95\x64\xa2\x22\x84\xa9\x0f\x64\x93\x76\x51\x0c\x69\x05\x39\x31\xa4\xda\xc3\x5e\x2a\x84\x58\x1c\xfc\x52\x12\x32\x74\xf9\x51\x09\xb9\xb9\xe2\x25\xe9\xa2\x7e\x78\xbd\x3a\xa9\xe1\x97\x7a\xa9\xc0\xa0\x7a\x15\x42\xcd\x14\x64\x4b\x6e\x1e\x7a\x47\xf6\xcf\x74\x5f\x30\xac\x41\xb0\xac\xc0\x6e\x5d\xbf\x3e\x39\x39\x42\x1d\xf4\xee\x25\x8b\xa5\x3e\x67\xd8\xca\xdf\x9b\xdc\x77\x5b\x5c\x68\x5e\x53\xc8\xb8\x76\x04\xc1\x45\x40\x11\x3e\x04\x00\x63\xaf\x91\x56\xfb\xd2\xd4\x3a\xa0\xbe\xe0\x41\xb5\xda\x72\x6b\x6e\x4b\x7a\x79\x72\x74\xca\xaf\x91\x61\x41\x22\x09\x5c\x75\xef\x76\xcd\x56\x83\x36\xde\xdb\x95\x7d\xca\x35\x83\x18\x12\x49\x11\x7e\x33\x1b\xfc\x15\xa6\x4d\x8f\x44\xa8\xb1\x8f\xdd\x46\x35\x9d\xd9\xa4\x14\xe2\xdd\x4b\x03\xf2\xd0\x76\xc7\x0e\x68\x14\x93\x29\xd5\x12\xa4\xc8\x41\x42\xda\xa3\x0c\xd0\x36\x5e\x83\x18\x37\x86\x42\x5f\x73\x3f\xd2\xfc\x5c\xeb\xd9\x77\x96\x9b\xb6\xb8\x92\x34\xa8\x88\x5a\x5a\x9c\x90\x3e\x09\x29\x7a\xb2\xbe\x8e\x2e\x58\xa0\x26\x30\x9e\xff\x7c\xaf\xe5\x04\xa8\x66\xe3\xd4\x3c\xbd\xdd\x70\x7d\x82\x5f\x9b\xa8\x87\x06\x89\xef\x53\x1a\x68\xf1\xb1\x08\xa1\x8b\xf7\xd0\xd6\x50\xc4\x2a\xcd\xdc\x2c\x14\x7f\x58\x53\x7c\xb3\xa1\x38\x3c\xec\x75\xc5\xec\x4c\x98\x34\x43\xc1\x90\x83\xe0\xee\x4c\xef\x6a\x5a\xf0\xdb\x30\x50\xf0\x89\x7a\xe8\x5f\x89\x54\x88\x20\x05\x42\x1d\x4c\xe4\x7f\xa6\x18\xae\x80\xe7\xd3\x51\x0f\x1d\xd0\x0b\xb4\x43\x14\xa9\x01\xb1\xcc\x55\xe7\xa2\x1e\xda\xe5\x22\x19\x4f\x2c\xec\xb5\x1d\xd3\xc3\xca\xa8\x5f\x82\x91\x55\x39\xdb\x0c\x39\xc5\x08\x5a\x43\x03\xbd\x71\x1f\x53\x99\x84\xaa\x1e\x38\xc5\x8f\x59\x7d\x0b\x89\xe3\x36\x34\xcd\x5f\xff\xc2\xea\x46\x83\x50\x64\x18\x36\x86\x9c\x4c\x3d\x8c\x7d\xe1\xd7\xb4\x9f\xdb\x2c\x01\x06\xdd\x1c\x24\xc4\xf4\xf4\x44\x03\xf5\x7e\xfc\x27\x00\xbb\xb0\x4d\x17\x33\xc9\x2e\x66\xe3\x0e\x24\x62\x24\xd5\x2c\xa4\x7d\x0c\xcc\xa1\x87\x36\xd6\xd7\xff\x7f\xbf\xe0\x67\xff\x54\x13\x4a\x82\x67\xff\x54\xb1\xfe\x7c\xf6\xcf\x61\xfc\xec\x9f\x6b\xfa\x63\xc9\x1f\x6b\xca\x7c\x99\x4a\x86\x22\x98\xd9\xba\x82\x52\x7b\x9b\x8f\xbb\xeb\xeb\xb6\x4d\x53\x3a\xf8\x1a\x50\xd0\xdf\xef\x1d\xfc\xd4\x0e\xae\xd9\xa9\x36\x4b\xf2\xd9\x8f\x37\xd4\x7f\x57\xdf\x91\x54\xb5\xdc\x4d\x21\x7f\x6d\x7e\xde\xa3\x68\x5d\x75\xf9\x05\xb2\x72\xf0\x1a\xe7\x15\xe4\x1f\xf9\xbb\xcf\xec\x85\xd4\x2f\x45\x8f\x45\xb4\xdd\x1d\xc5\x82\x84\xc4\x3e\x9b\xb9\x52\x42\x84\x43\x12\x9b\xab\x03\x70\x3e\x67\x53\xf6\xb8\x3e\x30\xf6\xee\xad\x7b\x80\xbf\x63\x2a\xd9\xdf\x34\x3e\x1c\x8d\x24\x55\xbd\x0d\xcd\x83\x16\xde\xc3\x34\x06\xaa\xa6\xed\xae\xe0\x2d\x9c\xef\x89\x8b\xaf\x61\xec\x49\x83\x52\xc8\x9d\xa2\x81\xe8\xf5\x4d\x02\xef\x94\x3d\x37\xd5\xa3\xab\xdd\x15\xa3\xd1\xfc\x9e\xdd\xe4\x4d\xf1\xca\xb6\x2b\x4b\xd9\xa8\x78\xb2\xbf\xec\xa8\x0a\x93\x0e\xc1\xfe\x34\x8c\xb9\xbe\xa8\x58\xba\xe4\x3d\xcc\xc1\xf5\x7a\x23\xa9\x56\x4c\x5a\xe4\xf2\x26\x2c\xcb\xbe\x16\xce\xed\xa8\x77\x4f\x26\xf8\x61\xc9\x11\x24\x21\x89\x6f\xe0\x77\xd4\x06\x5a\x6f\x7e\xd9\xf3\x15\xbc\x8e\x66\x2f\x78\x32\xff\xa3\x8b\xee\xe5\x97\x7d\xa2\x7c\x8b\x02\x89\xc6\x78\xa3\x48\x02\x78\xbd\xf5\x66\xa0\xd6\x9a\x87\xc6\x53\x3d\xcf\x5a\x58\x07\x63\x4c\xf8\x95\xb7\xd4\xfc\x2e\x1f\xfd\x3b\x8a\x1f\x77\xbe\x83\xdf\xac\x7c\x94\xf7\x11\x92\x5b\x4c\xd8\xbb\xd2\x24\x6c\x03\x7d\x82\xf9\xdd\xc9\x2c\x02\x97\xb7\x0d\x21\x4f\x17\x0c\x8f\x04\xc1\x82\x37\xf8\x0b\x2a\xb0\x41\xcf\xd2\x3a\x72\x15\x5e\x2d\x67\xc4\x62\x0d\x0b\x7d\xe2\x4f\xe8\x07\x99\x8c\x46\xec\xb2\x87\x9f\x9f\xf7\x1f\xaf\x6f\x6c\x62\x1b\x27\x42\xc4\xbd\xa6\x7d\xdf\x8b\x69\x48\x14\x3b\xa7\x1f\x92\x38\x84\xe7\xef\xc3\x58\x5c\x48\x1a\x7f\x90\x11\x0d\x43\x70\xae\xaa\x91\x25\x15\x51\x89\x1c\x92\xd8\x3c\x9b\x74\x82\x5f\x44\xa4\xa2\x1f\x02\xa2\xc8\x07\x36\x25\x63\x0a\x88\x35\x5f\x1f\x92\x28\x14\x24\xf8\x60\x54\xce\x71\xaf\xfc\x8a\x54\xcf\x1a\x30\xbc\x07\xb4\x3b\x0c\xc5\xb0\xd5\xee\xea\xdd\xef\x01\xfe\x65\x48\x24\x7d\xf2\xc8\x83\x0c\xf8\x6c\x41\x98\x37\x5d\xeb\x07\x12\x9c\x2b\x32\xd4\xad\x4c\x69\xc0\xc8\x87\x50\x77\x9d\x4e\x87\x34\x80\xa6\xed\x53\x7f\xc9\xc2\x73\x8d\x21\x79\xc6\x78\x0f\x8b\x4b\x06\xa1\xae\xc1\x71\xfd\x07\xb0\xe6\x63\x7c\xdc\xd3\x22\x09\xf6\xcc\x96\x45\x83\x0f\xf0\xc2\xeb\x03\x35\x33\x27\x7b\x78\xe8\x31\x6f\xb8\xa6\xa7\x93\x8f\x3d\xb6\x46\xa7\xd8\x1b\x09\xae\xb4\x8c\xfb\xc1\xc4\x6b\x93\x3d\xfc\x53\x74\x89\x36\xd6\xf5\x3f\x9b\xfa\x9f\x47\xfa\x9f\xc7\xfa\x9f\x27\xfa\x1f\x9d\xbb\xa9\x73\x37\x75\xee\xa6\xce\xdd\xd4\x19\x9b\x3a\xe3\xa1\xce\x78\xa8\x33\x1e\xea\x8c\x87\x3a\xe3\xa1\xce\x78\xa4\x33\x1e\xe9\x8c\x47\x3a\xe3\x91\xce\x78\xa4\x33\x1e\xeb\x8c\xc7\x3a\xe3\xb1\xce\x78\xac\x33\x1e\xeb\x8c\x27\x3a\xe3\xa9\xfe\xe7\x27\xfd\xcf\xcf\xd0\xa1\xf5\xf5\xe8\xd2\x45\x96\x93\xbd\xab\xa1\x08\x83\xde\x95\x9d\x39\x3c\xc4\xd7\x1e\x53\x24\x64\x7e\x96\xc6\xf0\xf5\xb5\x17\x85\xc9\x98\x69\x29\x1f\x93\xe0\x3c\x64\x52\x21\x92\x28\xa1\x37\x67\x04\x5e\xf1\x10\x7c\xc2\x5c\x20\x7f\x42\xe2\x29\x89\x50\x14\x33\xae\xd0\x24\x46\x84\xfb\x13\x61\x74\xcb\x60\xf4\x8d\x3d\x6c\x1c\x1a\xdb\x17\xe9\xe8\x42\xc4\x81\x2f\x12\xae\xd0\x39\x93\x09\x09\x87\xa1\xf0\xcf\xa4\xfd\xa1\xab\x93\xc8\x17\x01\x85\x7f\xa4\xd1\x4d\x8e\x92\x30\x94\x7e\x4c\xe1\xd1\x1e\x83\xe5\xe9\x5c\xa8\x22\x20\x01\xc4\x05\x87\xd6\x18\x1f\x23\x49\xce\x29\x32\xdb\xa3\xd1\xa5\x33\xc1\x49\xc8\xf4\xa9\x00\x3b\x6d\x37\x02\xa2\x45\x8a\x5e\xaa\x88\x28\x45\x63\x6e\xc6\xa3\x4f\x35\x5a\x58\x9c\x52\x9e\xf4\xae\xae\xe1\xaf\x25\x78\xa8\xf1\x83\x3d\xf6\x40\x20\x56\xf3\xb9\xd1\x33\x8a\x0d\xd3\x64\x40\x43\xaa\x28\xfa\x68\x7e\x45\xb1\x88\xa4\xf9\x8c\xc5\x45\xee\x97\x4f\xc3\xd0\xfc\xb4\x90\x66\x54\xb1\xb8\x18\xd2\x91\x88\x69\x29\x11\x96\x7c\xbe\x81\x58\x5c\x14\x4b\xfa\x22\xac\x96\xf4\x45\x58\x29\xe9\x8b\x30\xed\xfa\x66\x0f\x3b\x72\x36\x4c\x02\x7d\x44\xba\x0e\x5f\x84\x22\x46\x43\xe2\x9f\x99\x2f\x98\xef\x84\xc3\x9f\x8f\x48\x53\x11\x32\x84\x83\x12\xcd\x85\x34\xe9\x20\xa9\x62\x76\x46\xd5\x24\x06\x9d\xe3\x47\x44\x42\x36\xe6\x21\x1d\x29\xf3\xe5\x53\xae\x3b\x02\xdf\xe6\x16\x16\x3e\xff\x4c\xa4\x62\x23\x7d\x22\x20\xe7\xf4\x83\xe0\xfa\x8f\xf3\x13\xd9\x5b\xd2\xe9\xc5\xf5\x0f\x38\x71\x6f\x5a\x71\xbf\xaf\x19\x88\x18\x21\xc5\xf8\x6c\xea\xd3\xe7\x99\xcf\xde\x31\x55\x03\x3f\x66\x91\x6a\xe1\x35\x9b\xeb\xfe\x76\xa7\x8c\x77\xff\x94\x29\xcb\xcc\xb5\x6c\x1d\x40\x38\xc0\x40\x4c\xbb\x10\x9f\x52\x7f\xed\x0b\x12\x80\x7b\x57\xcf\x65\x6b\x5e\xf5\xf6\x78\xbf\x8f\xd7\xd6\xf0\x83\x8a\xbb\x4a\x21\xd5\x83\xb4\x6d\x9c\x16\x32\x1c\xbb\x8f\x75\x2f\xb2\x54\x78\x8e\x43\xdb\xd7\xed\x5e\x25\xe5\xda\x2b\xee\x19\x57\x0e\xc2\x24\xbc\x21\x9c\x8c\x69\xdc\xa5\x97\xd4\xdf\x36\x6e\x44\x5a\x78\xea\xd3\xe3\x5c\x21\x7d\xa6\xf3\x6a\x0f\x81\x99\xbf\xb3\x3d\xd8\x36\x61\x3f\xd5\x87\x26\x6b\xd3\x9d\xbd\x1f\xa6\xed\x8f\x1f\xd7\xfb\xfd\x3e\xad\x89\x00\x5b\xb1\x76\x2b\xec\xc1\x6d\x8f\xf7\x3f\x4d\x84\xfd\x11\xde\xd7\x74\xed\x56\x7e\xff\x7e\xee\xcd\x4c\x17\xe4\x8a\x11\xa3\x61\x20\xdb\xed\xc2\xcf\xa2\x5f\xe2\x3e\x7f\x80\xb5\x8c\xab\x37\x19\xe3\x83\xe6\x01\x06\x59\x17\x5b\x27\xdf\xc8\x3d\xbe\x11\xfd\x8d\x5f\xc4\x3f\xed\x40\xdf\xad\xbf\x77\xaf\x70\xc4\x83\x07\xed\xb4\x9a\x6d\x11\x26\x53\x8e\xf0\x03\xe1\xaa\xf9\x81\x3f\xe8\xe3\x82\xe0\x8c\x3d\x48\x32\x32\x15\xf6\x2c\xe6\xf2\xbd\x62\xa3\x96\x01\x89\x9f\xe1\xe2\x4b\x20\x5a\xd7\xfb\xa0\xdc\xfb\x20\xed\xbd\x3b\xe1\xc1\x11\x4e\x82\x4e\x67\xd9\xf2\xd7\x69\xc7\xf1\x75\xdb\xb3\x3f\x6c\x9f\xed\x2f\x90\x06\x33\x6a\x2d\x52\x9e\x9e\xf1\x7a\x0d\x83\xa4\xe0\xfd\x46\x0b\x46\xbc\xe8\x1f\x66\x30\x11\x17\x86\xe2\xde\xe8\x03\x92\x93\x9b\xe0\xb4\x74\x18\x51\x5e\x52\x5b\xd8\xb3\x19\x6e\x7b\x57\x72\x22\x2e\xf4\x11\xd5\xc3\xff\xf0\xe5\x79\xc7\x04\x16\x86\xab\xa7\xa9\x8d\x07\x5b\x3e\x9f\x65\x67\xad\x92\x5b\x82\x22\x95\xa6\x6f\xb8\xa0\xb1\xed\x50\x48\xda\xd4\x8b\xbc\xf4\x4a\x0b\xef\x1d\x78\xff\x88\x44\xc4\xc5\x4b\x70\xd2\x67\x2f\xa5\x5d\x2f\x98\x71\x32\x65\xfe\xc9\x0c\x9c\x0d\xa9\x6e\x26\x93\x6a\xd9\x25\x82\x3a\x4d\x54\x07\x88\x28\x5f\xb8\x4c\xc9\x2f\x51\xde\xec\x51\x66\xb5\x49\xf2\x78\xdf\xb9\xb4\xd6\x6c\x6b\x9c\x4d\x59\x31\xae\x6b\xde\x7b\x00\xf5\x9c\x66\x88\x57\x83\xde\xcf\xf3\x63\xd3\x65\xf6\xd6\xd8\xb4\x20\xca\x6e\x6a\xec\xd4\xad\x36\x02\x5b\xfb\xbd\x92\x63\x23\x53\x49\xfb\xfe\xfd\x7b\x65\x46\x76\xff\x3e\xed\xa6\x6d\x7e\x3e\x2f\x37\x9e\x58\x79\x24\x0b\xfd\xe2\x88\xc2\x04\x2d\xef\x17\x67\x59\x5f\xb6\x05\xb5\xd4\xdd\x53\xad\x2d\x37\x86\x98\x86\xa1\xf8\x1e\xd1\x67\xc5\x88\x3e\x43\x41\xe2\xc0\x46\xf4\xe1\xe2\x85\xf9\xa5\x01\xa3\xc8\x46\x69\x35\x88\xdd\x86\xc7\x8c\x49\x4c\xab\xaa\x32\x03\x5a\x90\xa8\x72\x6b\xb3\x7c\xda\xb7\xd0\x10\xfe\x0f\x1a\x1f\x68\x31\xa0\x52\xa9\xf5\xf7\x00\x10\x73\xf5\x70\x05\xc0\xf4\x55\x1a\x38\x50\xa1\x95\xb8\x14\x29\xdb\xc6\xff\x78\xe4\xeb\xff\xb1\x15\x62\x68\x37\x8a\xe9\x48\x76\xb5\x50\x3a\x8e\x45\xc2\x83\x6d\x2d\x16\x3b\x16\x66\x7a\x67\xec\xbb\xba\x13\x35\x0d\x07\x64\x44\x5b\x38\x83\xee\x80\x14\xdd\x43\xf8\x81\x5a\xc6\xa3\xe0\x4a\xb1\x91\x4a\x0c\xe7\xea\x3a\x75\x9a\x11\xcf\xae\xf8\x0a\xcf\xaf\x65\xe1\x95\xa1\x0d\xda\x6d\x43\x93\xd8\x88\xbb\x86\x10\x00\x99\xe6\xd3\x45\x22\xaa\x75\x38\xc4\x97\xf3\xde\xd3\x1c\x4a\x29\x17\x29\xce\x12\x11\xed\x9a\xaf\x72\x54\x38\x65\xfc\xb9\x50\xf3\xe1\x02\xed\x55\xc4\x6f\x22\x21\xaa\xce\xbd\x72\x38\x12\xbb\x1f\xd8\x70\x25\x0e\xbb\x3c\x0b\xed\xf2\x0f\xfb\x6c\x10\x62\xbb\xe4\xf7\xf9\x8f\x1f\xeb\x3b\xd2\xbe\xc6\xf8\x5e\xbf\x2f\x8a\x54\x7d\xff\x7e\x3e\xb5\x50\xa4\xfd\x5c\x14\x3c\x33\xf5\x6a\x8f\x2d\xce\xa5\x3f\x89\x58\xd7\xac\x3c\x70\xeb\xbf\xb1\x66\xbc\xf4\xeb\x13\xcc\x19\x9d\xf5\xf1\x83\x52\xc3\xf9\x25\x72\x62\xca\x05\x34\x0d\x00\xd0\xaa\xb8\xd7\xa9\x0d\x13\x03\xcb\xff\x06\x51\x47\x0c\x13\xa9\x8f\x16\x63\x17\x66\xf1\x35\xa9\xd1\x9d\x67\x9e\x8e\xaa\x01\xbc\xec\xb9\x43\x59\x31\xfc\x79\xd6\x1b\xc7\xa5\xa0\x47\xbd\x56\x6d\xc6\x86\x91\xd5\x9a\xa3\xd3\xa8\x7c\x74\x1a\x55\x1b\x9d\xc6\xb2\x9e\xda\xe8\x34\x36\x4f\x35\x46\xa7\x99\xb7\x22\x84\x87\x6d\xe4\x81\x65\x03\xaf\xd4\x47\x4c\xb1\xe1\x52\x4c\x30\x62\x13\x45\xb6\x12\x19\x25\x95\x5c\x78\xa1\xab\xd4\xc4\x75\xec\xdf\x5b\xaf\x73\x0c\x29\xfa\x5a\x64\xf3\xc3\x24\xa0\x81\xde\xb7\xdc\x37\xf8\x12\xa9\x0d\x72\xa2\x3e\x53\x90\x93\x4a\x2c\x0d\x40\x3c\xb2\x18\xa8\x04\xd4\xb8\xc9\x85\xac\x26\x77\xb0\x7e\x1d\x8a\xcb\x66\xe7\x45\x0e\xe9\x45\x2c\x9a\x39\xb8\xd7\xef\xab\xfb\xf7\x0b\x5e\xb6\x1c\xc6\xb0\x77\x2f\x87\xca\x7c\x58\x5a\x88\xd6\x55\xb3\x2b\x9a\xce\x96\x2f\x73\x0d\x27\xe8\x90\x28\x2a\x87\x68\xa5\x71\x0c\x8e\x1c\x6d\x74\x56\x0f\x64\x8b\x8c\x5e\x1b\x63\x87\xa8\x7a\xc7\x42\x3f\x94\x23\xb5\x78\x9f\xc6\xa5\xaa\x23\xac\x61\x54\x19\x9b\xba\xd2\xe2\x5b\x2f\x7d\xa6\x83\x3d\xc6\x15\x8d\xf5\x9c\x9e\x83\x1e\xda\xc4\xc7\xdb\xb1\x62\x1a\xf6\x20\x5a\x49\xef\x2a\xa6\x24\xd0\xd9\x17\x31\x53\xb4\x77\x6f\xe3\xda\xa3\x97\x11\x8b\x89\x79\x90\xcb\x29\x28\x89\x23\x1a\x4b\x26\x15\x68\xb9\x13\xdf\xa7\x52\xf6\x4a\x61\xb8\xe6\xc6\xae\x29\xb2\x7f\xdb\x73\xf8\xd5\x6a\x57\x03\xdc\x38\x80\x29\x05\x7f\xb3\x6e\x53\xc6\x75\x8b\x22\x17\x75\x47\xaf\xa4\xf9\x7c\x7a\x41\xa0\x34\xee\x39\x66\xfc\x09\x21\x72\x5c\x0d\x2e\x44\x4e\x7e\x5b\xf8\x8c\xcb\xba\x3e\x44\x0e\x10\x78\xef\x76\x02\x26\x5d\x5b\x47\x5c\x30\xa0\xd5\x43\xc9\x58\xae\xbf\x64\x28\x99\x22\xd6\xbe\x47\x87\xc9\xa2\xc3\x58\xea\xaa\x56\xfd\xef\x12\x1b\x26\x7f\x16\xfd\x46\x8f\xd3\x56\x57\x7b\xe7\xec\x57\xef\x98\x79\x89\x53\x69\x37\x5a\xbc\x7e\xae\x9b\xf4\x15\xaf\xb1\xef\xd4\x25\x33\x98\xd1\x5d\x2a\xb8\x80\xbb\xb7\x51\x7f\xe7\xbc\xf1\x35\xef\x9c\xcd\x6f\xdf\x7a\xf4\xb8\xcb\x97\xd0\xdf\xea\xfd\x73\x76\xf3\xfb\xc1\x1a\x55\x7e\xf0\xa5\xec\xcd\xbb\x53\x8b\x62\x26\xa7\xe6\xdf\xae\x2f\x25\xce\xd7\x11\x12\x3e\x4e\x80\x46\xde\x5d\x29\xf0\xd8\xb2\x35\x38\xea\x1e\xec\x9e\xa0\xd6\xf6\x3f\xda\xd8\x39\xf1\x27\x32\xe2\x54\xe1\x6b\xcf\x02\x6d\xa7\x39\x7e\x2e\xf1\x1f\x59\xaa\x9c\x90\x38\xca\x65\x3d\x78\x90\xe5\x45\xf9\x8c\xc1\x20\x57\x48\x66\x19\x3b\xc2\xc4\xf7\xb4\x79\x81\xf9\x99\x66\xef\x86\xec\x92\x65\xd9\xd4\xfc\xcc\xb2\x63\x3d\xb0\x2c\xdb\xfc\x4c\xb3\x5f\x9a\xee\xb9\xec\x51\xa9\xb7\xaf\x98\x4a\xf3\xc6\x2c\x37\xec\x57\x22\x4b\x17\x59\xf2\x6b\x22\xcf\x68\x18\xa6\x79\x13\xfb\x3b\x03\x38\x79\xb3\x9f\xe6\x4e\x49\x7c\x96\x44\xf9\xcc\x93\xa3\xac\xa8\x52\xb9\xac\x7f\x91\x73\x92\x66\xfd\xa9\x7f\x14\xb2\xcc\xa1\xa2\x00\x20\x4d\x52\x06\x36\x38\x3c\xc8\x00\xa4\xe0\x59\xd6\x3e\xd5\xb4\x60\xb3\x42\x9a\x47\xfe\x1b\x72\x46\x47\x4c\x6f\x38\x69\x9f\x6d\x42\x0e\xc4\x45\x87\xc8\x0d\x0b\x12\x52\x10\x3e\x66\xfc\x32\xcd\x37\xbf\xd2\x4c\xb3\xdd\xb1\x73\x8a\x32\x5a\x12\x2e\x2d\x47\x54\x47\x34\xce\x10\x1b\xe9\x1f\x59\xd6\xeb\x0c\x6f\xd1\x24\x87\xb6\x23\x71\x41\x63\x39\xc9\x4f\x49\x94\x25\x65\x60\x33\x35\x11\xd9\x00\x22\xf3\x33\xcd\x3e\x4e\x86\xb3\x34\x33\xd6\x3f\x72\x59\x52\xe5\xb2\x64\x0e\xe1\x03\x22\x25\x1a\xe4\xc9\x5a\x16\xe8\x7a\xf0\xdf\x19\x25\xc8\xbf\x72\xbd\x19\x5c\xb0\x51\x56\xa9\x84\x5f\x69\xe6\xc9\x2c\xa2\xa5\xd9\xd6\x7c\xb9\x3c\xdb\xff\x33\x87\xcc\xfe\xd8\xca\x65\xce\xc8\x34\xc4\xd7\xef\xe7\x59\xb3\xe8\x8f\x18\x2c\xd6\xff\x57\x1b\xb6\x58\x93\x96\x77\xd8\x32\x6a\x63\x0a\x52\xb1\x0c\x59\xc6\xee\x03\xc4\x0b\x33\x65\x48\x26\x43\xfb\x05\x98\xf8\x2b\x11\x60\x18\xb3\xc0\xc0\x04\x7b\x58\x24\x2a\xa0\x5c\x21\x13\x74\x05\x0d\x93\x10\xa6\x8d\x27\x53\xf8\xbb\xa2\x6d\x89\xb3\x93\x41\x46\x2e\x30\xb3\x6b\xfe\x35\x28\xce\xe6\x03\xbf\xff\x6e\x87\xb2\x9a\x1d\xca\xaa\xf6\x8e\xb7\x6a\xa7\x92\x33\x1e\xf8\x7e\xeb\xfd\xfd\xd6\x7b\xa9\x5b\xef\x65\x9f\x93\x14\x8e\xb8\xdf\xdc\x31\x5d\x25\xd1\x9a\xcb\xe9\xc0\xcf\x86\x10\x30\x89\x62\xa1\x5c\x33\x3a\x93\xa6\x73\xfb\x17\x08\xf7\xb2\xe8\xe4\x3e\x84\x77\x67\xfb\x64\x48\xc3\x1e\xd6\xa5\xc1\xc8\xd2\x0e\x6c\x42\xe4\x89\xa6\x13\xf0\xa7\x5f\x3a\xb3\x77\x29\xac\x5a\x88\x4d\x15\x76\x0d\x39\xb5\x75\x09\x78\xe0\xcf\xc9\x74\x89\x52\x23\x07\x6a\x4a\xee\x93\x65\x0b\x86\x24\x5f\x6e\x77\x4a\x58\xb8\xb8\x10\xd5\x60\xa6\xc4\x91\xf5\x15\xb2\xb8\x90\xf3\x2a\x62\xca\xfd\x4a\x67\x8b\x8b\x80\xde\x1c\xf6\x03\xa3\x79\x4f\x99\xa9\xde\xfa\xea\x2e\x46\x0a\x68\xc6\xed\xe7\xad\xf5\xcc\xfa\xa0\xdd\xc2\xff\x80\xd9\xe8\x58\x14\xbb\x2b\x87\x5e\xa1\x7c\x11\xe9\x8d\x75\xe4\x10\x5e\x5f\x4f\x61\x0a\x1a\xab\xc9\xd0\x5f\x5f\x4b\x36\x21\xb8\xfd\xf1\xe3\xbd\x6c\x83\x66\x26\xab\x55\x30\xf3\xca\xa6\xa6\xa9\x3d\x9b\x5d\xdf\x58\x61\x2e\x6b\xba\xcc\xe9\x45\x27\x9b\xc5\x9a\x3a\x6c\x17\x02\x66\x78\x5b\x29\x6a\x17\x97\x8a\x80\xdb\xf1\xee\x51\x2c\x82\xc4\x57\x5d\x08\x3d\xa7\x0f\xc4\xb0\x91\x32\xc1\xf3\x1e\x62\x73\x44\x52\xd3\x97\x8c\x34\x3a\xe6\x46\xc9\xf5\xa6\x95\xd7\x3c\xa7\x2b\x12\x7b\x78\x40\x15\x38\xeb\x4c\x22\x0f\x45\x21\x25\x92\xa2\x0b\xc2\x14\x38\xed\xcc\xdd\x3a\x19\xdd\x2f\x39\xa7\x7a\x33\x59\x3d\x16\x81\xe6\x6a\x40\x1b\x9d\x38\xe1\xf3\x63\x5a\x99\x17\x71\x5f\x2f\x1a\xb5\x96\xb5\xc2\x81\x12\x31\x19\x37\x98\xe2\xb4\x6f\xf0\xd4\xc4\x88\x15\xb9\xaa\x71\xbb\xcb\xcc\xaa\x3a\x4e\x78\xcb\xbd\x90\xc9\x9b\x4c\xa6\xf8\xea\xd8\x47\x82\xa9\xb5\x64\x51\x80\x02\xe3\xc6\xaa\xe1\xa5\xb3\x79\x2c\x57\xb3\xf2\xb6\x1a\x11\x9f\xda\x3f\x9d\xd0\x50\xcd\xd7\xda\x4b\x15\x19\x9b\x90\x07\x01\x3b\xc7\x1e\x98\x1f\xeb\xdf\xfa\x84\x98\xef\xdf\x7b\x8f\x28\x15\xb3\x61\xa2\xe8\x0b\xc6\x03\xc6\xc7\x1a\xc2\x4f\xa4\x12\x53\x63\x96\x04\x36\xca\xf8\xbd\x97\x4f\x2b\xab\x8c\xed\x58\x2b\xe6\x4f\xb9\x05\x01\x20\xdd\xe1\x18\x8c\x8a\x70\xfb\xba\xed\x41\x8a\x7d\xf5\x77\x23\x1d\xb1\x6d\xd5\xc6\x83\x2a\x35\x25\x71\xdb\x44\x86\x2a\x26\xef\x41\x68\xa3\x55\xdd\x3f\x17\xe6\xd5\x04\x61\x9e\xb3\x2c\xc1\xb8\xe5\x6e\xaf\xca\x73\x46\x2f\x76\x28\x97\x4c\xcd\x7a\x78\xa3\xce\x39\xfc\xa2\x37\xf6\x8d\x4b\x55\x1f\xfc\x8c\xb7\xf1\x3d\x45\xa7\x2d\x43\x6d\xb2\x1b\x98\xd6\xf2\x36\x2f\x75\xc6\x69\xd6\xbd\x2d\xcc\x6f\xae\x93\x26\x3a\x42\xde\x8e\xfa\x82\x29\x7f\xf2\x1b\xa3\x17\xc5\xbb\xc2\x52\x99\x66\x8e\x22\x95\x88\xe9\xbc\x8e\x42\xf8\xca\x95\x96\x7f\xc2\xd6\x40\xf8\xe8\x80\x97\x9c\xaf\x18\x77\xc5\x17\xbc\x87\xcf\x99\x64\x43\x66\x14\x27\xe3\x70\x16\xa9\x89\x71\xe2\x5d\x9e\x68\x09\x98\x5c\x2e\x12\x80\xaf\x37\xe5\xf6\x95\x4f\x24\xcd\xd7\x9f\xb3\x0e\x32\x2d\x61\x0f\x9b\xb7\x1b\x1f\x62\x1a\x7c\xa0\x33\x8a\x6d\x70\x8c\x1f\xa0\xa8\x35\x6d\xa8\x2b\x96\xaa\x7c\x64\x85\xfb\x2e\x5a\xa5\x09\x5b\x83\x25\x6e\x0c\x11\x3b\x11\x33\x7a\xe7\x3b\xea\x9d\x5d\x70\x73\xfb\xee\x62\x4c\x87\x22\x96\x2b\x33\x43\xbb\x16\x4d\x13\x5b\xad\x77\xef\x35\xbe\xa2\x44\x4e\xcc\xe0\x5a\x57\xe6\xa4\x6f\xec\x5c\x7d\x08\x06\xf1\x8f\xcd\x27\x0f\x37\x1f\xfe\x84\x61\x40\x0b\x40\x1f\x3e\x7d\xf4\xf4\xd1\x68\x29\xd0\x47\x8f\x1f\x93\x27\x8f\x96\x02\x7d\xfc\xe8\x09\x7d\x4a\x96\xab\xd5\x58\xa8\x2e\x03\xfa\xf4\xb1\xfe\x7f\x29\xd0\x27\x1b\xfa\xff\xa5\x40\x83\xc7\xeb\xeb\xeb\xeb\x4b\x81\x0e\x9f\x6e\xf8\x1b\xcb\xf5\xf5\xa7\x9f\xd6\xe9\x92\x78\xf5\x37\x37\x7e\x7a\x3c\x5c\x0e\x59\x64\xe3\xd1\x4f\xcb\x75\xe0\x09\xd9\x18\xfe\xbc\xdc\x14\x3c\x1d\x6e\x8c\xc8\xe6\x72\xe4\xb2\xb1\x31\xfc\x79\x39\xd0\xf5\xe0\xd1\x53\xb2\xdc\x14\x6c\x3c\x7e\xf2\xd8\x5f\x6e\x0a\x36\x7f\x7e\xb2\x39\x5a\x0e\xaf\xeb\x0f\x7f\x1e\xd2\xe5\xc8\x65\x7d\xfd\xa7\x87\x3f\x2d\x59\xeb\xfa\x93\xf5\x25\x57\xc1\xfa\xfa\x4f\x3f\x3f\x5d\x6e\x62\x37\xe9\xd3\xe0\xe1\x92\x53\xf0\xd3\x4f\xf4\xe1\x72\x34\xf0\xc8\x27\xa3\xc7\xcb\xe1\xf5\xe1\xc3\x27\x3f\x6f\xd0\xe5\x48\x7b\xf3\xe9\xd3\x8d\xa7\x4b\x81\x8e\x7e\x26\x3f\x6d\x2e\x37\x05\xa3\x91\x4f\x36\x97\xe3\x59\x74\xf4\xc4\x87\x15\xbb\x98\x13\x0e\x47\x0f\x9f\xac\x2f\x87\xac\xd1\xe8\x61\xb0\x24\x1f\x78\x44\x1f\x3e\xda\x5c\x0e\x59\x4f\x82\x47\xfe\xa3\xe5\x56\xc1\x4f\xc1\x13\xfa\xe4\x21\x2e\xd9\xa0\xeb\x4d\xa3\x60\x8d\x05\xd2\x75\x8b\xbe\x5b\x7f\xdf\xd5\x05\x4d\x1c\x2f\x9b\x58\x67\xd8\x09\x15\x68\x91\x8c\x12\x2d\x03\x78\xaa\xff\xec\xaa\x60\xc6\xe9\xba\x82\x3d\x05\x35\xf6\xfb\x7d\xb0\xc1\x73\x56\x9f\x79\x0d\x2a\xec\x67\xc5\x20\x2d\x59\x6a\xab\x2c\xc0\x41\xc5\x79\xe1\xcd\x75\x73\xf5\x6d\x1f\xcc\x10\xee\xfa\x86\x9f\x46\xd1\x2f\xee\xfc\x9f\x22\x79\xbb\x70\x45\x30\x7e\xdc\xfe\xa1\x92\x63\xc4\xf1\x13\x9d\x2d\x5b\xd6\xb6\x4c\x4f\x71\x61\xbe\xdd\x7d\x00\x0d\xfa\xaa\xcb\xc9\x14\xe6\xd8\x33\xd6\xb9\xf0\xfb\xfe\xfd\x96\xcd\xc0\x3b\x06\x21\x70\x7e\xcb\x08\x11\xda\x07\x6b\xc9\xeb\xa6\x49\x2e\x93\x9e\x2d\x92\x99\x0f\xd7\x12\x52\x6b\x39\xc2\x74\x9d\x4e\x7b\x55\xa5\xbd\x1b\x50\x55\xc2\x3a\xe4\x9c\x28\xf2\xad\x28\xc4\x4d\x97\x8d\xca\xaa\x33\x26\xd1\x5d\xd4\x3d\xbc\xcf\x7e\xe5\xd5\x0d\x24\xf4\xc1\x98\x1b\xbf\xf7\x2e\x26\x34\xa6\x3d\x0c\x37\x9c\xd8\x4b\x73\xca\x2a\x87\x8a\xaa\x01\x07\xd3\xbf\x73\x83\xcf\xec\xd0\x80\x20\xa0\x56\xf0\x95\x76\x43\x84\xde\x01\x64\xba\x8e\xac\x86\xcf\x5a\xf5\x0e\x09\x7d\xe0\x36\xbd\x80\x28\xd2\x09\x98\x9c\x32\x29\xb1\x87\x65\x32\x9c\x32\x65\xb2\xd4\x2c\xa2\xf8\xbd\xd5\xd2\x60\xec\x99\x53\x25\x36\x47\x15\xfd\x11\x42\x68\xb6\x7b\x1b\x9e\x48\x94\xb3\x58\x83\x65\x1d\x98\xe0\x51\x50\x29\x24\xc6\x89\x9e\x09\x6a\x2c\xdd\x62\xaa\xfc\x89\xfe\x4c\xa2\x88\xc6\xfa\x3c\x08\xf6\x66\xbe\xe0\x66\xa2\x31\xdc\x75\xec\xf9\x69\xf8\xbb\x4c\xcd\x94\x02\xd5\xa8\x9a\x30\xbe\x67\x98\x48\x0a\x64\xdf\x7b\x5f\xb7\x97\xa2\xa2\x62\xd9\xac\x2a\xe7\x52\x30\x23\x2f\xfc\x43\x5e\xb9\x65\x46\xfc\x9c\x3e\xe8\xe3\x8e\xe1\xc3\x3d\xf8\xb6\xf6\x81\x80\x2d\xc3\x94\x00\x5f\xf7\xef\xb7\x20\x1b\x7e\x38\x3f\xd3\x16\x81\x2e\xcf\xfe\x74\xb9\x29\x9e\x3e\x7e\x84\x7c\x30\x7b\xe8\xe8\x84\x0e\x17\xf1\x94\xa4\xee\xaa\x1d\x9e\x6d\x3d\x06\xce\x25\xa6\x11\x39\xcd\x04\x38\x98\x29\xb9\xec\x80\xfb\x81\xce\xc6\xfa\xba\x29\x11\xd2\x91\xee\x19\xb5\x88\x33\xd4\xb0\x68\xf9\x19\x64\xd8\x49\x7f\x6e\x5e\x8c\x63\x17\xa7\x3f\x4f\x56\xcb\x55\x64\x4a\x3c\xb7\x04\x99\x56\xe4\x87\xcc\x87\xbb\xef\xd2\xe5\x2f\x20\x91\x83\xff\xf7\xb6\xc6\x52\x37\x8a\x21\xa0\xb1\xdd\xae\x5a\x0e\xcf\x06\xc4\x6c\x07\xab\x73\x02\xdf\xbe\x91\xb9\x03\xbc\x40\x46\x84\xe3\x82\x66\x5b\xf7\xad\xf0\x64\x2d\xdb\x20\xef\xe5\x4d\xd2\x6d\xe2\x0d\x37\xc4\x80\x91\x50\x8c\x17\x3d\x2b\x2e\xdc\xb7\x7e\xf9\x6b\x56\x6b\x4e\x09\xa1\x72\x3d\x1f\xee\xf5\xd3\xd0\x74\xf6\x9a\xdf\x03\x83\xfb\x78\x9a\xa6\x1f\xfe\x8a\x3d\xb8\xd5\xeb\xe1\x6d\x93\x85\x3d\x73\x87\xb0\xe1\x49\xf6\x37\xb5\xba\xb3\x15\xaf\x32\xdc\xbb\x02\xd3\x1d\x6c\xdf\x81\xc6\x53\xe7\x1d\xef\x41\x7a\x23\xd5\x9d\x92\x33\xba\x17\xb4\x36\xd6\xdb\x2b\x85\xed\xad\xf5\x78\x9a\xb5\x98\x39\x77\x30\xd3\x3f\x11\x17\xb8\x5d\xe3\x81\x14\xfa\xa3\xe5\x0d\xaf\x21\xcb\x16\xfd\x21\xf3\xc7\x59\x75\xa6\x2a\x78\x0b\x4f\x58\x10\x50\xde\x1d\xda\x9b\x95\x1c\xa3\x16\xed\x2b\x6b\xde\x00\x55\xc1\x9b\x83\xa6\xc6\x02\x26\x23\x21\x29\x04\x6b\xa3\xa1\xa4\x4d\x70\x13\x16\x68\xc6\xb6\xb8\x9a\xc2\x52\x71\xe6\x1f\xf3\xfc\x85\xe6\x50\x58\x57\x5d\xde\x42\x84\x8d\xea\x18\x8e\x7d\x9a\x58\x67\xb1\xe1\xfc\x66\xd4\x5a\x73\x14\x1c\xc0\xa5\x98\x5a\xf1\x16\xd1\x2c\x56\xbd\x7d\x75\xc0\x38\xe5\xeb\x33\x2c\x56\xba\x83\xc2\x8b\x25\x17\x10\x38\x8c\x76\x74\x89\xfd\x3b\x77\x36\xd2\x05\x3d\x55\x7f\x73\xec\xf6\xee\xdc\x25\xc4\x73\x8c\x7b\xad\x4a\xe8\x59\xd5\xd5\x22\x08\x1c\xaf\xb6\xa2\x48\xb6\x3d\x1c\x68\x54\x22\xfc\xe0\x86\x72\x64\xc8\xa4\xfa\xea\x67\x54\x7d\x52\x7a\xc9\x68\x18\xf4\xb0\x16\x0a\xc6\x42\x33\x6e\xc9\xf8\x38\xa4\xe6\xac\xa6\xf9\xdd\x94\x5c\xda\x98\xc2\xeb\x9e\x3b\xc3\x99\x89\x80\xbb\xc0\xed\xea\x3c\xe0\xb4\xc8\xdc\x87\x23\x19\x54\x3a\x0f\xf4\xd9\xfa\x73\x2c\xce\x69\x3c\x0a\xc5\x45\x67\xd6\x43\xd2\x8f\x45\x18\xfe\x02\x82\x89\x8d\xfe\x8b\xb2\x37\x25\x1e\x8e\x2e\x7f\xc1\x6d\x13\x03\x7d\x91\x8b\x81\xc2\xaa\x3f\x11\xe3\x71\xea\xe1\xa9\x66\x71\x9a\x61\x6a\xe6\x58\xe4\x98\x39\xdc\xe0\x76\x8d\x8f\x1d\x45\xa7\x12\x1e\x8d\xe6\xdd\x0e\x15\x6c\xe7\x72\x1b\xf1\x46\xf1\xdc\x6c\x0a\x7b\xb4\x7d\xdd\x54\x80\x56\xb7\x6d\x70\x7a\x54\xd7\x73\xa3\x3a\xb9\x01\x65\x9a\xcd\xc8\x08\xb7\xf2\x0e\xf0\x8a\xea\x8d\xb5\xe9\xe1\x48\x08\x45\x63\xfc\xfe\xa6\x43\x5c\xc6\x3a\xec\x4b\x3f\xe6\x2a\xc8\x2a\x56\x00\xc1\x9f\x53\xe2\x50\xf5\x12\x47\xba\x52\x56\xbe\xf2\x4c\x58\xc7\x90\xe7\xd7\xa3\x1c\x5f\xca\xf4\xec\x18\xc5\x62\x1a\x59\x76\x25\x40\xb8\xfb\x4d\xd7\x7b\x44\xd4\xa4\x07\x4f\xd6\x4d\x22\xd8\xf4\x98\x44\xb0\x9e\xb2\x08\x68\xb5\xaf\xae\xbd\x0f\xa9\x7d\x6c\xd9\xb6\x2c\xa6\x24\x90\x6e\x39\x1a\x0f\x33\x29\xe2\x7c\xf3\x98\xd6\xbc\x57\x4e\x99\xc4\x7f\x38\x68\xdc\x7e\xb7\xfe\x3e\xd5\xb4\xed\xf1\x80\x5e\x96\xf7\x28\x3d\x67\xb8\xfd\xee\x5e\x4e\x5e\x37\xa3\xc1\xed\xe7\xb4\xb3\xd1\xa3\xef\x7f\xc8\xe6\x38\xeb\x24\xbc\x52\xce\xa9\xfe\x52\xbb\xd0\x9b\x89\xf8\x70\x0d\xfe\x15\xb7\xa8\xd5\xd4\x1b\xb0\x52\x1e\xaf\xaf\x2f\x25\x23\xd8\xab\x6e\xf0\x14\xb3\xc7\xad\x6a\x48\xd7\xe0\xe9\x45\x00\xd7\xda\x68\x63\x7d\xbd\x67\x35\x0a\x06\x13\xfa\x60\x8c\xe1\xde\x1a\x6d\x56\xf2\x36\xd3\xbc\x87\x95\xbc\x87\x69\xde\xa3\x4a\xde\xa3\x34\xef\x71\x25\xef\x71\x9a\xf7\xa4\x92\xf7\x24\xcd\x7b\x5a\xc9\x7b\xba\xbe\x8e\xaf\xab\x5d\xbf\x91\xb0\x62\x5f\x4b\x7c\x57\x7e\x2d\x54\x7e\xfd\xfb\x6a\xbc\x3e\x97\xb6\xeb\xbb\x3e\xeb\x8e\xe8\xb3\xdc\x22\x0f\xd8\x39\x0b\xbe\x26\xcb\x9f\x23\xf9\xb9\xbe\xdd\x44\xe8\x4b\xc7\x17\x8b\xc8\xbc\x70\xfc\x36\xf6\xb4\x94\xeb\xa4\xdc\x86\xc4\x31\x98\xb3\x16\x99\xc6\x4d\x17\x79\xc5\x9a\x5a\xb3\x9e\xee\x96\x6e\x63\x30\x25\x61\xb8\x23\x2e\x32\xb5\xb7\xc3\x5d\x0d\x1b\x70\xeb\xd7\xc1\x14\xb8\xc0\xf7\x05\xd7\x4c\x90\x60\x47\xf7\xd5\x88\x31\x16\x89\xa2\x71\xd3\x35\x75\xa3\xc6\x26\x80\x5e\x2f\xa6\xde\x94\x68\xdd\x9e\xa9\x47\xad\x58\x04\xe7\x9a\xbc\x61\x43\x13\xf5\xe6\xce\xbf\x15\x5d\x82\xae\x2e\xb7\x53\x65\x1b\x61\x3f\xa3\x3c\xb3\x15\x64\xbf\x1f\x60\x84\xdb\xde\xbd\x75\x77\xe0\x77\xd5\xdb\x2d\x03\xb4\x64\x2e\x4d\x43\x9a\xea\x6c\x2d\xa6\x30\xcd\xed\xac\x4b\x50\xd0\xf3\x9a\xbc\x90\xf1\xb3\x13\xe1\xec\x5b\xcd\x1c\x74\x21\x6e\x35\xbc\x5b\x38\x11\xad\xe2\x9b\xba\x13\x81\x9d\xdb\xb5\x8c\xea\x3e\x85\xe8\xbe\xb2\x3d\xfa\x92\x54\x57\xdd\x01\x9c\x9d\xfa\xd2\x74\x97\xb2\xcf\xdb\x25\xbc\x5b\x21\x36\x63\xa0\x9a\xa9\x73\xbe\x20\x65\x59\xb0\x5b\x24\xa9\xbb\xb1\x9f\xc2\xcd\xac\xeb\x51\x3d\x99\xc4\x84\x49\x1a\xf4\x72\x80\x1d\x93\x84\x3d\x3c\x14\x71\x40\xe3\x52\xae\x4b\xc4\x1e\x36\x82\x7e\x3e\xd3\x08\xb3\x1e\x0e\x48\x7c\x56\xc8\xd0\x09\xf8\xbd\x67\x5b\x03\xcf\xb2\xb6\x6e\x7d\x3a\xd0\xd0\xf7\x36\x72\x07\x87\x94\x3a\x57\x8a\xa3\x95\x48\x1a\xaf\x8d\x44\x3c\x16\x2a\x7b\x4a\x75\x17\xdc\x12\xc1\xc3\x30\x58\x6b\x64\x76\x32\x21\xfc\x0c\x4e\x42\x92\xd8\x57\x7a\xf7\x36\x3c\x80\x00\x25\x7b\xc3\x9b\xbd\xdc\xab\x40\x00\x6b\x7e\x4c\x08\x8f\xa8\xb3\xfa\xb0\x67\x7e\xec\x99\x72\x79\xb5\x8c\x41\x55\x8d\x32\xda\x36\xf6\x03\x1b\xb5\x2c\x53\x2a\x3b\x36\x47\x39\x83\xa3\x09\x93\xa5\x36\xc0\xd9\x57\xf9\x0a\xa9\xf4\x3a\xee\x87\x72\x0d\x29\x6e\xcc\xfd\x57\x4d\xb6\x79\xae\x56\x9b\x5b\x6a\x7e\x23\xaf\xf5\x31\xc3\x04\x25\xb0\x31\xf3\x02\x6f\x46\xf3\x9a\x5f\x6f\x68\x00\x7c\xa2\x5d\xb7\xbb\xc6\x61\x6e\x53\x35\xae\x9b\xeb\x55\x17\x61\x0b\x75\x86\x9a\x82\x1d\xe9\x76\x62\x2a\xa9\xba\x13\x04\xec\xba\x04\x5a\x44\xfb\x6d\xef\x82\x75\xd2\x34\x91\xea\x0d\xb1\x27\x79\x97\x3f\x8f\x9a\x73\xcf\x55\xad\x12\x76\x19\x68\x77\xfb\xbc\xf8\x6d\x2c\xac\x81\x42\x47\xb0\x97\xfe\xce\x56\xc2\x84\x48\x5b\x67\x73\x2d\xf9\xfe\xe5\x2a\xb1\xe5\x6a\x56\x15\xcc\x5a\xad\x6b\xb0\x74\xcc\xbc\x26\x39\x1d\x5c\xd1\xab\x74\xb6\xf2\x9e\xb7\xca\xb4\x56\x1e\x50\xed\xb2\xe3\xf4\xe2\xa8\xf2\xac\xb4\xdd\x2b\xd6\xce\xe7\xd4\x5e\x1a\x69\x6d\x23\x95\x41\xd4\x34\xf4\x57\x42\xc2\x16\xf5\x78\xfb\x79\xe9\x3d\xa8\x21\xf3\x05\xcb\xb3\x3a\xd6\x1a\x2e\xd0\xd8\xe5\x8d\xf6\x75\xbb\x57\x19\x61\xe5\x55\x6e\xed\xca\x2f\x11\x89\x01\x82\x21\x94\x21\xd3\x65\x00\x30\x37\x5a\xfb\xfa\x9f\x4e\x14\x0b\xe3\x98\x68\x29\x0f\xf5\xf0\xa4\x6e\x59\x0b\x93\x2f\x1a\xf7\x71\x91\xd9\xef\xdd\x7a\x85\x5f\x7c\xe4\x3d\xf7\xae\x36\xff\x18\xbc\x69\xb9\x7e\xfc\x78\x4f\x54\x1e\x94\x83\x19\xee\x02\xe6\x95\x63\x5c\x86\xde\xd2\xdf\xd9\x2b\x7f\xef\x6a\x0c\x3c\xa6\xd4\xf6\x91\x5e\x4a\x5c\xb5\xaa\xdc\xc5\xbe\xf4\x6e\x3f\xb7\x2e\x81\x4b\xeb\xbf\x5a\x20\xe7\x51\xa0\xfd\x9c\x27\x61\xd8\x33\x73\x7f\x7d\x9d\x67\x9b\xf3\xc7\xe1\xd7\x00\x2d\xdf\xf5\xda\xd2\x7a\x04\x4c\x76\x18\x07\x1f\x79\x58\x4b\x88\x4b\x3b\xd4\x77\x23\xea\x17\xb6\x33\xdb\x8c\xf5\x06\x8c\xaf\xaf\x2b\x8e\x10\x9a\x18\x79\x77\x01\x47\xef\xe6\xab\xae\x93\xa6\xca\x14\x95\xa3\xf0\x26\x57\xcf\x35\x9e\x11\x16\xd7\x9b\x2d\x80\xa6\x6a\xab\x9e\x12\x16\xd7\xea\x9c\x21\x34\x54\x59\x16\xf7\x72\xf5\xb9\xb9\xa6\x6d\xe7\x18\x3b\xdb\x87\x9a\xe4\xcb\x7a\x5a\x72\x0e\xae\x2b\x1b\x52\x09\x7c\xde\xb8\xf2\xbd\x70\x3d\x6b\xee\x47\x79\x6d\x36\x75\xa0\xea\xca\x01\x22\x0f\x54\x77\xc3\xcf\xd0\x50\xd9\x0f\x51\x06\x92\xb3\xab\xb2\x5e\x18\x04\x38\x2d\x27\x61\x38\x9b\xbf\xef\xe6\x78\x0f\xc6\xcd\x3b\x6f\x91\xe6\x8d\xb8\xbc\xa2\x9b\xdc\xcb\x8e\x02\x7b\x94\xaa\x56\x46\x4b\xe1\x43\x1a\xdb\xfc\xe6\x32\x59\xce\xa7\x0b\xca\x8d\x05\xec\x70\xb0\x77\x45\x79\x32\xa5\x31\x44\xe5\xbd\xb7\xee\x8d\xa9\xea\xd5\x28\x5e\xdd\xf0\xc1\xcb\xf4\x72\xe3\x37\x57\xb2\x2b\x22\xc0\x14\xfa\xf7\xc0\xc0\x6a\x43\xcf\x8d\xd9\xcb\x57\xcb\x47\x6c\xbc\x46\xf9\x39\x8b\x05\x9f\x56\x31\x72\x3b\x56\xb7\xc6\xb0\x41\xf4\x53\xe1\xe7\x5d\xa1\xbf\xf8\xfd\xc7\x8f\x57\xd7\x56\x6e\xca\xcc\x4c\xd2\x4b\x1e\xf0\x15\x9b\x8a\x0b\xf0\x28\xe9\xe3\xc7\x0c\xc1\xf6\xe3\x70\x34\x32\x1e\x90\x52\x48\x97\xf2\xf1\x23\x3e\x1c\x8d\x7a\x3d\x31\x1a\x65\xd0\xbc\x0c\xcc\x53\x58\xde\xeb\xe9\xe5\x29\x27\xe2\x02\xd2\x64\x06\x35\x48\xd3\x3e\x7e\x74\x06\xbe\x59\x26\xfb\x5b\x77\x6c\x4a\x03\x96\x4c\xf1\x32\xcb\xda\xde\xa4\x64\x5f\x9f\x5f\x33\x76\x95\xb6\x65\x25\x12\x5b\xb1\xc3\xf6\x20\x22\x3e\x84\x57\xeb\x5d\x1d\x25\xc3\x90\xf9\xbd\x0d\xef\x28\x66\xe7\x44\xd1\xde\xa6\x77\x14\x0b\x65\xf4\xa1\x0f\xaf\xbd\xad\x44\x4d\x8e\x62\x01\xf7\x6c\xbd\x2b\x17\x59\xa0\x97\x0e\x10\x7b\xbf\xd2\x99\x1f\x0a\x72\xd6\xc3\x67\xf6\x0b\x7b\xfb\x3b\x5b\x47\x3d\x1c\x06\x24\xc2\xde\x80\xc6\xe7\x34\xd6\xad\xd5\xa7\x6e\xed\xf4\x30\x09\xb0\xb7\xcb\xfd\x78\x06\xe6\x37\x3a\xf5\x40\x70\xda\xc3\x5c\x70\x5a\xce\x19\x28\x12\xab\x93\xfd\x41\x0f\x4b\xfd\xa5\x42\x89\xaf\x3d\xe8\x18\xe5\xca\x58\xca\x9a\xa1\x1d\x53\x12\xf4\x36\xbc\x97\x94\x06\xe0\xc3\x70\xd3\xdb\x16\xdc\x5e\xf9\xf7\x1e\x7a\x5b\x51\x14\x8b\x73\xda\x7b\xe4\xbe\x82\xde\x63\xef\x98\xfe\x69\x86\xfe\xc4\x03\xcc\xc8\x49\xef\xe9\xb5\xf7\x56\xd2\x58\xd7\x7c\xce\xd4\xcc\xd4\xbd\x1d\x53\x88\x10\xb5\xe1\x41\x2b\x9b\xde\x6e\xc0\x00\x63\xde\x0e\x84\x18\x0d\x74\xb5\xb1\x3f\x61\xa6\xda\xb4\x85\x27\xde\x31\x3d\xa7\xb1\x06\x78\xea\x5a\xa0\xc1\x89\xf5\x5c\xd9\xfb\x29\x4b\x7b\x11\x0a\xff\xac\xf7\x73\xd6\xfd\x8d\xf5\xac\x77\x1b\x1b\xde\x80\x72\x35\xa0\x7e\x12\xd3\x7d\xc6\xcf\x7a\x1b\x9b\xde\x4e\x4c\x46\xaa\xb7\xf1\xd0\xfb\x8d\xc6\x92\x09\xae\xe1\x1e\x79\x03\x70\xd0\xa9\xbf\x1f\x67\x95\xf7\x36\x9e\x5c\xbb\x79\x4e\xf1\x05\x28\x5f\xf7\xf6\x75\xbb\x7a\x5c\xe7\x8c\x5e\xf4\x36\x3d\x9d\xec\xdc\x8e\x81\x15\x93\x44\x11\x8d\xa7\x4c\x29\x1a\xa0\x0b\xa6\x26\x22\x51\x88\xc0\x00\x49\x88\xa1\xb8\x05\xd7\x9f\x34\xf0\x90\x6f\x8b\x71\xa1\xb2\xa2\xd8\xb6\x50\xaa\x3a\xa6\x7f\x25\x2c\xa6\x69\x85\xc8\x86\x74\x8d\x80\x4e\xcd\xa6\x7a\x6d\xf1\x49\xc2\x42\xc7\xb7\xf8\x6c\x28\x82\x59\x6f\xc3\x7b\x43\xfe\x14\x31\x53\xb3\xde\xa6\xf7\x96\x13\xce\xa6\x22\x91\x7a\xc6\x0d\x80\x6d\xd1\xd5\xe1\x9a\x0c\xd0\x28\x16\x53\x44\xf8\xcc\x36\x4e\x63\x9c\xd6\x64\xcb\xb8\x9f\x59\xf7\x4a\x85\x6d\x41\x89\xb3\x86\x6d\xd1\xf4\x77\x63\xd9\x30\xcc\x95\xbf\xf6\x0c\x46\x06\x4a\xd3\xc5\x55\x36\x73\xeb\xde\x11\x05\xdd\x75\x6f\xc3\x7b\xcb\x03\x1a\xa7\x13\x95\x52\xc7\x43\x07\x72\x40\x2f\x7a\x8f\xae\xbd\x23\x32\xb6\xab\xfd\x84\x0c\x21\x54\xaf\x5e\x7f\xc6\x86\x2d\x0d\x87\x76\xed\xfd\x3e\x11\x06\x4a\x93\x7b\x0f\x9b\x78\x1b\xaf\x62\x91\x44\x3d\x1c\x0b\xf0\x0a\xbc\x7b\x4e\xe3\x99\xe0\x54\x43\xec\x05\x3d\xbc\x8e\x0b\x49\xe6\x96\xc6\xa5\x60\x6f\x9f\x8d\xa8\x3f\xf3\x43\xda\xbb\x32\xc4\xb9\xee\xed\xb3\x73\xda\xdb\xc8\xd6\x86\x25\x5b\x8b\x24\xf8\xc6\x00\xe4\x68\x88\x9d\x53\x9c\x82\xbb\xa9\xb3\x3f\xf1\xb5\xa3\x75\xb3\x1e\xdf\x88\x40\x77\x9f\x9f\x67\x0b\xc0\xdb\x0e\xe1\x63\xd3\xd3\xcb\xc4\xf2\xb4\x55\x99\x04\x09\x8f\xe9\x5f\x09\x95\x6a\x19\x66\x31\x50\x22\xa6\x19\xcb\x7c\x33\x1b\xfc\xf7\x7e\x0f\xc3\x1f\xec\x1d\x09\xa9\xc6\x31\x85\xa4\xec\x1b\x7b\x47\x34\xf6\x05\x27\xe0\x08\x59\x7f\x68\xca\x8b\x19\xd9\x79\x01\x2e\x98\xf5\x07\xf6\x06\xff\xbd\x6f\xb8\x26\xb8\x17\x36\x9f\x18\x96\x71\x90\xf8\xaa\x77\xb5\x2d\xa6\xd3\x84\x33\x35\xb3\xde\xce\xc0\x4d\xa0\x49\xd1\x3c\xb4\xe4\x0b\xad\x87\xb3\x24\xec\x1d\x11\xff\x8c\x8c\xe9\xae\xd4\xc2\x3f\x23\xa1\xec\xe1\xec\x3b\xcd\xde\x0a\xce\x09\xf7\x69\xd0\xc3\xee\x2b\xcd\x3a\x8a\xe9\x94\x25\xd3\x1e\xb6\x1f\x69\xc6\x0e\x51\x64\x1b\xbc\xd3\xf6\xb0\xfe\x46\xe6\x07\xf6\x8e\x42\xc2\xb7\x43\x91\x04\x3d\x0c\x7f\x4c\xca\x80\x86\xa3\xd7\x42\xaa\x1e\xd6\x5f\x9d\x89\x90\x4a\x13\x2b\x51\x72\xbd\xb7\x6e\x3e\x36\x34\x2b\x84\xaf\xcd\xde\xe6\x63\xf3\xf5\xb0\xf7\xd8\xa6\x3d\xea\x6d\xac\xdb\xcf\xc7\xbd\x4d\x97\xfa\xa4\xf7\xf3\xcf\x3f\xff\x7c\xed\x81\x1d\xd5\xd5\x56\x10\x18\x1a\x87\x6b\xeb\x0e\x09\x82\xce\xe6\x53\xec\x6d\x85\xa1\x4b\x9a\x52\x9e\x74\x7e\xc2\xde\x16\xe7\x22\xe1\x3e\x75\xe9\x26\x18\xa2\xe5\x43\x8e\x2c\x5d\x26\xbc\xfe\x02\x4b\x89\xb7\x51\x5a\xb7\xfe\xd9\x49\xa2\xce\xa6\xcd\xda\x11\x17\xbc\x98\x09\xd6\x11\x2e\x7b\x9f\x8e\x54\x31\x3b\xa4\x23\x95\x66\x1f\xc3\x05\x51\x21\x1f\x1e\xc3\xa6\x00\x60\xa3\x91\x35\x2f\xf5\xcf\x4e\x12\xe5\x73\xf3\x3d\x30\xf9\xc6\xfe\x25\x83\xc8\x77\xc2\x40\x80\x99\x54\x0e\xa2\xd0\x0f\x03\x62\x1f\xe5\x6e\x29\x45\xfc\x89\xde\x8b\xd3\x6e\xa6\x29\xd8\x7b\x41\xe2\xed\x09\x89\xd3\x3c\x5f\xff\xe8\x0c\x49\xdc\x79\xf8\x10\x7b\xb0\xe7\xc9\xc2\x1c\x3c\xc1\xde\x0b\x21\xce\xa6\x24\x3e\x1b\x88\x90\x05\x19\xae\x4d\x62\x96\xbd\x15\x54\x32\xf5\xcc\x66\x00\x66\x67\xae\xc0\x98\x98\xe0\xd8\x7b\x01\x16\x6d\x5b\x96\x2d\x5a\x20\xf3\x64\x78\x13\x7b\xdb\xf6\x41\x84\xcb\x19\x85\x64\x8c\x35\x8f\x4e\x87\x32\xd4\x83\x51\x3a\xcd\x3c\x04\x4c\xb1\x33\x21\xe0\x3f\xd5\x57\x84\x83\x48\xef\x00\xe0\x2f\x4d\x3b\x6d\x9f\x10\x62\x6f\x5b\x44\x69\x33\xbe\x88\x66\xd8\xdb\x8e\x85\x94\x19\x9c\xf1\x9e\x84\x3d\xbd\x9c\x86\x44\xa6\x43\x0a\xec\x6f\xec\xe9\x29\x0e\x05\x49\xeb\x0e\xec\x6f\xec\x95\x90\xc0\x38\x06\xd1\xc5\x25\x44\x14\x46\xbb\x6b\xae\xeb\x4c\x9a\x55\x07\xee\x5e\x46\x84\xa7\x35\x52\x1e\x92\x78\x4c\x21\x59\x64\xf3\x09\x56\x93\xc6\xcb\xb4\xcb\xda\x74\x79\x2e\xf9\x25\x0b\x55\xb6\xf8\xa4\x88\x15\x5c\x92\xea\xbd\x26\x9b\xdf\x71\xcc\x82\x0e\x44\xb7\x1a\x11\x9f\x62\xef\x95\x38\x11\x29\x55\xeb\xe1\x77\x42\x32\xa3\x31\x90\xf6\x6b\xc2\x03\x39\x21\x67\xe9\xb0\x26\x2e\x01\x7b\x60\x4b\x5d\x5e\xd5\x7b\x5c\xd1\xb1\x09\x7f\x95\xa2\x75\x4c\xc5\x94\xaa\x78\x86\x61\xa3\x70\xa9\xc6\x1d\xf7\x3e\x93\xea\x45\x12\x86\x54\x65\xe9\x52\x75\x86\x90\xa4\xf1\x65\x24\x9d\x34\x53\xe8\x69\x7c\x23\x62\xfa\x5a\xc4\xec\x6f\xc1\x15\x29\x32\x96\xc7\xd8\x3b\x10\x6a\x2b\x0c\xc5\x45\x56\x6a\x48\x38\xf6\x8e\x76\x5e\xa6\x53\x11\x8c\xb0\x96\xca\xb3\x85\x04\x7e\xd8\xb1\x77\x94\x84\xd9\x9c\x47\xfa\x87\x66\x9d\x49\x3a\x12\x6a\xc8\xfe\x88\xc6\x32\xa3\x64\xf3\x54\xa5\xb3\xbe\xa1\x33\x44\x14\xa6\x15\x4c\x93\x50\xb1\x28\xa4\x9d\x8d\x9f\x75\x73\x46\x98\x48\x1b\x84\x9f\xd8\x08\xb9\xf9\x11\x3c\xd5\x69\x7a\x1a\xf2\x7c\xd4\xac\xa4\xce\xe6\x4f\xd8\x4a\x9d\x69\x11\x32\xe6\x36\x86\xec\x80\x66\x34\x24\x29\x0f\x74\x0a\x38\xce\x94\x59\xaa\xf9\xdd\x19\x53\xa2\x0b\x4c\x48\x9c\xb1\x5f\xaa\x2e\x44\x7c\xd6\xf1\x05\xe7\xce\xbe\x7d\x90\x23\x3f\x12\x46\x13\xd2\x81\x8b\x75\xec\x0d\xa2\x30\x23\x6c\xa9\x7f\x74\x1e\x3e\xc5\xde\x09\x19\x97\x3a\x7c\x46\x67\xd8\x3b\x61\xfe\x59\xc6\x95\x60\x21\xea\xa4\x01\xe0\xad\x90\x61\x71\x69\xf2\x77\x44\x32\x2c\xe7\x07\x90\xa6\xf3\xa7\xf4\x05\xc9\xaa\x55\x6c\xaa\x53\x63\x06\x8c\xa0\x96\x53\x2b\x9b\x09\x74\x5d\x80\xac\x72\xed\x14\xd6\xb0\xef\x02\x74\x95\x83\xa7\xd0\x86\x95\x17\xa0\x6b\xb8\x79\x0a\x6e\xd9\xfa\x5b\x4e\x8a\x9b\x5d\xc6\x52\xde\xf2\xb0\x40\xfe\x89\xfd\x8d\xcd\xb9\x49\x4a\x36\xe6\x79\x26\x09\xb8\xfd\x5d\xc4\x61\xb6\xd8\x43\x31\xd4\xe2\xa5\x7b\x54\xd7\xbb\xd2\x87\xbc\x9e\x79\x54\x07\x8f\x14\x3b\x12\x5c\x6d\x0c\x92\xc8\x72\x9b\x5c\x8e\x49\xc3\xde\x1b\x2a\x25\x19\xd3\x42\xe6\xd4\xa4\x61\x2d\xb6\xc9\x42\x0e\x89\x22\xa9\xf7\x86\xcb\x42\x2a\x6c\xe1\xaf\xd8\xa8\xd8\xc4\x18\x62\x36\xec\x50\x3b\x92\x2c\x23\x80\x24\xbd\x77\x84\xc3\x62\x3d\x49\x38\xd4\x3d\x52\x31\xf3\x65\xa9\x47\x90\x86\xbd\x23\x46\xdd\x56\x98\xe5\x46\x8c\xc2\x96\x58\xd8\x29\x73\xd5\xea\x49\x80\xec\x97\x8c\x13\x23\x97\x64\xb9\x23\x93\x86\xbd\x7d\x52\xec\x4d\xa8\x25\xfe\x6d\xf0\x15\x94\x4b\xf5\x45\x40\xb1\xf7\x9a\x86\x51\x21\x79\x42\xc3\x48\x8b\x9f\x3c\x01\x31\x30\xdf\x75\x93\x86\xbd\x97\xa1\xb8\x28\xb6\x1c\x8a\x0b\xec\x1d\x26\xc5\xde\x8a\x44\x69\x5e\x5b\x48\xd3\x1b\xce\x11\x89\x15\xa7\xc5\xf9\x8d\x4c\x1a\xf6\x0e\xe3\x71\xb1\x92\x78\x8c\xbd\xd7\x62\x5a\xec\xfb\x44\x4c\x81\xb9\x8f\x18\x67\x8a\x96\x5a\x30\x89\xd8\x3b\x11\x81\x28\x64\x29\x11\x08\xcd\xe4\x84\x4f\x83\x24\x2e\x16\x8b\x5c\x2a\x8c\x63\x2c\x20\x2a\x51\x71\x30\x90\xa8\x5b\xf5\xc5\xb4\x9c\xcd\x6c\xa2\x5e\x59\xe4\x5c\x1f\x52\xf2\xed\x42\x12\xf6\x7e\x67\xbc\x3c\xee\x0b\x48\xc2\xde\xb1\x20\xc1\x94\x14\x67\x22\x36\x69\x7a\x2b\xe1\x74\x56\x9c\x0a\x9d\x02\xa7\xb8\x04\x0e\xba\x85\x05\x61\x13\xb1\x77\x92\xf0\xe2\x20\x55\xa2\x8f\x65\xaf\x12\x56\x22\x85\x71\x02\x51\x99\x06\x53\x16\x16\x33\xe4\x14\xae\x61\x8f\xf5\x82\x56\xa5\xce\xe9\x24\xc3\xe4\x8a\x6d\x00\x97\xdb\x4e\x8a\x63\x91\x24\xa4\x12\x4e\x35\x67\x54\x95\x91\x37\x75\xa9\x05\x81\x3b\xb7\x56\x6d\xa2\x5e\x83\xe7\xa2\xb4\x90\x03\x48\xca\x38\x4a\x0e\xb7\x3a\xc5\x1c\x2b\x8a\x53\x1d\xea\xad\x36\xbd\xb6\x95\xa5\x55\xe1\x92\x73\x3b\x65\xae\x2c\x24\x59\x21\x4e\x4b\x01\xc5\xc2\x2e\x55\x9f\xdf\xc1\xe4\xf0\xea\x58\x33\x46\xb0\x16\x7b\x15\x53\xca\x7b\x78\x6c\x62\x9d\xfc\x41\x43\x58\x45\x33\xf8\xab\x73\xc9\x4c\x67\x92\x19\xbe\xf6\xcc\x39\xf7\x0a\x44\xda\x2d\xbd\x99\x6f\x19\x7f\xd4\xb4\x87\xdd\x17\x4e\x15\x58\x56\x93\xa1\x53\x72\x11\x1e\x7b\x38\xff\x4b\x0b\xb0\xdc\x07\x45\x8b\xf5\x71\x00\x6e\x8d\xe1\xe8\xa5\xe5\x07\x23\x73\x6e\x83\xb4\xe9\x44\xc4\x1d\x2b\x18\xef\x24\x51\x68\xab\x4c\x3f\x9d\xd4\xa8\xff\xcd\x64\x40\xf3\x17\x24\x3c\xda\xc3\x2f\x81\x74\xf6\xa6\x26\xcf\xfc\xd5\xab\x47\x52\xf8\x0d\x7f\xf5\xef\x73\x58\xc1\xe6\x2f\xf6\xfe\x25\x18\xef\x61\xfd\x2f\xf6\xf6\x29\xd1\xe3\x83\x3f\x5a\xc8\x1a\xeb\x2c\xf8\xa3\xd7\x84\xce\x7a\x03\xe3\x3e\x80\xd0\x37\xfa\x5f\xec\x1d\xfe\x6a\xfc\x35\xa4\xa2\xcc\x91\x13\x62\xac\x2c\x75\xe4\xa4\x28\x73\x62\xc7\xf6\x03\xdb\xe3\x7c\x0f\x9b\xbf\x4e\xc0\xd1\xbf\x8d\xb8\x7d\x4c\xa3\x70\xa6\x7f\x46\xe1\x4c\xff\x92\x14\x80\xc1\x42\xe9\x98\x82\xcb\x58\xf8\xad\x3f\x74\x8a\xd1\x18\x60\xfb\x81\xbd\x01\x0c\x66\x00\x63\x71\xf2\x91\xf9\xeb\xc4\xa2\x81\x11\x88\x8c\xc4\x03\x7f\xb0\x37\x60\x63\xae\x79\xa8\xfe\x8b\xf6\x52\x79\x67\x00\xc8\x04\x45\x6e\x0f\xc3\x1f\xfb\x4b\xda\x9f\x46\x05\x05\x9b\xaf\xa6\xc0\xec\x1b\x7b\xc6\x7b\x44\x0f\x9b\xbf\xfa\xb7\x39\x2b\xbc\xb5\x02\xba\xd5\xa9\xf4\xb0\xfd\xc0\xd7\xd7\xed\xeb\x45\x76\xa0\x46\xd9\x3f\xa6\x52\x25\x31\x95\x6b\x31\xf5\xc5\x98\xb3\xbf\x69\x2c\xd7\xc0\x1d\x49\xf5\x22\xa3\x11\xf6\x73\xd9\x76\xa5\xd7\x0e\x8b\x6c\x52\xe6\xf5\x8f\xf1\xfa\x1b\xa9\x39\xd0\x77\x7a\x3c\x31\xc4\x07\x5b\x76\x3c\x00\x7d\x97\xc7\x13\x8b\xb2\x7b\xe5\xb9\x03\xb2\xe0\x77\x79\x44\xf2\x82\x45\xcb\x0f\xc8\x40\xdf\xe5\xf1\x28\x12\x2d\x3d\x1a\x0d\xfb\xad\x5c\xdf\xce\x19\xc6\x39\x8d\xf5\x36\x1c\x76\x56\xe1\x84\x85\x42\xff\x4e\x48\x58\x8d\xa0\x4b\xc5\xbe\x19\x44\x9c\x53\xae\x3e\x04\x4c\x46\x44\xf9\x13\x1a\xcf\x1d\x6f\x15\xf8\xab\x5d\xdf\x9b\xfb\x62\x23\x2b\xb8\x30\x5f\x53\x1a\x8f\x29\xd8\xd4\xc8\xbe\x68\x5d\x5d\x7b\x57\xd0\xff\xb7\x92\x6e\x93\x48\x8f\xa0\x77\x6f\xc3\x33\x4a\xc9\x93\x98\xf8\x67\x5a\xbc\xbf\xb7\xe1\x25\x92\xbe\x24\x52\x1d\x11\x35\x91\xbd\x7b\x1b\xd7\xed\x1f\x74\x71\x99\x05\x5a\xe9\x3a\x04\xb4\x81\xbd\xb0\x1a\xbb\x80\x24\x6b\x43\x76\x4b\xad\x96\x9b\x94\xdd\x62\x42\xb1\x03\xb2\x9b\xff\x59\xb8\xb8\x67\x75\x13\xa8\x8f\xc1\x9a\xfe\x08\x0f\x6a\xad\x30\xe2\x44\x4d\x3a\x0e\x28\x0f\x7c\x17\x29\xb4\xb9\x4e\x18\xde\x92\xf5\x11\x1e\x34\x50\x7b\x3a\xfe\x28\xea\xd8\xcb\xb7\x06\x7f\x2a\x35\xe4\xec\x50\xea\x87\xac\x93\xab\xc0\x9a\xf1\xc6\x74\x4c\x2f\xcb\xbb\x80\xa6\x79\xf7\x1b\x09\xe7\x42\x56\xf4\x53\x83\xc7\x6e\x48\xf9\x58\x4d\x9e\x6d\xdc\xbf\x6f\x08\xfc\x5e\x3f\xcb\x7c\xb7\xf1\xfe\x79\xfe\x47\xef\xea\xda\xd2\x7f\xde\x34\x65\xeb\xe8\xa8\x6b\xbb\x02\xb4\xcf\xfa\xc2\xfd\x3e\xe4\xe1\xec\xe3\x47\xd1\x9d\xb0\x80\x0e\x26\xc4\x23\x7d\xd1\x95\x13\x92\x4f\xb6\xa2\xb3\x17\xf6\x79\x12\x86\xce\x44\x96\xdd\xbf\xdf\xd2\xa0\xe2\x62\xd7\x86\x3a\xbe\x7f\xbf\x15\xf6\x65\x77\x0a\xef\x29\xb8\x6b\xc0\xe5\x1e\xd3\xf1\xee\x65\xd4\x6e\x7b\xe1\xc7\x8f\x75\x70\x2e\xbf\xed\x91\x52\x45\x72\x42\xb2\xc2\xcf\xc3\x77\xeb\xef\x7b\xf2\xfa\x06\x6c\x82\x44\x91\x1d\x4a\x5f\xcc\x37\x83\x7e\x0d\x34\xd0\x35\xa4\xd0\x12\x0b\x2d\x63\x1c\xcd\x18\x1f\x7c\x1d\x12\xd6\x5a\xba\xf9\x82\xfb\x49\x1c\x53\xee\xcf\xea\x4a\xdc\xc5\xc5\x36\x6f\xb0\x81\xb5\x53\x59\x1b\xb1\x90\x2e\x78\xea\x9b\x12\x78\xce\x47\x32\x4e\xf8\x19\x17\x17\xbc\x1b\xf1\x31\xfe\xc1\xba\x2c\x01\x8f\xde\x4a\xec\x8b\x0b\x1a\x6f\x13\x49\x5b\x2e\x0a\xc7\xd3\xbf\x71\xcf\x7e\xb0\xc8\x7e\xfe\xcd\xa2\xcb\xec\xd3\x7e\x5d\x90\xd8\x7e\xc5\xe9\x97\x4a\xbf\xc6\x00\xa8\xfa\xba\x80\x69\x38\x17\xae\x83\x9c\x33\x0b\x36\x15\xe7\xee\x2b\x7a\x04\xf0\xe4\x9c\x55\xe0\x27\x6a\x1a\x42\xa6\xfe\xa8\xe4\xfa\x52\x42\xa6\x2f\x65\x25\x6f\x48\x94\xad\x5f\x4e\xec\x47\x24\xd3\x8f\x0d\xfb\xe5\xbb\xa4\xf3\xa1\xcb\x9b\xb8\x61\x42\x6c\x65\x3b\x26\xe1\xd2\x1c\x7c\x9c\xc2\xcf\xd2\x2c\xc1\x5d\xad\xc0\xb6\xec\x8f\x4b\x3b\x02\x5f\x04\xb4\xda\x4b\xe6\xca\xd0\x4b\x6a\xbf\x82\xd0\x14\x18\x32\x5e\x85\x9f\xa6\xbd\x8b\xc6\xe9\x17\x75\x9f\x63\x36\x72\xf3\xc1\x46\xee\x53\x9e\xbb\x6c\x5d\x9b\xc3\x40\x60\xbf\x88\x9b\x10\x79\x46\x95\x3f\x81\x96\x21\xd8\x6b\xa5\xed\xcb\xd0\x0d\xfe\x32\x94\x97\x29\x02\xcf\xa1\xc8\x65\x58\x9d\x82\x50\xb8\xe6\xd4\xa5\x9b\x8c\xa9\x6b\x37\x0d\x0d\xad\x4b\xab\x4b\x55\x29\x3d\x8d\x1e\xa6\xf4\x66\xda\x98\x46\x0f\x2b\x50\x51\x30\x82\xbc\x28\x18\x55\xf3\x22\xd7\x6a\x14\xa9\x4b\x03\x16\x55\x1b\x3a\x4f\x71\x71\x2e\x03\x03\x76\x2e\x83\x0a\x58\x20\x7c\x37\x41\xc2\x37\x60\x81\xf0\x01\xcc\xba\xca\x41\x9c\x5e\x58\xbb\xe4\x01\x3c\x27\xe9\x6a\xaa\x1d\x90\x11\x6d\xa9\xf6\x4d\xd8\xa9\x5b\xff\x2f\x59\x48\xf7\x7c\xc1\xfb\x6a\xfe\x43\xb4\x22\x53\x55\x0b\x5f\xd3\x38\x3e\x43\xff\x5a\x5e\x68\xa1\x7f\x25\xb7\x11\x28\xee\x8b\x8a\x2d\xa6\xcf\xcb\xd6\x08\xd0\x0b\x38\xb3\x09\xfc\xac\x68\xd0\x09\xe6\xc6\x67\xaa\xe3\xca\x9a\x01\x7b\xbc\x4f\xdf\x6d\xbc\xcf\xbb\x90\xcc\x9e\x62\xf3\xf6\xfd\xfb\x2d\xde\xc7\x3b\x02\xbd\x79\xf3\xe6\x0d\xfa\xe3\x8f\x3f\xfe\xf0\xd0\xeb\xd7\xbd\xe9\x14\xb7\xbd\xa9\xd0\x24\xd1\x4d\x94\xdf\x52\x6d\x88\x51\x1c\xb6\xda\x5d\xd3\xa1\x16\xbf\x11\x9d\xa5\xa3\xd9\x21\x8a\x7e\x2e\x22\xcb\x50\x16\xc5\xcc\xbf\x01\xce\x8a\xfe\x36\x75\x5f\x5a\xaa\xfd\x7c\xbd\xdf\xef\x67\x5e\xb8\xda\xcf\xf1\x7f\xac\xe3\x1e\xfe\x0f\xfc\x40\xad\x6d\xac\xaf\xf7\xf4\xcf\x4f\x42\xc9\x91\xee\xec\xe7\xc2\xc9\x98\x72\x1a\x13\x45\x3b\x2c\xf8\x52\x2f\xe0\x8b\x5d\xcd\xb7\xe3\xdc\x68\xbe\x5b\x7f\xff\x00\x77\xf0\x03\x4d\xa0\x8b\x5f\xf4\xa7\x43\x51\xcb\xf3\x90\xf1\xdd\x34\xb3\x6f\xae\x73\xbc\x7c\x75\xe3\x45\x42\xdd\xb8\x5e\xe1\xd8\x84\xa9\xbb\xa9\xc4\x98\x87\x2a\xba\x02\xae\xe8\x02\x64\x31\xd9\x21\x71\x4c\x66\xcb\x63\x2c\x2d\xf1\x6d\xa1\x8d\xc9\x2d\x33\xce\x25\xeb\xb4\xf0\x8b\xd1\x47\xcd\x93\xde\x15\xd0\x67\x4a\xdc\x45\xf4\x2d\x1a\xaa\xd9\xe6\xbf\x36\x1f\x0d\xa9\x7a\xa7\x3c\xfe\xbe\x4f\x53\x47\x57\xfd\xbe\xde\x07\x96\x65\xa5\x4c\x76\xb8\xf8\x62\x3e\x50\x17\x0c\x24\x1b\xc6\x3d\xb5\xd8\xbb\x48\x6e\x08\x82\xd3\x8e\x18\x2d\xbb\xcd\xb3\x51\xab\x55\x09\xb7\xff\xf1\xe3\xbd\x9c\x73\x6d\x88\xbe\x6f\x35\x35\xfd\xcd\x82\x64\x30\x12\x71\xcb\xb8\x93\xdf\xf8\x85\xff\xd3\x41\xfd\xc2\x1f\x3c\x68\xb3\x51\x8b\xbe\xe3\xef\xfb\x7d\x65\x5f\x0e\xde\x5b\xb7\xe2\xfa\xbd\x8d\x9b\x08\x06\x4c\x1e\x72\x7a\x38\xfa\x5c\x12\x41\xb8\xc2\x36\x1a\x7e\x6b\xdb\xe8\x0a\xd5\x2d\x5c\xef\xe1\x2a\xdb\x68\xf8\xcd\x6d\xa3\xe1\x0a\xdb\x68\xb8\x70\x1b\xe5\x42\x75\x56\x39\xe4\x19\xf8\x6f\xef\xa0\xc7\x85\xda\xfd\x6b\xe9\x1a\x01\x7a\x31\xe6\x56\x42\xdb\xb7\x87\xb0\x55\xd0\xb5\x00\x59\xa2\xf6\xe2\xaa\x1e\x57\x22\xfe\xc6\x50\x05\xbe\x18\x96\xab\x4e\xc4\x0b\x10\x15\xd1\x58\x1f\x30\x97\x55\x61\x3b\xf0\xbb\x88\xb0\xb9\xc3\x0c\x93\x98\x84\xf0\xee\xb3\x3a\x50\xc6\x47\x21\xf5\x95\x88\xd7\x42\x36\xac\x29\xf2\xd5\xad\x12\x5c\x97\x62\xc2\x03\x31\x2d\x1d\xd1\xbf\x8e\xd3\xff\x06\x59\xad\x3a\x31\x39\x8f\xfc\x8b\x9d\xea\xa4\x03\xa5\x24\xe8\x44\x44\x4d\xee\x88\xe8\x59\x90\xa1\x4d\x89\x31\x44\x6c\xe4\x4b\xf8\x21\x77\x83\x92\x8c\x8f\x93\x90\xc4\x2b\x51\x61\xbe\xd0\x9d\xa1\x43\x45\xe4\xd9\xb2\x1c\x03\x60\xbf\x35\x76\xa1\xd8\x94\x76\xc8\x58\xcc\x5d\x67\x41\x9d\x05\x56\x7a\x96\x70\xc4\x93\xc7\x6f\x57\xd7\xbb\x35\x16\x70\xf3\xe5\xfc\x0f\xe1\x3d\xe3\x12\x07\x41\x7d\xfa\x7c\x66\x74\xae\xb8\xed\xf1\x9b\x1c\x0b\x6c\x1b\x7d\x3e\x3f\xc2\x58\x91\xe2\xf9\xc2\x40\x4c\x0e\x35\xe0\xe7\x8a\x71\x66\x5f\x58\xde\xaa\xba\x59\xb5\xef\xdf\x6f\xa9\x3e\x78\x1b\xad\x57\x44\xeb\x9c\x96\xea\xca\x64\x68\xb8\x5c\x6b\xdd\xdb\x68\x3f\xe0\xa5\x84\x76\x57\x89\xb7\x51\xe4\x6e\x15\x6f\x82\x45\x3d\xcc\x3d\x3b\xca\xcf\x75\xc2\xba\x5c\x45\x4a\xb9\xfc\xe6\xc4\x94\xcb\x15\xe4\x94\xcb\x46\x41\xc5\x92\x9a\x31\xaa\x6a\xb4\xd3\xa8\xb7\xc4\xc8\x95\xed\x8c\x88\xe6\xad\xb3\x95\x4d\x94\xc0\x40\xc3\x93\x3f\x7c\x32\xb3\xcd\xd9\x0f\x6d\x1d\x1d\xdd\xbf\xdf\xca\xf9\x1c\x01\xa3\x0d\x4e\xa6\xd4\x93\xa5\x44\x3b\x14\x67\x69\x04\xb1\xae\xc0\x72\x1e\x39\x23\x67\x2f\x1b\x65\xaf\xe8\x62\x48\x78\xb2\x60\xff\x5c\x6b\x2f\x54\xc6\x6f\xea\xad\x60\x81\x0f\xbb\x3a\x07\x21\x8b\x8c\x5d\x32\x46\x38\x0e\xc5\x90\x84\xbb\xe7\x24\xec\xe7\xc8\xe1\x3a\xeb\x7d\x97\xfc\x49\x2e\x07\x54\x25\x51\xeb\xca\x8f\x85\x94\x3b\x62\x4a\x18\xd7\x34\xe4\x0b\x0e\xae\x28\x62\xd9\xbb\xc2\x8a\x5e\x2a\x24\xfd\x98\x45\x0a\xf7\x68\xff\x99\x3e\x7f\x5a\x37\x4a\x19\x22\xd3\x1e\xfe\x40\xbb\x31\x1d\x33\xa9\x68\x9c\x73\x16\xdf\xd3\x35\x63\x4f\xb4\xbd\x9d\x58\x44\x7f\x0b\x4e\xbb\x24\x51\x62\x87\x49\x5f\x9c\xd3\xb8\x7f\x43\xf5\x4c\x8a\xd8\x66\x0b\x14\x3b\x9d\x05\xb4\xe7\xa6\x53\x5c\x2f\x32\x46\x29\xcc\xde\x30\x16\x17\x72\x5e\xc8\x83\x22\x53\xa6\xd6\xaf\x5f\x0b\x83\x7b\x65\xec\xe1\xb4\x02\x6c\x5d\xfd\xf5\x5c\x8a\x19\x90\x81\xf6\x05\x57\xb1\x08\x43\x00\x5c\xb6\x48\xe6\xe0\x67\x4e\x89\x4f\x44\x73\x23\x9b\xb6\x68\x4e\x5b\x26\x23\x78\xc8\x2b\xa9\xac\xac\x20\x75\xbd\x88\x7b\x17\x50\xbe\x84\x73\x9c\x45\x48\xcf\x55\x51\x26\xc9\x46\xac\x2f\x5d\x26\x43\xfb\x92\x45\x94\x75\xe9\xb2\x7c\x09\x3b\x8b\xcb\x17\x00\x27\x74\x0b\xc0\x3f\x33\x25\xe4\x9a\xb6\xb4\xd0\xb4\x04\x57\xa7\x07\x45\x18\xa7\x71\x27\xa0\xc3\x64\xdc\x21\x01\x89\x54\xbd\x15\x6d\x4c\xa5\x08\xcf\x69\xbc\xe6\x3e\xe4\x1a\xb8\xf9\x66\x7e\x63\x2d\x9f\xeb\x00\x90\x61\xa5\xbe\xf3\xd9\x10\x53\xa7\x8a\x79\x3b\xc4\x8f\x1f\xb3\x5f\xeb\xef\xcb\x3c\xb6\xae\x4a\xcb\x71\xb3\xbd\xaa\x44\xe8\xcd\x45\x20\xb0\x99\x34\xef\x86\xf2\x93\xe6\xe8\x66\xb5\xe9\xca\xc4\x86\x29\x8b\xe1\xbd\xed\x67\x77\x71\x65\x50\x5d\x6d\xb8\x80\xe3\xeb\x85\xcf\x96\xea\x86\x91\x9d\xbe\x16\x1d\xce\x16\x94\xbe\x8b\x72\xe6\x92\x48\x08\x48\x31\x32\xac\x1b\xbd\x4e\x5f\x93\x5a\x9e\xe8\xa4\x04\x56\xc8\xfc\x8c\x21\x9d\x0b\x73\x6e\x3a\x98\xe7\x30\xe9\x20\x17\x1d\xc1\x6a\x86\x2b\xd9\x34\x0a\x69\xc7\x78\x12\x5e\xd5\x70\x39\x57\xd8\x82\x25\xb1\x73\xff\x58\x85\x28\xb4\x6e\x30\x99\x6e\xa0\x2b\x81\x77\xb2\x1d\x63\xa5\x62\x31\x3c\x51\x34\x1d\xac\x7a\x47\xf6\xa4\xc7\x6e\x6b\xca\x48\x71\xca\x0a\x48\xce\xad\x53\xea\xc2\x22\x92\xec\x88\xff\xae\xa6\x8c\x71\x21\x48\xba\xb1\x10\xea\xed\xf1\x7e\x4e\x1f\x60\x53\x3e\x7e\xcc\x92\x86\x44\xd2\xb7\xc7\xfb\xb9\xd3\x42\x28\x48\xd0\x22\xe0\x3f\x54\x64\xc2\x3d\x85\x04\x59\x4e\x60\xf9\x84\x02\x1b\x21\x8b\x49\xea\x9c\x72\xd5\x19\x26\x9f\x20\xcc\x40\x15\x2f\x12\x99\x93\xee\xd2\xa4\x26\xc9\x64\xf9\x32\x39\x09\x68\xd9\x42\xe0\x6a\x7b\x11\xfc\x67\x96\x36\xb2\xb6\x6f\x57\xd8\x30\x53\xd4\xc9\xd5\xd6\x31\xe7\xaa\xe5\x59\xc1\x1c\xf5\x55\xfb\x4a\x0f\x62\xee\x4e\xcf\x46\xad\x7b\x1b\xf7\xfa\x85\xf7\x2f\xba\xd5\xad\xac\x47\xaf\xa0\x43\xa6\x2e\xae\x0b\xe0\xc4\x29\x75\xf0\xbd\xbe\x9a\x45\x54\x8c\xd0\x05\xe3\x81\xb8\x68\xf3\xbe\xf9\xf8\x81\x86\x92\xa2\x06\x58\x33\xc2\x36\xef\x9b\x0f\x80\xbd\x2a\xc2\xf6\x1d\xac\xa4\xe1\xc8\xc5\x25\xe7\x7d\xfd\xeb\x1a\x38\xb2\x27\x17\x77\xf9\x07\xd1\xc7\x56\x93\x9e\xd5\xf7\xdc\x39\xa6\xb4\x56\xb5\x46\x60\x1b\xcd\x5a\x39\x75\x37\x50\xcb\x51\x4c\x47\xec\xb2\xed\xf1\x77\xe2\xfd\xc7\x8f\x2d\xfd\xa7\x4f\x3d\x2d\x19\x89\x88\xf2\xd6\xd5\x05\x0b\xc3\x1d\x2a\x55\x2c\x66\xbd\x72\x60\x33\xe3\x07\xbb\xab\xa7\xd5\xf8\x6e\xf6\x72\xfe\xb0\x8d\xeb\x17\xa4\x2b\xbc\xbe\x6e\xb7\xaf\x3f\x91\x74\x1b\x95\x84\x8e\x74\x9b\x49\x2c\x47\xb7\x7c\xb5\xad\x2b\x14\xe3\xf1\xa7\x1c\x53\x5d\xf9\x74\x25\xdb\x84\x26\x06\xb3\x1c\x7c\x8e\xb9\x34\x16\xf8\xcc\x8c\xc2\xb5\x7b\x7b\xe7\x53\x40\x59\xc7\x0c\x52\xdc\x00\xe5\x79\x34\x9a\x20\x4c\xe9\xc7\xbc\x93\x60\x3d\xe8\x67\xc6\x5e\x79\xac\x37\xc7\x5a\x8a\xf8\x9b\x52\x68\x26\x18\x39\x0a\x72\x29\x8d\x34\xb7\x6c\x91\x6c\x3e\x96\x2b\xe1\x36\xc0\x39\xd0\x9f\x79\x5e\xd2\x96\x6f\x61\xf7\xd3\xa7\x76\x9f\x76\x56\x15\xfc\x33\xf8\x0e\xb8\xb9\x48\x45\xd0\xcf\x7c\xa2\x5e\x45\xe4\xe7\x75\x56\x6c\xf3\x46\xec\x5e\xa1\x7e\xe1\x43\x6b\xd6\x6c\x6e\x44\xf9\x56\xb1\xfb\x91\x6d\x9c\xb4\x1b\x0a\x71\x96\x44\xcf\xdd\x47\xca\x2c\x7a\x59\x7d\x2e\xe2\xcc\x98\xaa\xc3\x0b\x4e\xe3\x16\x6d\xcf\x83\x5e\xe6\x8c\xdc\x8c\xbc\x86\x83\xd3\x17\xc0\x5f\xd3\x69\x62\x99\x53\x7f\x21\x70\xcc\x97\xb9\x19\x7f\xa3\x9b\xec\xfa\xe0\xa7\xb6\xb5\x28\x2e\x0c\x93\x79\xbf\xdb\xa9\xd7\xed\x7b\xeb\xa5\x9c\xd4\xf7\xf6\xbd\x8d\x52\x0e\xf8\xda\x86\xd4\x9d\x84\x84\x3a\x07\x7e\x2d\x08\x13\xf2\x43\x39\xd2\x47\x2e\x10\xac\x16\x3a\xb3\x08\xf3\xf5\x3d\xc4\xf9\x50\xf3\x66\x88\x5d\x92\x83\xc3\xed\x7e\xbf\x4f\xbb\xf9\xa2\x5d\x57\xd6\x85\x6c\xae\xd6\xfe\x6b\xea\x57\x7c\xf5\xda\x5d\xd9\xe6\xda\x35\xa6\x6e\x52\xb3\x2e\xd7\xbe\x69\xb9\x4a\x48\x95\x7c\xe9\x6d\xf3\xd8\xb0\xfd\x43\xd5\x7a\x36\x67\x3c\x6b\x7e\xa4\xb1\xb1\xf2\xc3\x73\x53\x0e\x71\x9f\x7a\x2d\xda\xff\xd7\xe0\xf0\xa0\x0b\x6f\x6a\x5a\x25\x3c\x67\xa0\xb4\x4b\xc2\x50\x5c\xbc\x14\xf1\x14\xf0\x53\x09\xdf\x34\x6f\x25\x99\x88\xbc\x5f\x3e\x50\x5b\x71\x55\x41\x2f\x0e\xf5\xc1\x80\x9a\x40\x4f\xc5\x7b\x3c\xda\xee\x02\x44\x0b\x07\x4c\x46\x42\xd2\x4a\x30\x91\x14\x82\x97\x2f\xce\x45\xfb\xe3\xc7\xd2\xad\x60\xbb\xab\x62\xa6\x05\xcd\x16\x86\xb8\x23\xb8\x7d\xed\x41\xe9\x3d\x1e\x25\xea\x25\x84\x22\xa1\x1e\xaf\xe9\x85\xd0\x28\x94\x13\x71\xc1\xbb\x43\xd9\xb5\xb8\xcb\xb3\x9e\x62\x09\x5e\xd3\x92\x6b\x6b\xc7\x8c\xa4\x5a\xa8\x66\xb0\xb6\xc8\x6b\x16\xcc\x85\x9f\xb0\x20\x03\x06\xff\x60\x8b\xa1\x9b\xf0\x58\x69\xfc\x90\x0f\x26\xe2\x62\x11\x5e\x1a\xd0\xc2\x21\x7c\x54\xa1\x26\x7e\x53\x14\x97\xea\x32\x48\x69\xae\x4a\x0f\x73\xe9\x9a\x02\x3a\xb7\x5b\x13\x80\x98\x5f\xdb\x62\x1b\x2f\xbb\xf2\x8c\x47\xea\x2f\x17\xa0\xbd\xb8\xe2\xa0\xf5\xd9\x20\xf1\x7d\x2a\x25\x5c\x4d\x6b\xde\xe2\x14\x35\xdd\xc8\xf8\x56\x6b\x61\x03\xf7\x16\x6e\x0d\xa9\x87\xa5\x29\xa0\xa9\xc2\xe4\xec\xf1\x91\x58\xbe\x38\xe3\x23\x91\x95\xfd\x9d\xc4\x7c\xf9\xb2\x17\x24\xe6\x59\x59\x88\x2d\xb4\x7c\x61\x1b\x82\x28\x17\x21\xeb\x7f\x29\x02\x96\xdf\x19\x5c\x7c\x81\xaf\x42\x9e\x4b\xf4\x52\x04\x34\x94\x6b\x79\x1f\xe5\x0d\x67\x1f\x77\xdd\x9a\x4b\x22\x4a\x95\x2f\x13\x6f\xf3\xbe\xa3\xea\x0e\xc7\x3d\x1f\xdf\x0b\x7a\xad\x9c\x21\x4c\xbb\xe5\x54\x6c\x6d\x2f\x22\x63\x3a\x27\x1b\x6a\x02\xef\x7e\x4d\x10\x23\x16\xce\xab\x40\x67\x83\x18\xde\x04\xf0\xa7\x18\x36\xe6\x89\x78\x3c\xa7\x6a\xdf\x06\x55\x29\xe6\xb7\xbd\x98\x9e\x43\xd0\xe4\x52\xfa\xf5\x42\x5b\x3b\x3b\xb9\x43\xe3\x90\xfb\x0e\xcf\xeb\x7c\xbc\xc0\x35\xed\x9c\xfc\xc4\x44\xe3\x68\x44\xab\xe0\x8a\x72\x05\xf1\x2e\xe6\x51\xcd\x5c\x00\xc5\x54\xd8\x9c\x0b\x71\x57\x9a\x49\xce\xa7\x71\xa4\xe6\x75\xbf\xd2\x79\x0e\xaf\xc1\xb1\x77\x65\x93\x7e\x03\xa4\x6a\x9c\xc6\xe4\xe2\x45\xb5\x35\x1b\x45\x77\x5c\x49\xd6\x18\x8e\x39\x09\x07\x22\x89\xfd\xca\x00\x86\x42\x84\x94\xf0\x72\x3b\xf7\x36\xae\x35\xa1\xdb\x40\x83\x8d\x1d\x77\x31\x03\xbf\x38\x41\xfb\x36\x18\x41\x07\xa2\xe9\x54\x74\x6c\xdf\x18\x79\xbb\xd1\xcc\x01\xb9\x98\x88\xf9\xb9\x0b\x2b\xff\x8d\xd1\x8b\xa6\xd9\x6f\x7b\x73\x67\xd1\x05\xe4\x6f\x2c\xbe\xf2\xbc\x7d\xc3\x93\xb5\x88\x17\xb9\x21\xde\xd6\x9a\xf0\xdc\x96\x27\x2b\x39\x9a\xed\x55\x52\x97\x9e\x8b\x40\xf8\x1d\x09\xde\x77\x3b\x31\x95\x49\xfd\x2b\xcd\x3b\x3d\x29\x19\x6e\x1a\x33\xe6\x94\x19\x84\x49\x95\x5b\x2a\x32\xae\xe2\xb9\x9e\x7f\xb7\x3d\xa6\xe8\xb4\xa6\x01\x9d\x5c\xb3\x95\x58\xd2\xa9\x4f\xad\xa9\x06\xd2\xeb\x3b\xe9\xa2\xa5\x95\x33\xac\x8d\x6f\x5d\x65\xf5\x4b\x78\x25\x6a\x01\xac\x75\x88\x0d\x03\xf7\xcd\x51\xcb\xf2\x4b\xf8\xd3\x85\x4c\x90\x26\xe6\x0a\x0c\x0b\x44\x96\x5b\xd8\x7b\x49\x3e\x5e\x5f\xbd\x74\xd1\xcc\x8c\x5c\x61\xe3\x87\xbd\x1c\xd5\x39\x5f\x75\x4d\x98\x6c\x8c\x3d\xd5\xa0\x42\xb5\x0e\xdb\x72\x6a\xbf\x7c\x55\xd6\x6d\x1b\x52\xdd\x72\xc0\xc1\xae\x8b\x37\x48\xfb\x78\x2b\x08\x68\x90\xf7\x63\x55\x07\x0f\x01\x5b\x68\x1f\xeb\x6d\x6f\x31\xb4\x0d\x5e\x48\xfb\xd8\x7c\x2d\x82\x77\x31\x0e\x69\xdf\x3a\x89\x5f\x58\x22\x8d\xf7\xa6\x07\xe0\xa2\xb7\x2d\x2a\xe3\x22\xad\xe9\x32\xf6\x7b\xf1\xb8\x6d\x74\x45\xda\xc7\xee\x7b\x51\x99\x6a\x18\x46\xda\xc7\x69\x22\x72\xa9\x4b\x57\x63\x22\x37\x16\xea\x80\xa4\xc5\x7d\xb7\xe1\xe4\xa0\xef\xe6\x7b\xe9\x46\x0b\xed\xa5\xee\xcb\xe8\x75\x46\xcb\x26\x1e\xc1\xdd\xa2\x65\x5f\xf7\xa9\x33\x8e\xc9\xac\xf3\x74\x7d\x7d\x59\xa2\x36\xa5\x86\x21\x59\x8c\xd3\x8c\xb2\x5d\x53\x94\xf2\x65\xda\xca\x91\xb8\x29\x19\xd3\xa0\xf3\x64\x71\xb9\x3c\xa1\xaf\x36\xba\x3c\xb9\xaf\xd8\xd9\x3c\xd5\xaf\xd4\xdb\x2a\xe9\x2f\x4f\xdd\xab\xce\x5d\x46\xdc\x37\xeb\x62\x1d\x5e\x72\x74\xbe\xfa\x56\xfe\x6f\x71\x78\x5a\x62\xb3\xbe\xf9\xe1\x69\xee\x06\xeb\x5a\x86\x40\x20\x8d\x27\x2b\x07\xe5\x82\x95\x2c\x04\x3c\x16\x21\x5d\xae\x4a\x0d\xb9\xa8\xda\x95\xa9\xa2\x91\x14\x60\xde\x9b\xde\x88\xd7\x10\x4d\xd5\xb2\xf6\xb6\x88\x44\xf6\x45\x85\x48\xdc\x4c\xa9\x05\x0a\x98\xda\x7c\xab\xb1\xab\xcd\x0b\x85\x7d\x17\xd0\x04\x90\x92\x67\x6d\x6e\x4e\xd6\xac\xcd\xcf\xe4\xc0\xda\x6c\x77\x1e\xa9\xcf\xcc\x9d\x03\x54\x2d\xa5\x44\x69\x84\xe3\x32\x4c\xb3\x7e\xc9\x45\xe7\x5d\xbe\x44\x98\x46\xb9\x5d\xaa\xc8\xc6\x75\x7a\x52\xa1\x95\x91\x67\x7d\x2f\x1c\x66\x6a\xc7\xef\x9c\x51\xc7\x01\x8d\x97\xef\xed\x38\x16\x49\x34\xa7\xd6\x9c\x48\xac\x1a\xce\xe7\x85\xf4\xfc\x81\x3f\x97\x51\x6c\xb8\xd5\xee\x3f\x7b\xf7\xfe\xba\xed\x49\x7d\xa0\x2b\xcb\x20\x9a\x78\x0b\xb2\x87\x73\xbe\x9a\x92\xf9\x94\x9c\xc1\x59\x30\x27\x6d\x40\xa1\x76\xfb\xba\x78\xb8\xab\xc3\x65\x9d\x72\x8f\x49\x13\x90\xb8\xdc\x95\x74\x2e\x6b\x64\xa1\x7a\x31\xc8\x3d\xb1\x48\x33\xb3\x2a\xda\xfd\x3e\xed\xa6\x31\x90\xbb\xd0\x22\xb4\x0d\x41\x90\xbf\x64\xd3\xba\xc1\x3c\xa5\xd6\x9f\x6b\x56\xef\x41\x45\x06\xcc\xf5\xc0\x0a\x80\x15\x0c\xf4\xdc\x9e\x5d\xce\x80\x4e\xfd\x50\x29\x04\xc8\xaa\x29\x93\x06\x89\xae\x16\x49\x85\xb0\x9a\x62\x85\x50\xd2\x56\x7e\xc0\x58\x2f\xfc\x20\x38\xa6\x3e\xe5\x55\xa2\xb0\x4b\xa2\x06\x2b\xc6\x73\x6b\xab\xdd\x95\xc9\x50\xc5\xc4\x57\xad\xa7\x1e\x0e\xc8\x2c\x37\x3b\x16\x24\x87\x3f\x5b\x5b\xbb\xdd\x65\x72\x40\xa6\xf4\x30\xde\x1a\x29\x30\xd3\xba\x6e\x7b\x09\xc4\x64\xfa\x22\x1d\xb1\x2b\xba\xae\x23\xf7\xef\xcf\xef\xf6\x0b\x08\xca\x6e\x6e\xaa\x17\x3a\x7a\xb7\x3b\xec\x48\x84\x41\xfd\x0b\xbe\x6f\x7d\x7f\x9d\xbf\x05\x2e\xd8\xe2\x60\x87\x74\x4a\x8a\xc5\x2c\x7c\xf3\x66\x1b\x4e\xc8\xce\x68\xf3\x4e\xca\xfc\xc6\x0d\xbe\x54\x17\xac\x94\x80\x4a\x7f\x05\xf0\x50\xaf\xb4\x46\x0c\xd4\x95\xf0\x45\xc2\xd5\x76\xfd\xc6\x32\x67\x6b\x33\xc5\xcc\x6d\xd7\x0a\x1b\x7e\x18\x8a\x8b\x7d\xc0\x4f\x95\x21\x9e\x51\x59\xb3\x33\xdd\xcb\x2c\xaf\xf2\xac\x4f\x03\xb7\xdb\xf7\xef\x97\xbc\x1e\x56\x41\x3e\xd3\x46\x08\x51\xb0\xe5\x31\xd5\x98\xd5\x1b\xe2\x02\xe6\x9d\x99\x81\xa5\x34\x88\x3d\xda\x1d\xb8\x1f\xdd\x23\x23\x3e\xd1\xa0\x7d\x6d\xeb\x3e\x8a\x21\xf6\xe0\xa7\x57\x0c\xd5\x64\xd5\xea\x33\x9e\xff\xc9\xb5\x42\x2d\xed\x6b\x4f\x4e\x48\x4c\x83\xdf\x99\x9a\x54\xa5\x95\xd5\xa4\x9b\xa5\x99\x1b\x48\x55\x9d\x29\x35\x44\xf6\xcd\x9e\x26\x73\xc2\xe1\x57\x52\xdb\x8e\x92\x30\x04\x80\xf2\xda\x48\xeb\xc6\x1e\x76\xb5\xd4\xac\x15\x8c\xbb\xbe\xe0\x3e\xc9\x6f\x5d\x59\xd1\xb6\x87\x11\x6e\x57\x21\xd2\x0a\xdb\xe5\x1d\x6d\xde\x99\x11\xb0\xf5\x0d\xcf\xf6\xdc\x89\x88\x92\x38\x12\xf2\xd6\xee\xb6\x3d\xb3\x36\xca\xb7\x4b\xcd\x7c\x79\xe9\x59\x80\xed\x65\x91\x58\xb1\x50\x7c\xb8\xbd\x59\xe0\xcd\xb3\x50\xbb\xf9\xce\x15\x2d\x40\xe1\x75\x7b\x67\x35\xbd\x41\xf6\xd6\xbd\xe1\xb8\x5e\x19\x0c\xad\xd5\x6d\x40\xf5\x21\x30\xf0\x90\xf8\x67\x7a\x11\xf0\xa0\x63\x3a\x8a\xf0\x83\x3c\xf3\xd6\xb5\xb5\x1f\xe0\x5f\xb0\xde\x9d\x86\xe3\xd1\x17\x6e\x16\x2d\xec\xd4\xd2\x44\x26\xe2\x31\xe1\xec\xef\x1a\x8f\x3e\x77\x6c\xc5\xcf\xb7\xd3\xb1\xe1\xd0\x9b\x4d\x75\xa6\x84\x85\x73\x34\x7e\xe0\x3a\x68\x8e\x9d\x91\x0b\x5f\xc5\x83\x48\xb0\xca\xbd\x74\xee\x72\x4e\xcb\x5c\x5b\x5c\xf0\xd9\x54\x24\x72\x0b\x6c\x21\x57\xb1\xcd\x99\x92\xcb\x93\xea\x55\x75\x03\x33\x79\x78\xdd\xf6\xd4\x84\x7e\x05\x3b\x9d\x88\x8c\x69\xde\x4d\xc2\x1d\xa6\x9b\xa8\x4a\x16\x9a\x5c\x14\xa9\x24\x46\x94\x07\x8c\x57\xaf\xe5\xfd\x09\xe1\x63\x7a\x54\x9b\x9b\xd3\x6b\x19\xb0\xad\x0b\xc2\x14\xe3\xe3\x63\x13\xa4\x79\x01\x74\x7a\x79\xd0\x08\xa7\x05\x93\xd7\x44\x6e\x2f\xd7\x87\x02\xf4\xb2\x5d\x29\x14\x5a\xba\x47\x07\xf4\xe2\x88\x2c\xee\xd2\x6a\x24\xa5\xe7\xe5\x4e\xef\x78\x99\x7d\x40\xed\xbe\x55\xbc\xb4\xb8\xfd\x33\x75\xce\x46\xb0\xb4\xff\x39\x1b\xc1\x42\x72\xd5\x46\x70\x59\x35\xe2\xa7\x1c\x27\x16\xce\xb2\x5d\x68\xff\x26\x6c\x43\x5c\x70\xa3\xa6\xae\xe7\xc0\xdf\x99\xc7\x4d\xb9\xc1\x9d\xa6\x8f\x25\xae\x27\x17\x18\x87\xde\x86\xf1\x72\x48\xcf\x69\x45\xac\x69\x56\x96\x49\xfa\x57\x42\x79\xd5\x5a\xb8\xa1\xc4\xfa\xe6\xa3\xeb\xb6\x67\x32\x6b\x28\x27\xe3\x4a\x9a\x29\xc0\xab\x91\xa5\x8d\x9d\xc1\x72\x7d\x0e\x76\x3e\xc1\x2a\xbb\xde\x8e\x3a\x2f\x2a\xd6\x2c\x62\xa9\x88\x4a\x56\xe8\x7f\x4c\x43\xa2\xd8\xf9\x27\x18\xaf\x2b\x32\x3e\xa8\x53\x07\xc0\x94\xd6\x9d\xff\x27\x9b\x58\xcb\x7b\xc2\xdf\xe3\x41\x9d\x0e\xbd\xa9\x20\xda\x58\xff\xcf\xbc\x46\x00\xc0\xda\x9d\x8d\x76\xbe\xb6\x6d\x59\x55\x12\xa6\x99\x73\x6f\x4d\x32\xa8\xd4\x5f\xf1\x94\xc4\x63\xc6\x3b\x21\x1d\xa9\x4e\xaa\xb5\x80\x4b\x80\x09\x91\xc7\x29\xb1\x94\xdb\x4b\xc9\xa8\x6e\x10\x25\xed\x3e\x80\xb5\x9f\xad\x5f\xaf\x7e\x5e\x67\x4e\x74\x79\x2b\x69\x6c\x99\x62\x16\x53\x0c\xe3\x7e\xbf\x9f\x6f\xcc\xcd\x33\x6e\xdf\xbf\x9f\xa5\x9b\xc9\x35\xaf\x60\xef\xdf\xcf\xa1\xd7\x10\x12\x64\xd4\x6a\xfb\xba\x86\x53\x0e\x14\x51\xb4\x6b\x5b\x3f\xa0\x17\x1f\x3f\xde\xb0\x8a\xb7\x3c\xa0\xb1\x61\xd2\xed\xeb\x6c\x6c\x26\xe5\x98\x92\x60\xd6\x5a\x71\x68\x37\x6d\xfe\x7a\x79\xe6\xce\xee\xf6\x51\x73\x3e\xe3\x5e\xb0\xae\x6f\xc1\x08\x75\x35\x36\xfd\xf3\xcf\xd7\x6d\x2f\x9a\x77\x7c\x5d\x79\x81\x80\xea\xb9\xb2\x3e\xb3\x9e\xd7\xaa\x27\x0b\xf4\x92\x83\x6d\x9b\x5b\x69\x67\xd1\xbd\x62\xad\xf7\x9a\x6b\x5d\x9e\xde\x9c\xba\xbf\x63\xae\xea\x3a\x11\x89\x15\xf3\x59\x44\xee\xf8\xab\xb8\x05\xa4\x36\x5f\xa9\x71\x0b\x3a\xeb\xf9\xaf\x47\x16\x10\x7a\xe1\xfe\x6f\xb9\x5d\xf5\x5b\xd2\x91\xd7\x3c\xff\xbc\x73\xf4\xf3\x05\x1e\xc8\x05\xd4\xf8\xd6\x9e\xf7\xf0\x92\xf9\x82\xbf\x14\x73\xb4\x66\x00\xc0\xe6\xb4\x12\x53\xc5\xe2\x79\x27\x9d\x09\x91\x7b\x53\x7d\x64\x2b\x53\x8e\x6b\x1b\x7b\xd8\xb5\x32\x5f\xbc\x48\xa1\xda\x2e\x80\xdb\x0d\x84\x8c\xe5\xa9\x48\x2f\x92\x7f\x0f\x83\xcd\x45\xfc\xe0\xe6\xd6\x9a\x50\xf3\xfc\x77\x6e\x00\xf2\x86\xf0\x1a\x1d\x70\x09\xe8\xb0\xee\xb8\x5e\x63\xd6\x19\xcc\xa1\xb6\xd5\x2c\x44\x8d\xc5\xf5\x62\xb8\x37\x4b\x99\x91\x6e\x8b\xa8\x72\xb6\xa9\x42\x9d\xd4\x3f\x25\xfa\x14\xfb\xd5\xfd\xbc\x71\xc6\x7c\x50\x1b\x79\xa0\x19\x70\xee\xc6\x32\xff\x42\x6d\xf9\xb5\x95\x79\x2a\xff\xf7\xb3\xcc\xf9\x6e\xf9\xfa\xdd\xf2\x75\x69\xcb\xd7\x9b\xd8\x91\x7e\x0e\x33\x9e\x55\x6f\x75\xbf\xdb\xb2\x7e\xb7\x65\x2d\xda\xb2\x2e\x6d\xb6\x04\x41\xa8\xbe\x89\x27\xad\x6e\xcf\x3c\x58\xe6\x49\xca\xa7\xbc\x5f\x17\x5c\xc5\x6c\x98\xd4\xa8\xe7\x33\xf6\x03\x8f\x2a\x57\x54\x24\xe4\x2e\xbf\xdd\x43\xaf\x66\x31\xbe\xfe\x7e\xa0\xcc\xff\xe6\x40\x04\x9a\x08\xe7\xf5\xc1\x51\x55\xb3\xf9\x8f\x7b\x76\xd5\x04\x31\x21\x72\x3b\x87\xac\xaa\x51\x47\x9a\x37\xff\x24\x91\x07\x2c\x1c\x26\x26\x44\x9a\xe7\xab\x95\xba\xcd\x04\xcc\xaf\xd6\xc2\x94\x6b\x74\x8f\x0f\x97\x31\xad\xae\x76\xd5\xd9\x40\x97\x2a\x4d\x9f\xee\x55\x5e\x57\xba\x67\xab\x73\xab\x4d\xa1\xca\xf5\xa6\x17\x45\x55\x1d\xb0\x7d\x1e\xba\x40\x05\x6c\xa1\x2a\x68\x4d\xe9\xa7\x82\x59\x97\xb3\x00\xb9\x29\x58\xb9\xea\x1d\x4b\x78\x15\xfd\x95\x49\x9f\x5f\xad\x03\xaa\xe0\xd7\x51\x6b\x05\xbf\xee\x29\xf1\x7c\xfc\x3a\xa8\x72\xbd\xd9\xdb\xc2\x72\xc5\x29\xf9\xcf\xaf\x39\x03\xcb\x57\xbd\xb4\xe8\x9d\xc8\x3b\x6e\x15\x72\x0b\xca\xb1\xf9\xda\x37\x17\x00\xb1\x99\x51\xe9\xcd\x69\x25\xbf\x3d\x34\x60\x4a\x34\x1e\x5d\xeb\x4a\x90\x60\x5a\xd5\x0b\xcf\x2b\xa0\x79\xcb\xdb\x1a\xef\x23\xf3\x5b\xe1\x24\x9c\x29\xe6\xaf\x54\xc8\x38\x89\x5f\xa9\x19\x1f\xac\xfc\xaa\x6e\x3c\x40\xfc\xad\x26\xeb\x09\x6c\x38\x88\x66\xe7\x8d\xdb\xb4\x9e\xba\x0b\xea\x4b\x6f\x4c\x39\x8d\x89\xa2\x2e\x34\x65\x8d\x6c\x98\xab\xb2\xab\x62\x36\x6d\xb5\x0b\x4f\xe1\xb3\xfa\x6c\x6e\xce\x40\x3d\x0b\xeb\x49\x6d\x44\x4d\x13\x5f\x53\xe5\x7f\xb5\x2b\x37\x41\x55\xb7\xd5\x91\x08\x8c\x97\xe2\xb5\x91\x88\xc7\x42\xad\xe5\x5d\x9d\x7f\x19\x87\x7a\xdb\x69\x8b\x05\x7d\xfb\xc0\x3a\x92\xae\x75\x60\x0c\xf7\x7e\x46\xd2\x69\xf6\x72\xac\xb7\x3d\x63\xc9\xd4\xce\xdc\x29\x9a\x61\x16\xdc\x60\x57\x98\x6e\xae\x79\xdc\xee\x9a\x12\x47\x44\xca\x0b\x11\x07\x10\xac\x65\xb1\xd7\xbf\x0a\x5e\xad\xc3\xf9\x2f\xee\xbf\xf6\x58\xb7\x9b\x22\x76\x81\x57\xe8\x21\xbc\xba\x7a\xa3\xf7\x85\x65\xde\x4a\xcc\xf1\x4a\x7c\xaf\xd1\x0b\xb3\xbd\xe2\x54\x31\xe1\x92\xe9\x51\x9f\x88\x16\xd6\x85\xbb\xa1\x18\x43\xf0\x01\x0f\xa2\x09\x65\x64\x61\xd0\x92\x77\x29\xad\x13\x34\xe5\xd3\x2c\x48\x5d\x96\x20\xc9\xec\x64\x42\xf8\x99\x04\xe7\xc4\xc6\x93\xa6\x7d\x53\x92\xf5\x3a\x8d\x64\xa8\xcb\x80\x27\x99\x2d\x79\x34\x89\x89\xa4\x2d\xfc\x12\x66\x0c\xb9\x19\xaf\xf8\x9e\xc5\x43\x11\xcc\x70\xbb\x4b\x82\x60\x3b\x24\x52\x56\xed\x85\x3b\xc0\xcf\x3a\x1b\xeb\xeb\x28\xe8\x8c\x42\x7a\x89\xfe\x4c\xa4\x62\xa3\x59\xc7\xde\x04\x74\x7c\xca\x15\x8d\x11\x09\xd9\x98\x77\x98\xa2\x53\x69\x93\xf4\xf8\x03\x9a\xeb\x73\x7d\xdb\x31\x9d\x8a\x73\xfa\x59\x9a\x5f\xec\x18\xb6\x42\xdc\x75\x1a\xbe\xcf\x1a\x04\xfc\xe4\xcd\xfe\x0b\x12\xcb\xae\x6b\xb8\x75\xc5\x82\x1e\x7e\xbd\xbe\x7f\xfc\xe7\x1a\xdd\xc0\xc6\xac\xa5\xf7\xe3\x15\x96\xb3\xe9\x50\x84\x12\xf7\xde\xbd\xf7\xe0\x46\x9d\x82\xab\x2f\xdc\x7b\xf7\xee\xa9\x87\x03\x76\x8e\xdf\x7b\xef\x36\x36\x3c\x0c\x01\x62\xb0\x07\x94\xe8\x70\xf1\xde\x7b\xf7\xf3\x7b\xef\xdd\xba\x87\x4f\x4f\xf9\xe9\xa9\xd2\x09\x73\x4a\x0d\xc5\x65\xa5\xc8\xdc\x52\xa1\x18\x8b\xba\x12\x59\x21\x36\x1d\x43\xa1\x4d\x0f\xcb\xd8\xc7\xde\xbb\x87\xeb\xde\xbb\x77\x9b\x8f\xbd\x77\x6e\xdd\x69\xf9\xcd\x1a\x43\xe3\xf7\xef\x3d\xbc\x06\x12\xa3\xbf\xa6\xeb\x7e\xee\x0f\xfb\xd8\x7b\xb7\xf9\xd0\xc3\x59\x40\xfa\xf7\xef\xdf\xdb\x6e\xc0\x85\x12\xf6\x70\xea\x5b\xdd\xa6\x93\x50\xd5\xa4\xba\x4e\xb3\xe9\xb8\x33\x0a\x13\x5d\x93\xe9\xf9\xc6\x7a\x63\xf7\x6b\xc6\x9c\xc4\x61\x5a\xd0\x2b\x8f\xc4\xf4\xe8\xfd\x7b\x6f\x44\x42\x49\x4d\xb5\xa8\x85\x6b\x61\x49\x14\xbd\x16\x52\x95\xa0\xdb\xb8\xae\x47\x8d\x89\x8d\xf3\xc2\x78\x67\x24\xe2\xe9\x9c\xd9\xd1\x3d\xfa\xd9\x83\xbd\xc2\x2e\x83\x4e\xe4\x38\x86\xc7\x93\x30\xf4\xde\xbd\xc3\x26\x43\x83\x03\x30\x71\x57\x95\xef\x36\x1f\x79\xeb\xde\x3b\x3d\x61\x29\x88\x2e\x03\x93\x93\x1b\xce\x9c\x11\x94\x52\x2a\x3f\xdf\x7b\x78\x42\xe4\xee\x39\x09\x71\x0f\x6a\xbc\xfe\xd1\x98\x5c\x5d\x99\xc0\x47\xa0\xe7\x58\x62\x4d\x77\x27\x43\x89\x57\xda\xf1\xce\xac\x47\xfc\xbb\x21\x4b\xdc\xa8\xe7\x95\xdd\xfa\x73\x76\xba\xb8\x45\xdb\x20\x2c\x4d\x5b\xf4\x82\x1d\xfc\xcc\x87\x48\x0c\x0d\xb9\xa1\xf0\x49\x38\x50\x22\xce\x6e\x68\x2b\x30\x20\x94\x1c\x91\x98\x4c\x25\x90\x0a\xed\x5d\xc5\x74\x14\x53\x39\x01\xb9\x40\x8f\xe7\x3a\x7d\xe6\x81\x71\x41\x66\xc8\x84\x29\x4e\x2f\xec\xe3\x9a\xe3\xc1\x6f\x47\xdd\xa3\x58\x4c\x99\xa4\x2d\xd5\x7f\xe6\x42\xed\x2f\x78\x82\xa9\x5b\xc6\x25\x17\xf9\xb4\xab\x44\x37\xd7\xbf\xae\x06\x6a\x3f\xb7\x6a\x08\xdc\xab\xcf\xf7\x5c\x7e\xc1\x84\x05\xea\x2f\xd8\x5b\x35\x86\x57\xe0\xf5\x01\x1f\x3e\x7e\x54\xad\x7c\x78\x06\x83\x7a\x2d\x30\x52\xe5\x6b\xf0\x11\x0b\x69\xab\xdd\x55\x13\xca\x5b\xb4\x66\xe0\x69\x81\x29\x89\x1c\x38\xcd\x8b\x56\x69\xdc\x1f\xe8\x13\xe5\x8a\xf9\x7a\xaf\xc3\xb9\x5f\x22\xee\x9d\xa5\xc1\x2b\xb8\x6d\xac\xd5\xee\x3f\xbb\xaa\x91\xb2\x8c\xd5\x0d\xf8\x04\xd7\xfd\x29\x23\x17\x3c\x75\xe7\xe3\x3c\xd8\x59\xc6\x1e\x6d\xf7\xea\x52\x6d\x09\xaf\x3c\x6b\x0e\xe1\x6d\x4f\xb5\xc0\x71\x3d\x75\xfd\xa9\x07\xaa\x6b\xd0\x16\x35\x5e\xef\x41\x1c\x35\x94\x65\x48\xb2\x3c\x8f\x29\x41\xe6\x32\x6c\x5d\x2b\x8a\xeb\x29\x0b\xb8\x23\x32\x0d\x79\xb9\xf6\xe7\x5f\x0f\xc5\x1f\xcb\xc9\x34\x8f\x3c\xcc\x46\xd8\xee\x36\x4c\x76\xe8\x5f\x09\x44\xcd\x30\x9b\xa7\x53\xf8\x00\xce\xf4\x06\x61\x24\x6e\xb7\xf5\x98\x5d\xeb\xaa\x54\xa5\xde\x82\x11\x42\xcd\xbb\xa5\x94\xa2\x2a\xfa\x20\xfb\x9f\x2d\x16\xe5\x72\xb7\x32\xea\x65\x7c\x8c\x2e\x98\x9a\x20\xb7\xa6\xba\xdd\x6e\x69\x23\x2b\x55\xe4\x04\xa2\x0d\x2b\x10\xe1\x35\x22\x25\x55\x72\x8d\x4d\xc7\x6b\xc3\x44\xce\xc0\x5f\x58\x77\xcc\x46\x35\xe2\x89\xab\xa7\xbc\x4f\x46\x9a\x5b\x50\xa5\x97\x46\xef\xdd\xfb\x6b\x83\x8e\xfc\xc6\xba\x22\x5a\x2d\x65\x7f\x61\xbc\x3a\x1c\xa2\x1c\x7b\x60\x82\xa3\x11\x61\x61\x12\xd3\xf9\x78\x8d\xca\x42\x59\x3a\x28\xbb\x8c\x72\x72\xc9\x4d\x31\x7a\x63\x89\xa4\xb2\x26\x57\x97\x49\x80\xd2\x1b\x04\x12\xaf\x3e\x6c\xd3\xe7\x3d\x97\x57\x25\x95\xf4\x94\xe7\xcd\x3f\xa6\xe7\xd5\x1a\x73\x85\x85\x6c\xff\xf0\x18\x3f\x27\x21\x0b\xb6\x63\x1a\x68\xca\x20\xa1\xec\xdd\xdb\xf0\x62\xaa\xb9\x6e\xfe\x58\xdc\x10\x74\xc9\xed\x93\x92\x2a\x3b\x70\x46\x65\xeb\xca\x68\x5e\x31\xf6\x9c\xe0\x6b\x9c\x6b\x34\x55\x07\x71\x90\x1a\xaa\xd2\x62\xb4\x89\xbd\x55\xaa\xcd\x06\x8c\x72\x17\x6f\xdd\x09\x25\x81\xd9\xe3\x07\x70\x9b\x2e\xe2\x16\x7e\x17\xd9\xd9\xe8\x07\xc3\x09\x91\x93\xf7\x46\x3d\xa7\x4f\xba\x3f\xd0\x54\x6d\x7e\xff\x3e\xbe\xba\xea\xee\xbc\xd0\x10\xd7\xd7\x5a\x1a\xa8\xd3\x45\x80\x30\xa6\x51\xa7\x92\xa8\x10\x87\x03\x28\xa8\xd5\xbe\x72\x41\xaa\xe6\xe2\xab\xac\x3c\xc9\x0d\x15\x03\xd6\xb0\x5e\x23\x4e\xbf\xb0\xf2\x96\x1f\xa4\xd1\xb0\x68\x26\x5f\xb4\x9a\xc6\x92\x6e\xfb\x1e\x6d\xb7\xbb\x3e\x51\xfe\x24\x27\x22\x58\x7d\x62\x99\x3e\xb0\x77\x6f\x5d\x6f\xbf\x73\x86\x6b\xe6\x73\xde\x50\xdd\xac\x7e\xda\x68\xc3\x80\x44\x5f\x60\xa4\xd7\x2b\x69\x3e\x0c\x43\xf9\x26\xb4\x7a\x9f\x7e\x26\x90\x13\x71\xb1\xaf\x07\xac\xb9\xc6\xad\x0a\xfc\x55\x1f\xaf\xb5\x52\xb8\x35\x8f\x68\x90\xc4\x73\xc2\x69\xda\x53\x50\xfe\xd5\x49\xe7\x76\x1d\xcf\x97\x94\x41\x1f\x99\x09\xd6\x57\xd5\x43\x91\x95\x9d\xae\xaf\x8d\xa4\xea\xe9\x81\xd2\x2e\x19\x8a\x58\x99\x77\xa0\x52\x84\x54\x37\xd6\x52\xb6\x1b\x2b\xb7\x60\xc5\x08\x08\xa9\x6f\x7d\x98\x5a\x92\x68\x18\xf0\xba\xe9\x4b\x8d\xd0\x9c\x4d\x60\x6e\xf1\xa5\x25\xdb\xd7\x15\x9d\x6b\xaf\x48\xbd\xcb\x28\x5f\xed\x6e\x72\x03\x85\xab\xed\xc5\x77\x35\xeb\x7c\x66\x73\x47\x4e\x24\x4f\x9e\x6e\xfc\xfe\x13\xdb\x48\x3e\x8b\x96\xb5\x28\x6d\xe7\x05\xd1\x8c\x5c\xdf\xcf\x11\xa9\x17\xa9\xf6\xe6\x29\x6a\x6f\xaa\xab\xfd\xf6\xd5\xb5\x77\x4f\x63\xdb\xa4\xb4\xcd\x7a\x3a\x47\x3d\x3b\x77\x38\xba\x5c\xc7\x38\x56\x5a\x40\x79\x0d\xc2\xdd\x62\xf2\xab\xe9\x88\xf1\x21\x64\xbb\x32\x12\xb1\x25\xc5\x5d\x90\x05\xb3\x7e\xa4\xbf\x1b\x66\xa9\xa2\x7e\x86\x68\x8d\x1d\xc6\xa3\x44\x65\x5a\x67\x05\x9e\xcb\x30\xac\x73\x4d\x02\x01\xce\x86\x1f\x85\xc4\xa7\x13\xeb\x29\x51\xf7\x41\xf8\x62\x1a\x85\x54\x01\xe5\x38\xe1\xd4\x20\xc0\xfc\xd0\x64\x9a\xf5\xd5\x22\xd0\x9e\xa4\xd0\x54\x24\x92\xaa\x58\x0b\x68\x18\x7b\xa9\xc0\x87\x5c\xd1\xb2\x36\x7b\xde\x79\x7b\x1e\xf6\x41\xd6\xbc\x4d\xcc\xbf\x75\xa2\x69\x86\xfc\x7c\xd2\xd7\xc2\xbf\xa2\x97\xca\xa1\x3f\x95\x9e\xdd\x0c\xbc\xcd\xc4\xe9\xc6\x49\xe0\x54\x5d\x88\xf8\x0c\x19\x57\x3a\x28\x27\x81\xe7\xaa\x5b\x65\x56\x4a\xb8\x9d\x83\x9c\x6f\x64\xcd\xa5\xf7\xba\x59\x57\xf2\x49\xcb\xce\xfc\x0a\x73\x5e\x99\xe5\xec\xa2\xc8\x8c\x3a\xfd\xed\x66\x3a\xed\x50\x71\xa6\x75\x9d\x49\x1c\x83\x6f\xf9\xac\xc8\x9d\x5d\x63\xff\xab\x31\xbd\x68\xdd\x54\x96\x8e\xbb\x50\x64\x6b\x09\xeb\x0c\x13\xa5\x04\xcf\x06\x6d\x3d\x98\xe1\x90\x8d\x27\x0a\x3b\x8c\x7b\x58\xf0\xed\x90\xf9\x67\xe6\x86\x51\x0f\x30\x3b\x5c\x79\x78\xdb\x16\x7a\x15\x53\x0a\x7d\x55\x71\x42\xbd\x2a\xdc\xbe\xad\x6c\xc0\xc6\x7c\x0f\x00\x1b\x6f\x2b\x8b\x1a\xe3\x9a\xcb\xca\x79\x1c\x61\x33\x9d\x28\x2b\x18\xe9\xe1\xf2\x90\x42\x8a\xa5\xc8\xea\xf1\x5c\x37\xcb\xf8\x39\x93\x6c\xa8\x45\x0d\x8b\x5f\x8c\x0a\x41\x1e\xd0\x54\x75\x1e\xc2\x0c\x39\x4a\xdb\x33\x35\x21\x3f\x5f\x55\xe5\xca\xf4\xb6\xb9\x8f\xad\x33\x64\xfc\xac\xa3\x44\x36\x7f\x46\x51\xa0\x29\x12\x0e\x7e\xee\xd2\xf7\x7d\x5d\x95\xd6\xfe\x64\x26\x92\x18\x39\xe2\x7b\xbe\x8c\xa2\x7a\x39\x62\xd4\xbd\x78\x38\x7f\x76\xdf\xbd\xc3\x02\xfe\x62\x99\x0c\xa7\x4c\x19\xc4\x2e\xba\x56\x9f\xd7\x81\xdb\xb9\x9a\x2e\x9e\x83\x6e\xa4\x05\x16\xc9\x1d\xb1\x71\xbb\x41\xbf\xbf\xd9\x5b\x69\xe8\x78\xfc\x29\x1a\x28\x77\x52\xef\xe5\x8c\x35\xeb\xf4\x88\x96\x7f\xc0\x99\x3e\xa7\xe2\x29\xc7\xbb\x5e\x0e\xdf\x77\xe4\xc0\xcd\x36\x7f\x3d\x7a\x3c\xda\xfa\xe9\x53\x0e\xdc\x8d\x97\x49\x35\x17\x49\xfb\x62\x3c\x66\x7c\x8c\x44\xa2\xea\xef\xe3\x6e\xe3\x2e\xee\xf6\xec\x55\x4a\x93\xb5\x3a\x57\x00\xc5\xd5\xdd\x60\x0a\xb7\x6f\xf8\x9a\xbb\x4c\x49\xbf\xb7\x05\x1f\xb1\x78\xaa\x93\xa6\x89\x54\x6f\x88\xf2\x27\xbd\x7b\x1b\xd9\x5d\x87\x51\xe5\x2d\x36\x8d\x05\xb8\xd4\x32\x16\xa0\x40\x5d\x93\x2a\xeb\xeb\xf5\xab\x56\x5b\x5f\x30\xfa\x5c\xf1\x9a\xde\xcc\xd9\xdd\x50\xbf\xc3\x90\xeb\x2c\x8a\x69\x57\x89\x33\xca\x6f\xa0\x11\x3d\xd6\xc3\xfb\x6e\x81\xba\x84\x6a\xd4\x10\xc2\x1d\xe1\xd4\xbf\xbd\x59\x7b\xf2\x3f\xf2\xc0\xff\x6e\x80\xfa\xb5\x35\x9a\x77\x4c\x9d\xd9\x9c\x98\xb3\x22\x75\xec\xb9\x03\x34\x9d\x3b\x3b\xc0\xcf\x79\x36\xa4\x0e\xa2\xd9\x84\xf4\xb3\x59\x8b\x16\xd7\xdf\x0d\x36\xdf\xaf\x27\xd3\xae\xd2\x4d\x88\xf8\x70\x37\x64\x84\xf9\xb2\xf6\xea\x83\xaa\xd9\x44\xcd\x8b\x40\xc9\xa6\x51\x48\x3b\x00\x9a\x33\x8c\x71\xd7\xf4\x41\x07\x4a\x76\x20\xeb\x4b\x6e\xb8\x39\x43\x99\x05\xc7\x92\x65\x4e\x16\xc5\x37\x2f\xb9\xe7\x57\xb9\xb2\xb8\xdd\xf5\x43\x4a\xe2\xad\x30\x6c\xb9\xcb\xd5\xc2\x86\x9f\xdd\xc7\x1a\x13\x84\xbd\x00\x7b\xb4\xcb\x82\xbc\x71\xa3\x0c\x93\x31\xbc\xd7\x0a\x93\x71\x21\x9d\xc6\x8c\x84\x90\x03\x5f\x9f\xfe\x00\xc6\x56\x68\x9b\x80\x3a\xd3\x3c\xe8\x84\xc9\x81\x7e\xd0\x72\xb7\x21\xcf\xfd\x5c\xfe\x36\xf7\x77\xa6\x26\x22\x51\x83\x64\x34\x62\x97\x2d\xfc\x3b\x0d\x7d\x31\xa5\x48\x09\x94\x59\xc5\xac\xb4\xb1\x1b\xe2\xbc\x23\x1b\xfb\xde\x4f\xe3\xe8\xcf\xbf\xc9\xdb\xe5\x36\xf6\xc7\x1e\x0e\xc9\x4c\x1f\x4a\xa6\x44\x2a\x1a\x77\x38\x39\x67\x63\xe7\xda\x1f\xd4\x2b\xff\x35\x61\x01\x3d\xc8\x92\xdf\x7b\xef\x54\x9c\x50\xd8\x1a\x33\x16\x5d\xa9\x48\x09\x11\x0e\x49\x6c\x6b\x79\xaf\xb9\x7f\x5e\xf7\x56\x2c\x33\x8e\x59\xb0\x96\x77\x0e\x9f\x96\xa9\x57\x64\xb9\x7d\xa2\x54\x83\x64\x01\x2d\xb5\xd9\x5c\x7e\xee\xd6\x6b\x6b\x72\x32\xe0\xca\x77\xb0\xce\xd5\xdb\x0d\x6e\xfd\xec\xc6\x9e\x16\xbc\xc8\xe8\x33\xc8\xcb\x19\x73\x6f\x36\x0a\x87\x64\xaa\x4e\x7f\x94\x48\x8b\xe9\x49\x64\x74\x75\xf6\x61\x2c\x22\x3c\x40\x63\x0a\x0a\x3c\x24\x15\x81\x08\xd1\xab\xdc\x71\x56\x13\xeb\x34\x6b\x25\x9d\x6b\xc3\xd4\x9b\x80\xa3\xcb\x4f\x9c\x95\x47\x6c\x35\x5a\x86\xeb\x4c\x28\x31\x5e\xc2\x53\x05\xbc\x15\xdb\x02\x2a\xfd\x9c\x10\xd9\x28\x4b\x95\x33\x72\x26\xa5\x8e\xe6\x1b\xb4\xc8\xb9\x1e\x09\x3e\x14\x24\x0e\x0c\x5b\xe8\xb8\x50\x6f\xae\x4b\x8e\xe5\xe5\xf8\x98\x61\x75\x69\xbf\x2c\x44\xda\x9d\x14\x30\x4d\x31\xf0\x4d\xe2\xd3\x9c\x09\x58\x9c\x79\x33\xd1\xaa\xc8\x01\x57\x17\xad\xa4\x14\x77\x43\x62\x59\xb5\xd3\x5f\x51\x26\x34\xcf\xe1\x07\xe7\x7e\x83\x66\xc5\xe4\x2f\xb2\xbc\x5d\x5d\xf2\xa0\x4b\x89\x1e\x8b\xde\xc3\x8c\xe2\x76\xde\x81\x71\xa9\x1e\x49\xd5\x4b\x16\x4b\x75\x9c\xf0\x54\x8a\xd1\x0d\x87\x54\x5d\x81\xa2\xa2\xa7\xae\xfb\xf4\x13\x8c\x51\x03\xea\x8b\x80\xbe\x3d\xde\xdb\x16\xd3\x48\x70\x08\xef\xd8\xae\x68\x82\xea\xba\xc6\x64\xd6\xb3\xe7\x19\x54\x3a\x1b\xb8\xdd\xb5\x0c\x60\x91\xe5\x5e\xf6\xc6\xa5\x6a\x00\xda\x08\xd9\x9b\xff\x58\x66\xae\x95\x60\xa6\xc0\x5a\x56\x54\x6a\xe1\xc1\xe0\xb0\x2c\x0d\x2d\xb1\x2c\xee\x88\x2c\xb4\xfe\xf6\xa7\x2d\x3f\xfa\xf3\xe5\x97\x52\x47\x0f\xd8\x98\x33\x3e\x46\x8c\xdf\xa2\x36\x3a\x53\x33\xe8\xac\xcf\xaa\x9f\xce\x4f\xdd\xea\x4c\xfc\x8e\x4c\xfa\xff\xf9\x75\x92\xbc\x3c\xd9\x1e\x2f\x37\xe9\x1b\x46\xe7\x23\x12\x15\x82\x5e\xa2\xe6\xd6\xfc\x66\xb8\xbc\x11\x1e\xfd\x44\x2a\x01\x3f\xa1\x8e\x65\x1f\x81\x70\xa1\xd8\x88\xd1\xb2\x3f\x9c\x2f\xfa\x10\xc4\x7a\x67\xb9\xd9\xad\xdb\xa2\x3b\x3b\xa7\xed\x17\x7c\x40\xce\xe9\x72\xb6\xdc\x95\xcd\xa1\xcb\xe4\x2b\xe8\xe4\x56\x30\xd5\x7c\xb0\xc2\xbd\x35\xe3\x23\xe7\x74\x2b\x51\x13\xb8\x77\x18\xb7\x8a\x97\x03\x2d\xe0\xbf\xe6\x9d\xa0\xe0\x83\x19\xf7\x9d\x59\x77\x6b\x51\x87\x68\xa1\x43\x59\x73\x85\x3a\x4c\x5b\x60\x9e\xdd\x52\xf6\x49\xa1\x69\x67\x7f\x67\xeb\xe8\x53\xda\x30\xe5\xeb\xeb\x37\xbe\xf9\x8b\xdb\x7a\xb6\x9d\x9a\x2b\xab\x56\x5e\x0b\x50\x6b\xf7\xee\xd1\xc2\xef\x26\x78\x83\x57\x07\x6d\x7e\xb5\xbd\x0b\xc6\x03\x71\xd1\x75\x5e\x46\xbb\x93\x98\x8e\xfa\x78\x0d\x2f\xfd\xce\xa1\xb4\x6e\xbe\x65\x3d\xd1\xa7\xad\x94\xf9\xab\xb0\x49\x81\xd4\xb0\x40\xac\x80\x36\xcf\xff\xc9\x74\xb1\x03\x16\x4f\xf5\xaf\xf2\xa4\xd1\x5b\xf4\x82\xc2\xcb\x48\xa3\xa7\x4f\x4d\xd7\x3f\xcc\xa7\x7b\x5e\x4f\xf7\x63\xaa\x72\x2b\xd9\x12\xbf\xe8\x3f\xbb\x72\x0f\x39\x8a\x04\xeb\xbc\x5a\xd6\x3f\xdb\xa8\xcb\xd4\x8b\xaa\xa7\x72\x84\xdc\x17\xf6\xed\x43\x1d\xb4\xd3\x2d\x15\x4b\x60\x7c\xcd\xd3\xb5\xb8\xb4\x50\xb6\x55\x78\x36\xb9\xbc\xb6\xaa\xb4\x4c\xee\xc8\x86\xfd\xf3\xe5\x1f\xd3\xff\x33\xfd\xf5\x62\xf9\x0d\x7b\xc5\x63\x3f\xf3\xad\x89\x50\x09\x6f\x1e\xde\x9e\x08\x21\x29\x98\x9e\x96\xdf\xa2\x46\x76\xe2\xd0\xff\xfb\xff\xff\xbf\x52\xc5\xa0\x87\x8e\x69\x30\x21\x2a\x7d\x05\xec\x21\x4d\x05\x6b\x5b\x3b\xb8\xc6\x58\x6d\xcf\x87\x46\xf6\x85\x7f\x46\x83\x86\xf3\x3a\xcf\x29\x0e\x8a\xd3\xd3\x91\x54\x29\xc6\xc7\x32\x1b\x57\x91\xe3\xe2\x3c\x43\xc5\x66\x6b\x34\x1f\x96\xe3\xa7\x3f\x7e\x4d\x1f\xef\x60\xc7\xef\x33\x75\x83\x7b\xb5\x50\xa8\x3c\x55\x35\xe4\x73\x6d\x5b\xf3\x8c\xee\x6c\x2f\x9c\xe9\xdb\x3c\x38\xd7\xc9\x25\x61\xd3\x31\x2c\x01\x9f\x0e\xb1\xe1\x96\xe9\x66\x62\x5d\xc3\xea\xb9\xa1\x80\x37\x24\xfe\x59\x12\xdd\x0d\xad\xc7\x02\xd9\x2d\x93\xbe\x5e\x40\xa7\x6b\xcd\x2d\x52\xbe\x3b\x74\x30\x5a\xb8\x38\xa6\x52\x89\x98\x9a\x0d\xb4\xb9\x4c\x9c\x03\x5b\xda\xba\xa2\x82\xcb\xef\xdb\xfe\x4d\xb7\xfd\xd5\x37\xfc\x15\x76\x2b\x43\x34\x6b\x96\x14\x6e\xb2\x5b\xd9\xf9\xbd\x23\xfb\xd5\xec\xf1\xbf\x7e\x7e\xf1\x94\xae\x70\xc0\xbc\xe9\x7e\x65\x30\x87\xee\x23\x87\x3b\x0f\xef\xc2\xb8\x11\x09\x43\x64\x95\xe6\x48\x09\x24\x69\x38\x4a\x83\xeb\x06\x48\x32\x3e\x0e\x29\xfa\x9b\x45\x68\x04\xd1\x4b\x1a\xf7\xa6\x1d\xa2\xc8\x90\x48\xba\xd2\xee\x64\xa6\xa3\x13\xbb\x4e\xb9\x61\x38\xfe\x00\xdb\x8c\xeb\xf2\x3c\x63\x80\xb4\xc0\x12\x3c\x3d\xab\xef\x33\x31\xf5\x12\x91\xdd\x90\xad\xdf\x09\x7e\xbe\xda\xbd\x7b\x83\xab\xcd\x6c\x4c\x56\xbf\x78\x37\xc6\xb6\xf2\x8c\xb8\xde\x7f\xcb\xbb\x43\x0d\x07\x2f\x31\xef\x25\x58\xf7\xd2\x0c\xdb\x04\xc5\x41\x10\xd2\x4d\xde\x84\x5f\x3b\x94\xdf\x11\x86\x3d\x5c\xdf\x3f\xfa\xf5\xf5\xde\x6f\x9f\x9f\x61\x5b\x94\x79\xd8\x04\xf0\x41\xe0\x61\x5f\x7a\x48\x91\x33\x8a\x20\xea\xaf\x9c\xb0\x08\x89\x11\x82\x1b\xb3\x00\x2e\x60\x45\x1c\x4d\x08\xb0\x6d\x5b\xba\x91\x5b\xbf\x8a\xd9\xc2\x73\xc4\xc3\x3c\xa7\x36\xb1\xa2\xc0\xa7\x73\xaa\xdb\xfc\x34\x2e\x59\x9e\xda\x1b\xb2\x49\xe3\x73\x38\xbc\x1b\x2c\x45\xc4\xe3\xf9\x96\xcc\x22\x1e\x13\xce\xfe\xb6\xa7\xed\xbc\x40\xfc\x36\x32\x06\xfc\x55\xd9\x36\xab\xd4\xaa\x15\x73\x46\xc7\x5d\x3b\xfc\x92\xdd\xbf\x27\xf8\x8e\xe9\xf8\xbe\x18\x8b\x5a\x29\xbb\x50\x6b\x22\x69\x11\xfe\x06\xa2\xb3\x9b\x88\x6f\x99\x3b\xae\x3c\x7f\x9f\x24\x6b\x7f\x0e\x69\xba\xac\x3e\x73\x8a\x31\x08\xab\x94\x45\x84\xc9\x29\xbf\x26\x44\x4e\x5a\x57\x76\xf6\x7a\x0d\x04\x32\xa6\xea\x30\x1e\x43\x1c\xdd\x15\xd8\xff\x2b\x53\x29\x1a\x38\xfd\xc3\x0d\x76\x00\x47\x56\x77\x64\x07\x08\x7e\x3f\x1f\xcf\x5e\x5f\x04\x9f\x7f\x07\xb0\xc8\xc3\x1e\x3e\x84\x08\x87\x52\x8b\xe7\x13\x1a\x82\xe1\x0d\x4a\x11\x94\x99\x9a\x35\x73\xfb\x14\xff\xab\xc8\xe6\x16\xf1\x35\xca\x23\xa7\xc9\x71\x4c\x0b\x3e\x73\xfc\xa3\xac\x11\x9a\xaf\xe6\xb1\x75\x2c\x21\xb8\x17\x9b\xf8\x4c\xc2\x7b\x99\xde\x6e\xba\x2d\x41\x5c\x80\xbb\xb1\x2b\xdd\xb4\xf3\xdf\x32\x27\xff\xb2\x72\xee\x2b\x40\xd8\x8d\xd8\x9b\x41\xf5\x1d\xe1\x6e\xe3\x2d\x75\xf9\x60\x8d\xfc\xf5\xf9\xb9\xdb\x5b\x49\x63\x64\xd1\xa6\x85\x5c\x3d\x2a\x64\x90\x81\x46\x22\x46\x94\x48\x46\x63\xab\x4f\xe7\x01\xca\xa2\x94\xa2\x29\x1c\x2a\xa6\xc6\xca\xaf\x89\xe5\x1d\x51\x11\x85\x0b\x95\x11\x05\x11\x17\xc2\x76\x99\x2e\xdc\x92\x88\x5b\x9a\xdc\x1b\xb2\x12\xc6\x15\x1d\xc7\x20\x72\x7c\xab\x0c\xa5\x30\x84\x6f\x99\xad\xfc\xaf\x11\x10\x17\xdb\x3c\x54\x44\xc8\x3f\x59\x4c\xe6\xcb\x8f\x56\x0e\xd1\xb3\xa2\x81\x71\xdb\x53\x31\x0d\x43\x31\xa7\x94\x69\xd3\x15\xc4\x83\xdd\xed\x93\xbd\xc3\x83\xce\xc9\xf1\xee\xfe\xfe\x21\x98\xb1\xdd\x66\x3f\xae\x48\x14\xfd\x4a\x67\x3d\x0c\x0e\xe8\x96\xe7\xff\x7b\x39\xfa\xbe\xc9\x2e\x50\x58\x1f\x77\x64\x2f\xf8\x9f\x87\x74\xd7\xff\xeb\xe0\x0b\xe8\x3a\x0a\xd8\xf3\xf0\x2e\x27\xc3\x90\x02\xd7\xf7\xe1\x9e\x30\x89\xa9\xa6\xc7\x38\x40\x11\x89\xd5\x0c\xb1\x02\x7c\xe3\x16\x50\xa8\x76\x15\xc9\x37\x57\x7f\x8d\xf4\x0b\x14\xe3\x61\x43\x31\xd5\xcb\x4f\xc8\xae\x5c\x7a\x3a\xe8\xcf\x20\xb0\xd6\xd2\xce\x0d\xb7\x1a\xf0\xb0\xd2\xb4\xc9\xdc\x4d\x6b\x31\xe8\x72\xb3\xed\xb2\xf1\x19\xd3\xf6\x42\x41\x82\xe2\x53\x27\x5b\xce\xda\x77\x84\x61\xde\x6b\x7d\xd1\x6f\x7b\x88\xbd\xec\xe0\x6b\xd5\x35\x5b\x41\x50\xb2\x5f\xce\xea\x23\x90\x57\x36\xd9\x35\x3d\x30\xd6\x4c\x80\xb8\xd9\x20\xf1\x7d\x2a\x65\xcb\xf8\xa2\x41\x24\x08\x68\x80\xdb\x4e\x7d\x13\x52\x45\x1b\x9b\x08\x5c\xf6\xca\xad\x98\x92\x69\x3b\x56\xed\xd4\xd4\x4e\xe2\xb2\x57\x6e\x47\x92\x73\xdb\xca\xea\xec\xd0\x92\xe1\xb7\x2c\x28\x2c\x49\x96\x77\x4f\x3e\xa8\x86\x0c\xae\x2e\x94\x55\xac\xbe\x23\xe2\x53\x04\x24\x71\xa3\x9d\xd1\x92\xc2\x1d\xd9\x13\xd7\x36\x2e\xc4\xcb\x7f\xed\x4c\x3e\xff\x9e\x68\x31\xe6\x99\xa3\x25\x6c\x86\xf6\x41\x9d\xbb\x0b\x30\x41\x04\xce\x99\x4c\x48\x88\x42\x0b\xde\xb8\x19\x6e\x4f\xa8\x7f\x06\xd6\xe7\x2b\x6c\x84\x46\xe9\xef\xea\x76\x5d\x76\xbf\x31\x70\x41\xab\xfc\x01\xe7\x63\x05\x75\xce\x0a\x2a\x20\x5d\xcd\x52\xfa\x1f\xeb\xe2\x6c\x21\x64\x51\xa7\x74\xfb\x7b\x6e\x89\x2a\x6f\xb8\xdb\x6a\xbe\xe9\x7f\x93\x17\xbd\xcb\x0e\xed\x5b\xe6\xe0\xff\xc6\x76\x34\x07\x30\x3b\x37\xe2\xc7\x76\x62\xef\x08\x3f\x1e\x3c\x7a\xf4\xd7\x3a\xd9\x59\x32\xf8\xdd\xa7\xf0\xe3\x13\x38\x7f\x1c\xc1\xf9\xc3\xa1\x2f\x73\xd7\x81\x12\xc5\x42\xf6\x37\x95\x48\x44\x94\x23\x29\x92\xd8\xa7\x28\x64\xc3\x98\xc4\x8c\x4a\x7b\x96\xb1\xef\xc3\x24\x1a\xc5\x62\x9a\x3b\xd1\xb0\xb9\x57\xb5\x5b\x9c\x8b\x84\xfb\x73\x75\x59\x4f\x3d\x1c\xc5\xb4\xf8\xb2\x68\xa2\x54\x24\x7b\x6b\x6b\x63\x11\x12\x3e\xd6\xe7\x7b\x03\xbf\x2d\xa2\x59\xcc\xc6\x13\x85\x5a\x7e\x1b\x6d\xae\xaf\xff\x8c\x4e\x26\x14\xbd\x12\x68\x2b\x51\x13\x11\xcb\x2e\xda\x0a\x43\x04\x20\x12\xc5\x54\x53\x2d\x0d\xba\xa6\xf0\x31\x0d\x98\x34\x81\xc5\x99\xe0\x30\xae\x44\x52\xc4\xd2\x31\xeb\x94\x21\xe3\x24\x9e\xa1\x91\x88\xa7\xd2\x33\xdb\x94\x88\xe1\xaf\x48\xd4\xe9\x29\x9f\x8a\x80\x8d\xac\x75\xac\x87\x48\x4c\x8d\x76\x4f\x29\x1a\x38\x63\xd9\x00\xa9\x09\x51\x48\x4d\x28\x1a\x89\x30\x14\x17\x8c\x8f\xf5\x69\x30\x60\xe6\x2a\x84\xc4\x54\x57\x44\x55\xcf\xf4\xeb\x3f\x51\xb1\x67\x12\x6e\xc6\x4d\x97\x7c\x11\x50\x34\x4d\xa4\x42\x31\x55\x84\x71\xa8\x95\x0c\xc5\xb9\xce\xb2\xb8\x38\x3d\xe5\x86\xb2\x3d\x90\x7c\x50\xc8\xa4\xd2\x55\xe4\x9b\xe4\x41\xa9\x3f\x01\x93\x7e\x48\xd8\x94\xc6\xdd\xda\x2e\x30\x9e\x47\x85\xeb\x42\x14\x8b\x20\xf1\x69\xd6\x8b\xd3\x53\x9e\xf6\x03\x7d\x4a\x2f\x4e\x4f\xb9\x1d\x9d\x8b\x1c\x42\xdc\x2c\xad\x89\x18\x09\x35\xa1\x31\x9a\x12\x05\xaf\x82\x65\x86\x6a\x98\x21\x35\xd1\x1d\xc9\x0f\xc0\x0c\xea\x80\x32\x28\xa7\xab\x05\x2f\xc7\x62\x84\x5e\x09\x31\x0e\x29\xda\xe3\x7e\x17\x71\x91\xe5\x01\xd6\x99\x92\x30\x22\x1b\x7f\x5e\xc4\x12\x4d\xc9\x0c\x0d\xc1\x38\x3a\x40\x4a\x20\xca\x03\x11\x4b\xaa\x89\x22\x8a\xc5\x54\x28\x8a\x0c\x52\x94\x44\x01\x8d\xd9\x39\x0d\x60\x89\x9c\x9e\x72\x40\x83\x14\x23\x75\xa1\xc9\xc4\x92\x10\x92\x11\xf5\x35\x05\xa1\x28\x66\x9a\xb2\x62\x4d\x3b\x3c\xa7\x23\xb6\xd4\x7a\xf2\x7a\x6f\x80\x06\x87\x2f\x4f\x7e\xdf\x3a\xde\x45\x7b\x03\x74\x74\x7c\xf8\xdb\xde\xce\xee\x0e\x7a\xf1\x07\x3a\x79\xbd\x8b\xb6\x0f\x8f\xfe\x38\xde\x7b\xf5\xfa\x04\xbd\x3e\xdc\xdf\xd9\x3d\x1e\xa0\xad\x83\x1d\xb4\x7d\x78\x70\x72\xbc\xf7\xe2\xed\xc9\xe1\xf1\x00\x2a\xc2\x5b\x03\xb4\x37\x38\x3d\xc5\x90\xbd\x75\xf0\x07\xda\xfd\x9f\xa3\xe3\xdd\xc1\x00\x1d\x1e\xa3\xbd\x37\x47\xfb\x7b\xbb\x3b\xe8\xf7\xad\xe3\xe3\xad\x83\x93\xbd\xdd\x81\x87\xf6\x0e\xb6\xf7\xdf\xee\xec\x1d\xbc\xf2\xd0\x8b\xb7\x27\xe8\xe0\xf0\xe4\xf4\x94\xef\xef\xbd\xd9\x3b\xd9\xdd\x41\x27\x87\x1e\x34\x5e\x2d\x88\x0e\x5f\xa2\x37\xbb\xc7\xdb\xaf\xb7\x0e\x4e\xb6\x5e\xec\xed\xef\x9d\xfc\x01\x2d\xbe\xdc\x3b\x39\xd0\xad\xbd\x3c\x3c\x3e\x3d\xe5\x5b\xe8\x68\xeb\xf8\x64\x6f\xfb\xed\xfe\xd6\x31\x3a\x7a\x7b\x7c\x74\x38\xd8\x45\x7a\x80\x3b\x7b\x83\xed\xfd\xad\xbd\x37\xbb\x3b\x5d\xb4\x77\x80\x0e\x0e\xd1\xee\x6f\xbb\x07\x27\x68\xf0\x7a\x6b\x7f\xbf\x38\xde\xd3\x53\x7e\xf8\xfb\xc1\xee\xb1\x1e\x40\x7e\xb8\xe8\xc5\x2e\xda\xdf\xdb\x7a\xb1\xbf\xab\x1b\x83\xa1\xee\xec\x1d\xef\x6e\x9f\xe8\x31\x65\x5f\xdb\x7b\x3b\xbb\x07\x27\x5b\xfb\xde\xe9\x29\x1f\x1c\xed\x6e\xef\x6d\xed\x7b\x68\xf7\x7f\x76\xdf\x1c\xed\x6f\x1d\xff\xe1\xd9\x5a\x07\xbb\xff\xfd\x76\xf7\xe0\x64\x6f\x6b\x1f\xed\x6c\xbd\xd9\x7a\xb5\x3b\x40\xad\x85\x98\x39\x3a\x3e\xdc\x7e\x7b\xbc\xfb\x46\x77\xfc\xf0\x25\x1a\xbc\x7d\x31\x38\xd9\x3b\x79\x7b\xb2\x8b\x5e\x1d\x1e\xee\x00\xc6\x07\xbb\xc7\xbf\xed\x6d\xef\x0e\x7e\x41\xfb\x87\x03\x40\xda\xdb\xc1\xae\xee\xca\xce\xd6\xc9\x16\x34\x7e\x74\x7c\xf8\x72\xef\x64\xf0\x8b\xfe\x7e\xf1\x76\xb0\x07\xd8\xdb\x3b\x38\xd9\x3d\x3e\x7e\x7b\x74\xb2\x77\x78\xd0\x46\xaf\x0f\x7f\xdf\xfd\x6d\xf7\x18\x6d\x6f\xbd\x1d\xec\xee\x00\x9a\x0f\x0f\xf4\x80\x81\x6e\x76\x0f\x8f\xff\xd0\x15\x6b\x5c\xc0\x3c\x78\xe8\xf7\xd7\xbb\x27\xaf\x77\x8f\x35\x66\x01\x63\x5b\x1a\x15\x83\x93\xe3\xbd\xed\x93\x3c\xd8\xe1\x31\x3a\x39\x3c\xd6\xa3\xca\xc6\x8a\x0e\x76\x5f\xed\xef\xbd\xda\x3d\xd8\xde\xd5\xf9\x87\xba\x9e\xdf\xf7\x06\xbb\x6d\xb4\x75\xbc\x37\xd0\x00\x7b\xd0\x34\xfa\x7d\xeb\x0f\x74\xf8\x16\x06\xae\xa7\xeb\xed\x60\x57\x4f\x94\xfe\x91\x23\x64\x0f\xa6\x15\xed\xbd\x44\x5b\x3b\xbf\xed\xe9\xce\x5b\xf0\xa3\xc3\xc1\x60\xcf\x92\x0d\xa0\x6e\xfb\xb5\x45\x7c\xd7\x39\x18\xc8\x76\x05\xa6\x26\xc9\xb0\xeb\x8b\xe9\xda\x58\xc4\x2c\x0c\x89\x71\x9d\x70\xa9\xe6\x03\x4d\x93\xcb\xfa\x6d\x64\x63\x13\x1d\x8b\x20\x66\x63\x81\xde\x88\x98\xd0\xef\xdb\xc8\xf7\x6d\xe4\xfb\x36\xf2\x7d\x1b\xf9\xbe\x8d\xfc\x2f\xd9\x46\x34\x7f\x1c\x13\x3e\x96\x8a\xac\x71\x3a\x8e\x05\x67\x76\xf9\x4c\x28\x7a\xb3\x77\x82\xf6\x99\x4f\xb9\xa4\xa8\xf5\x66\xef\xa4\xdd\xb0\x89\x3c\x42\xff\xa2\x31\x9d\xce\xd0\x80\x50\xfe\xb7\x01\x3a\xca\xae\xfe\x99\x44\x13\x1a\xd3\xe1\x0c\x8d\x63\xc2\x15\x0d\x3c\x34\x8a\x29\x30\x13\x7f\x42\xe2\xb1\xe6\x78\x02\x11\x3e\xd3\x8b\x58\x0a\x8e\xc4\x50\xb3\x6a\xcd\xdf\x08\x70\xe9\xd3\x53\x2e\x46\xa8\xc8\x0e\x34\x2f\x24\x52\x0a\x9f\x11\xbd\x75\x14\x99\xde\x88\x85\x54\xa2\x96\x66\x4d\xa7\xa7\x78\x60\xcb\x9c\x9e\xe2\x36\x34\x15\x50\x12\x66\xfc\x72\x50\xe6\x30\x31\xd5\x7c\xd0\x37\x3b\x14\xe3\x7e\x98\x04\x2e\xfc\xa7\xce\x0e\xd9\x94\xd9\x76\x74\x71\xb3\x57\x6a\x76\x25\x34\x93\xf3\xa0\xc7\x1e\x82\x7d\x4e\xff\xa5\x30\x40\x70\x35\x29\x27\x1e\x4a\x99\x2c\xf5\x90\x04\xff\x93\x1a\xbd\x9e\xe3\xd3\x92\x86\xa1\xd9\x13\x98\xe1\xa8\xf9\x1e\x7a\x66\x07\x10\x76\xcb\xb4\xe8\x02\x13\xb3\x8b\x09\x1c\x4e\x73\xa3\x61\xba\x4f\xa3\x24\xe6\x4c\x4e\x0c\xeb\x0d\x04\x92\x02\x5a\xd5\x87\x7c\x9d\xd2\xb4\xc5\xf6\x32\x1a\x28\xed\x95\x76\x8f\xb2\x5b\x11\x93\x79\x13\x0f\x9b\x25\x27\x24\x0c\x35\xcb\x37\xa8\xa3\x81\xde\x0b\x49\x61\x58\xb1\xee\x04\x1c\x99\x19\x09\x51\x24\xe2\x74\xdb\xce\x0f\x21\x65\xe4\xbb\xf5\x7c\x3c\xc7\x9b\x3d\xf4\xfb\xde\xc9\x6b\xbd\x7a\x2c\x43\x85\x45\xa0\x57\xd5\xaf\x7b\x07\x3b\x5e\x8e\x65\x9f\x9e\x72\xcb\x7b\x73\x9c\xda\xb1\x23\x94\x31\x23\x58\x54\x73\xb9\xb3\x66\x3a\x39\xe6\x8c\xea\x59\xf3\xc1\x0e\x3a\x38\x3c\xd8\x3b\x78\x79\xbc\x77\xf0\x0a\x38\x5b\x03\x7f\xd6\xcc\xfd\xed\xc9\x6b\xcd\x87\x81\x83\x96\x37\xa7\x2a\x73\x06\x7e\xef\xa5\xec\xd5\x31\x17\xe0\xa9\x75\x9c\x6b\xeb\x00\x6d\xc1\x45\xbc\x1e\x4c\xc6\xc6\x34\xc7\x2a\x70\x26\x2f\xe5\x4c\x2f\x8f\x0f\xdf\xe8\x61\x5a\xb6\x74\xe8\x18\xe0\x81\xb9\xd0\x07\xa4\xa3\xc2\xfc\x68\x0e\x68\x98\x57\x5a\x25\xda\xd9\xdd\xda\xdf\x3b\x78\xa5\x99\xb0\x1d\xa8\x03\x9f\xcb\x9a\x82\x71\xcc\xfe\x24\xe1\x39\x59\xfb\xf3\x42\x75\xc6\xa2\x51\x82\xdd\x21\xe7\x14\xbd\xb2\xc0\xb7\xcf\x7d\xd0\xad\xf3\x1e\x74\x9b\x9c\x07\xdd\x1a\xdf\x41\xb7\xc2\x75\xd0\x5d\xe2\x39\xe8\x0e\x70\x1c\x74\x5b\xfc\x06\xdd\x22\xb7\x41\xb7\xc3\x6b\x1a\x64\xa4\x1b\x72\x1a\x74\xab\x7c\x06\x2d\xc5\x65\xe2\x44\xca\x58\x48\xb9\x36\x0c\x89\x7f\x36\x8a\x59\x40\x66\x06\xf8\x45\x96\xa0\xc9\x3a\x5b\x40\x01\x4a\x78\x60\x4f\x45\x03\x36\x8d\x42\x36\x62\x34\x40\x2f\x06\x3b\x4e\x5a\xb2\xb4\xfc\x0c\x65\xdc\xea\xff\xf9\xbf\x35\xb3\xda\x40\xc7\x89\x94\xe8\x58\x48\x09\xf9\x0d\x87\xed\x67\x90\x79\x2b\xe7\xed\x67\xe8\xd3\x4f\xdc\x50\x8d\x2e\x68\xcf\xdc\xa6\x7b\x1b\xdd\x4f\x3f\x77\x3f\xfb\xa4\x33\x6f\x86\xaa\xcd\x6a\x5f\x96\x3f\x80\x3f\xab\xb0\x9a\x15\xba\x03\xe5\xb3\x2e\xa1\x1b\x1f\xc2\xa1\x22\x28\x5a\x3a\x86\x9b\x11\xde\xce\x71\xf6\x19\xba\xad\x03\xed\x33\xf4\xc9\x47\x5a\xa8\xa5\x99\x97\x2d\x73\xa8\x35\x8b\xac\x34\xf2\x9b\x9c\x6b\xa1\xa2\xdc\xd9\x16\xdd\xf4\x64\x0b\x15\x55\xd9\xfb\x6a\x67\x5b\x83\xdf\xdc\xf9\x16\xdd\xe0\x74\x6b\x70\x53\x3e\xe1\xa2\x55\xcf\xb7\x76\xae\xcb\x67\x5c\xb4\xda\x09\xd7\x70\xbb\xda\x53\x2e\x5a\xf6\x8c\x0b\x75\xdc\xf0\x9c\xfb\xa7\xa2\x34\xb9\xa0\x7c\x6d\x2c\x3a\x43\xc6\x03\xa2\x88\x93\x37\x98\x44\x10\x87\x50\x4b\x78\x45\x31\x65\x7b\x7b\x1d\x6d\x74\xd7\xd1\x5b\xce\xce\x69\x2c\x49\x88\x5a\x36\xa9\x8d\x8e\x40\x86\x42\x3b\x26\x78\xe1\x0e\x0d\x2c\x87\x3d\x3d\xe5\x56\xb6\x9a\xdb\x1f\x1a\x92\xbf\x49\x1c\xe6\xba\xd3\x01\x27\x80\x23\xd9\x74\xc6\xf6\xd0\x2e\x94\x41\xfb\x94\x0d\xc5\x39\xf3\x35\xc7\xf8\x26\x94\xb5\xe8\xf6\x54\xb5\x05\xfe\x0c\xa8\x5e\x79\xc3\xf8\x14\x6d\x6d\xb5\x23\x4e\x4d\xb9\x62\x47\x6a\xb7\x89\xd3\x53\xbe\xac\xb6\xb6\xb2\x49\xdc\x8e\xc2\x33\xbf\x3b\x68\xea\xba\xe9\xfe\x50\xde\x1b\xb2\x43\xf7\x6a\x0a\xcf\xc6\x9d\xe1\xf4\x94\xaf\xa0\xf0\x5c\xb8\x2f\xe8\x93\xfc\x32\x1a\xcf\xa5\x76\x05\xd0\x45\x36\x6a\x3c\x57\xdc\x13\xf4\x61\xb9\x56\xe3\x79\xc3\x1d\xe1\xd3\xf7\x83\x1c\xd8\xe9\x29\xbf\xd9\x6e\xf0\x35\xaf\xcd\x3a\xf2\xaf\xb0\x13\xc4\x9a\xa3\xaf\x4d\x67\xf2\xaf\xd0\xc0\xbe\x12\x9d\x37\xb3\xc1\x7f\xef\x77\x76\x20\x0b\xc1\x9a\x06\x3e\x9e\x17\xf7\xdf\x88\xbf\x59\x18\x12\xc7\xfd\x9d\x72\xf4\x37\x1a\xc3\x69\x74\xb3\xbb\x6e\x6a\x73\x70\x32\x99\x4e\x49\x0c\x36\x26\xba\xb8\xad\x11\x49\x5f\x44\x14\x11\x69\x79\x83\x3b\xfb\xbe\x39\xda\xef\x81\x59\x87\x66\x33\x21\x1d\x29\x44\xa2\x28\xd4\xe7\x57\xab\xa1\x30\xba\x05\xeb\xe8\x45\x73\x94\x37\x47\xfb\x34\x00\xce\xe9\x98\x80\x66\xc6\x53\x4a\xd2\xf3\xf4\x1f\x22\x41\x3e\x81\xf0\xba\xd0\x85\x84\xfb\xe0\x1d\x2b\x28\xb0\xdd\xa1\x50\x13\xcd\x93\xa2\x18\x6c\x91\x9c\xe9\xcb\x94\xc6\x3e\x23\x61\x38\xeb\xa2\xdf\x27\x94\xe7\xb8\x0e\x1f\x7b\xf0\xa2\x15\x38\xa5\x55\x32\x40\xfd\xf9\x5a\xc5\x08\x7a\xed\x1a\x34\xbd\xaf\xc3\xea\xd1\xbe\x46\x9d\x4d\x21\xed\x42\x22\x53\x92\x86\x23\xbd\x2f\x0d\xdb\xa0\x91\x99\x46\x44\xb1\x61\x98\x61\xb3\x45\xbb\xe3\x2e\x7a\x75\xb4\x8f\x1e\x76\xd7\x35\xe0\x56\x44\xfc\x09\x4d\x67\x67\xb3\xbb\xde\xce\x90\xc1\x29\x0d\xf8\xe9\x8f\x73\x7b\x0d\x4e\xf2\x8d\x21\xd0\x4c\x4f\x53\x28\xf8\x58\xff\x05\x76\xbe\x68\x14\x7a\xc7\x4b\xb1\x6c\xd5\x51\x21\x25\x92\xa2\x98\x92\xa0\x00\xfa\x72\xeb\xbf\x11\x83\xe6\xd0\x84\x9c\x53\x34\x4a\x62\xe0\xfc\x7f\x25\x54\x9a\x4d\x24\xa6\x63\x12\x83\x12\x28\x47\x3f\x73\x29\x3c\x64\xc3\xb5\xe8\xaf\x06\x29\x62\xa3\xb3\xb9\xbe\xf1\xd0\x43\xa7\x3f\x46\x7f\x9d\xfe\x88\xb6\xf3\x17\x75\x47\x4e\x29\x92\x2b\xb5\x6d\x4a\xa1\x17\x21\x39\xa3\xe8\x0d\xfb\x9b\xc6\x84\xcf\xbe\xeb\xd8\xbe\xeb\xd8\xbe\xeb\xd8\xbe\xeb\xd8\x96\xd5\xb1\xfd\x39\x15\x2c\x16\x7c\x4d\xfe\x15\x36\xd9\xa1\x3c\xf4\xd0\xbf\x88\xe6\x0c\x6f\x00\xf4\x93\x39\xcc\xe9\x29\xff\x34\x1e\x73\x7a\xca\x3f\x81\xcb\x9c\x9e\xf2\x4f\xe1\x33\xd6\x2a\xe4\xab\xdd\x22\x6a\xa9\xf3\x86\xdc\xc6\x98\x7f\xdc\x26\xbf\x81\x9b\xda\xbb\xc1\x71\x4e\x4f\xf9\x27\xf2\x1c\x23\xe2\xde\x88\xeb\x9c\x9e\xf2\x4f\xe0\x3b\xa7\xa7\xfc\x53\x38\xcf\xe9\x29\xff\x14\xde\xa3\x0f\x58\x9f\xc2\x7d\x34\xda\x6e\xce\x7f\xa6\x33\x15\xb3\x90\xae\x4d\xd9\x94\x76\x8c\xb1\xdc\xca\x16\x0e\x3b\xb0\x5e\x63\xf4\xab\x90\x4a\x9c\x7f\x16\x09\xa8\x62\xf2\x74\x0b\x32\x10\xd4\x79\x7b\x52\xd0\xe9\x29\xbf\x6d\x39\xa8\xd4\xc3\x5b\x90\x84\x4e\x4f\xf9\x77\x1b\x87\x5b\x96\x87\x9c\x86\xe4\xd6\x24\x22\xbd\xca\x6e\x55\x26\xd2\x83\xbe\x1d\xa9\x08\xba\xf6\x25\xe4\x22\x9e\x3c\x9d\x10\xe5\x4f\xd6\xc6\x22\x49\x58\x50\xe1\x3d\xee\xf4\x35\x9c\xa1\x5f\xe3\xbf\x67\xf2\x6f\x25\x46\xe8\x57\x71\x41\x42\x76\x86\xfc\x49\xcc\xe4\x7f\x99\x2a\xba\xa0\x0c\xfe\xce\x91\x6e\x81\x23\x39\x5b\xb3\x5b\xe3\x48\x9a\x1b\x7d\xb7\xba\xfa\x6e\x75\xf5\x8d\x58\x5d\xc5\x72\xed\xb2\x86\x15\x19\x31\xe8\x31\x3a\x0c\xd9\x39\xa3\x31\x3a\x12\x4c\xc5\x74\x86\x62\xf9\x5f\x01\x61\xe1\x6c\x2a\xe0\x26\xc2\x07\xc3\xed\xef\xe6\x9f\x77\xc1\xfc\x33\x63\x44\xa6\x77\xdf\xcd\x3f\xbf\x33\xa2\xaf\xcc\x88\x4a\xd3\x39\x97\x11\xc9\x49\x12\xfb\x42\xec\xaf\x49\xc2\x99\x62\x7f\xd3\xe0\x03\xe1\xfe\x44\xc4\x1f\x38\x99\x52\x7b\x61\x92\x1d\xdf\x1a\x39\xd6\xce\x94\xa9\x98\xa1\xc1\x24\x89\x49\x38\xfb\x1c\x47\xb7\xef\xfc\xe9\xbb\x79\xfa\x77\xfe\xf4\xef\xc0\x9f\x56\x11\x94\xfe\x14\x71\x40\x78\xe7\x02\xe8\x6e\x8d\x4e\x09\xb3\x37\xc9\xbb\xa1\x71\x5e\xe0\xe8\x25\xe5\x09\xcc\x38\xe8\x81\xe5\x8f\x2e\x68\x4c\xad\x69\xa6\x7d\xf1\x86\xe6\x57\xae\x69\xfa\xf4\x94\xeb\x8a\x4a\x4b\x04\x16\xa9\x4f\xd1\x90\x86\xe2\xa2\xb7\xba\x72\xeb\x21\xfa\x17\x34\x87\x7e\x77\x66\x99\xdf\x4f\x92\xdf\x75\x5b\xff\xfe\x0c\xf2\xbb\x6e\xeb\x33\xea\xb6\x42\x11\x10\x39\xb1\x7f\x6a\x79\x52\x99\x1b\xfd\x6b\x80\x5e\x8a\x84\x07\xa9\xc9\xb4\x35\x83\x2b\xbc\x26\xb6\x7e\x53\x4c\x83\x2e\x3c\xf2\x9f\xb2\x3b\x4a\x4b\x62\x0f\xd7\x04\x49\x3e\x3d\xe5\x2f\x88\xa4\x01\x12\x1c\xbd\xe5\x01\x8d\xa5\x2f\x62\xda\xfd\x53\x7a\xb9\xb5\x61\x5f\x31\x6e\xc9\xc9\x19\xe5\x44\xc2\xab\x52\xcb\x97\xb6\x43\x91\x98\x70\x1d\x7b\xfc\x9c\x4a\xc5\xc6\x44\xb1\x73\x8a\x8e\xa9\xa6\x7e\x1a\x4b\x74\x1f\xed\x06\xac\xdc\xc7\xb4\x8b\x49\xda\xe6\x9f\xb2\x2b\xe2\x71\x63\x2f\x4f\x0a\x5c\xd2\x17\x5c\x32\x69\xf6\x92\x73\x11\x26\x5c\x91\x78\x96\x61\x04\x56\xdd\x94\x04\x14\x0d\x67\x68\x6a\x2c\x33\x18\x0f\xd8\x39\x0b\x12\x12\xca\x2e\x7a\x29\x62\x44\x2f\x89\xaf\x0a\x65\xd0\x84\x49\x25\xe2\x99\x87\x24\x35\x56\x41\x31\x3d\x67\x32\x97\xa3\x37\x9a\x73\xc2\x42\xe3\xd3\x53\xa1\xe5\x27\x38\x63\x47\xce\x3c\x27\x6f\xc3\x14\x86\xe0\x3b\x47\x56\xef\x62\xe9\xa5\x4f\x23\x85\x88\x16\x0b\xdd\x66\x40\xff\x3f\xf6\xde\xb7\xb9\x8d\x23\xc9\x1b\x7c\xef\x4f\x51\x83\x8b\x67\x06\xb8\x6b\x82\xa4\x6c\xcf\xac\xe5\xd0\xee\x50\x24\x25\x73\x86\xa2\x34\x24\x65\xad\x4f\x54\xcc\x15\xd0\x05\xa0\xcd\x46\x17\xdc\x55\x4d\x0a\xd6\x2a\xe2\x3e\xc4\xc5\xbe\xbd\xef\xb6\x9f\xe4\x89\xca\xcc\xfa\xd7\xdd\x00\x41\x02\xb2\x65\x0f\x1c\xcf\xb3\x23\x02\x8d\xea\xaa\xac\xac\xac\xfc\xf3\xcb\xcc\x34\xba\xd3\x9e\x3c\x79\xf2\x64\x83\x97\x93\x59\xe3\x7a\xe0\x13\xcc\x0f\xdf\x04\xfc\xe4\xea\xaa\xd8\x00\x00\x25\xcc\xe1\x7f\x30\x04\xe5\xea\xaa\xd8\x08\x08\x85\xee\xbe\x4f\x76\x3d\xfd\xae\xc2\xc2\xec\xe5\x33\x63\xce\xfe\xf2\x61\xe1\xe0\x7a\x22\xc5\x7c\x7d\x40\x0a\xc6\xb8\xd7\x87\xa4\x5c\x5d\x15\x1b\xb9\xa0\xbc\xdc\xf0\x97\x8d\x61\xb0\x52\xe4\x70\xbc\xe9\x88\x8d\x0c\xdf\xf0\xe9\x2c\x27\x1c\x20\x9c\x5a\x0e\x05\x29\x6e\x32\xce\x0e\x0f\xf7\xfa\xec\x02\xbe\x07\x4d\x28\x85\x33\x80\x95\xd2\x8c\xb4\x00\x0e\x0c\x71\x84\x69\xa6\x66\x39\x9f\x13\x6a\x9b\xe4\xc1\xac\x94\x4a\x10\x27\x06\x92\x8e\x07\x38\xee\xc3\xc3\xbd\xc7\x20\x70\x1f\xef\xee\x0e\x4b\x01\xf7\xcc\x50\x4e\xa7\xb2\x80\x9b\x63\x17\x4e\xfb\x30\x85\xc4\x83\xdd\x9f\x45\x29\x77\xf7\xfb\x7b\xbb\xf5\xa5\x3e\x43\x98\xa2\x84\xc2\x7c\x56\x1a\x15\x32\x15\xff\xc4\x52\x89\x88\x4f\xbf\x81\x72\x1c\x2c\xcd\x4a\x31\xd4\x12\xab\x9e\x81\x30\xd6\xa2\x2c\x78\x9e\x9b\x8b\xc0\xbc\x87\x1a\x0b\xfa\xda\x68\x50\xce\x63\x30\xaf\xc9\xcd\xdb\x49\x36\x9c\x20\x94\x51\x4f\x44\x56\x32\x79\x1b\x24\x44\xa8\x6f\xd9\xad\xb9\x6a\x00\x58\x5a\xa4\x00\x7b\xb4\x90\xc8\x69\x42\xf8\xca\xac\x64\x5a\x94\x53\xac\x1b\x92\x66\xa3\x91\x28\x6d\xe5\x35\x43\x30\xfc\x0e\xa4\xc6\xf2\xba\x06\x43\x3e\x9d\x0d\x44\x9e\xef\x4e\x65\xa5\x84\x2e\xf9\xcc\x3d\xce\x96\xfe\x17\x83\x47\x97\x3c\x1e\x80\x7e\x13\xf6\x37\x5e\x54\xe6\x6a\x7e\xb4\xb7\xf7\xd5\xa2\xdf\xd0\x9e\xde\xde\xde\xf6\x39\xbc\x04\xb6\xd3\x12\x87\x76\xf0\xf2\xf8\xfc\x85\x03\xe6\x1f\x9d\x98\x73\x80\xe7\x1f\x40\xdf\xe7\xc7\xaf\xce\x5f\x1e\xbd\x86\xe3\x91\xc0\x53\x47\x27\x17\x08\x68\xc7\x03\x73\x75\x55\xec\xf7\x19\x74\x66\x40\x59\xdb\x77\x6b\xbe\xba\xea\xb8\x45\x75\x48\x8c\x4e\x05\x47\xce\x20\xba\x62\xf5\x6e\x9b\xc1\x60\x4e\x04\xdc\x3a\x36\x15\x02\x6e\x2d\x1c\xcd\x3c\x1a\x67\x98\xf8\xc3\x30\x98\xb3\x0b\x81\x55\x97\xd9\x3e\xd3\x93\x52\x56\xe3\x09\xfb\xc6\xdd\xb3\x96\xeb\x5b\xe6\x26\xcb\x96\xc9\xf9\xeb\x01\x7a\xa8\x19\x01\x2f\x0a\x9d\xe9\x39\x34\x6d\x96\x65\xf6\x33\xbc\x14\x87\x6a\xfb\x01\xa4\xa8\x64\x0a\x55\x04\x0b\xa6\x3d\x8d\xc0\xb4\x34\x09\x31\xe6\x39\x3b\x86\xc1\x5b\x26\x52\x15\x66\xa5\x74\x8f\xf0\x21\x0c\x65\x67\x62\x54\x06\x30\x92\x18\x23\xc5\x15\xbe\x01\xcd\xc7\xbc\x9e\x0a\x86\x62\x1a\x8d\xab\x1e\x6a\xe6\x9d\x98\x05\x21\x6a\x38\x05\x7d\xd7\x9c\x75\x1c\x88\x9e\xb3\x79\x1f\x5c\xd3\xeb\x50\xb3\x03\x81\x52\x95\x33\xa9\x84\xd7\xa8\x52\xb7\xf7\x89\x5b\x16\x0d\x63\x56\x04\xd8\x70\xd6\xcd\x10\x64\x3d\x93\xb7\xa2\x4c\xe8\xfc\x9b\x69\x18\xed\xd1\xfc\x1b\x14\x99\x21\x27\xd4\x38\x0e\x84\xdf\x00\x05\xca\xa0\x9f\x07\xa4\xf0\x54\xc3\x09\x4d\x2d\x61\xb7\x13\x01\xeb\x1f\x90\xa6\xca\x61\xe8\x80\x32\xb7\x99\x61\x2a\x59\xb2\x6e\x96\xf5\xe2\xbe\x78\xa3\x6c\xa4\x41\x55\x1b\x9a\x91\xbb\x5f\xef\xfd\xaf\x1e\xbc\x4d\x96\x81\xd4\x34\xe3\x54\xda\x5c\xf0\x60\xd8\x43\x2f\x3d\x65\x07\xcc\x7a\x6c\x20\x0a\x31\xca\x86\xe6\xf2\x8f\x9b\xee\xf9\x59\x46\xbb\xfe\x83\xac\x0c\x69\xba\xb2\xa4\xbf\x0c\x13\xf6\xc2\xcd\xe7\x05\xf3\x7a\xb5\x79\x51\xcc\x28\x66\x1c\xf1\x5e\x94\xc3\x4c\x99\x09\x79\xa5\x45\x59\xad\xd4\xc9\xca\x36\xae\xbb\x80\x5b\xc3\x4c\x01\xb2\x8f\x6a\x4c\x37\x2b\xc5\x48\x94\xa5\x48\xf1\xdb\x11\x10\xff\xda\xbc\x27\x4c\xcf\x52\xb4\xdb\xde\xdf\x31\xa8\x40\x9d\x42\x85\x12\x95\x34\x27\xa8\x83\x7b\x2a\x69\xe0\x1e\x19\xa3\xef\x93\xa8\x9c\x7f\xa0\xfd\x46\xb3\xc7\x9a\xa1\x6d\xb3\x87\x94\x05\xf3\x59\x29\x54\x95\xc3\x69\x01\x51\x3e\x15\xc3\x09\x2f\xb2\x21\xa7\xe3\x02\x85\x52\xcd\x83\xdc\x72\x17\x7c\x92\xd3\x9f\x23\xc6\x19\x92\x08\x46\x4b\xe2\x35\xe2\x10\xb5\x85\x0e\xe5\x74\x96\x99\xd3\x25\x51\x1d\xc5\x85\x62\x97\xa8\x86\x46\x1f\x48\xb4\xa1\x2c\x6e\x50\xac\x83\xda\x4b\x79\x58\x22\xcd\x38\xd3\xf3\x59\x6d\xe1\x6f\x64\x79\xdd\x22\x24\x20\x99\xd0\x4c\x1a\x0b\x73\x4e\xb2\x99\x3f\x12\x59\x61\x57\x62\x0f\x04\x52\x8f\x16\x06\xa6\x9c\x37\xbc\x7c\x6e\xc1\xa9\xd3\xe3\x15\x30\x22\xde\xea\x83\x39\xe3\x56\x4e\xd4\x14\x68\x2b\xf1\x42\x15\xd9\x48\x19\xad\xcd\xc5\x93\x5a\xe7\xd1\x2d\x2c\xc1\x8c\xd0\xe5\x85\xb1\x14\x41\xfd\xc9\x82\x8c\x33\xd2\x1c\x0e\x66\x33\x51\xa4\xd9\x7b\x34\xc8\x7a\x11\x1d\x8e\x04\x64\x8d\x18\x73\xd8\x90\x44\xd5\x68\x62\xb8\xc0\xbc\xa7\x9d\x0a\xcc\xb2\x8f\x19\x0c\xa9\x60\xe7\x3e\xb0\x06\xbb\x39\x98\x61\x6d\x30\x94\x5d\xe6\x5d\xb0\x69\xe6\x44\xa0\xe6\xe1\xc4\x83\x00\x53\xdc\x08\x00\x6b\xd9\x2a\xc3\xcc\x85\xd4\x74\x58\x98\xc8\xf9\x40\x96\xf6\x2f\x9f\x73\x17\x1e\x29\x1c\xcb\x5c\x7e\x42\x89\x42\x03\xf5\xb9\xb1\x85\x72\x38\x1a\x4c\x96\xd9\x38\x2b\x78\xde\xb2\xe5\x4d\x01\x4d\x72\x6b\x14\x89\x81\x84\xd5\x89\x47\x94\x33\xfc\x4c\x7b\x07\xa3\xd3\x25\x52\x0a\xa3\x8d\xd1\x19\x15\x33\x5e\x02\x9f\x18\x9a\xc0\x1a\xa6\xa2\x14\xf9\x9c\xe5\x59\x71\x0d\x44\x1b\x64\x05\x70\x49\xc1\xa7\xa2\x67\xf7\x3c\x33\x4a\xd4\x08\x8a\x91\xcb\x51\xe2\x2f\x4d\x47\xcf\xc6\x94\x0c\x65\x84\x1c\x45\x9b\x7e\x18\xf8\x13\x16\x6c\x78\xfd\x10\x84\xd6\x2e\xbd\xd3\x51\x90\x4e\x9d\xbd\x5b\xdd\x5c\xcc\x58\xd1\x9e\x00\x17\xa7\xbe\x30\x81\x19\x48\x22\x71\xe0\x47\xb2\x5c\x38\xff\x24\x38\x15\xda\x5c\x03\xd2\xaa\xb8\x86\x9a\xd5\x80\x12\x5b\xb5\x64\x56\x17\x01\xd6\x82\x69\xa3\xaf\xa1\xf0\x93\x03\x79\xde\xd0\x34\x68\x93\xe1\xee\x5b\x7a\x67\x84\x9a\x8b\x11\xcc\xf0\x76\xc3\xeb\x03\x31\xe1\xf9\x08\x7d\xc7\xed\xda\xcc\x6a\x77\xbf\xd9\x23\xb7\x26\x4c\xe7\x64\x8c\x6e\x7f\x27\x97\xe5\x88\x89\x5c\x0c\x75\x29\x8b\x6c\x98\x98\x4d\x18\xf0\x1c\x38\xc9\x96\xd5\x33\xca\x48\x55\x10\xf1\x99\x39\x05\x01\xcd\x85\x27\x94\xa1\x13\x24\x21\xd3\x59\x01\xf2\xab\x64\xe9\x75\x64\x45\x57\xf8\x06\x59\x04\x33\x62\x53\x9e\xe5\xe8\x4a\x52\x5a\x25\x91\x75\x65\x35\x23\x35\x57\x5a\x4c\x55\x20\xc3\x33\xa5\x2a\x61\x6e\x90\x21\x5c\x92\xf4\x00\xee\x3d\x64\x23\x83\xe6\xe2\x14\xaf\x90\xe6\x89\x97\x20\x11\x0b\x04\xc4\x36\x34\x4b\x33\x35\xac\x14\x5c\xf5\xf0\xc2\x29\x48\x4b\x52\x2b\xdf\x80\xa8\x73\x17\x93\x78\x6f\x09\x10\x2f\xd4\xb2\xe2\x50\x16\x6a\x96\x0d\x2b\x59\xa9\x7c\xce\xa6\xbc\xbc\x36\x32\xaf\xf4\x8a\x12\xe9\x5e\x42\x65\xe3\xc2\xda\x72\x66\x77\x80\xa6\xad\x4c\x68\xc4\xd4\xd5\x55\xe7\x4c\x6a\xc6\x59\x78\x4e\xfb\xc8\x07\xcd\x33\xdc\xd0\xba\xdd\xea\xed\x19\xbc\x4b\xfb\x09\xa9\x88\xde\xa2\xf8\xd5\x6c\xc2\x15\x1b\x08\x51\x18\xfb\x4f\x80\x24\x1f\xcc\xa3\xd7\xb8\x63\xa8\xc4\x4f\x95\x28\x74\x6e\x5e\x3a\x94\xe5\x4c\xe2\x95\x1d\x18\xd1\x86\xc4\x24\x8c\x1e\xf5\xd9\x73\xa3\x61\x99\xd7\x7a\xeb\xde\x2a\x59\xec\x22\x8e\x95\xb4\x5a\x39\xfe\xa8\x85\x72\x59\xf0\xe1\x24\xcc\x8f\x8b\xbc\x8c\xa0\x1c\xfc\x20\x2b\xc6\x8d\xae\x37\x13\xba\xe2\x39\x71\xe0\xad\x2c\xf3\xf4\x36\x33\xea\x46\x21\x8b\x1d\xd8\x7e\x95\xdd\xc0\x9f\x3b\xd6\x23\x59\xca\x39\xcf\xf5\x7c\x67\x54\x0a\x91\xb0\xac\x2c\xc5\x8d\x1c\x1a\x51\x5e\xbf\xcd\xad\x0f\x55\x4b\x9f\x8e\x9e\x18\x8d\x70\x66\x38\xb9\x21\xe8\x9c\x3c\x47\x1f\x41\x3e\xb7\x4e\x88\xc4\x7f\x32\x13\x25\x5e\xb3\x35\xf7\x60\x10\xd9\xf2\xa7\xc0\xc9\x61\x50\x9d\x1b\xef\x6b\xb9\xc8\x41\xb0\xd0\xe6\x7c\x19\x6c\xce\x2b\x6e\x44\xee\x6f\x7d\x67\xba\xce\x4d\xcd\xa0\x4a\x7d\xea\x82\xba\x0a\x4d\xa3\x1e\x9b\xe1\x42\x83\x9d\x9b\xf2\x6b\x91\xa0\x57\xc4\x28\x78\x34\x1d\x30\xac\x25\xf8\x37\xcc\x05\x20\xf2\x3c\xa1\xff\x9b\x4d\x67\xb2\xd4\x89\x0f\x81\x18\x31\x40\x4a\x32\xe9\x83\x20\x64\x68\x59\x66\xf9\xb8\x3f\x75\x8f\xbb\x2c\xf2\x39\x12\xd8\x08\x2e\x9a\x18\x54\x20\xb0\x09\xac\x7e\x65\x83\x39\x8e\x11\x12\xd6\x89\xcc\x42\x0c\x85\x52\xbc\xcc\xe0\x50\x8e\xca\xac\x18\x5b\x93\x46\x64\x74\xe9\x85\xa7\xbd\xab\x7a\x8c\xe7\xb2\x10\x74\x15\x0e\xe5\x74\x90\x15\x4e\x9d\x47\x37\x4f\xed\x07\xb4\x1a\x5b\xe0\x00\x38\x0f\x3c\xcf\x46\xb1\x8b\xa7\x46\x6f\xb8\xe5\xca\x5f\xdb\x7d\x76\x32\x62\x60\xc8\xa1\x15\xa4\x74\xa6\x0d\x2b\xbb\xed\xc0\x90\x8d\x2c\x18\x1f\x73\xf3\x35\x88\x35\x32\xde\xbb\xfe\x9a\xb2\x0a\x75\x29\x95\xda\x01\x5a\x99\x35\x0c\x65\x65\xb4\x26\xfc\x3b\x2b\x18\x67\x39\xbf\x55\x55\xa6\xcd\x3a\x73\x31\x46\xe1\x4f\x75\x30\xde\x38\xa5\xda\x48\xb6\x58\x0c\x2e\x13\x69\x70\x17\xe0\xb4\x15\x19\xdb\x6e\x98\x20\x08\x36\xb7\x6b\xb2\x3b\x31\x05\xdd\x54\x4f\x04\xaa\x5e\x31\x03\x92\x8e\x64\xcd\x50\x3a\x1d\xd6\xb2\xf0\xe7\x8a\xee\x39\xab\x46\xe1\x5d\x60\x4e\xa5\xd9\x37\xe2\x11\xee\x7c\xe8\x29\x74\xb4\x41\x9e\x73\x84\x25\x68\x83\xad\x40\xf2\x55\xbd\x26\x53\x1f\x5e\x3d\xe5\xf3\xa0\xb4\x46\x4d\xf0\x44\xa1\x89\x40\x04\x2d\xd1\xea\x60\x3b\x8c\x96\x28\xd2\xac\x9a\xb6\x55\x31\x31\x7a\x4f\x64\x29\xe3\xad\xbd\x40\x76\x25\xb5\xca\x26\x8e\xa7\xa6\x42\x2c\xae\x73\xf2\xd8\xdd\xab\x5d\xde\xc3\x75\x56\x4a\xb3\xb1\x99\xae\x99\x1d\x5a\x17\xa5\x18\x66\xb3\x2c\x04\x87\xd0\xea\xbc\xcb\xb0\xb1\xcc\x5a\x8c\x8a\xb6\xeb\x5b\xba\x32\xe9\x9d\x83\xe0\x9d\xe8\xb5\xf1\x8a\xb3\xcb\xbc\x07\x8f\x4e\x69\xf8\xa7\x94\xd3\xac\x30\x4c\x82\xd6\xa2\xf2\xaf\x37\x52\xcd\x31\x33\xd4\x0e\xa0\xe4\x7d\x97\xfa\x5e\x7b\xf3\x30\x78\x33\xd6\x6d\x49\x7c\xec\xcb\xd9\xec\xb6\x14\x40\xd3\x54\xb4\x2f\x76\x2f\x0c\x23\x58\x14\xd4\xc1\xcb\x30\x21\xce\x4e\x8c\x28\x4c\x85\x51\x95\x12\xaf\x38\x98\xff\xb8\xf6\x07\x8d\x56\xe6\x7c\xc7\xf5\xd9\xd4\xa4\x28\x8b\x54\x35\x14\x98\x76\x08\x98\x5a\x2a\x41\x7b\x9d\x89\x12\x6b\xd3\x50\x4c\x91\x97\xda\x5d\x53\x8c\xf4\xf5\xfa\x22\x6b\x14\x4b\x7b\x46\x54\xb9\xcd\x27\x2b\xcf\x6c\xb4\x51\xda\x5e\x5e\x9e\x1c\x1e\x1b\x6d\x4c\x8b\xf7\x1a\xa1\x42\x5c\xd9\xf7\x50\x7d\x6d\x7a\x57\x78\xb6\x82\xf3\xdf\x72\x50\x1a\xa4\x85\xfd\xf2\x23\x59\x4b\x93\x83\x3f\x1e\x6c\x4a\xcf\x74\xa2\x95\xae\x54\x84\x42\x04\xe4\x27\x71\x06\x62\x01\xd7\x01\xf3\x4f\x56\x21\xac\x1f\xa5\x9d\xc2\xad\x84\x05\x4e\xe3\x9a\xe5\x82\x2b\x63\x3c\x05\xde\x7a\xfa\x85\x3f\xaa\xb3\xdc\x58\xbc\x8f\xed\x24\xb9\x9d\xa1\x27\x73\x50\xe0\x2f\x60\x29\xb5\x74\x06\xdf\x86\x32\x3c\xe2\xb0\xe0\x48\xc7\xce\x26\x96\x8d\xbc\x84\xe1\x50\x59\xc2\x5d\x7a\xcd\xe1\x65\x99\x34\x08\xcc\xad\x56\x17\x38\xb4\xc8\x12\x68\xa1\xd0\x28\x3e\x23\xa0\x2e\xdc\x88\x12\xb7\x09\xda\xd9\xec\x60\x83\x4e\xbb\x2b\x85\x2c\xa7\xc6\x2e\x36\x6a\x84\xe0\x65\x9f\x2a\x92\x80\xc9\xac\x1a\x14\x0e\x36\x1a\x54\x05\xb4\x98\x9d\x33\x8f\xe7\x81\x95\x6a\xd4\x91\x68\x32\x74\xa8\x30\x9c\x1d\x39\xe5\xdd\x55\xc1\xd3\xd4\xfc\x1b\x42\x49\x21\x23\xfa\x41\xec\xbc\x89\x3a\xab\xb0\x7f\x82\x84\x57\x59\x1a\xb2\x0c\x18\x4e\xbc\x80\x96\x8e\x45\x5a\x4d\xad\x6e\x1a\x71\x8a\x15\x27\x68\xe6\xd9\x8d\xac\xc9\x31\xa0\xad\xf5\x52\xf0\xbc\xfd\x00\x81\x3b\x8a\x0d\x10\xe4\xa1\xcb\xaa\xc6\x76\x48\x94\x85\xc1\x8a\x56\xfa\x78\xc3\xc1\xf5\x50\xa2\x1b\xbf\xe6\xd9\xf2\xdb\x60\xc6\xa0\x55\x84\x33\x86\xa0\xa0\x51\x4e\x23\x5d\xb6\x45\x49\x77\x8e\xbb\x96\x48\x11\x8e\x12\xc4\x88\xe4\xa8\x65\x2e\x89\x3b\x2c\x23\xb0\x04\xe7\x0b\x8c\x8d\xd0\xf9\xe6\x0e\x10\x0c\x47\x29\xf3\xe4\xab\xf3\xaf\x6f\xc4\xa8\xa2\x4b\xd7\x69\xd6\x43\x39\x45\x7d\x99\xca\x30\x3a\xb7\x8b\x33\x44\x6a\xba\x7e\xbc\x19\x5f\x83\x31\x63\x51\x0a\x60\x87\x06\xf0\x9c\x3e\x7b\x5d\xe4\x42\x29\xd8\x30\xf1\x7e\x96\x67\xc3\xcc\xd8\xb6\x30\x64\x10\x0e\xb1\xfe\x8b\x79\x5d\x5f\x0c\x3c\x55\x81\x93\x6a\xa1\x63\xca\x69\xf3\xe6\x7d\x75\x2f\x8d\x83\xf6\x79\xcf\xf2\x3d\x0c\x2f\x8b\x50\x31\x93\x0c\x58\x05\x47\x40\x1d\x35\xf5\x41\x47\xc6\xd8\x99\xd4\xe6\x37\x2e\x50\xa3\x2d\xe0\xc3\x98\x5c\xe6\xb0\x8e\xc1\x76\x33\x77\x06\x4c\x4c\x55\x33\x51\x2a\x91\x0a\x0c\xf9\x18\xfe\xf7\xdb\x41\xaf\x41\x3d\x02\x7d\x9f\xda\xd7\x00\xe2\xe3\x52\x20\xbf\xcf\xe9\x60\x80\xbd\x25\xde\x8b\xa1\x17\xe8\x20\x67\x1d\x31\x7c\x69\x9d\x86\x75\x61\xfd\xfc\x7f\xee\xb3\x4b\xab\x6b\x28\x23\x08\x03\x7d\x39\x95\x20\x2b\x35\xaa\xd6\x21\x50\x05\xb1\x3a\x38\x69\xf3\x6b\x8a\x50\xf0\xa9\x50\x81\xee\xa2\x8c\xb9\x07\xad\xe5\x18\xfd\x89\x2d\x31\x0c\xf7\xfa\x86\x1a\xe1\xf6\x25\xce\xa3\x44\x26\x68\x29\x7e\xaa\x32\x0a\x0c\x99\x9b\x5b\xc9\xa0\x09\x33\x34\x7f\xe3\xe5\xdc\x96\xfd\x4b\x85\x1a\x96\xd9\x80\xf6\xc1\x1a\x16\xd9\x38\x6b\x3a\x5d\xed\x29\xb2\x7b\x46\xc2\xbf\x45\xe4\x13\x9d\xfe\xd2\x67\x47\xbe\xb6\x9d\x1c\xb1\x37\xbc\x34\x54\x99\x3b\xee\x77\x53\x1d\xcc\xd1\x3c\x05\xa3\xda\x58\x51\xee\xf4\xc3\x16\x82\x85\xe2\x3d\x5c\x89\xdf\x2e\x3a\xf2\xca\x4f\xb5\x6b\xe6\x2a\xf8\x70\x52\x33\x40\xc3\x87\x33\xad\xe2\x9d\xed\x31\x00\x17\x46\x75\x50\x9f\x1e\x5c\x9c\x5c\x10\x75\x6b\x40\x9f\x93\x63\xc2\xcb\xb8\x58\x7c\x84\x4b\xa5\xfe\x28\xe2\xfd\xac\x34\xab\xb4\x4b\x81\xa2\xc0\x22\x0d\xdc\x9f\x49\x0b\xfc\x38\x41\x4f\x39\x92\x8a\x80\x4b\x75\xc1\x2a\x47\xec\xf2\xe4\xf2\xf4\x38\x61\x67\x2f\xcf\x76\x42\x94\x4f\xd2\xc4\xb3\xca\x32\x46\x0c\xe1\x10\x4d\xd8\x10\xde\xae\x18\x07\xcc\x45\x6e\xec\x31\x35\x93\x85\x82\xaa\x5a\x23\x08\xb6\xa0\xe5\x17\x31\x0b\x9f\xcd\x4a\x39\x2b\x33\xa3\x84\xc3\x62\x47\xac\x02\x1f\x28\x30\x5f\x58\x1a\xac\xe6\xc2\x57\xaa\x9a\x82\x41\x42\x32\x3a\x53\x20\xcd\x1d\xbc\x0e\x8e\x25\x08\x72\x8a\xa1\x82\x93\x35\x0c\xa2\x36\xcd\x55\x62\xbc\x7f\xeb\xb3\x53\x8f\x97\x93\x23\x76\x9a\xf1\x41\x96\x43\x84\xfc\xc4\xdc\xb5\x4c\xdc\x18\xce\x85\xf2\x97\x30\x48\x21\x59\x0e\xde\x4b\x3d\x11\xb2\x9c\x7b\x27\x8a\x8d\x4c\x69\x59\xea\xd0\x21\x50\x88\x71\x9e\x8d\x45\x31\x14\xbd\xc4\xc5\xb3\x93\xc8\x45\x6b\x3d\x3a\x77\xb2\x7a\x17\x15\x03\xc5\x52\x91\x67\x03\x50\xdd\x60\x6a\xe3\x52\x2a\x65\x23\x11\xf6\x85\x9a\xf1\xa1\x56\x10\xfe\x6e\x3f\x1a\x28\x34\xa3\x2b\x43\x96\x88\x8c\x63\x8c\xe5\x19\xbc\x96\x0c\x7e\xd8\x55\x3e\xe5\xe3\xd8\x29\x6f\x7e\x6c\x03\xfe\x3e\xf4\x0f\x2d\x76\x9c\xdf\x2c\x2b\x86\x59\x6a\xd4\x57\x8c\x0c\x18\x6d\x05\x3d\xb4\x19\xcf\xed\x98\x41\xa9\x37\x43\x1e\x51\x32\x5e\x62\x2c\xdc\xdc\xda\xf6\x6e\x56\x55\xae\xeb\x86\x2c\x10\xb2\x72\xb2\xa5\xc2\x4f\xb2\x82\xb6\x31\x10\xa6\x81\x3b\xa0\xbb\x34\xca\x6d\xe7\x64\xd6\x9c\x4b\xe4\xd4\xb1\x94\xe9\x6d\x96\x07\xbe\xc0\x6b\xa6\xb4\x9c\xcd\xf8\x18\x50\x95\xd3\x59\x65\x66\x3d\xe2\x59\x5e\x95\x78\xff\xf0\xdc\x76\xc6\x44\x80\x46\xd1\x0a\xf2\xf0\x55\xf2\x3c\x2d\xf0\xb5\x42\xf5\x12\x60\x3f\xa3\x83\xd7\x7d\x6b\x38\x84\x73\x8a\xf3\xf4\x26\x83\x60\xe7\x88\x60\x19\x4a\x65\x44\x00\x8b\x5b\xa0\xd1\x89\xf1\xbf\xe9\xb3\x83\xa1\xb9\x07\x0c\x0d\xac\xb4\x85\xda\x77\xfe\x62\x0e\xce\xc2\x9b\x89\xd1\xcf\xe3\x53\x5a\x8b\xfc\x2d\x0d\x9c\x59\x6d\x73\x38\x91\x12\x9d\x9a\xe0\xb9\x0c\x23\xe7\xe0\x40\x65\x9c\x8d\x04\xc8\x90\x84\x71\x98\x1f\x2f\x86\x02\xd7\x30\x43\xaf\x26\xc9\xbb\x39\x30\x9c\x98\x16\x99\xb6\x87\xd0\x05\x61\x73\x3b\x71\x26\x07\x39\x79\x97\x94\x85\xb0\x12\x5a\x8f\x90\xd1\xe6\x98\x90\xf9\x94\xa9\x30\x72\x23\xfa\xec\x3b\x79\x6b\x2c\x1d\xb4\x12\x1d\xb1\x80\x98\xc1\xb8\x7e\x71\x80\x53\x29\x72\x1f\xd1\x70\x7a\x35\x85\x36\xc0\x21\x4b\x1f\x1b\xc9\xe9\xe5\x26\xcc\x16\xb4\x1a\x1f\x09\x71\x02\xdc\xfb\x7f\x02\x06\x20\xf7\xae\x31\x89\xb2\x11\xca\x63\x73\xc8\xf1\x8c\x03\x5d\x46\x96\x2e\xa9\x18\x89\x22\xc5\x1f\x4c\x64\x9e\xb6\x78\xc0\x79\x39\x05\xd9\x63\x35\x68\x47\x41\x77\x84\xab\xb2\xf4\x31\x2f\xf2\x01\x73\xa5\x44\x69\x0e\x0d\xb9\x44\x93\xa6\x0b\x78\x30\x27\xc5\xc2\xad\x06\x6a\x23\x7a\x72\x3a\x7d\xfd\x36\x60\xc2\x40\x3b\x74\x33\x21\xc6\x3d\x3e\xc3\x12\x9e\x2d\x30\x37\x7c\x60\x67\x67\x87\x1d\x83\x8a\x63\x51\x18\x88\x3f\x00\x54\xde\xa3\xfe\x9e\x13\x1c\x3b\x3b\x3b\x3b\xf8\x93\x03\x30\xdb\x84\xfd\x91\x31\x7a\x29\x56\xef\x65\x0e\x4c\x1b\x61\x21\x66\xda\x73\xdc\xc3\x00\x05\x63\x61\xc2\x41\x36\xa7\x03\x3b\x03\x26\x72\x3a\x10\x29\x22\x22\xc0\x35\x11\xfa\x0c\xdd\x21\x8d\x46\x9c\x83\xe7\x10\xfd\x9d\x81\xeb\x05\x51\x48\x76\x34\x87\x4e\xb6\x9e\x93\x70\x58\xab\x33\x80\x85\x32\xf7\x38\xf1\xba\x7d\x22\x47\x1e\x70\xf7\x55\x97\xf7\x12\xf6\x55\x77\xd0\x03\x86\xf9\xaa\x9b\xf6\x62\x45\xd2\xde\x9d\x27\x85\xdb\xa7\xc4\x56\xa1\x44\x47\x3d\xc8\x3f\x00\x11\x38\x1c\x0d\x94\x88\x66\x0d\xc2\x90\xc5\xe4\x70\x45\x36\xaa\xd9\x52\x1e\xf3\xf9\xab\xd3\x9b\x47\xac\x0b\x61\x47\x78\x49\xca\x42\xe4\x3c\xfa\x64\x47\x70\x59\x0c\x65\x55\x52\x35\xe5\xe9\x4c\xc0\x19\xff\xb1\x2a\x33\x95\x22\x6e\xde\xa9\x27\xd6\x85\x04\x22\x13\xbd\xde\xa0\xf8\x81\x16\xde\x25\x8a\x5c\x5d\x15\x5f\xf6\x12\x42\x3e\x90\xc0\x69\x79\x8c\x7d\xd3\xf3\x02\xc8\x7e\x16\xd3\x0d\x4b\x9b\x8d\xf2\x6c\xa8\x15\x5b\xb0\x0d\x6e\xa5\x89\x33\x44\x4a\xa1\x4b\x09\x5d\x9e\x85\xf3\x7f\xcc\x4a\x69\x2e\x59\xfa\xcc\x4b\xd5\x54\x88\xa9\x05\x1d\x87\x1a\x06\xb9\xd0\x88\x79\x68\x7a\x5d\xa3\x1c\xd8\x1c\x33\x67\xa5\x99\x0b\x11\xc5\x4a\x41\x81\x16\x73\x55\x97\x82\x30\x8a\xf0\x15\x4c\xde\x08\xaf\xb0\xd8\x39\xed\x4a\x50\xfb\x6d\x79\x51\x2d\x69\xcc\x2d\xfa\x9f\x20\x1d\xfb\xe4\xf0\xf8\x0c\x4a\xf9\x36\x52\x0d\x57\x49\xf0\xd9\x16\xfe\xdb\x16\xfe\xfb\x5d\x66\x78\x6c\x0b\xff\xfd\x0a\x85\xff\x06\x79\x25\xb2\xe9\x6c\xf7\x6f\xfc\x86\x5f\x0c\xcb\x6c\xa6\x77\x5e\x1c\x7d\x8d\x8f\xfb\xcf\xd8\x8b\xa3\xaf\xd9\x7e\x7f\xaf\xbf\x5f\x97\x5a\x8f\xf6\xf6\xf7\x13\x76\x21\x06\x5c\xe9\x8c\x17\xec\x52\x0d\x27\x3c\x7c\x17\xbd\xa0\x5f\x08\x73\xf2\x4f\x5b\x8a\x42\x9f\x5c\xda\xcb\xf0\x31\xfd\x8e\x52\x00\xe4\x4c\x14\xa8\x2e\xc4\x69\x00\x2f\x4e\x2e\xe3\x7c\x45\xe8\xfa\x19\xcc\x36\x9b\xce\x30\xc3\x3c\x8c\xa7\xb3\xf3\x8b\x03\x76\xc4\x35\x37\x97\x43\x55\x82\x36\x0a\x2d\x5a\xcd\xda\x5e\x08\xa5\xf8\xd8\x9c\xa7\xa3\x6c\x2c\x94\x66\x07\xf9\x58\x96\x99\x9e\x60\xd6\x85\x85\xed\x67\x05\x3b\x7f\x76\xc8\xf6\xbf\x7c\xb4\x6f\xa8\xea\xf3\x1b\x1e\xd5\x4a\x42\xbf\xe2\x55\xce\xfe\x26\x27\x85\xd2\xb2\x60\xfb\xdf\x7c\xf3\x0d\xdb\x81\x9e\xf4\x66\xb7\x1a\x22\xfd\x31\x7b\x5e\x8a\x31\xfb\x4e\xe6\x3a\x61\x07\x45\x5a\x8a\x5b\xf6\x77\x31\x13\xc6\x18\xf8\x21\x2d\x78\x99\xb0\x53\xa9\x74\x86\x34\x3c\x6a\x6d\xb3\x14\xf4\x56\x32\x22\x4a\x08\x9b\x4c\x31\xe3\x3f\x4e\xe4\x14\x48\xd8\xaf\xae\x77\x87\xe5\x7c\xa6\x77\xa7\xe9\xd7\x08\x93\x96\x90\x75\x3f\x92\x4b\x99\x64\x77\xca\xcb\xeb\x54\xde\x16\x3b\x99\x0e\xff\xbd\xd2\x9d\x06\xb5\x21\xbf\xcf\x34\xcf\xe7\xec\x55\xf5\x73\x99\x15\x09\x3b\xc8\xc5\x7b\xf6\x77\x69\xae\xa7\xcc\x26\xf5\x6c\x6f\xb4\xed\x8d\xb6\xbd\xd1\xb6\x37\xda\x43\x6f\xb4\x9c\x93\xd6\x2d\x0a\xb9\x9b\x96\x72\xf6\x33\x86\xbb\xfd\xad\x83\x7f\x74\x6b\x49\xf6\x8b\x6a\x7e\x3c\x62\x2f\xb8\xce\xb8\x62\x2f\x44\x21\xd9\xf4\xaf\xe6\xdf\x7d\x28\xab\x74\x2a\xc7\x92\xfd\x91\xbd\x11\x03\x95\x69\xc1\x8e\x00\x78\xea\xcb\x29\x5d\x5d\x75\xf6\xbf\xd9\xdf\xbb\xba\xea\x30\x73\x8b\xdd\x0a\x5e\x0a\xf3\xc1\xa7\x29\xfd\xb6\xed\x0b\xb0\xed\x0b\xb0\xed\x0b\xf0\x7b\xed\x0b\xa0\xb3\x62\x3e\x1d\x0a\xfb\xbf\xf8\xdc\xf3\xb3\xd7\xec\xf4\xf8\xe2\xe2\xf8\x9c\x3d\x3f\x3e\x3b\x3e\x3f\x38\x65\xaf\x5e\x3f\x3d\x3d\x39\x0c\xd4\xb0\xd6\x2c\xdc\xfd\x84\x3d\x13\x83\x12\xd2\x70\x8d\x4e\x4a\x50\x89\x58\x75\xdd\xff\xe6\x9b\xfd\x04\x55\xd6\x67\x46\x12\xb9\xc3\xe3\x3d\x13\xa8\x38\x9b\x9f\x7e\xbd\xcf\x9e\x95\xbc\xb8\xce\xb3\x82\x5d\xe8\x52\x08\x9d\xb0\x67\xd9\x48\x4f\xd8\xb3\x5c\xca\x32\x61\x4f\xa5\xd1\x80\x13\xf6\xe2\x80\xb1\xbd\x47\xfb\xfb\x7b\x3b\xfb\x5f\xee\xed\x33\xf6\xfa\x02\x62\x6f\xc7\x37\xa2\x9c\xcb\x02\x13\xaa\x5c\xe3\x34\x48\x4f\x9b\xcd\xeb\xd0\x47\x48\xbe\xd0\xd9\xd4\xd7\xa1\x75\xc2\x2f\x77\x21\x67\x14\x76\xe8\xe4\x01\x64\x9e\x39\xc7\x19\xb8\xdc\x0a\xa9\xcd\xa9\x93\xb7\x0e\x80\xf9\x16\xe2\xd5\x99\x6d\x5b\x53\x02\x42\x0f\x3a\xd1\xa4\xf5\x7c\x9b\x53\xa1\x94\x28\xd9\xf3\x57\xa7\x7d\xc6\x4e\xcc\x40\x4a\x22\xe8\x15\x26\x42\xad\x6f\x54\x35\x1c\x0a\x05\xe9\x1e\xe4\xe9\x32\x7b\x45\x6d\x72\xe2\x96\x48\x89\x7b\xc3\xa3\x84\x4d\x44\x01\xbb\x0b\xbf\xb1\x9f\x17\xd5\x74\x20\x4a\xb3\x6f\xfd\x77\xf5\xbc\xec\x57\xa5\xe0\x53\x84\x26\xc3\xe7\x97\xbe\xf7\x8d\x22\xcd\x5e\xe9\xe0\x4e\x28\x05\x25\x48\x50\x66\x1b\xbf\x16\x8c\xdf\xf2\x39\xb8\x79\x8d\xfa\x5b\x0a\x91\x4a\x00\xf4\x40\xb2\xa8\x8d\x58\x14\x63\xc1\x32\xdd\x67\xec\xa9\x4d\x55\x55\x88\xa4\x85\x95\x3d\x07\x74\x55\x4e\x2b\xf3\x37\x2d\xe6\xc8\x03\x32\x23\xc5\x17\x8e\x2b\x0e\xf7\x9b\x40\xbf\xf2\x92\xd7\xd1\x64\xdc\xdc\x77\x76\x08\x20\xce\x54\x55\x22\x66\x40\x85\xf2\xbc\xc4\x68\x0a\xc8\xd3\x4c\x43\xde\x7d\xe9\xb3\x10\x2f\x03\xee\x48\xa2\x8d\x8c\xa6\x1e\xa4\x0f\xfa\x5a\x2c\x4a\xc2\x75\x4f\xb1\xbe\x7c\x1e\xa6\x98\xb8\x29\xcc\xf8\xf0\x9a\x8f\x85\xda\xd9\xd1\xf3\x59\x36\x84\xe7\x5c\x11\x80\x9d\x1d\x87\xd3\x5d\x74\x96\x02\x2f\x1f\x65\x82\x99\x7b\x8b\xa5\x62\x98\xa5\xc2\xc6\xf6\x60\x07\x10\x66\x6b\x3b\x55\x65\xe6\xba\x92\xc8\xe7\xb7\x86\x36\x63\xb0\x5b\xe7\xb2\x22\x46\xd6\x13\x70\x4f\xf3\x52\x8c\x2a\xc0\xaa\x0d\xcc\x25\x4d\x61\x5c\xdf\x94\xcf\x85\x18\x31\xd9\x2c\xc5\x1e\x7f\xed\xd4\xb1\x27\x65\x20\xb4\x86\x31\x94\x2e\xb9\x16\x63\x17\x83\xcc\x0a\x87\x48\xcc\x86\x55\xce\x4b\x36\xe4\xe0\x71\xb5\x79\x8a\xe6\xd7\xe2\xfd\x2c\xe7\x05\x85\xac\x20\x59\xd2\xed\x16\xb4\xd0\x32\xab\x99\x09\x0e\xc9\x71\x11\x27\x24\xe6\x2b\x43\x3d\x4c\xf7\x85\x30\xba\x74\xac\x04\xc1\x76\xb0\xa6\x00\x85\x5a\x66\x43\xd1\x67\xec\x65\xb5\x68\xab\x55\xe3\x50\x84\x4c\xc6\x8d\x55\xe7\xba\x4e\x81\x78\xf0\x2c\xdb\x0a\xc7\x8e\xa6\x8a\xc8\x0b\xd4\xe0\x0c\x43\xcb\xd2\xe6\x40\x20\x9e\x85\x82\x09\xb7\x99\x9a\xf4\xbe\x45\x17\x3d\xd6\x7a\x80\xcc\x9f\xb8\xd9\x56\x09\xdd\xc9\xc6\x60\xfb\x1b\x41\x46\x3f\xe5\x85\x66\x99\x0e\x7e\x6c\x9e\xa2\x13\x1b\x1d\x12\xdb\xd8\x72\x96\x89\xa1\xad\xb9\x66\xc6\x29\x58\x21\x6e\x71\xda\xb3\x52\x8e\x4b\x3e\x45\x1c\xae\x1f\x91\x93\x73\xa0\x9c\x8a\x34\x7e\x4f\x4a\xc5\x6b\x20\xee\x9c\x15\xe3\xe0\xc0\x49\x33\x9a\x36\xea\x14\x9c\x74\x54\x03\x61\xeb\x0a\x11\xd0\x39\x50\x26\x29\x46\x31\x92\xe5\x00\xea\x2a\x3b\xf2\x9a\xc3\x00\x4a\x69\x01\x72\x8a\xe1\x0b\x49\xb1\x94\x90\x15\xc2\xd5\x35\x7e\x25\xcd\xce\x95\xc2\xfa\x43\x40\xdb\xc7\x27\xfb\x20\x1d\x55\xfd\x95\x94\x3f\x0d\x67\x6c\x48\x88\xda\x28\x5a\x99\xa1\x24\x25\x3e\x20\xb2\x2f\x42\xe2\xbb\x5e\x68\xb2\xb4\x8f\x12\x66\x33\xf3\x45\x1c\xa8\xd6\xd4\x74\x96\x8b\x64\xd5\x01\x7d\x4e\xf0\xb8\xe4\x1a\x22\xb8\x94\x72\x07\x81\xe4\xa0\xc7\x1c\x20\xe9\x41\xf3\xf6\x18\x7a\x48\x51\x08\x94\x71\x43\xe7\x5b\xc1\xc6\x1c\xda\x3a\xcf\x65\xd5\x67\x1e\x9c\x1e\xf3\xbf\xf9\xdd\x3c\x41\x21\x63\xf9\xd2\xf3\x22\xb1\x18\x66\xe5\x43\xad\x17\x73\x2d\xe2\x92\x20\x2e\x66\x03\x17\xa9\xf0\x81\x20\xb7\x24\xdf\x17\x0f\x51\x48\x30\x84\x21\x8b\x16\x36\x1f\xdd\x01\xf2\xe3\x15\x25\x4c\x49\x3f\x3d\x98\x4d\x29\xe0\x85\x7a\x22\xa6\x61\xf0\xcf\x35\xa7\x1b\x69\xe1\xea\x01\xe0\xf9\x50\xbe\x2e\x24\x3d\x03\x90\x2e\x17\xfb\x84\x03\xd2\x67\xec\x80\x4a\xb0\xc0\x54\xd5\x44\xde\xc2\x4b\x88\x0d\x11\x6d\x07\xb3\x11\x73\x76\x5d\xe0\xb7\x99\xe5\x78\x2f\xd3\x44\xdb\x81\x40\xa2\x70\xa6\x6f\xe5\x8e\xd2\x62\xc6\xa6\x42\x4f\x64\xfa\x98\x75\xf7\x7b\x66\x87\xbc\x79\x81\xd7\x87\x23\x9d\x99\x6a\xf7\x11\x3c\x83\xa9\x51\x78\x30\xc2\x5b\x0e\x13\x82\x0c\x3b\x28\xdc\x0f\x31\x86\x3a\x02\x31\x00\x0f\x0d\xb2\x80\xfd\xc8\xd6\x0a\xa0\xc6\xf4\xd2\xb6\xb3\x0d\x01\xf6\xe0\xa0\xc2\x01\x07\x99\x64\x0f\x78\xa6\x8d\x22\x33\x67\xc3\x5c\xf0\xd2\x4a\x54\x80\x4b\xa0\x2e\xe6\xc3\xe1\x36\x7f\x14\x44\x91\x7d\x27\x63\x07\xb9\xb1\xcd\xb2\xf8\x78\xc1\x01\x70\x59\x1b\x83\x39\x5c\xd2\x46\x81\x14\xb9\x42\x51\x37\xe3\x0a\x2f\x9b\xa4\x7e\x18\xd4\x44\x56\x79\x0a\x5b\x05\x53\x31\x67\xc1\x71\x12\xc8\x79\x52\x12\xdb\xf2\xae\x23\xc6\x73\xdf\x5e\x5d\x15\x78\x6b\x5f\xfd\x09\x52\x7b\x2b\x32\x80\x6f\x33\xca\x50\x1f\x08\xc6\x47\x23\x31\x24\x04\xfa\xac\x94\x83\xdc\xe5\xda\x4e\x61\x83\xc9\xe9\xa5\x31\xdf\x07\x1e\x83\xc3\xe3\x59\xe8\x59\x06\xe0\xd6\x24\xd4\x3a\x00\x6b\xce\x20\xdf\x96\x23\x3e\x1a\x88\x3f\x29\x05\x77\x86\xac\x78\x0f\xf8\x0f\x80\x97\x40\xeb\xdc\x79\x24\xee\xfb\xc0\x9c\xb7\xd0\xe1\xb1\x7e\xfb\xd9\x3e\x92\xc5\x9c\x60\xd8\x57\x57\x85\x80\x85\x60\x40\xd6\xca\x52\x0b\x49\x2a\x11\xe0\x14\x8d\x0f\x2b\xf1\xee\x8a\xd0\x4d\x7a\xe3\x71\xa9\x80\x17\xe7\x36\x3a\x3d\x91\x79\x2a\x4a\x14\xd9\xa5\x18\x49\xba\xf5\x33\x80\xb2\x58\x2e\x6a\xe6\x70\xd1\x7b\x08\xe8\xc9\xeb\xca\xbb\xe5\x1e\x38\xc8\x03\x0a\x53\xd7\xc0\x31\x82\x19\x3d\xa9\xa6\x4e\x20\xd0\x0b\x78\xcd\x42\x9b\xf3\x1a\xce\xfc\x85\x51\xb4\x8d\x32\xec\xd5\x14\xef\x1b\x31\xdc\xe9\xd5\xc1\x04\xd3\x99\x6f\x44\xe9\xf2\x11\x40\x9c\x5b\xa5\xab\xa1\x51\x7b\xa4\x4e\x8b\x22\x0b\xa6\x05\x28\xb3\xc6\x26\xbc\x5b\x9d\xb5\x97\x5c\xa0\xc5\x06\x33\xc3\xa8\x7b\xa6\xd8\x4f\x55\xa6\x45\x00\x6d\x77\x78\xfe\x3b\x94\x43\xe4\xa6\x0a\x2e\xde\x48\xb7\x34\x3b\x62\xdf\xed\xcb\x63\x41\xb5\x8d\x14\x53\x3b\xc9\x75\x63\xc4\xb8\x4b\x81\x71\x32\x0f\x1f\xd6\x12\x52\x52\x23\x6d\x25\x56\x1b\xb9\x63\x3b\x78\x77\x71\x6d\x71\x93\xbc\x79\x95\x42\x0e\x17\xea\xea\x00\xcb\xb7\xb5\x0e\xc1\x16\x49\xfd\xf3\x88\x5e\xa8\x67\x66\x1a\xa1\x0d\x2f\x31\x72\x35\x9f\xa3\xb6\x6a\x59\x7c\x68\xa1\x1b\x58\xd0\x83\x63\x59\x0e\x84\x8c\xd1\xcf\x9d\x68\xf1\xb2\xee\x32\xa0\xef\xc2\xdd\x44\xb0\x99\x39\x13\x44\x31\x65\x13\x0c\x91\x6e\x16\x2a\x85\x6c\x85\x98\x86\x68\xfa\x23\xf3\x13\xf3\xff\x87\x65\x06\x8d\xb3\xad\xde\x9a\xca\x29\x4d\x22\xb6\x8e\xae\xae\x8a\xda\x14\xec\x8b\x21\x70\x94\xf3\xf7\x7e\xa8\x11\x21\x62\x60\x26\xf1\xe5\x4f\x00\x8c\xfa\x75\xf2\x46\xb0\x21\x2a\x28\x01\xb7\x90\x67\xd2\x32\x76\x67\x91\x29\x32\x10\x98\xc5\x07\x51\x28\x40\x9a\x9b\x9f\x00\x37\xd1\x15\x65\x25\x93\x11\xcd\x4e\x79\x9f\x50\x09\x9a\x3a\x33\x37\x56\x1a\x58\xf9\x0e\x2a\x8d\xcb\x8a\x15\xfd\x54\xdc\x88\x5c\xce\x8c\x00\x34\x13\x40\x6c\x14\xa4\xc8\xdc\xf0\x42\xf3\xb1\x60\xe6\xbc\x13\x4e\x07\xd0\xb2\x0d\x36\xb6\xfa\x69\x9a\x29\xf7\x2b\x45\x85\xac\xf1\x0a\x83\xbe\x8f\xb7\xc2\x81\xe6\xef\xb2\xd3\xb0\x02\x12\xc0\x89\xdd\x21\xea\x33\x0f\xf7\x0b\xec\x60\x4b\x77\xb7\x48\x3f\x05\x73\x46\xe9\xe0\x7a\x33\x98\x0d\xb3\x72\x58\x4d\x15\xc0\x16\x55\xbb\x6a\x2b\x0b\x56\x9a\xc9\xcb\xe1\x90\x53\x65\x19\xbc\xf8\xa7\x7c\x0e\x37\xa2\xc5\xcf\x5a\x93\x00\xd8\x75\x28\xab\x92\x93\xf1\x72\x6b\xa6\xa2\x09\xe5\x99\x13\xe8\xd5\xdc\x2f\xb1\x20\x99\xfb\x5b\x39\x33\x82\x7d\x28\xa7\x48\x39\x96\x8a\x9d\x11\x1f\x1a\xab\x40\xf3\x22\xe5\x65\xda\x07\xf5\x85\x0f\x27\x99\x00\x35\x39\x53\x49\x73\x2b\x82\x0b\x82\x1c\x45\x61\xaa\x42\xa0\x9a\x20\xff\x8f\x4a\x84\xf9\x82\x95\x8b\xc6\x31\xdc\x9c\x66\x4c\xaf\xb3\x61\x1e\x04\xe8\xcb\x7c\x2a\xd8\x8f\x72\xc0\xb8\x82\x15\xe6\x73\xac\x12\xe8\xe6\x11\x6e\xd6\x49\x61\x11\x9b\x68\x43\x3b\xd5\x29\xcf\xb4\x46\xd8\xf2\xd8\x50\x62\x30\x47\xcf\xbb\x45\x95\x87\x5a\x94\xb5\x8f\x43\x00\x9a\x91\x12\x40\xb6\x80\x9f\x96\xfa\x44\xdc\x1e\x9f\x14\xf6\x60\x73\x65\xae\x8c\x66\x42\x07\x0f\x4d\x7f\xa7\xb2\x15\x6e\x81\x88\xeb\x42\x52\x0b\xc8\xc4\x50\x8c\xb3\xb1\xd1\x59\x44\x69\xfd\x5d\x80\x6c\x97\xb3\x5c\xf8\x51\x73\x40\xce\x0e\x64\x4a\x85\xd2\xa3\x23\xd8\xaf\x71\x5f\x7b\x9e\x89\xb9\x2d\x0f\x9d\x2b\x0e\x38\xba\xb9\xfd\x76\x4e\x53\xcc\x0d\x06\x41\x1b\xce\x04\x58\x73\x22\x73\x18\xce\x1c\xf5\x99\x28\x31\x1b\x18\x6b\xa8\x00\x58\xe0\x56\xe4\x39\x54\xa1\xd2\x8a\xdd\xf0\x32\xe3\x85\xf7\x98\xed\x9e\x66\x45\xf5\x9e\xb9\xdf\x99\x8d\x81\x5f\x3a\x22\x1f\xe4\x7a\x02\xc5\x00\xef\xdc\x17\xc3\x0b\x20\xf3\x48\xe0\xf9\x1b\x06\xeb\xb4\x97\xea\xea\x4f\x56\xf0\x25\xe6\x7c\x00\x1f\x8a\x22\xb2\xf0\x40\x42\xe2\xd1\xb2\xd7\x27\x21\x14\x81\x81\xfd\x2d\x8a\x08\x3a\xa4\xde\xc4\x36\xfa\x26\xa9\x8a\x4e\x03\x81\x99\x93\xe6\x69\x9e\x43\x3d\x8e\xaa\xb0\x7a\xb6\x1d\x1b\xd3\x21\xb8\xcf\xbb\xae\x7b\x59\xeb\x16\x07\x56\x77\x83\x8c\x87\x85\x05\x18\x8d\x25\x03\x70\xff\xb8\xda\x22\x28\x34\x61\x1e\x1d\x05\x76\xfa\x8c\xbd\xe2\xc6\x2e\x01\xdd\x59\x53\xf6\x98\xd5\x99\xad\xe2\x03\xdd\x02\xf4\x2d\x40\xcf\xb1\x8a\x31\x20\xe2\x23\x4f\x16\x71\xb8\xb9\xa5\x20\xe8\xc6\xec\x53\xb0\xe6\x4a\xb9\x9e\xf6\xf6\x31\x14\xf5\xe8\x10\x9a\x12\x08\x84\x67\x85\xa2\x72\xa8\x41\x01\xaf\x86\x0b\xc0\x5c\x02\xf8\xa1\x99\x72\x69\xd3\x93\x07\xf6\x86\x0f\xf7\x29\x38\x79\x4e\xc7\x2a\xab\xa2\x1f\x3a\x91\x57\x0c\x22\x2c\x2c\xb6\x79\xf8\xf2\xd5\x0f\x27\x67\xcf\x93\xa8\xbc\x26\x3c\xf8\xe2\xe5\xd1\xc9\xb3\x93\xc3\x03\x5f\x6f\x93\xb1\xbd\x5a\x6a\xd8\x81\x4b\x46\xab\xf5\xef\x77\x62\x2a\xf0\xa7\x48\xf2\x58\x5a\x26\x42\xfb\xd6\xd1\x8e\xdb\x30\x1b\x24\x30\xa7\xcd\x92\x3f\x68\x53\x60\xea\x51\xe8\x69\x85\xd2\x52\x98\xd9\xab\xf8\x9c\xe2\x04\x74\x45\xa5\xad\x20\x1b\x9b\x61\x67\x55\xdc\xe5\xe7\xb3\x8b\x31\x02\x0e\x45\x2c\xaf\xae\x3a\x61\x52\xc7\xd5\x55\x07\x4a\xc4\x1d\x73\x5f\x95\x04\x4e\x34\x4f\xd3\x52\x80\x05\x8b\x35\x8a\x00\x22\xdd\xf1\xe2\xc1\x7c\x16\xf0\x1d\x95\xab\x62\x43\x99\xe7\x1e\x92\xeb\xa8\x68\xf3\x33\x5c\x6e\x40\xca\x35\x07\x52\x42\x7d\x9c\xd4\xdc\x03\x1c\x88\x8f\x59\xb6\x37\xa2\xc8\xb0\xb2\x50\xa4\x41\x63\x8e\x0e\x8c\x6e\x65\xe5\xd5\x55\xd1\xc5\x8d\x00\x33\xc9\xd8\x39\x70\x86\xcd\xa1\x8a\xde\x0a\xaf\x84\xd2\x6a\x00\xd8\xc6\x7c\x43\x10\xb3\xd1\x29\x87\xfa\xa6\x76\x59\x09\xfa\x85\x13\xf4\xf4\x7a\xe6\x40\x00\x79\x93\x43\xa8\x48\x9f\x2d\xae\x4b\x29\x23\xad\x7b\x68\x05\x49\x9f\x68\xd9\x38\xd5\x10\xc5\xa8\xd1\x97\x92\xd8\x42\x19\x48\x69\x04\x81\x76\x0f\x23\xc1\x7b\x08\xd1\x43\x05\x8a\xf8\xed\x63\x87\xfa\x36\x0a\x09\x9f\x1b\xb3\xe0\x96\xca\x99\x58\xf3\xb8\x3e\xb6\xd9\x24\x8c\x03\x63\x55\x03\x97\x49\xe7\xa2\x60\x54\xc1\xa3\x99\xb6\xbc\x1b\x94\x87\x04\xb4\xb2\xd2\x25\x37\x73\x19\xc9\xf2\x96\x97\x29\x20\x9f\x81\xa4\x94\x4c\xc2\x8b\x71\xc5\xc7\xe6\x22\xed\x7e\x07\xd9\xa6\xe0\x33\x4b\xa2\x1a\x93\x70\x21\xb8\xf8\x75\x4b\xcc\x3f\xf3\x65\x72\x0d\x5d\xc3\x59\x19\x06\xee\xd9\xcd\x76\xd5\x3c\x41\xe8\x51\x51\x4c\x4b\x10\x24\xb7\x6e\xd6\xf4\xa4\xfb\x01\x1e\x42\xa7\x6c\x5b\x85\x4f\xc8\x0d\xd1\xa4\x10\x04\x76\x9f\x73\x2e\x86\x8e\x75\x78\x17\x6a\x7a\x81\x37\x13\xbf\xb3\x01\x25\x5b\x09\x3a\xd3\x4e\xde\x24\x6c\x96\x57\x58\x21\xce\xa3\x2c\xd0\x83\x83\x45\x03\x83\x1a\x73\xe8\xc5\xa4\x5f\xc0\x3b\x00\xa0\x48\xc5\xa1\xc1\x09\x87\x35\xda\xd0\xf5\x68\xb1\x68\x58\x7c\x45\x69\x9e\xe7\x91\xdd\x59\x37\xa0\x0e\xcc\xa5\x8f\x8e\x6a\x49\x0c\xca\x8b\xc5\xd7\x61\x44\x2b\xac\x5a\x04\x7e\x9d\xc8\x23\x11\x16\x50\x01\xc7\x18\xe8\x8c\x95\x56\x59\x2a\x40\xa5\x51\x43\x39\x13\x64\x2d\x42\x3e\x90\x91\x86\x65\x55\x10\x26\x25\xbe\xe9\x43\xae\x26\xe7\x9a\xf5\x01\x09\xca\xd7\x91\x95\x9e\x55\xe8\x66\x80\xd6\x2d\xc3\x49\x6c\xca\xdb\xd9\x59\xeb\x36\xc3\xd4\x26\xf4\x7f\xf9\x7a\x40\x96\x83\xe0\x28\x1b\x41\x5f\x44\x2f\xef\x66\x45\x2a\x66\xa2\x48\x83\x2c\xdd\xca\xd5\x19\x0f\xf4\x42\xc6\x99\x96\x32\x27\x26\xb3\x65\xe4\x32\xdd\xeb\x83\x9f\xc1\x92\x19\x4f\x73\x59\x99\xdd\x36\xc3\x2a\x23\x3d\xac\x37\xd1\x0d\x67\x34\x2e\xda\x4f\xf7\x5d\xa4\x66\x39\x1d\x21\xfc\x85\xdb\xdf\x7d\x5f\xe4\x61\x85\x78\x78\x6d\x2d\x2a\x74\xaa\x87\xbc\xcd\x55\x14\x6b\xca\x74\x52\x2f\x10\x14\x95\xf7\xa1\xf8\x47\x5c\x85\x0f\xd4\x1d\x9f\xed\x9a\xcf\x2d\x94\x07\xca\x13\x72\xb8\x9e\x61\xc2\x66\xf5\xfe\xb9\x76\xd4\x4c\x1a\x25\x46\x5b\xb7\xf0\xb7\xec\x5a\x88\x99\x91\x54\x1c\xaa\x3c\xd9\x63\x1a\x95\x46\x01\x21\x81\xaa\x5b\xa0\x5d\x10\x22\x08\x93\xe9\x15\x39\x40\x29\xbd\xd6\x0f\x5f\xa3\x66\x7b\x15\xa1\x5a\xfd\x11\x7f\x39\xb8\x4d\xf2\x89\x7f\x71\x7a\x1f\x6e\xf6\x64\xae\xb2\x21\xcf\xe9\xa4\xb8\x12\x65\xa5\x07\x70\x25\xc4\x20\x36\x19\x86\x53\x9c\x40\xce\xe8\xe8\x9b\x15\x3a\x5f\xb9\xd5\xf5\x51\xe0\x8a\xf7\x14\xf0\x1b\xd1\x95\x31\x12\xde\x5c\x7b\xe4\xb9\x87\x7c\xfa\x94\xe1\x35\x9b\x63\x96\x6a\x0b\xd3\xd8\x6b\x8d\xae\x1e\xf4\x66\x64\x60\xbf\x54\xa0\x6c\x4f\x71\xe2\x4d\x5d\xf8\x34\x0c\x50\x58\x6e\x8d\xda\x6d\xe0\xf5\xdd\x28\x55\xea\xaf\xcd\x48\xc5\x72\x19\x46\xfb\x86\x3e\x58\x12\x21\x2e\x3b\x05\x11\x4a\xa3\x61\x41\xd9\x29\xc3\x1e\xb8\x16\x25\x5a\xab\x4e\x31\xde\x03\x99\xe5\x4c\x0f\xbc\x70\x8c\xc1\x9f\x69\x25\xf2\x11\x79\x26\x6a\xea\x45\xa0\x34\x37\x4b\x48\x69\x5b\xf2\xc9\x8f\x7a\x67\x09\xa9\xa8\x7e\xd4\xbc\xad\x7e\x94\xb3\xa7\xa0\x86\x98\xcf\x1b\x2e\xc6\x41\x75\x13\x36\x6c\x9d\x0d\x5a\xa7\xe1\x6d\x89\xba\x9d\x4b\x37\xe3\x66\x3e\x76\x08\x64\x59\x6a\x3b\x03\x95\x6e\xd0\x80\x17\xaa\x6d\x47\xda\xab\x73\x33\xac\xd6\xc4\xd9\x88\x0f\x31\x25\x95\x34\x01\x47\x12\xcb\x5b\x81\x32\xe7\x54\x44\xab\xeb\x40\x61\x18\x48\xc7\x96\x23\xd0\x18\x69\xde\xaa\x02\xfb\x20\xa5\x72\xb1\x2d\x9a\xa8\x17\xa4\x76\x18\x43\x47\x9a\x4b\x12\x5e\x8c\x54\xbb\xa6\x1c\x03\x44\xc8\x06\x8a\x6e\x27\xa2\x88\x7e\x43\xc3\x40\x11\xdc\x1b\x79\x6d\xee\x29\xa8\x1c\x35\x8f\xe2\xa4\x1c\x12\xa6\xd9\x88\x1b\xc9\x20\x46\x23\x59\x42\xd8\x25\x30\xaf\x6d\x59\x22\x22\x87\x4d\xb3\x8f\xd6\xe0\x4a\x64\xc0\x3a\x49\xc3\x0d\x68\x13\x52\x26\x89\x66\xc9\x94\xce\x0c\xcb\x83\x27\x81\x1c\xf8\xb6\x72\xa5\x82\xdb\x06\x6a\x18\xc5\xe5\xb7\xcc\xdd\x69\xab\xb4\x62\xa1\x64\x05\x6a\x50\x56\x8c\x47\x55\x1e\xec\x69\x37\xf2\xa8\x04\xdb\x85\x95\xfd\xbc\x77\x89\xf2\xc2\x99\xfa\xa9\x02\x64\x86\x94\x5a\x19\x0d\xdc\x9e\x39\xf7\x3a\x7b\x67\xa2\x5b\x3a\x9f\x83\x9b\x64\xc7\x27\x56\xd4\x6f\x67\x3b\x80\x27\x56\x1c\x14\xba\xa8\x06\x54\x50\x92\x3d\x4a\x6d\x45\x01\xeb\x81\xb3\x85\x14\xc2\x9f\xef\x38\x56\x0a\x79\x0f\x79\x2e\xea\xd5\xe1\xbe\x0e\x2a\x80\x0d\x04\xc9\x63\x9e\x3f\xb6\x21\xc9\x65\xfb\x98\x91\xcb\x07\xc9\x42\x83\x18\xe2\xc4\xa3\xd3\x26\xb6\x11\xd1\x2a\xcc\x16\xba\x00\xeb\xc3\xae\x89\x1c\x5e\x41\x17\x5c\x2c\xce\x7c\x05\x20\x08\xc7\x1b\xb5\xd4\xd0\x34\x1b\x61\xa9\x03\x65\x53\x60\x81\xc6\x5c\xd3\x8f\x50\x13\x6c\xfa\x1f\xac\x4c\xa7\x1b\x6a\xc8\x0b\x43\x08\x57\x46\x65\x8e\x29\xe6\x29\xa8\x67\xe1\x0e\x42\x39\x54\x5b\x7f\xe6\x96\xea\xa0\x62\x10\x60\xaa\x44\x0e\x65\x8f\x35\x1e\xbb\xb0\x7a\x0e\xa8\xbd\x5a\xa1\xc0\x49\x6c\xe9\xab\x60\xb5\x18\x16\x72\x8b\xb8\xb5\xa7\x32\xae\xcb\x3a\x85\xda\xa3\xd1\xeb\xfb\x8c\x3d\x45\xf0\x53\x41\x39\xc7\xf1\x4f\xd0\x33\xeb\x06\x0e\x4a\x9a\x11\x35\xc9\xe7\x90\xa9\xe5\x6a\x66\x42\x2e\xa4\x66\x41\x25\x1c\x85\xdc\xcb\xf6\xce\x6c\xb8\x13\x7c\x04\x5f\xda\x58\x0b\xd5\xf7\x18\x05\xa9\xff\xe8\x2c\x50\xd0\x83\xc6\x69\x3a\x3e\xe2\xe3\xaa\xaf\xa7\x78\x6b\x1b\xa9\x64\x34\x32\xa8\x05\x03\x21\x79\x58\x1c\x16\xf7\xc9\xa9\x4e\xc9\xed\x44\xb2\x5b\xa3\x5b\x20\xf6\xc1\xf2\x5e\xa5\x92\x00\x3c\xa9\xa9\x36\x7a\xe1\x6b\x54\xd8\x33\x68\x44\x01\x94\xfe\xf4\xe8\x1c\x50\xd2\x15\xe9\x8f\x65\x80\x07\x07\x02\xda\xf2\xd9\x4e\x1e\x0c\x40\x3f\xf9\x96\x95\xdc\x2c\x33\x09\x5f\x96\x51\xf3\x49\x57\xfc\xc4\x41\x5a\x42\x1b\xaa\x8d\xf4\x61\xf0\x0d\xcd\x72\x74\x93\xdc\x58\xbe\x6c\xd3\x61\xda\xb2\xbf\xa7\xa2\x14\x8c\x8f\xc7\x86\x6a\x76\x70\x6b\x3f\xc3\x7a\x20\xd8\xdf\x32\x58\x08\x49\x71\xc6\x88\x35\xdd\x97\x28\x52\x58\x85\x07\x5a\xda\x4d\x6d\xfc\x9e\x29\x2d\x21\x44\x52\xaf\x1a\x86\x8a\xbb\x97\x42\x83\xd2\x1a\x5f\xc1\x0c\xad\x6b\x02\xed\x50\x39\x13\x0b\xef\xf4\x2f\xbd\xe6\x28\x67\x40\x63\x3a\x84\xb1\x36\x10\xc6\xa1\x96\x80\x41\xc1\x94\x15\x3c\x6d\xa8\xd6\xa0\x08\x8c\xb3\x1b\x51\x44\xb5\x14\x4f\x7d\x54\x54\x5a\xa0\x59\xa6\x02\xd0\x10\xcf\xa1\x7c\xca\xca\xf6\x40\xc2\x94\xb4\x8e\x68\x30\x69\x83\xa7\x96\xae\xa1\x0d\xaa\x0b\x96\xbe\x5f\x4f\xfc\xa6\x3e\x63\x5d\xd0\x85\x0a\x71\x8b\xae\x1a\x45\x95\xcc\x0b\x3f\x84\xbf\xe0\x56\x78\x35\x78\xb3\xb0\xcc\x60\xa4\x88\x18\x59\x8c\xd8\x84\xb9\x5d\x9a\x7d\x81\x9d\x5e\x80\x31\xec\xf7\x18\x3b\xa2\x4a\x82\xa0\xbc\xb8\x7a\x1b\x16\xe2\x5b\x38\x3c\x1f\xd1\xd3\x31\xc3\xcb\x62\x88\xf1\x32\xf7\x2c\x35\x54\x04\x55\xc0\x6f\x9f\x15\x14\x50\x11\xda\x4c\x85\x4a\x25\xd9\xe9\xe1\x33\x6a\x65\xa2\xd7\xba\x22\x62\x5b\x57\x65\x03\x6e\x68\xbc\x80\x09\x17\x7b\xe0\x68\x72\x74\x87\xd1\x7b\x63\x38\x30\x59\x56\x19\xb8\x61\x46\x55\xee\x2f\x12\x8b\x85\x01\x76\x0c\xab\x5a\x22\x12\xd3\x57\x12\xb0\xde\x02\x60\xe1\x5a\xe0\x04\x6f\xad\x86\xfd\xf0\xd5\x72\x63\xbe\x2e\x1f\x38\x73\xee\x3f\x43\xc2\x18\x45\x60\xd4\x0b\x54\xd0\xad\x95\xf4\xa8\x07\xde\x7e\xdf\xcb\x05\x5a\x40\x39\x5f\x2b\x98\x6e\x57\x57\xc5\x62\x3b\x4b\xb1\x7d\x98\xd2\x23\xca\x6f\x69\xb1\xb5\x86\x84\x08\x42\xfc\x68\x50\xde\x81\x9c\x0c\x43\x59\x22\x80\x12\xa0\x2f\x53\x3e\x9c\x64\x85\xd8\x71\xf5\x52\xa3\xca\x1f\x70\x9f\x5e\x5d\x15\xf6\x46\x5c\xee\x6f\x5f\x34\x49\x89\xc1\x19\x12\x7f\xb6\xa0\x5b\x66\xe3\xaa\xd0\xaf\xce\xf7\x96\xd6\xa2\xac\x59\x51\x27\xa3\xc6\x8d\x11\x92\x30\xf3\xad\x43\xc1\x0c\x07\xdb\x17\x00\xfe\x96\x49\x20\x16\x09\xf8\xa5\x00\x55\x03\x71\x08\x3a\xab\xee\x77\x46\x81\xbb\xe1\x39\x16\xad\x0a\x87\x20\x59\x10\x79\x1f\xad\x02\x06\x6a\x09\x0c\xc7\x14\xd7\x99\x1a\x65\xe4\x2e\x0a\xf4\x41\xbc\x1a\xeb\xfa\x4c\x48\x6b\xa8\xb0\xe4\xa2\x8a\xa1\x91\x17\xfa\x00\xa7\x33\x01\x81\x8a\x60\x5a\x76\x98\x5a\x0d\xd6\x80\x44\x8e\x92\x5f\xf7\xd9\x41\x7c\x10\x5c\x7c\xa6\x90\x35\x0c\x4c\xe0\x60\xf0\xb2\xd0\x69\x50\x83\x4a\x63\xdb\x40\x0f\xcc\x46\x85\xa1\x7e\x8b\x0e\xe6\x6c\x20\xa8\x6d\x04\xb5\x32\x2a\x6b\x41\x4b\xf0\x6d\x29\x1b\x82\x59\x14\x9f\x3b\x0d\xe3\x73\x17\xe0\x80\x34\xb7\x36\xe0\x77\x32\x23\x27\x64\x6e\x0b\xd3\xda\xc3\x5d\x77\xfb\xc7\x57\x97\x45\x53\x79\xbc\xce\x88\xe7\xb9\x72\x6e\xd4\xbb\x6f\x60\x87\xd4\xb0\x88\x9a\xbb\xe7\xde\x20\x90\xd9\x55\x88\xac\x53\xed\x1f\x27\x0b\xac\x9c\x6a\xc3\x26\x39\x11\x14\xe1\x6b\xdc\x5e\xd6\x53\xd3\xac\xb2\x92\x90\xda\x46\x86\x76\xfb\x64\x3d\x24\xc2\x85\x42\xc3\x69\x65\x2a\x00\x38\x2d\xf0\x49\xf7\x21\xb7\x1d\x45\xde\x9f\xb1\x42\x28\xd9\x0b\x58\xbf\xad\x76\x98\xb1\x90\x50\x4b\xc4\x89\x10\x63\x77\xd2\x14\x3e\x9b\x72\x40\x38\xe5\x16\xaa\x38\x11\xdc\x08\xa8\x51\x96\x0b\x7b\xb9\x65\x71\x11\xe4\xc8\x1c\x08\x25\x8a\xf5\x0b\xa2\xef\x89\xd0\x30\xb1\x78\x6f\xe1\xa7\xda\x09\x8e\xdd\xb9\xc8\x93\x66\x65\xde\x3d\x4d\x49\x4d\x65\x05\x5f\x0b\x9f\xc1\x62\xce\x14\xb8\xdf\x0a\x6d\xcd\x58\x0c\x44\x81\x69\x17\x9f\x1e\x59\xe9\x78\x31\x08\x6d\x77\xbf\xc9\x94\x75\x9c\xf1\x18\xc9\x06\x44\x29\x85\x82\x4a\x5c\x2e\xf5\x01\xfd\x39\x76\x4e\x98\xa3\x01\x81\x7d\x48\xac\x71\x6d\x11\x73\x7e\x1b\x8a\x67\x8c\x07\x14\x21\x2a\x1c\x37\x05\xc2\x01\x45\x35\x15\x25\xf8\x57\x8d\xb5\x37\x15\x5a\x94\xc6\x70\xc4\x18\xa7\xd2\x65\x35\xd4\x15\xe0\xd4\xe6\xe6\xe8\xa1\xd7\x9a\x12\xb4\xc8\x63\xa2\xa6\x10\xe6\xe1\xc3\x52\xaa\xe0\x83\xcc\x10\x02\x02\xf5\x2e\x94\xd9\x35\xd6\x4a\x0e\x25\x95\x64\xc9\xc0\x6e\xca\x0a\x96\x8b\x62\xac\x27\x3d\x67\xcf\x46\x51\x05\x69\x1b\x77\xc1\xb4\x8d\xbe\x51\x84\xd1\x8f\xba\x05\x46\x05\x16\x75\x88\x2d\x0c\xcf\x28\x09\x25\xa3\x64\x1e\x7b\x9e\x8e\x83\x88\x46\xbd\x09\xf8\x0d\x02\x4f\xb5\x43\xeb\x85\x2d\xc2\x94\xd1\x07\x61\x24\x54\x4d\xa7\xf8\xb3\x0f\xda\xbd\xf4\x4d\x09\x6b\x2c\xb0\x44\x88\xb8\x02\x4f\xcd\xfb\x69\xe1\x99\x58\xe2\x08\xfe\xb3\xe1\x8b\x83\x62\x1e\x1e\xe8\x78\xf1\xce\xa1\x91\x2b\xd9\xba\xa0\x04\x82\xc4\x48\x67\x59\x5a\x9b\x16\x63\x5c\xc4\xf9\x58\xe1\xd1\x56\x80\x8a\xb4\x3d\x60\x76\xc7\x9c\x7f\xee\xb3\x5a\x55\x35\x6b\x51\x38\x65\x85\xdc\xd6\xce\xb3\x8f\x29\x83\xb6\x7e\x18\x9d\xb6\x87\x88\x76\x82\x39\x62\x7f\x08\x62\x8b\x90\x14\x0b\xc4\x74\x4b\x17\x1b\x22\x99\x57\x0d\x2d\xd5\x31\x56\x30\x91\xd9\xb0\xe1\x78\xf7\xbb\x83\x68\xd0\x3a\xcc\xa6\x16\xab\x45\x25\x11\x74\x33\x04\x63\xca\x5b\x4c\x61\xc3\xac\x0b\x63\x2b\xa0\xf7\x62\x9c\x15\x02\x95\x25\xac\xb0\x3a\xa8\xc6\x63\x57\x8f\x30\x8a\x1b\xc4\xc1\x17\x97\xfc\x52\x77\xb9\x23\xdd\x7c\x38\x2a\x72\x8b\xd3\x4a\x82\xd3\x90\x51\x5c\xd6\xdc\xf9\xda\x67\x42\x85\x74\xb7\x2e\x2a\x98\x7e\x74\x4d\xd5\x7c\x38\x61\x5e\x0d\xf9\x04\xdb\x03\x4c\x98\x36\xa3\x7d\xa7\xc1\xb4\x42\x7d\x11\x98\x1c\x7c\x8b\x58\xca\x5e\x35\x82\x67\xa1\x4d\x6c\xfb\x13\xe0\x8a\x1a\x61\x36\xbb\x0d\x6e\x1d\x53\x89\x0e\x82\x18\xb2\xc6\xd1\x34\xa6\x64\x54\xea\x66\x4a\x9e\x04\x00\x8a\x11\x87\x2f\x58\x08\x66\x6c\xb8\x39\xa5\x92\x3a\x0e\xb8\xb8\x0c\xe6\x8a\xc5\x31\x99\x03\x6b\x56\xf8\xbd\xb9\xc3\xb4\xa0\xdf\x2e\x33\x30\x1a\x0b\x0e\xca\x15\x90\x6b\xdc\xc7\x40\x20\x23\xe8\x56\x94\xc2\x6d\xbf\x9b\x09\x41\x5c\x16\x5a\x29\x34\x48\xbb\x79\xd2\x83\x18\x63\x53\x62\x46\xca\x18\x8a\x1d\x1a\xa7\x7e\xce\x93\x16\x52\x34\x96\x1d\x4a\x0f\x1a\xa7\x45\x86\xc0\x3e\x87\x62\xd7\x96\x56\x08\x2d\x85\x20\xc5\xc5\x8f\x84\x39\x5f\x51\x07\x02\x7f\x18\xe0\xda\xb3\x19\x58\x81\x50\x72\x7e\x69\x1a\x27\x58\x71\x0d\xf4\x52\x0f\x13\x81\x0f\x45\xe3\x6d\x99\x8a\x52\x69\x29\x53\x17\xd9\x09\x41\x8b\xb7\x13\xe9\xf3\xb9\x82\x06\x0c\xe8\xf7\x73\xed\x9d\x29\xa6\x96\x15\xc1\xaa\xa2\xfb\xcf\xdc\x02\x61\xfb\x26\xa3\x92\x51\x5d\x60\x9b\x13\x26\xea\x0e\x7f\x3b\x21\x0f\x0b\x75\xcb\x08\x5e\xed\xef\x4f\x08\x1e\xbe\x06\x2c\xab\xaa\x32\xa4\x43\x9c\x6c\x60\x5b\xbe\xaa\x69\x84\xa4\x0f\x02\xcf\xc1\xc4\x01\xbc\xe4\x06\xf2\xbf\x34\xb7\x7f\x41\x62\xbd\xbb\xdf\x43\x3e\xe0\x9a\x95\x55\xc1\x74\x36\x15\x2e\xd4\x16\x8a\x43\x97\x04\x97\x1b\x96\x9a\x33\xea\x4f\x68\xfd\x91\x16\x42\xef\x2a\x00\x13\xd4\xd5\x06\x35\x78\x03\x79\xe2\x46\xf4\xca\x13\x78\x4a\x74\xa4\xef\xbb\x54\x36\xc7\xfb\x3e\x9c\x65\xf8\x68\x26\x4a\x7b\x0b\x2f\xc6\x8b\x3a\x84\x4f\x36\x0a\xa2\x7f\xc0\x1e\x04\xa0\x01\x8a\x00\xf3\x83\x11\x4b\x20\xca\xc6\x78\xb6\x34\xae\xef\xfd\xb9\x03\x62\x49\x83\x1b\xcb\x9d\xc2\xc0\xa3\xa7\x03\x79\xc5\xc9\x51\x60\x9e\x8b\x43\xb4\x8b\xa4\x1b\x77\x0e\x70\x2c\x13\xcc\x6e\x78\x9e\x51\xf6\x92\x3d\xc5\xd8\xb4\xc5\xa8\xd2\x82\xcd\x05\x37\x2a\xab\x96\x3e\xcd\x13\x9c\x03\x28\x95\xcd\x8a\xc8\x48\x71\x61\xe6\x30\x71\x29\x08\x96\xfd\x99\x27\x56\x2f\x41\xdc\x15\x05\x81\x0b\x09\x80\x67\x7f\xd2\x6c\x63\x71\xa5\xa9\xd6\xb8\x8d\xfe\x63\x1f\xcd\xb0\x6b\x55\x3d\x16\xdc\x1a\x00\x21\xe9\x77\xb7\x43\xc5\x8c\xb3\xd0\xa9\x82\x70\x88\xa5\xce\x14\x5c\x5e\x83\x0c\x8e\x40\x6d\xee\x95\x60\x09\xa2\xc7\xbe\x17\x25\xca\xba\x50\xdc\x80\x23\x96\x8e\x88\xeb\xd0\x18\xde\xe9\xc2\xf5\xc2\xf7\xaf\xb2\x1d\xc3\x5c\x26\xb9\x1d\x01\x4e\x18\x50\x12\x06\xe7\xb1\x9b\x12\xe0\x6b\x45\x74\x58\x02\xaf\x4f\x0c\x89\x5b\x64\x6a\x87\x20\xc6\x50\x43\x00\xd4\x22\xd7\x1c\xf3\xc2\x35\x06\x93\x1d\x02\xbe\x10\x22\xc5\x17\x40\xba\x5e\xdc\xe5\x20\xf4\x27\x1a\x1a\x02\xd4\xce\xb9\x2a\x40\x7f\xb0\x89\x1d\xbe\xd4\x30\xf9\x4c\x3d\x4d\xd0\x10\x0c\xaf\x52\xc8\x02\x09\xfb\xf9\xf2\x62\x8e\xcd\x2f\x3c\x16\xdd\xf5\xdc\x09\x7f\xd8\xcd\x0a\x0b\x8b\x54\xae\x53\xd9\x00\x3d\xcb\x86\x46\x3d\x7f\x72\xa7\xfc\x47\x8a\x00\x4d\x67\xb2\x80\x7b\xa2\x4b\xc2\xbd\x4c\xd8\xb5\x28\x0b\x91\x93\x49\x68\xd4\x16\x57\x11\xb8\x0e\xf1\xc7\x72\x83\xae\x99\x72\x48\x93\xb2\x2a\x54\x62\x6b\xdc\x93\x0f\x8c\x5e\xe6\x2c\x65\x12\x07\x58\xbe\x24\xfe\xbd\x37\x7b\x35\xb5\xe7\x98\xcd\x84\x13\x35\x99\x8a\x9c\x7e\x58\x8b\x23\x85\x42\xbb\xda\xd7\xfe\x88\x4b\xd1\xc1\x55\x88\x7e\x7e\x84\x60\x09\x6d\x28\xe3\xf3\xea\xc2\xbe\x5d\x96\xc0\x57\x57\x05\x8f\x84\x56\x9d\x02\xce\x49\x16\x4c\x02\x83\x50\xbc\x50\x36\x38\x81\x5e\x45\x73\x39\x0e\x24\xee\x80\x4f\x13\xf0\x46\xcc\xd8\xf5\x14\x68\xf1\x50\xd5\x03\xb5\x8e\x3e\x7f\xf1\x9e\x74\xf4\x8d\xba\xfb\x06\xb1\x11\x6e\x65\x50\xfd\xa0\x19\x62\x0b\x54\x7e\x95\xa5\x62\x67\x30\xdf\x41\x74\x63\x61\x18\x38\x2b\xc6\x79\x98\x40\x43\x73\xc4\xa6\x79\x14\x81\xb5\xfe\xb5\xe0\x85\x86\x84\x0b\x9c\x56\x0d\xb3\x4b\x59\xf2\xb9\x7a\xc2\xee\x1e\x6b\x5a\x5a\x2e\x92\xbd\x50\xaa\x0e\x7c\x19\xcc\xba\x7a\x66\x99\x38\x9c\x77\x48\xa6\x4c\x45\x6d\x74\x5d\x09\x1e\x82\x93\x34\x62\x00\xa9\xb4\x9a\xfc\xad\x5c\x41\x9b\x77\xa9\x09\xb9\x53\xb8\xf4\x24\x16\x9a\x28\x84\x7d\x97\xf5\x05\xa8\xb2\xaa\x88\xd3\x1c\x7c\x04\xcb\xef\x06\x5c\x1c\x6e\x6d\x36\x67\x76\xc5\x08\x83\xd7\xb1\x62\xf3\x3d\xc6\x7f\x3d\x5f\x6c\x66\xb6\xae\xd7\x36\x59\xe3\xb6\x51\x25\x92\xd2\x37\xab\xab\x43\x0a\x5a\xe1\x74\x50\x31\x05\x34\x66\xab\x2b\x41\x2e\x98\x96\x6c\x94\xd1\x99\x72\x47\xd6\x9c\xd3\x80\x58\xe1\x4d\xe1\x28\xed\xd6\xf4\x6f\xfe\x24\x21\xff\x86\x35\xda\xc2\x3a\x6c\xa0\xdf\x9b\x65\xc6\x1d\xab\x44\x8d\xe5\x7c\xe3\x1d\xea\xf7\x92\xcf\x3d\x13\xb5\xb4\x28\x61\xec\x00\xc2\x49\x5c\x6b\x31\x9d\xe9\xb0\x97\xab\x5c\x75\x36\x4d\xe7\x52\x60\xcf\xdf\xc8\x8c\x78\x19\xd4\x4b\x5e\x69\x39\x75\xa9\xbf\xae\x77\xa7\x2d\x82\x44\x10\x85\xd6\x89\xba\x6b\xce\xc6\x4e\x8c\xf9\x01\x57\xba\x53\x06\x30\x28\x99\x60\x85\x0e\x5b\xf7\x04\x2e\xca\x79\x7b\x43\x51\x67\x7e\xd8\x22\x33\x59\x19\x36\x25\x75\xf3\x83\x3b\xc9\xaa\xaf\x20\x3c\xec\x24\x10\xc4\x65\x24\x17\x24\xaf\x63\x9f\x2e\x5e\x04\x0a\xcd\x37\xbe\x95\x0d\xa2\xaf\x49\x85\xd0\x92\x5a\x14\xd4\x43\xe5\x59\x31\x14\x5e\x5f\x41\x39\x4e\xa1\x98\xf8\xbe\xb7\x0d\xaa\xa0\xf2\x02\xb5\x16\x36\xbf\x8b\xf3\xef\xc8\x6e\x5c\xb6\x4f\xd4\x19\xbd\x1e\xc8\x75\x79\xb1\xdc\x9e\xc7\x92\x12\x08\x27\xd9\x20\xd3\xce\x5d\xec\x2a\xa9\x10\x5e\xa8\xb9\xaa\x18\x39\x06\xbe\x1a\xdf\x3b\x2e\x0a\x1b\xd4\x20\xeb\x5d\x82\xc3\x2e\xb9\x42\x7a\xe8\xf0\xc8\x8a\xd4\x98\x86\x22\x6c\xfe\x60\x1b\x7b\xd4\x41\x0f\x54\x75\x10\x63\x44\xb6\x6c\xd5\x7d\xb2\xdb\x70\xd6\x6e\x09\xb5\x43\x48\x98\xda\x00\xdb\x12\x94\xa0\xd9\xdf\xeb\x33\xc8\x39\x02\x73\x10\x71\xe0\xcb\xa2\xd0\x77\x2e\x5e\x87\x35\x36\x6a\x07\x8c\x4e\x86\x82\x00\x41\x50\xed\xc1\xa2\x1f\x5c\x1a\x3c\x35\xb0\x6a\xa9\x4a\x12\x1c\x76\x16\x17\x27\xf1\x51\xae\xb8\x7c\xe3\x82\x4c\xc1\x3e\x8b\x44\x5d\x36\xc5\xd2\x19\x85\xb1\x52\x4b\x4a\x30\x8b\x55\xa7\x22\x5e\x9b\xba\xfa\x53\xd4\x7d\x49\xfb\xb2\x3a\xb6\x75\x30\xb6\x6a\x33\xb4\x8e\x8f\x5c\xdc\x3a\x4a\x14\x23\x59\x0e\x6d\xe0\x12\x8f\x2b\xa9\x0c\x41\x68\xd6\xe5\xcd\xb7\x44\x07\xf7\xf7\xfb\xec\xc4\x36\xf0\x70\xdd\x86\x86\x36\x45\x1a\x7a\x43\xfc\x58\xa5\x63\xd0\x14\x31\x93\x25\x80\x2d\x61\xe5\x0c\xc0\xb1\xf8\xee\xc8\xcc\x16\x15\x0a\x3a\xf1\x42\xd6\x79\xb7\xd6\x3a\xc8\x76\x56\x56\xaa\x12\xaa\x97\x44\x15\x80\xb1\x60\x14\x50\x16\x78\xc5\xb0\x57\xd7\xfa\xdb\xa1\xc9\x35\x74\xad\x28\x53\x30\x17\x5c\x0a\xa0\x4f\xcc\x33\xa2\xbf\xe7\xc3\xc7\xa8\x5b\x5a\xe7\x4e\xd4\x43\x22\x14\x59\xe0\xc2\x77\x4d\x52\xc5\xfb\xa1\x51\x3b\xa1\x10\x9a\x35\xf4\x16\xff\xda\x57\x2d\x72\x4a\x6b\xa8\xa8\xd9\xec\x38\x8c\xbe\x1b\x7d\x71\x5a\xe5\x9a\x17\x02\xd3\x20\x10\xa8\x1f\x74\xe0\xf1\x42\x3e\xc0\x3f\x41\xd8\xc9\xd1\x75\x26\x4a\x8d\xda\x43\xd4\x62\x07\x9b\xd3\xd6\x37\xd4\x37\x48\x01\x80\x66\xfb\x41\xe5\x80\x7e\xaf\xa7\x41\x67\x23\x57\x55\x05\x14\x4c\xba\x72\xa0\x04\x0e\xf5\xe9\x9d\x66\x3a\x6a\xe7\x1e\xb5\x3f\x6a\x24\xe5\xa2\xe0\x44\xd8\x95\x39\x3b\xe6\x02\xb4\x49\x24\x84\xc7\x71\xc1\x13\x68\x50\xe5\xfe\xd2\x93\x12\x42\x97\x73\x59\xe1\x42\x49\x62\x61\xa7\x0d\x2c\x42\x68\x98\x23\x4f\x1d\xa1\xc1\x6a\x70\x5e\xf8\xf0\xce\x84\xc7\x06\x02\x61\x0f\xa5\x18\x95\xe6\x02\x74\x28\x42\xd8\xf2\x25\x8b\xb0\xd8\xbe\x16\x14\x42\x80\x66\x84\xaa\xbc\x79\xca\xb2\x02\xdd\x32\xb2\x64\x55\x81\xe7\x56\x20\x60\x18\xf6\x19\xb1\x30\x61\xb5\xbb\xa0\x36\x02\x8a\xc6\x01\xcf\xfd\x35\x20\xc2\x17\x84\xd5\x11\x01\x5e\x67\x61\xb6\xe1\x73\x1e\xcf\xdb\xfa\x13\xc0\xfc\x20\x8e\xab\xa5\x2a\xc3\x49\x04\xdc\xb4\x40\xec\x16\xe4\x66\x56\x80\xd3\x96\xea\xa8\x59\xb1\xe0\x96\x47\x5e\xd5\x32\x30\x25\x45\xa9\xe7\x84\xc0\xa4\x4e\x49\x56\x7c\x03\xe6\x13\xbd\x59\xd4\x9b\x0b\x87\x01\xb5\x05\x9f\xfd\x36\x9e\x80\xcd\x26\x87\x7e\x51\xc1\x2c\x6d\xaa\x8b\xeb\xb0\x67\x96\x3f\x2e\x69\x54\x6d\x4b\x1d\xf8\x4a\x1c\xe1\xae\x93\xb1\x6e\x61\xbb\xe6\xd7\xb6\x29\x00\x55\x62\x42\xb0\x99\x2f\x7f\x61\xb4\x8c\x21\x98\x0d\x2f\xb0\xdc\x32\x24\xfe\x83\x12\x34\xc5\x16\x95\xd0\x4b\x58\x56\xca\xd7\xee\x0f\xfb\x2f\xdd\x1a\x13\xb2\x04\x84\x5c\x98\x81\x1b\xf7\x4c\xb6\x27\x01\x7b\xe0\xe2\x1c\x33\x74\xa0\x23\x9b\x14\x61\xdb\xae\x10\x61\x4e\x88\x6d\x57\x30\xe0\x5b\x32\x1e\xaa\x99\x4b\x75\x82\xa4\xe6\xdd\x54\x16\xb8\x17\x54\x42\x32\x1b\x31\x00\xdc\x31\x35\x01\x26\x32\x4a\x27\x29\x0d\x51\x25\xc3\xa0\x43\x11\xce\xd1\x8b\x2c\x9a\x28\xe6\xb8\xbb\x64\x65\x27\x30\xe9\x2e\x45\xb1\x0d\x11\x43\x87\x1f\x8e\xcf\x54\xc8\xbf\x80\x43\x34\x13\x36\xef\xca\x6d\x99\xb0\x5b\x02\x53\x0c\x44\x9e\x89\x1b\x5b\x1b\x64\x20\x9a\xf7\x1c\xde\xcd\xaa\xd1\x2d\xcf\x5f\x92\x8f\xfa\x36\xb2\x56\x4f\x84\xdc\xc5\x5e\xbc\x8d\xe4\x3f\x15\x24\x27\x22\x24\xd2\x96\x1b\x81\x42\xaf\xe0\x32\x21\x77\xd3\x60\xce\x82\x83\x31\x98\xfb\xe0\x1c\xf6\xbf\x42\x1f\x32\xca\xf5\x50\xd7\x69\x64\xa5\x1b\x29\x8a\x9d\xb7\xa3\xb9\xb4\x58\x0b\xd4\xcb\x18\xa4\x84\xeb\x93\xcb\xc6\x42\x8e\x4b\x3e\x9b\x00\x0a\x22\x5a\x68\x90\x9b\x5b\x6f\x2f\xee\x96\x93\x00\xf2\x8c\xfc\x40\xe1\x8f\xa3\x7a\xbc\xb6\x59\x92\xd1\x0f\x20\x70\xe8\xc9\x81\xd2\xa5\x52\x78\xf1\x42\x72\x30\xd6\x2e\xc1\xf3\x4e\x95\x4b\x82\x55\x64\xc5\x50\x96\x33\x59\x22\x72\x07\x3c\x57\x6e\x9a\x5c\xa1\x1f\xdf\xba\xc6\x29\x12\x47\x75\x3f\x16\x6c\xf3\x97\xd8\x7e\x7b\x61\x7d\x55\x70\x13\x51\x72\x62\x29\xb0\x89\x20\xf1\x40\x21\x6e\xaf\xae\x0a\xf2\xe9\xab\x7a\xa5\xdf\x05\xa5\x75\x40\xa7\x30\xca\xb3\x39\x76\xd9\x14\x21\x49\x66\xb1\x85\xb8\x65\x6e\x2c\x30\xed\x06\xc2\x28\x0c\x99\xb9\x19\xb2\x82\xa9\x59\x56\x66\xae\x36\x9b\x8d\xb2\xd8\xf2\x72\x86\xcd\x2b\x74\xfc\x61\x09\x0a\xec\x48\xab\x79\x06\xb5\x34\xa8\x2c\x00\xbc\xc4\x15\x91\x43\x90\xfd\x50\x94\x2e\x22\x0e\xaa\xbd\x8f\x69\x10\x3c\x17\xda\xa1\x1b\x41\x5a\x65\x0a\x4c\xb6\xb8\xc2\xb0\x0f\x41\x07\x3a\x35\xf9\xcd\x55\x50\x4c\xcd\xd7\x67\x89\x6f\x64\x90\xb1\x01\x5a\x17\xaf\x6d\x2c\x9a\x01\xad\xf6\xa0\xba\x0b\x8d\x02\xa1\xc8\xa8\xb0\xaa\x4b\x74\x0c\x0a\xaf\xeb\xb0\xef\x72\xac\x63\xd2\x01\xb4\x19\x2c\x2e\x20\x54\x5a\x68\x61\xf4\x3a\xbb\xf5\x3e\x46\xbf\x98\x55\x1a\x74\x08\xd2\x7a\x10\x6a\x0d\xf1\x33\x7b\x65\xc4\x64\xf1\x30\x0f\xea\x55\x66\xa6\x62\x1f\xc1\x54\xac\x7b\xcc\xc4\x71\xf7\x57\x7d\xab\x9f\x5a\x6c\x72\x70\x80\xc0\x58\x68\xa4\x70\x42\xac\xcd\x97\xaa\x0a\x6b\xee\x60\x5e\x49\x74\xd0\xeb\xda\x7b\xd1\x12\xf6\xc2\xb2\xba\xe6\x54\x8a\xf8\xb2\xb1\x15\x58\x8d\xe5\xe0\xcd\x7e\xd2\x44\xdd\x85\x12\x5c\xc2\xa1\x94\xa4\x3a\x1d\x8b\x8b\x8c\x47\x2f\x7c\x86\x4b\x69\x79\xf0\x5b\xa8\x18\x2c\xa7\xc2\x9c\x46\x85\x17\x8b\xf0\xed\x11\x2d\x00\x0d\x8b\x01\x03\xd6\x6e\x88\x8d\xed\xec\x19\x1d\x57\xe0\x9f\xa2\xf9\xe8\x5b\xc9\xc6\x12\x82\x37\x23\x3c\xa5\xe5\x4d\x54\x5b\x49\x69\xae\x2b\x5b\xe8\x2b\xcf\x03\xbf\x05\xfa\xdb\xab\x7a\x89\x30\x72\xc4\xce\x4a\x39\x95\xce\xc5\xa0\xa0\xf7\xcd\x98\x74\xbe\x52\xd0\x7d\xe4\x7e\x34\x46\xf1\x93\xcf\xfb\xf5\xd2\xdf\x67\x2f\x5d\x51\x7f\xc7\x26\x5f\xf7\xd9\xd3\xe3\xc3\x83\xd7\x17\xc7\x50\x5b\xfe\xf4\xe4\xe9\xf9\xc1\xf9\x0f\xec\xe4\xc2\x56\x73\x39\x62\xcf\xce\x8f\x8f\xa1\xe0\xfd\x77\x07\xe7\xcf\x8f\x13\xf3\x1c\xf6\x0f\x38\x7b\x79\x75\x55\xb8\x36\x01\xcf\xa8\x76\x3d\x0d\x91\xd8\xe2\xff\xc7\xff\x79\x79\x7c\x76\xc9\x5e\x1d\x9f\xbf\x38\xb9\xbc\x3c\x3e\x62\x4f\x7f\x60\x07\xaf\x5e\x9d\x9e\x1c\x42\x25\xfe\xd3\x83\x37\x50\xce\xe4\x3f\x0f\x8f\x5f\x5d\xb2\x37\xdf\x1d\x9f\xf9\x3a\xfa\xec\xe2\xf2\xc0\xfc\xe2\xe4\x8c\xbd\x39\x3f\xb9\x3c\x39\x7b\x0e\x23\x36\x0b\xfb\x1f\x9c\x1d\xed\x06\xed\x3f\xa0\x85\xc0\xb1\x6b\x70\x10\xad\x2c\x6c\x4e\xbd\xa0\xd5\xc1\xd5\x55\x41\xcd\x0e\x4e\x60\x38\xea\x79\x70\x7c\xd4\xde\xf5\x20\x69\x69\x7b\x00\x54\x32\x9a\x34\x3e\xbd\xbc\x03\x02\x14\xbf\x59\xd4\x04\xe1\xea\xaa\x70\xad\xa5\x91\x9e\x67\x97\x27\xe7\xc7\xec\xfc\xe4\xe2\xef\xec\xe0\xc2\x52\xf9\x1f\xaf\x0f\xdc\x50\xaf\x8e\xcf\x9f\xbd\x3c\x7f\x71\x70\x76\x08\xfb\x86\x33\x09\x76\x16\xda\x0e\xfc\xf0\xf2\x75\x9f\xb1\x8b\xef\x5e\xbe\x3e\x3d\x8a\x08\x64\x88\x76\xcc\x8e\x8e\x9f\x1d\x1f\x5e\x9e\x7c\x7f\x9c\x98\x27\xd9\xc1\xc5\xc5\xeb\x17\xc7\xd4\x43\xe2\xf0\xe5\x05\xf4\x33\x38\x38\x3d\x65\x67\xc7\x87\xc7\x17\x17\xe6\x77\x17\xc7\xe7\xdf\x9f\x1c\x02\x3d\xce\x8f\x5f\x1d\x9c\x9c\x63\x0f\x86\xf3\x73\x6c\x76\xe0\x25\xd3\x9f\xe3\xde\x0d\xaf\xcf\x4e\xcd\xba\xcf\x8f\xff\xf1\xfa\xe4\xbc\x8d\x3d\xcc\x38\x07\xcf\xcf\x8f\xb1\x9f\xc4\xc9\x99\x61\x3a\xe2\x86\x37\x27\xa7\xa7\xd8\xc7\xa1\xc6\x12\x09\xa3\x06\x0f\x9e\x21\x7e\x60\x6f\xbe\x7b\xc9\x5e\x1c\xfc\x80\x75\x86\xcc\x2e\x23\xdb\xb0\xf3\x63\x57\x8a\x28\xe6\x95\x83\x8b\x80\x6d\x0f\x9e\xbe\x34\xd4\xf0\x3d\x24\x2e\x5f\x1a\xd2\x5c\x5d\x15\x66\xcb\xa8\x83\x44\xd8\x0c\xc3\xbc\x9e\x2a\x24\x25\xec\xe2\xd5\xf1\xe1\x89\xf9\xc7\xc9\xd9\xe1\xc9\xd1\xf1\xd9\xe5\xc1\x29\x36\xac\x39\x7c\x79\x76\x71\xfc\x8f\xd7\x66\x57\x0f\x4e\x5d\x23\x0a\xdb\x3f\x82\x3a\x47\x04\x3d\x21\x4e\xce\x2c\xd7\x5c\xbe\x64\x74\x6c\x83\xed\xed\x2e\x6d\xc6\x71\xfa\xf2\x02\x18\xf0\xe8\xe0\xf2\x80\xc1\xac\x2f\x0f\xd8\xd3\x63\x6c\xbd\x73\x7e\x7c\x76\x74\x7c\x0e\xc7\xed\xe0\xf0\xf0\xf5\xf9\xc1\x25\xbc\xd0\xfc\xe6\xf8\x82\x5d\xbc\xbe\xb8\x3c\x38\x39\xc3\x0d\x32\x2c\x01\xc7\xfd\xe4\xfc\xc8\x9d\x36\x6a\x8b\xfe\xec\xe0\xe4\xf4\xf5\xb9\xe5\x3c\x47\xcb\xcb\x97\xec\xe5\xab\x63\x18\x14\xf8\xcf\x6f\x8e\xed\x67\xd1\x4b\x80\x23\xd8\xc9\x33\x23\xae\x5f\x1f\x7e\x47\x7b\xe9\x3b\x61\xe0\x36\x7e\x77\x70\xc1\x9e\x1e\x1f\x9f\xb1\x83\xa3\xef\x4f\xe0\x54\xe2\x9b\x5e\xbd\xbc\xb8\x38\x21\xda\xbc\x7c\xc6\xcc\x08\x57\x57\x05\x51\xb4\x2e\x0c\xef\xec\x95\x1b\xf4\xc1\xf8\x4e\xde\x9a\xcb\xe4\x00\x0c\x67\xf4\x2c\x5f\x82\x8a\x81\x0d\xc0\x4b\x76\x26\x6e\xe9\x12\xc5\xf0\xac\xc5\x20\x83\x73\x19\xcb\x3c\x62\x6a\x17\x8b\xaa\x31\x07\xd5\xd8\x29\xb6\x4d\x17\x32\xd6\xb5\x83\x0c\xc8\xa8\x90\xa1\xd5\x00\x41\xb1\x84\xf2\xb6\x80\x33\x9a\x8a\x22\xb5\x75\xaa\x33\x5d\xbb\x43\xc8\xf6\x13\xb6\x5f\x06\x16\xbe\x8e\xab\x37\xdb\x1a\x01\xe8\xe9\xc4\x32\xed\x4c\x49\xb0\x55\x50\x97\xc7\x0b\xa7\xe6\xe5\x69\x94\x46\x62\x5d\x68\xbe\x9c\x6b\x51\x16\x1c\xeb\xfd\x26\x8b\x43\x66\x77\xd4\xa2\xec\x85\xd5\xa3\x5d\x1a\xa1\x7d\x55\xc2\xb8\xd6\x9c\x42\xe9\x5e\xfd\x73\x39\x7d\x51\x99\x6e\x2c\xc9\x09\x7a\x84\xe2\x23\x63\xfb\x19\xf5\xc3\xfd\x7e\x6a\x1f\x57\x9a\xc2\x6b\x80\xfc\x24\x60\x00\x40\xb0\x21\x1e\xa1\x34\x0b\x2a\x19\xa3\x72\x79\x23\xe6\x14\xcd\x1f\xe6\x95\x05\x18\xc5\xa5\x42\x60\x30\x18\x85\xea\x48\x23\x9e\x43\x3b\x98\x0e\xf6\xe2\xe8\x38\x15\xc7\x5c\x4d\x79\x56\x90\xff\x8f\xcd\x24\x98\x85\xd8\x98\x48\x50\x69\x4f\x88\xda\x50\x14\x31\x33\xba\x4a\x55\xa4\x01\x8f\x9b\x9d\x86\x21\x42\xdc\x0f\x51\x43\xb1\x82\x4f\xed\xe0\x83\x32\x13\x23\x96\xa5\x82\x23\x94\x1c\x0b\x62\xda\x62\x32\x66\xa8\xb8\xc9\xcb\xdc\x18\xdb\x38\x80\xd1\x62\xb0\x84\xb5\x7b\x2d\xd5\x1a\x76\x56\x71\xc4\x8a\xdf\xba\xfc\xc3\x88\xff\x50\xe9\xdf\x75\x25\x0b\x5c\xf5\xfb\x05\x9c\x13\x94\x2f\x6e\x66\x8e\x32\xdf\xa4\x1c\x92\xb1\x03\xcd\x79\xa9\xce\xf8\x2d\x59\x07\x34\xc4\x8d\xef\x7c\xc3\xe2\x46\xc5\x10\xc6\xec\xc6\xa5\x56\x7a\x4d\xeb\xa1\xbf\x98\x26\x61\x38\x99\xec\xd4\x89\x9c\x09\x57\x8c\xd4\x2a\x97\x98\x62\x68\xd1\x72\xc6\xc4\xb3\xea\x8a\x11\x9d\x56\x65\xf9\xd6\x65\x5c\x50\xaa\x07\xf8\xd1\xa1\x5a\x81\xef\x1a\x6e\x21\x6e\x75\xbd\x43\x96\x77\xf6\x5e\x32\x3a\x82\x70\x85\x30\x2d\x85\x97\x1b\xba\xb6\x3d\x24\x1a\xa1\x2a\xa0\x85\x11\x2f\xe1\x21\x68\x87\x43\xad\xbe\xc3\x61\x7a\x99\xa7\xf2\xb7\x2c\x1b\x99\xb3\xd1\x62\x08\x04\x7d\xb1\x61\xa4\x7a\x6b\xa2\x64\xdd\xc6\x44\x46\xab\xc8\x15\x98\xdd\xd4\x01\x83\xbc\x70\x05\x9b\xe0\x35\x02\x28\x56\xac\xe9\x6f\xb8\x52\xe4\x62\xa8\x4b\x59\x64\x43\x2a\x42\x3f\x83\xa6\x03\x99\x2d\xaa\x11\x90\x0c\xd2\x00\xc6\x82\x78\x4f\x4c\x67\xb9\x9c\x8b\x92\x75\x6d\xbe\xae\xab\xe3\x40\x66\xdb\x54\x94\xd0\x78\x9b\x82\xd4\xca\xd8\x97\x39\xfa\xf7\x0b\x68\xd0\x00\x59\x3d\x98\x46\xe0\xdd\x4b\xbe\xa8\x92\x2d\xb1\xd6\xc4\x4b\x5a\xd4\xab\x91\xac\xdf\x51\x75\x59\xce\x14\x04\x10\xbe\xa5\x34\x6b\xf3\x2b\x23\x27\x3c\xce\xe3\x07\x39\x97\xe9\xbc\x10\x96\xd4\xd4\xbf\xce\xbe\x50\xd9\xce\x66\x34\x11\x90\x7a\x02\x00\x68\x0e\x64\x61\xcf\xd1\xff\xf3\xac\x94\x83\xab\x3f\xb1\xae\xaf\x29\x02\x33\xbd\xa5\x82\xda\xd7\x85\x1c\xa8\x9e\x83\x4a\x0e\xe6\xec\x6f\x66\x2a\xec\x9c\x17\xa9\x9c\xb2\xef\xf8\xf0\x5a\x94\x8e\x31\x11\x2b\x58\x95\x20\xd3\x2e\xe7\xec\x50\x9a\x0d\xde\x67\x07\xb3\x32\xcb\xd9\xfe\x37\xdf\xec\xe1\x3d\x64\xbf\x79\x55\x0a\x95\xd9\x92\x23\xdf\x67\xb6\xbd\xd6\xa5\xb9\x6a\xff\xe4\x7a\x67\x20\x59\xc0\xad\xf1\x87\x46\xab\xae\xa1\x4c\xc5\x34\x2b\x4b\x59\x52\x83\x5b\xdb\x0f\x35\xec\x38\x18\x8b\xde\x47\x7b\xfb\x7f\x31\x2b\x79\xc1\xcb\xec\xc7\x82\x7d\xc7\x6f\x44\x39\x10\xd7\x82\x4d\xe1\x83\xc9\x5f\xc7\xc0\x36\x43\xaa\xab\x8a\xad\x00\x36\xdf\x37\x30\x68\xe2\xbf\xb1\xce\x81\xe0\xa3\x07\x8e\xd9\x48\xef\x40\x74\x51\x6f\xa6\x7b\xe0\x3a\x0d\x52\xc3\xfe\x81\x90\x12\xf6\x79\x74\x10\xa4\x60\xdc\x67\xd0\x43\xd0\x5b\xc8\x6b\x77\x11\x34\x96\xc7\xe6\xfa\x08\x1a\x31\xbe\x91\x4e\x82\x60\x9a\x6d\xb0\x97\xe0\xd5\x55\xb1\xb1\x6e\x82\xb5\xed\xf4\xfd\x04\xa1\x7f\x36\x07\x17\x58\x41\xb2\xe9\x60\xc6\x87\x5e\x0b\x8a\x5a\x58\xef\x25\xec\x6f\xbc\x80\xde\x80\x8f\xf6\xf6\xbe\x8a\x5b\x71\x73\xf8\x5d\xdc\x86\x9b\x38\x69\x51\x81\xe0\xd7\x66\xd1\xe7\xc7\xaf\xce\x5f\x1e\xbd\x86\x95\x25\xf0\x54\x58\x2e\x18\x47\xd8\xef\xb3\xa3\x20\x67\xc2\x4e\xbf\xe3\x2b\xe5\x12\xfb\x4f\x05\x2f\x62\xcf\x70\x1d\x2b\x03\xb2\xc2\xa2\x96\x2d\xfa\x38\x02\x5f\x52\x98\x21\x48\x38\x0d\x72\x77\x6c\xe4\xeb\x1b\xe7\xe3\xb6\x22\xb0\x3e\x2b\x59\xb6\x4c\xcb\x1f\x68\x79\x5b\x60\x86\xa1\x28\x74\xa6\xe7\x61\xbd\x61\xe7\xfb\xad\x3f\x6d\xf3\x88\x41\x9e\x7b\x20\x52\x18\xed\x80\xbe\x08\x63\x9e\xb3\x63\x18\xb6\x65\x0a\x55\x11\x84\xbc\x39\x06\x4f\xed\x1c\x8c\x70\x07\x41\x88\xbe\x61\xf8\xd8\x41\x65\xa9\x88\x4e\x42\x59\x6d\xf0\x47\x0e\xd3\x05\x55\xd9\x7c\x8a\x7a\xbc\x31\x54\x01\x6a\x6a\xcb\xee\x90\xde\xc6\x35\xbd\xa8\x0f\xce\xdf\x20\xe2\xec\x31\x17\x3e\x35\x26\xb1\xb6\x12\x8c\xe1\x0b\xed\x76\xb3\x1e\xfe\x54\xde\x8a\x32\x21\x3c\x41\x88\x26\x48\xb0\xc0\x1e\x65\xdd\xf8\x24\x35\x8c\x00\x4c\x79\xc1\x2d\x9e\xc5\x66\x7f\xc3\xa4\x7c\xeb\x8f\x81\xed\x63\x38\xac\x03\x4f\xd0\x26\xc8\xb2\x1e\x6e\x88\x9a\x64\x33\x08\x4a\x64\x23\x0d\xb7\xe8\xd0\x0c\xdb\xfd\x7a\xef\x7f\xf5\x98\x55\x8d\xbd\x11\x5c\x69\x68\x34\x00\x28\xe9\x09\x2f\x85\xb2\xa3\x65\x3d\x36\x10\x85\x18\x65\x00\x8b\x8f\x46\x0e\xe6\xe7\x37\x18\xba\xfc\x75\x00\x7c\x85\x7f\x19\x4e\xeb\x85\xfb\xcc\x0b\xa0\xc6\x4d\x96\x56\x66\xc4\x92\xc5\x3c\x61\xab\x24\x41\x1e\x68\x50\x41\xca\x82\x94\x5a\x32\xea\xf1\xcd\x17\xd4\xcd\xab\x83\xa0\xd1\x1a\x67\xd5\xea\xf1\x62\x87\x89\x66\x05\xde\xc4\x55\x09\x36\x5f\x19\x73\xa7\x86\x1f\x72\xca\x46\x94\x78\x56\xef\xc6\x8e\x5f\xda\x62\x92\xc5\x28\x1b\x57\x65\xa0\x86\xf8\x49\xbf\xa4\x14\xeb\xe6\xa4\x01\xda\x65\x3e\x2b\x85\xaa\x72\x38\x09\x10\xbb\xa3\x6c\xa9\x21\xa8\x2b\x58\x8f\xd3\xab\xf7\x65\x54\xf3\x18\xe0\x54\x54\xac\xd8\x3c\x14\x6a\x2e\x03\xe8\xfb\x5e\x5b\x9c\xaf\x44\xe1\x13\xed\x12\x72\xe5\x37\x34\x2a\x57\x56\x4d\xfa\x10\xa4\x8b\xdc\x4c\x45\x9a\x71\xa6\xe7\xb3\x70\xb1\x6f\x00\x25\xdd\x38\xf4\xb6\x62\x00\xf5\x8f\x9c\x64\x33\xcf\xee\xc6\xfc\xb1\x99\x11\xe6\xd2\xa1\x34\x7a\x58\x0c\xa4\xe2\xf0\x1b\x9e\xe5\x01\xa6\x25\x32\x92\xb9\x72\xc0\x46\xac\xc0\xd8\x96\x5b\x6a\x05\x57\xd8\xdc\x18\xd2\x98\xb4\xb9\x33\x5c\x25\x56\x82\x78\x77\x21\x78\x0d\x26\x06\x04\x99\x2d\x3a\x98\x14\xc7\x83\xd9\x4c\x14\x69\xf6\x1e\x0b\x80\xf7\xfc\xda\x8f\x3c\x3a\xd4\x90\x41\xd5\xe8\x60\x81\x8a\xed\x2b\x67\x2f\x5d\x26\x3e\xac\xdc\x4e\xd9\xa1\x1a\xbb\x90\x70\xec\xcb\xdf\xa1\x14\x7a\x03\xa6\x58\x81\x69\x59\x2e\xe5\xc3\x1c\xb1\x34\xd3\x12\x4a\x42\x40\x44\x19\x11\x5c\x00\x87\xb0\x70\x2e\x91\xf3\x81\x2c\xed\x5f\x0e\x3b\x13\x9d\x15\xca\xb0\x81\x38\x70\x12\x40\x7d\x12\x28\x78\x60\x11\x03\xcd\xdd\x6d\x4a\xd8\x40\x99\x77\x7b\x57\x27\x18\x51\x2b\x4c\xb3\x41\x98\x28\x15\xce\x9a\x52\x9b\x17\x48\x37\xb0\x29\x3e\x30\xf5\xa9\x00\x68\x15\x00\x31\xbb\x98\x60\x03\xdc\x60\xcc\xc2\x9e\xdd\x5e\x8f\x79\x60\x72\x64\x93\x7e\x1c\x01\x1b\x93\x01\xc3\x4a\x8e\xfc\xfe\x1e\x06\x98\x9a\x05\x7b\x5b\xe7\x71\x77\x18\x2d\x9c\xac\xd6\xb2\xcd\xde\x83\x6e\x16\xd8\xd5\xa3\x56\x7f\xd6\xd6\x78\x23\x73\x03\xa8\x01\xbf\x90\xe5\xc2\x69\x27\x01\xd3\x53\xff\x08\x4a\x9d\x51\xd5\xc0\x37\x31\xb6\xba\x02\xf0\x0f\xcc\x56\x05\x95\xd2\xe1\x25\x8d\x66\x05\x70\x43\x20\x84\x1c\x4b\x9e\x2e\x96\xf5\xa1\x5a\x01\xfd\x2f\xcd\xab\x0d\x37\x0f\xc4\x84\xe7\x23\x5f\xaf\xaa\x36\xfa\x6a\x37\xb4\xb9\x7e\xdc\x6a\xae\xae\x3a\x50\x67\x09\x9a\x0d\x58\xc1\x2a\x47\x81\xdb\x23\xc1\x72\xd4\x39\x70\x8c\x35\xd8\x8d\xb2\x50\x15\x16\xc2\xa4\x10\x8a\x48\x0c\xe3\x88\x43\xf0\x6f\x77\x14\x30\x94\x5a\x93\xb5\xb5\x6b\x04\x13\xb9\x82\xb1\x65\x11\xba\x60\x8c\x05\x8d\x89\xa8\x0a\x5b\x46\xfa\xc4\x70\xab\xb6\x20\xa6\x49\x59\x21\x0c\x78\x56\x23\xfc\x87\xd7\x3e\xd3\x29\x48\x23\x42\xcd\xc2\xe9\x43\x21\x91\x13\x87\x89\x0e\x76\xbb\x86\xb8\x4b\x33\x35\xac\x14\x36\x3f\x31\x6f\x9b\x82\xdc\x23\x25\xef\x0d\xc8\x2d\xbc\x50\x3c\x52\x27\x5e\x9f\xe5\xb7\xb8\x0c\xf7\x94\x97\xd7\x50\xf7\x28\xca\xe2\x09\xb2\x26\xb3\x82\xd9\x12\xe6\xed\x9c\x46\x5d\x26\xce\xa0\xaa\x51\x78\x06\xfb\xb8\xe5\xb5\xc3\xd9\xd0\x7b\xdd\xa2\xed\xf9\x5a\xaa\x9a\x84\x64\x43\xf3\x3a\x7e\xa9\xef\xdd\xe0\x5c\x8a\x83\x79\xf4\x8e\xa8\x0c\x1c\xa0\x92\x1c\x1a\x02\x33\x83\x82\xc3\x45\xc2\xe5\x51\x9f\x3d\x37\xba\x8f\x79\xa7\x77\xc5\x38\xfc\xef\x45\x6c\xba\xb7\xda\x16\x2d\x25\x3a\x21\x1c\x10\xd0\x25\x72\xc7\xd8\x98\x12\xe3\x46\x05\x9b\x09\x5d\x71\x70\x01\xdf\xca\x32\x4f\x6f\x33\xa3\x14\x14\xb2\xd8\xa1\x68\xc3\x0d\xfc\xb9\x63\xfd\x36\x21\x22\x37\xc1\x72\x7a\x72\xc8\xb1\xd7\x77\xd0\x56\xc2\xe7\x13\x58\x83\x07\x0a\x75\x40\x5f\x8f\xa6\xe0\x42\x99\x8c\x21\x27\x4c\xa2\x9c\xe5\x7c\x4e\x3e\x14\xf3\x09\x25\xf8\x36\x1c\x28\x35\xd0\xf1\xd5\x55\xe1\xc4\x29\xe8\xaf\x8d\x37\xb5\xdc\xbb\x20\x2e\x68\x37\xbe\x0c\x76\xe3\x15\x62\xc9\x7f\x9b\x5b\xd1\xf5\xc9\x4e\x50\x87\xca\x77\x88\x24\xc4\x63\xaf\xde\xa3\x92\x50\x8f\x89\x07\x95\x26\x98\x23\x69\xd3\x9a\x8d\x10\x17\x79\x9e\xd0\xff\xcd\xa6\x33\x59\xea\xc4\xbb\x01\x31\x33\x8a\x4a\xc8\x7b\xd1\x81\x45\x6d\x4a\x61\xbb\x01\xc6\xe5\x13\x01\xbc\x67\xcb\xe7\xda\x29\x91\xa7\x16\x9f\xa5\x05\x0d\xa8\xfc\x74\x48\x49\x27\xff\xc2\x02\x09\x16\x20\x6c\xc3\x31\x59\x09\x4e\x4e\x7f\x8c\xbb\xaa\x07\x4e\x7d\xe1\xb0\x91\xf5\x16\x8a\x59\xc9\x6a\x3f\x08\xeb\xa4\xbe\xa1\xba\xe5\xa8\x72\xc5\x93\xa2\xe1\x6f\x21\x13\x8a\x6e\x27\xc0\x48\x61\x7b\xf4\xcc\xf5\x83\x70\xc4\xd7\x04\xb2\x67\x7c\xcc\xcd\xd7\x20\xa6\xc8\x28\xee\xfa\x4b\x06\x74\xdb\x52\x2a\xb5\x83\x85\x6c\x01\x5c\x57\x41\xd1\x40\xf8\x1b\x2b\x5f\xf3\x5b\x55\x65\xba\x87\x29\x15\x2e\x43\xd9\x4e\x1a\xef\xed\x9a\x4c\x5b\x26\xa2\x82\x06\x16\x16\x3d\x8f\x63\x0c\xfd\x26\xb8\x5e\xa7\x61\xbe\x86\x4d\x18\x68\x74\x42\x35\x6a\x8c\x35\xf5\x88\xf3\x5b\xb0\xa4\x23\xbb\xb7\x30\x09\x94\xe7\x2e\xdd\xcc\x5c\x89\xce\x71\x08\x35\xe8\x89\xb1\x1c\x25\x33\xac\xaa\x61\x43\x95\x5f\xf5\xd9\x79\x14\x53\xf6\x69\x85\x4e\x36\xd5\x65\x49\xe4\x8d\xb5\x52\x65\x89\xca\x55\xef\x51\x61\x33\x82\xc8\x83\x5c\xab\x41\x44\xd5\xbd\x16\xc9\xa2\x7a\x9e\x2d\xf2\x0e\xf4\x11\xb8\xc3\x7d\xdb\xe5\xbd\x5a\xd1\xa1\x30\x63\xc6\xb5\x1a\x0e\x35\x4f\x30\xbc\x1a\xcb\x6a\xaf\x06\xf4\xad\x43\x4e\x16\xdd\x66\xbb\x01\xaf\xbf\x1a\x33\xc5\x36\xc8\x5e\xdc\x6e\x20\x6a\x35\xf0\x43\x5b\xab\x81\xf0\x7d\x61\x43\x81\x52\x68\x9e\x81\xa7\x9e\xbc\xc7\xce\x06\xb6\x28\xcb\xa6\x3d\x56\xb8\xd7\x84\xfe\xf8\x28\x18\x94\x10\xb3\x42\x6b\xa1\x54\x18\xf5\xc5\xe5\xc1\x69\x7f\x62\x6c\xf8\xdf\xe5\xef\xd4\xde\x1f\x4a\xbe\x3a\xb4\x39\x2a\x07\x4c\x29\x81\x33\x42\x71\xdb\x88\x88\xab\x89\x6f\x06\xaa\x2f\x24\x24\x09\x96\xb3\x70\x3b\x49\x76\x93\xc2\x58\xdb\xd9\xcb\xcb\x93\xc3\x63\xa3\x0f\x69\xf1\x9e\x4a\xd3\x05\x95\xc3\x33\x08\x60\x84\xa7\x22\x38\xb3\x2d\x5c\xde\xa0\x9d\xad\x3f\xef\x8a\x22\x30\x57\xf2\x27\x8c\xb2\xb6\x11\x8e\x4a\xec\x40\xca\x01\x49\x1c\x38\xc2\x38\x65\x98\x6a\xd2\x00\x85\xb7\x50\x0e\x53\xc2\x5b\x68\xc7\xda\x28\x87\x7d\x64\x2c\x20\x22\x2c\xfd\x14\x9c\x28\xc4\xba\x3f\xb6\x82\x90\xdb\x39\x79\x1a\xc6\x19\x13\x5c\x2d\x7d\xe7\xb7\xa1\x44\x8d\xd8\x04\xa0\x9e\x91\xbf\x85\x65\x23\x7f\xee\x6b\x35\x4d\x9b\xe3\xca\x32\xf1\xd4\xe3\x56\x63\x0a\x9c\x39\xa4\x50\xb7\x50\x61\x44\x2c\x04\xb7\xf2\x8d\x28\x91\xf8\x90\xdf\xb7\x83\xfd\xe6\x2c\xad\x5d\x55\x0b\x2c\xf1\x8c\x50\x76\x5b\xc8\xc8\x93\x2f\xd8\x37\xb8\x8d\xd1\x9e\x74\x7e\x2b\x9e\x07\x96\x5c\x91\xbb\xd6\x2b\x54\xf1\x39\xcc\x99\x24\x4d\xcb\x8a\x67\x9e\xa6\x88\x7d\x92\xb7\x45\xc8\x49\xe8\xda\x82\x29\x12\x05\x56\xe1\xd8\x04\xa9\xaa\xb0\xa3\xbf\x2c\x6d\xc7\x8d\x34\x15\x45\x5a\x39\x7c\x4e\xb4\xe3\xf6\x88\xa3\x11\x64\xb7\xc7\x4a\x13\xac\x94\x40\x16\x3a\xcf\xdb\x99\x1d\x1c\x2f\xd4\xc0\x4e\xe9\xb2\xb2\x7c\xe3\x73\x7c\x9b\xae\xf4\x56\x02\x78\xed\x1a\x34\x3a\xaa\xae\x8b\xdf\x37\xba\xac\x51\x5e\x1e\xcd\x38\x9c\x24\x64\x14\xdb\xf6\xd9\x4e\xf9\x6b\x51\x66\xd1\x1f\xd5\x12\xb5\x68\x14\x78\x97\xa3\x96\x59\x50\xf6\xbb\x4d\xdb\x6c\x57\xc7\x43\xb7\x92\x63\x7e\x18\xab\x42\x58\x77\xfc\xe2\x46\xb0\x24\xba\xc9\x9c\x12\x8a\x99\xab\x61\x9a\x6a\x94\x64\x59\x53\x88\x63\xd2\x7f\x0d\x8a\xbe\x0d\x70\x82\x51\x16\xa4\x53\xf5\xd9\x6b\x2c\xa0\x62\x76\xc8\x66\xb9\xe4\x73\x1c\xd2\xcf\x20\xa1\x36\xf0\x35\x4d\x2b\x70\xc6\x78\xf5\x70\xb1\xfb\x05\xb5\xde\x1f\x30\xef\x2d\x72\x4a\xb8\x80\x6b\x1d\xbd\x74\xb7\x39\x62\x63\xda\xd0\x21\xce\x73\x05\x81\x9f\xca\x30\x27\xf9\xea\xaa\x38\x93\xda\xfc\xc0\x45\x0f\xb4\x8d\x0f\xfb\x04\x7b\x4c\x2b\xa6\x29\xa9\x6a\x26\x4a\x25\xb0\xc0\x37\x72\x38\xd1\xdf\xa1\xab\x80\x19\x6c\xd5\x10\x67\x0e\xb8\x74\x5b\x9b\xa7\x00\x56\x08\x16\x5d\x71\x17\x85\x27\x00\x16\x27\x75\xe5\x17\xe3\x3d\xc2\x8d\xfc\x73\x9f\x5d\xda\x6b\x5c\xd5\x1a\x7c\xba\xcc\x09\xd0\x45\x17\xf4\xe4\x05\x25\xc0\x88\x1a\x3e\x85\x54\x29\x37\x98\xb1\x80\xca\x9b\x6c\x08\xa0\x88\x6b\x74\xa0\x12\x97\x22\x18\x25\x86\x73\xa1\xa8\xf6\xf6\x58\x58\x27\xc9\xb7\x2b\x21\x8c\x24\x15\x09\x87\x12\xe1\x98\x63\xa3\x86\x65\x36\xf0\x69\x86\xe8\x46\x6c\x38\x0f\xeb\xc5\x90\x48\x4a\xb3\xa6\x88\x26\xf2\xfc\xa5\xcf\x8e\xa2\xce\x66\x6f\x08\xc9\xe5\x58\xdc\xcd\x73\x30\xb7\xb9\x7e\x50\x12\x90\xdf\xe2\xc9\x86\x3d\x4b\x31\xe9\xc3\xfa\x71\x12\xbf\x45\xae\x65\xb7\x9b\x67\xd7\x02\x15\x43\x83\x2c\x7c\x32\xd3\x2a\xde\x4a\x6c\x33\x51\x44\x78\xfa\xa7\x07\x17\x27\x17\x86\xa2\xb5\xf8\x3f\xa1\x83\x83\x38\x6f\x84\x07\xa0\xc4\x1c\xaa\xfc\x81\x2b\x20\x10\x5b\xe0\xcc\x4b\x5a\x30\x1f\x09\xba\x78\x91\x3c\x04\x66\x88\xa4\xa4\x1c\xb1\xcb\x93\xcb\xd3\xe3\x84\x9d\xbd\x3c\xdb\x09\x03\xff\x49\x03\x41\xd0\x80\xc3\x5d\x5d\x15\x6d\x80\x38\x9b\xa2\xaf\x64\x2e\xa0\x56\x41\x9c\xa5\x9f\x0a\xb4\x87\x3c\x5f\x04\x7d\xec\x0a\xaa\xd9\x8b\x4d\x0e\x81\xc9\x1a\x35\x24\xbc\xd7\x59\xa9\x6a\x6a\xb3\x69\xcb\x4c\x81\x50\x76\x20\x1b\x38\x75\x20\x8f\xc3\xe2\x02\x61\xe0\xae\xa5\x1c\x09\x32\xd8\xbf\xf5\xd9\xa9\xc7\xcd\xc8\x11\x3b\xcd\xf8\x00\xea\x79\xf5\xd9\x89\xb9\x1f\x5d\xcf\x29\x5b\x7c\xa5\x90\x58\x58\xd8\x4c\x50\x62\x63\x9f\x20\x5c\xa2\x65\xa9\x43\x8b\xb8\x10\xe3\x3c\x1b\x8b\x62\x28\x7a\x89\x0b\x9a\x26\x91\xb7\x11\x1c\x18\x77\x32\x73\x17\xaf\x71\xc5\x52\x91\x67\x03\xac\xf0\x67\x26\x35\x36\xe6\x36\xb8\xcd\xed\xab\x34\xe3\x43\xad\x20\xc0\xda\xce\xfc\x28\x04\x23\xc9\x2f\x4b\x5b\xba\xda\x96\x6d\x34\x5b\x0b\x7b\xc8\xa7\x7c\x1c\xbb\x92\xa1\xfa\x19\x45\x92\x7d\x4c\x99\xaa\x96\x51\xf0\x12\x30\x61\xe4\xc9\x76\x59\xa7\x80\xaa\xa1\x01\x99\xef\xc9\x66\x48\x22\x4a\xc6\x4b\x0c\xb8\x9a\xdb\x16\x0b\x49\x54\x79\x23\x35\x15\x28\x57\xc5\xed\x27\x0d\xe1\x69\xd3\x02\xc9\x68\xed\xe1\xee\xd2\x50\xaa\x9d\x0d\xd4\x8b\x94\xc8\x91\x63\x29\xd3\xdb\x2c\xb7\x2e\xae\x6b\xa6\xb4\x9c\xcd\xf8\x58\x24\xbe\x80\xe3\x88\x67\x39\xa0\xe4\x4a\x36\xe5\xb9\x2d\xd2\x98\xd8\xde\x7f\x75\xa0\x00\x40\xd3\xcb\x61\xb4\x7e\x7c\xa1\x50\x3d\xea\x2e\x90\x8d\x1a\xbe\xa3\xab\xab\xc2\x79\x73\x79\x8a\x79\x97\xb4\x72\x44\xc3\xe3\xa2\x6d\x1c\x9c\x86\x26\xd6\xfe\xa6\xcf\x0e\xa0\x86\x8a\x59\xfa\x1b\x87\x80\x2d\xd9\x81\xbf\x50\x03\x6e\x7f\x33\x31\x9a\x71\x7c\x08\xc3\x10\xd4\xd2\x50\xce\x0f\x71\xde\x9e\x96\x54\x92\xd1\x86\x67\x6b\x7d\x1d\x93\x5a\x75\x17\x55\xcd\xd0\x4d\x67\x81\xba\xc0\x58\x62\x5a\x64\x7a\x4e\xb5\x80\x6c\xa1\x2a\xbb\xd1\x61\xc5\x08\xc2\xa8\x51\x25\x91\x20\xf9\xdb\xe1\x61\x7d\x25\x89\xbe\x2f\xbe\x63\x6c\x12\x47\x20\x20\x60\x54\x4d\xc2\xa9\xb7\x43\x0d\x16\x01\xfa\xde\x9d\xa2\x4b\x4e\x78\x70\x2c\xd2\xc7\x90\x7d\xef\x84\x20\x35\xcf\x33\x0c\xe7\x7c\xf6\x94\xf1\xe6\xdc\x1d\xc1\x5e\x93\x8f\x92\x3a\xb4\x82\x64\x35\xa7\x97\x6a\x0b\x18\x5a\x8c\x80\x16\xa9\x18\x89\x82\x0a\x32\x41\x75\xf8\xa6\xeb\x96\x97\x53\x10\x27\x56\xab\x75\x54\xc3\xb3\x59\x95\xa5\x8f\xc2\x58\xbc\xa9\x52\xa2\x34\x67\x82\x1c\x7c\x49\xd3\x8f\x39\x98\x93\x1e\x80\x8b\x08\x8a\xf4\x58\xa1\x00\x3f\xb9\x0d\x38\x2d\x50\xdd\xdc\x1c\x6c\x96\xed\x5d\x59\x27\x07\xaf\x5e\x1d\x9f\x1d\x9d\xfc\xe7\x63\x9b\x74\xe2\xfb\x27\xc5\x08\x2c\xf3\x1d\x4c\x26\x28\xcb\x75\xb9\xe2\xe3\xed\xb9\x13\x46\xa5\x95\x59\x2e\xca\x59\x6e\xc4\x2c\x1a\x49\x41\x1d\xe1\x51\x26\xf2\x54\x31\x51\x40\xff\x7b\x90\xd6\x83\x92\x0f\xaf\x85\x86\x40\xd0\xdb\x77\x18\xf7\x29\x05\x75\x53\x87\x1f\xce\x2d\xe3\x50\x37\x39\x6c\x96\xee\x0d\xd0\x3e\xeb\x1e\xc9\xe2\xea\x4f\x2e\xb4\x4c\x87\xcf\x8e\xfc\x07\x6c\xbd\x09\x16\x1f\xa1\xa0\x07\xc2\xcf\x81\x34\xf2\xe0\x82\xa5\xf8\x9e\x39\x07\x6a\x5e\x68\xfe\xde\x05\xd5\xc0\x06\xc6\x17\xf7\xd9\x1b\x81\x68\x6a\x9f\x3f\x83\x0e\x6b\x5b\x72\x1f\x79\x44\x05\xa9\x12\xa8\xed\xb9\x8c\x63\x1b\xa2\x0b\x91\x95\xae\xc8\x11\xd4\x4b\xbb\xba\xea\xcc\xca\x0c\xdc\xa9\x46\x8c\x42\xaf\x7f\x55\x8b\xa4\x05\x45\xb6\x05\x57\x19\xc4\x6f\x6d\xdf\x3d\x8a\xdf\x39\x2f\x85\xf7\x01\xf0\x72\x38\xc9\x6e\x9c\xc8\xf3\xa1\xa9\xb7\xf3\xf9\x7c\xfe\x8e\xbd\xb5\xe9\x19\xb5\x90\xdd\x3b\x7c\xfe\xd4\x76\xf4\xf4\x16\x4a\xcc\x2c\x09\x0b\xc0\x7d\x0e\xb8\x1b\xf4\x9f\xff\x96\x5a\xfb\xda\xf2\x32\x78\xf9\x90\x6f\xd7\xd6\x72\x83\xe2\x07\xae\x4c\x51\x50\xa0\xda\x69\x22\xae\x55\x18\x20\x8c\x6b\x39\x00\x0e\xe3\xaf\x3d\x70\x7a\x09\xa6\x90\xb2\x55\x77\x1e\xf5\xf7\xf0\xf9\x55\x34\xe5\x45\xaa\x82\xcf\x11\x68\xaf\xfd\xe7\x4a\x12\xc4\xd9\x1c\x9f\x4e\x21\xb6\x39\x1d\xd8\xc5\x44\x44\x93\xb0\xfc\x4d\x89\xf7\x43\xd7\x95\x9d\x8d\xe5\x8d\x28\x8b\x3a\x9c\x0b\x3d\x10\x5e\x87\x56\xcd\x85\xf5\x1b\x70\xf5\x1f\x7f\xaa\x44\x39\x37\x24\x0f\xa0\xea\x48\xf2\x3a\x13\xfe\xed\x22\x2c\xa2\xe0\x42\x50\x61\x60\x42\x25\xcc\x0d\xac\xfa\x23\xf7\xf4\xee\x06\xd1\xea\xd0\xf6\x2e\xf2\x94\xdf\x17\xad\x6e\xc1\x6d\x2d\x78\x75\x76\x3f\xb4\x3a\xd9\xc8\x0b\xf1\xea\x6c\x25\xb4\x7a\xc4\x8e\x0b\xf1\xea\x6c\x39\x5a\xdd\xd5\xea\xbc\x0b\xaf\xce\x96\xa3\xd5\x49\x4e\x7f\x32\xbc\xba\x77\x5f\x83\x94\xff\x35\xf1\xea\x90\x9d\x6e\x11\xeb\x2d\xf9\xdf\x2b\xe1\xd5\xcd\x99\xa9\xdb\x9b\xab\xe0\xd5\xaf\xae\x8a\xd5\x10\xeb\xec\x0e\xbc\x3a\x01\xd1\xef\x46\xac\xb3\x3b\xf0\xea\x57\x57\xc5\xbd\x10\xeb\x6c\x01\x5e\x9d\xa4\xe2\xbd\x10\xeb\xac\x1d\xaf\x6e\x85\xc9\x38\xd3\x93\x6a\xd0\x1f\xca\xe9\xae\x98\x0e\x44\xf9\xa3\xc2\xff\xed\xff\xa8\xee\x14\x5b\xdd\x21\x64\xd8\xfc\x1b\xfb\x41\x4c\xaa\x94\xb3\xbf\x73\xfd\x73\xc2\x2e\xe5\x94\x1d\x71\xf2\x00\x1d\xd3\x58\x91\x28\xdb\x7c\x82\x4d\xe0\x1a\xdc\x58\x82\x8d\xeb\xd3\xb8\x99\x04\x1b\x14\x00\x9b\x49\xb0\xa1\x73\xed\x63\x16\x0f\x4c\xb0\xa9\x0b\x2c\x00\x03\xff\x3a\x09\x36\x64\x05\x6f\x13\x6c\xfe\xc5\x13\x6c\x68\xa1\x2b\x09\x2c\x5e\x72\xc5\x35\x57\x7c\x3e\xce\x8a\xdd\x4c\x39\x99\x65\xd8\x32\xc8\x0c\x64\xdd\x17\x27\x97\xbd\x05\xd2\xeb\xab\x9d\x47\x7b\xfb\x7f\x66\x07\x25\x57\xec\xc0\x0e\xb6\x4d\x01\xdc\xa6\x00\x6e\x25\xd4\x56\x42\xad\x2b\xa1\xa6\xbc\x1c\x8a\x5c\xa6\x32\xff\x99\xef\x66\x3f\x67\x97\x92\x2b\x6d\x53\xa8\x1b\xf9\x81\x6c\xf1\x7f\xcb\x52\x07\x17\xfd\x66\xa5\x94\x42\xc6\x5a\x5d\x6b\xf7\xcb\x2a\x64\x8c\xb5\x26\x16\xe2\x3c\x36\x98\x5e\x88\x03\x6e\x30\xc9\xb0\x36\xc3\x35\x53\x0d\x71\xb4\x07\x26\x1c\xfa\xa9\x6c\x20\xed\x10\x07\xdb\x4c\xf2\x21\x8e\xb5\x76\x0a\xa2\x5b\xdf\x06\x12\x11\x71\xac\xb5\xd3\x11\x03\x2a\xad\x9b\x94\x48\x43\x6d\x26\x35\xd1\x91\x6a\xfd\x04\x45\x1c\xea\x41\x69\x8a\x6e\x16\x1b\x4b\x56\xc4\x11\x37\x90\xb2\x88\x03\xad\x96\xb8\xe8\x96\xb1\x66\xfa\x22\x1d\xee\x35\x93\x18\x71\x94\x75\x53\x19\xbd\x1c\x5c\x31\xa1\xd1\x11\x61\xfd\xb4\x46\x1c\x6a\x03\xc9\x8d\x56\xae\xac\x95\xe2\x88\x83\x3c\x28\xd1\xd1\xd1\x64\x43\xe9\x8e\x38\xde\x66\x92\x1e\xe9\xd8\x6e\x2a\xf5\x11\x87\xdb\x5c\x02\x24\x49\xbb\x0d\xa5\x41\xd2\x69\xde\x54\x32\xa4\xbf\x85\x57\x4d\x89\x74\x9c\xb0\x66\x62\xa4\x7f\xf3\xfa\xe9\x91\x34\xd6\xda\x49\x92\x44\xdc\x4d\xa5\x4a\xd2\xce\x6f\x28\x61\x72\xa1\xc2\xf4\xe0\xb4\x49\x1c\x71\x33\xc9\x93\xc1\x16\xac\x9f\x42\x69\xa5\xdd\xa6\x12\x29\xfd\x15\xb0\x81\x74\x4a\x1c\x6c\x23\x49\x95\x56\xe1\x58\x3f\xb5\x92\x94\xbc\xcd\x26\x58\x36\x8f\xfa\x9a\x69\x96\x74\x20\x36\x91\x6c\xe9\x8e\xea\xbd\x52\x2e\x19\x63\x9b\xca\xba\xb4\xc7\x71\xed\x84\x3f\x1c\x68\xed\xb4\xbf\xba\x86\xf0\xa0\x3c\x4c\x1c\x64\x23\xd9\x98\x38\xd4\x7a\x39\x99\x8c\xb1\x8d\xa4\x65\x7e\x9e\x7b\xb5\xa9\x44\x4d\x1c\x6d\x23\xe9\x9a\xb4\xbe\x0d\x24\x6d\xe2\x48\xeb\xa5\x6e\xe2\x18\x1b\x48\xe0\xa4\x65\x6d\x20\x8d\x13\x47\x5a\x2f\x99\x93\x4e\xea\xfa\x29\x9d\x4e\xbf\x58\x3b\xb1\xd3\x8d\xb4\x56\x7a\x27\x8e\xb2\x7e\x92\x27\x5d\xd7\xf7\x4a\xf5\x64\x8c\x6d\x22\xdb\x33\x90\x5a\x6b\xe5\x7c\x92\x6a\xb5\x6e\xe6\xa7\xd5\xd0\xee\xce\xff\x24\x91\xf2\xc0\x2c\x50\xe6\xfe\xbb\x7f\x3e\x28\xbd\x79\xfd\xac\x50\x3f\x89\x7b\xe5\x87\xd2\xfb\xd7\xce\x12\xf5\xaf\x5f\x2b\x5f\xd4\x0f\xf3\xd0\xcc\x51\x3f\xc2\x5a\x39\xa4\xe1\x7a\x96\x66\x93\x12\x01\xd7\xcf\x29\xf5\x6f\xdc\x40\x76\xa9\x1f\x6c\xcd\x3c\x53\x3f\xd0\x9a\x19\xa7\x7e\xa0\x35\x73\x4f\xfd\x40\x6b\x67\xa1\x06\xdc\xb6\x4e\x3e\x6a\xb0\x73\x6b\x67\xa6\x36\xe8\xfd\xb0\x1c\xd5\x60\x98\xb5\xb3\x55\x1b\x04\x7f\x58\xde\x6a\x48\xa5\x75\x32\x58\xfd\x38\x6b\xe7\xb2\x06\x2b\x5b\x2f\xab\xb5\x26\xfd\x1e\x9e\xdf\x1a\x71\xe4\xb2\x4c\x57\x7c\x68\x23\xf9\xae\x38\xd4\x06\xb2\x5e\x71\xa0\x0d\xe4\xbe\xfa\x81\xd6\xc8\x80\xc5\x41\x36\x92\x07\xeb\x2f\x82\x55\xb3\x61\x19\x63\x1b\x4b\x88\x25\x7e\xd8\x44\x5a\x2c\x0e\xb5\x89\xe4\x58\x4b\x92\x87\xa7\xc8\xe2\x08\x9b\x49\x94\xf5\x1b\xb4\x6e\xba\xac\x97\xbd\xf7\x4a\x9a\x65\x8c\x6d\x2c\x6f\x96\x84\xdb\x46\xb2\x67\x71\xac\x4d\xe5\xd0\x5a\x59\xb9\x99\x4c\x5a\xc6\xd8\xfa\xc9\xb4\x74\x38\xd6\x49\xa9\xc5\x21\x36\x90\x58\x8b\x03\xad\x9f\x5e\x8b\xe3\x6c\x28\xc9\xd6\xdd\xdc\x6b\xa5\xda\xe2\x28\x1b\x49\xb8\xa5\x1d\xdb\x44\xda\x2d\x89\xf8\x0d\x26\xdf\x32\xc6\x36\x92\x7f\xeb\x74\xaf\x35\xb3\x70\x71\x9c\x4d\xe4\xe2\x92\x54\xd9\x40\x46\x2e\x8e\xb4\x99\xbc\x5c\x62\xf5\x4d\x64\xe7\xda\xfb\x7e\xed\x1c\x5d\x3a\xc6\xeb\x67\xea\x12\x13\xac\x9b\xaf\x4b\x27\x78\xcd\xac\x5d\x1c\xe5\xe1\xb9\xbb\x8c\xb1\xcd\xa4\xef\xfa\xbb\x7a\xad\x24\x5e\xab\x15\xad\x9f\xca\xeb\x2c\x80\xb5\x13\x7a\x71\xa4\x4d\xa4\xf5\xd2\x9c\x36\x90\xdc\xeb\xe4\xff\x5a\x29\xbe\x38\xca\x9a\x89\xbe\xee\xb0\x6f\x20\xdd\xd7\x2d\x6b\xcd\xa4\xdf\x15\xbb\xcd\xad\x95\xfa\x8b\x73\x5d\x3b\x01\x98\x94\xf7\x35\xd2\x80\x3f\x7c\x0c\x43\xd7\xeb\x27\x03\xfb\xa3\x1c\xa4\x04\xdf\x3f\x27\x18\x87\x59\x33\x33\x18\x07\xd9\x40\x7e\x30\x0e\xb4\x56\x96\x30\x31\xfa\x7d\x73\x85\xa3\x7e\x6e\x1f\xe6\xf3\xf9\xfc\x23\xfb\xb0\x20\x5d\xf8\xa3\xfb\xc9\x66\x32\x86\x19\x63\x1b\x48\x1a\x0e\x5c\x12\x2b\xe5\x0d\x33\xba\x95\xee\x99\x3e\xcc\xd8\x4a\xe6\xc1\xdd\x19\xc4\xa1\xb3\x75\xcd\x24\xe2\xf5\x35\xff\x30\x8f\x98\xf9\xce\x6e\xeb\xa5\x12\x83\xa6\xb6\x52\x36\xf1\xd5\x55\xf1\x77\x31\x1f\xe6\x92\x5f\x63\x7a\x8b\xe7\x45\xc8\x5b\x39\x17\x29\xfb\x8e\x6b\xec\x0f\xf6\x80\x9c\xef\x05\xb8\xf5\x89\xcc\xf5\xee\x2b\x3e\xe3\xaf\x78\xa9\xc4\xfd\xb3\x6a\xbe\x66\x2f\xb8\xd6\x13\x71\xcb\xbe\x93\xb9\xde\x26\xfc\x6d\x26\xe1\xcf\x17\xd2\xdc\x50\xc2\x1f\x53\x32\xc1\x2a\xdf\xdb\x74\x9a\x4d\xa4\xd3\x58\x0b\x9d\x3a\x1c\xaf\x99\x4e\x13\xe4\x27\x43\xd7\xe3\x07\xa7\xd3\xb4\xe4\x27\x9b\x45\x3f\x38\x9d\x26\xca\x4f\xc6\x86\xcc\x6b\xa5\xd3\x2c\xc9\x4f\x9e\x95\x99\x9a\xfe\xa8\x40\x2a\xad\x9a\x90\xfc\x88\x9d\x0a\x6e\xae\x57\x88\x37\x6f\x13\xf9\xb6\x89\x7c\xdb\x5e\x7e\xdb\x44\xbe\xb6\x5e\x7e\x0b\x15\xa0\x54\xa6\x72\xb7\x90\xa9\xd8\x51\x79\x35\x5e\x94\x3a\xcc\xfe\xe7\xbf\xff\x7f\xf6\x3f\xff\xfd\xdf\xf4\x3f\x5d\xf3\xab\xde\xe6\x35\x9d\x0d\x4b\x9b\x7b\x56\x62\xb9\x53\xcb\xd9\x90\xa4\xb9\xa3\x0a\xcb\x1a\x1a\xce\xaa\x52\x66\x77\x97\x6d\x56\xbf\x79\x80\x8c\x31\x73\xd8\xa8\x8c\x79\x68\xf5\x95\x85\xba\xcd\x26\xe4\xcb\x5d\x95\x57\x1e\xae\xd7\xac\x21\x5b\x16\x55\x5d\xd9\xb8\x4e\x13\xc8\x99\x0b\x59\x6a\x63\x1b\xff\xed\xc2\xfd\xf3\xea\xaa\xf8\xab\x6d\x12\xaf\xcf\xab\x01\xff\x4f\x8e\x79\x67\x6a\xf2\xd7\xb2\x1a\xf0\xf7\x9c\x6a\x4a\xf9\xa7\xe4\xad\x28\xa6\xe0\x79\xbb\x15\xc5\xa3\x2f\xbf\xfc\xfa\x6b\xdf\xd8\xd8\x3c\x68\x03\xad\x2f\x4e\x2e\x97\x4d\x46\xdf\x0e\xd4\xee\x40\x4a\xad\x74\xc9\x67\xf7\x37\xfa\xf6\x77\x1e\xed\xed\x7f\xc3\x2e\x6f\x33\xad\x45\xe9\x4c\xd2\x85\xcf\x4d\x04\x7b\x6a\xdf\xc6\x0e\x30\xa7\x66\xab\xb0\x6d\x15\xb6\xad\xc2\xb6\x55\xd8\xee\xd5\x7c\x79\x2c\x73\x5e\x8c\xc1\xd3\xf5\x7e\x77\x58\xce\x67\xe0\x7a\x69\x11\x3d\x7b\x28\x75\x9e\x4b\x2b\x6e\xfa\xec\x20\xcf\xad\x2a\x53\x0a\x25\xca\x1b\x07\xbf\x8e\x81\xd7\x18\x59\x46\x08\x06\xa5\x66\x99\x4f\x06\x59\x41\x9d\xf4\xa7\xea\xae\x46\x39\x98\x73\x8f\xc7\x0f\xbc\xd7\x11\x3a\x7a\xd1\x71\x62\xe8\x14\x9d\x0a\xed\x61\xd1\xff\x67\x0d\x15\x0e\xdc\x1f\x26\x8c\x05\x90\x61\x0f\xde\xf1\x07\xd1\xb5\x9c\x48\xf0\x1c\xe6\x99\xd2\xe8\xce\xf6\x6f\x2d\xd2\xda\x94\x52\x87\x09\xe9\x2f\x9a\x45\x56\x84\x04\xb1\xb3\xb0\x38\x75\x37\x91\x96\xce\xa6\x0f\x9b\x88\x97\xc3\xb1\x08\x27\x79\x48\xc9\xb0\x5c\x8b\x32\xe3\x79\x90\x17\x6c\xbd\xe4\xb5\xa6\x31\x6e\x5d\x67\xe4\x06\x36\x23\x5b\x57\xff\x73\x29\xc7\xb9\x80\x4b\x8d\x15\xd2\x7f\xa7\x3c\x58\x38\x2c\x72\x06\xee\xf6\x01\x44\xb5\x41\x7e\x8a\x22\x95\x25\x46\xb8\x67\xa5\x9c\x4a\x2d\x2c\x4e\x48\x45\x89\xc1\x0d\xb7\xa6\xbd\x39\x9c\x87\x79\x56\x66\x41\xe6\xa2\x17\xa1\x4e\xe2\x9d\x5c\xb4\x8b\xbc\xa7\x3f\xc0\xf1\x6a\x4a\x07\x0a\xaf\x61\x55\x8f\x97\xe7\x18\x60\xf3\xde\x74\xf3\xb5\x11\x19\x4d\xa5\x32\x90\x71\x81\x40\x4c\xac\x44\x04\x61\x62\x65\x62\x02\x2f\x6f\xfe\xb0\x45\x38\xc2\x1b\x03\xe9\x68\xa4\x5b\xab\x7c\x3c\x3f\x66\x47\x27\x17\x20\xca\x8e\x8f\x16\xe9\x9a\x6e\xbd\x46\x16\xbd\x39\x3b\x3e\x27\xff\xbf\x5b\x6e\x8b\x74\x3c\x3a\x39\x3f\x36\xe2\xed\xe4\xcc\xff\xeb\xf0\xe4\xe8\xf8\xec\xf2\xe0\xd4\xc8\xb4\x8b\x57\xc7\x87\x27\x07\xa7\xe6\x6e\x38\x7e\xf1\xea\xf4\xe0\xfc\x87\x84\x46\xbd\x38\xfe\xc7\xeb\xe3\xb3\xcb\x93\x83\x53\x27\x5b\xbb\x77\x52\xe6\xd5\xf9\xcb\xc3\xd7\xe7\x20\xe0\x0d\x39\x2e\x5e\x3f\xbd\xb8\x3c\xb9\x7c\x7d\x79\xcc\x9e\xbf\x7c\x79\x04\x14\xbf\x38\x3e\xff\xfe\xe4\xf0\xf8\xe2\x5b\x76\xfa\xf2\x02\x88\xf6\xfa\xe2\xd8\x4c\xe5\xe8\xe0\xf2\x00\x5e\xfe\xea\xfc\xe5\xb3\x93\xcb\x8b\x6f\xcd\xbf\x9f\xbe\xbe\x38\x01\xea\x9d\x9c\x5d\x1e\x9f\x9f\xbf\x7e\x65\x24\x6e\x8f\x7d\xf7\xf2\xcd\xf1\xf7\xc7\xe7\xec\xf0\xe0\xf5\xc5\xf1\x11\x90\xf9\xa5\x11\xed\x3f\xa0\x68\x7d\x79\x0e\x37\x5f\xfb\x05\xe0\x65\xfe\xc5\xe5\xf9\xc9\xe1\x65\xf8\x98\x11\xdc\x2f\xcf\xcd\xaa\xfc\x5a\xd9\xd9\xf1\xf3\xd3\x93\xe7\xc7\x67\x87\xc7\xd1\x05\xd1\x73\x17\x04\xdc\x2a\x3f\xb0\x37\x07\x3f\x58\xd5\x9b\xa4\x3f\xd6\x4b\x8c\x18\x39\x81\x6d\x65\x27\xcf\xd8\xc1\xd1\xf7\x27\x66\xf2\xf4\xf8\xab\x97\x17\x17\x27\xc4\x36\x40\xba\xc3\xef\x88\xf0\xe1\xfd\x30\xbb\x1e\xf7\xb3\x62\x97\xab\x62\x7f\x67\x20\xca\xfe\xcd\xfe\x03\xd5\xdb\xaf\xd9\x8b\x6c\x38\xe1\x22\x67\x2f\x32\xad\x65\xc1\xba\xd3\x29\xfc\xc3\x6b\xdc\xe0\x01\xb0\x5a\xc9\xb0\x11\x19\xc1\x7a\x63\x63\xb9\x63\x27\xb3\x55\x7d\xb7\xaa\xef\xbf\x54\x94\x64\xab\xfa\x6e\xae\xe8\x98\x13\x6d\x79\xca\x67\xfd\x9b\x47\xcd\x8f\xbe\xfc\xf5\x25\x9d\x99\xc8\x56\xca\x6d\xa5\xdc\x56\xca\x6d\xa5\xdc\x7a\x52\x8e\xe7\xe2\xfd\x50\x28\x5e\xca\xdd\x9f\x2a\xa9\x45\x0a\x48\x30\x3e\xc8\xc5\x83\x04\xdd\x57\xec\x20\x17\xef\x79\x91\x96\x82\x1d\xc2\xb0\x5b\xa8\xca\x16\xaa\xf2\x2f\x21\x9e\xb6\x50\x95\x4d\x85\x75\xbc\x70\x2a\xd2\xf9\xb8\xac\x8a\x5b\x9e\xa7\xbb\x63\xb9\xf3\x63\x56\xf2\x07\x59\x9a\x5f\xb3\x83\x22\x9d\xb3\xe7\x34\xd6\x56\x65\xda\xaa\x4c\xff\x12\x32\x69\xab\x32\x7d\xd2\x6a\xd4\xe9\xb8\xcc\x7e\xe4\xf9\x0d\xdf\xfd\xf1\x56\xef\x8c\x17\xc4\x48\xf6\x1f\xb1\x23\x7e\x23\xd8\x73\x7a\xf8\x93\x68\x44\x5b\x48\xcb\x2f\x03\x69\xd9\xb8\xcc\xf9\x1c\xa2\xb0\x5b\x48\xcb\x67\x07\x69\x09\xc5\xcc\x88\xeb\x6c\xb2\xab\x74\x59\x0d\xf5\x43\x1a\x72\xb0\x67\x66\x00\x76\x50\xaa\x9c\x6f\x3b\x71\x6c\x75\x9f\xad\xee\xb3\xd5\x7d\x1e\xa6\xfb\x84\x52\x09\x31\x22\xbb\xb3\x52\x6a\x39\xa8\x46\xf8\xe0\x73\x69\xf3\x90\x21\x91\xeb\x95\xf9\x72\x28\x73\xf6\xb4\x1a\x8d\x44\xa9\xd8\x0e\x45\xfd\xaf\xfe\xa4\x58\xca\x35\xc7\x62\xd3\x58\xb9\x8d\xd2\x1f\xeb\x52\xec\xd1\xde\xfe\x5e\x03\x64\xb2\x08\x65\xd2\xa2\xa4\xb5\xce\xf3\x33\x86\xa2\x7c\x26\x58\x94\xdf\x2d\x18\x65\x8b\x46\xd9\xa2\x51\xb6\x68\x94\xdf\x13\x1a\xa5\x55\xe8\x9b\xd3\xbc\x3b\x96\x3b\xd0\x34\xd8\x08\x81\x62\x51\xd6\xc9\x97\x74\xf6\xb7\xd0\xc5\x2d\x74\x71\x0b\x5d\xdc\x5e\x16\xdb\xcb\xe2\x77\x7b\x59\xb4\xd9\x31\xd3\xc1\xde\x6e\x9a\x8d\x46\x0b\x9d\xb7\x2f\x78\xa9\xb3\x82\x5d\x0c\x27\x05\x1f\x88\xfc\x37\x72\x4d\x30\x7f\x49\xec\xd7\x6b\x9e\xdf\xf7\x8a\x88\xe4\xb2\xad\xb6\x71\xef\x5b\xe2\x51\x73\x1a\x2b\xde\x11\xcd\x99\xe0\x24\x1e\x72\x4d\xb0\xb6\x4b\x02\x87\x5b\xf5\xa6\x60\xf5\x7b\x62\x2b\x69\xb7\x92\x76\x2b\x69\x57\x50\xcb\x8b\xea\x2f\x13\xae\x87\x93\xdd\xb1\xac\xaa\x2c\x6d\x88\xdc\x43\x44\x4b\xb2\xc1\x9c\xfd\xbd\xfc\x79\xae\x7e\xd6\x72\xc4\xfe\x2e\x6f\x79\x9e\x5d\xb3\xe1\xa4\xcc\xd4\x5f\x71\x88\x3e\x94\x34\xdd\x02\x8b\xb6\x4d\xef\xb7\x8e\xec\xad\x23\x7b\xad\x20\xfe\xec\x7a\xbc\x2b\xca\xd2\x21\xa9\x9b\xe0\xa1\x04\xe3\xf7\x87\x13\x51\x88\x39\x4b\xf9\x8d\xf8\xeb\x10\xfe\xdd\x2f\x84\x51\xd8\x7e\x6b\xfa\xe0\xba\x1e\x83\xa6\x3a\xf8\x00\x6d\xb0\x75\x1e\xeb\xe9\x83\x9b\x55\x07\x7f\x65\x6d\x30\x14\x3b\x86\xc7\x1e\xaa\x0d\xb2\x9a\x2e\xe8\x05\xd3\xfd\xb4\xc1\x05\x72\xe7\xdc\x0c\x78\x0f\x6d\x90\xd6\xbb\x58\x19\xb4\xf0\xc9\xbb\xd4\x41\xb6\x8a\x32\x08\x8a\xda\x42\x75\x90\xdd\x4f\x19\x34\x02\xa5\x55\x1d\x64\x0f\x50\x06\x8d\xa0\xa9\xab\x83\x6c\x0d\x65\xd0\x48\x4f\x54\x07\xd9\x6f\x45\x19\x2c\x79\x56\xcc\x87\x7c\x26\x76\xab\x22\x4b\x85\x91\x3c\x2d\xb1\xbf\xaf\xd8\xb9\x79\x8e\x1d\xf2\x99\x60\x17\xfd\xd3\x3e\x9b\x88\x3c\x97\x7f\x75\xbf\xa6\x9a\x1c\xe6\x8c\x6c\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\xb7\x68\x08\xdb\xfe\xff\x9f\xfb\x5e\x6d\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x37\x85\x30\xdb\xf6\xff\x67\x56\xda\x6e\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\x6f\xfb\xff\xc3\x7f\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xdb\xfe\xff\xd1\x44\xff\x85\xfa\xff\xb7\xa5\x80\x6b\x73\x31\x8f\xe5\xae\xb6\x25\x3c\xd9\x16\x4a\xbe\x85\x92\x6f\xa1\xe4\x5b\x28\xf9\x16\x4a\xbe\x85\x92\x6f\xa1\xe4\x5b\x28\xf9\x16\x4a\xbe\x85\x92\x6f\xa1\xe4\x5b\x28\xf9\x16\x4a\xbe\x85\x92\x6f\xa1\xe4\x5b\x28\xf9\x6f\x71\xaf\xb6\x50\xf2\x2d\x94\x7c\x0b\x25\xdf\x42\xc9\xb7\x50\xf2\x2d\x94\x7c\x0b\x25\xdf\x42\xc9\xb7\x50\xf2\x2d\x94\x7c\x0b\x25\xdf\x42\xc9\xb7\x50\xf2\x2d\x94\x7c\x0b\x25\xdf\x42\xc9\xb7\x50\xf2\x2d\x94\x7c\x0b\x25\xdf\x42\xc9\xb7\x50\xf2\x2d\x94\x7c\x0b\x25\xdf\x42\xc9\xb7\x50\xf2\x2d\x94\x7c\x0b\x25\xdf\x42\xc9\xb7\x50\xf2\x3b\xa0\xe4\x01\x92\x3c\x15\x45\xa6\x44\x71\x0d\x2d\x28\x77\xa6\x4a\xfd\x94\xa7\x83\x85\x9d\xc5\xea\x5d\x8d\x7f\x13\x8d\x24\xb6\xfd\x27\xb7\xfd\x27\xb7\xfd\x27\xb7\x5d\xd1\xb6\x5d\xd1\x36\xd5\x08\xe3\x69\x55\x16\xfa\xa2\x52\x93\xcc\xf7\xc3\x7a\x71\x72\xe9\xee\xb1\xee\x8b\x93\xcb\xde\xc2\xe6\xc5\x97\x2f\x5f\x9c\x5a\xd4\xeb\xe6\x7b\xa2\xd9\xee\x60\x9b\xec\x89\xe6\x25\xe5\x46\x7a\xa2\x19\x29\x25\xd9\x66\x7a\xa2\x05\xcd\xc3\xd6\xea\x89\x76\x75\x55\xd4\xba\xa2\xb1\x5f\xab\x27\xda\xd5\x55\xc1\x5d\xb3\xb7\x6d\x4f\xb4\x7f\xd9\x9e\x68\xb5\xed\x34\x3b\xdc\x79\x97\xbc\xdd\xdf\x7b\x97\xbc\xdd\x4b\x3a\x9d\x77\xef\x92\xce\x84\xab\xe3\x1b\x9e\x77\x1e\x8f\x78\xae\xc4\xc7\x3f\x25\x53\xa1\xf9\xe3\x0f\x53\x99\x56\xb9\x38\xe3\x53\xf1\xb8\x03\xa7\x3d\xfb\x59\xec\xce\x64\xaa\x76\x31\x02\x62\xfe\x44\x0e\xdc\xd5\x62\x0a\x96\x76\x7f\x32\x50\x9d\x8f\x1f\x7b\x5f\x88\x7e\x2a\x46\xbc\xca\xf5\x13\xfd\xb1\x97\x60\x2a\x60\x77\xe1\x28\xa4\x86\xec\xba\xe4\xb7\xb2\x93\xbc\xed\x88\xf7\x86\x4f\x55\xe7\x5d\x62\x9d\x7e\x5d\xd1\xfb\x80\x68\xa6\x3e\x0e\xf9\xaa\x94\x33\x51\xea\x79\x57\x24\x9d\x7f\xfe\x53\xa8\x17\x30\xe5\x4e\xf2\xe1\x86\xe7\x95\x78\xfc\x87\xbd\x8f\xbd\xc4\x4f\xe5\x46\x66\x29\xdb\xfb\xe2\x86\x97\x4c\x3f\x39\x9e\x0e\x44\xd9\x3f\x74\x6f\xec\x8b\xf7\x5a\x14\x69\xf7\x03\x9f\xcd\x5e\x98\xf5\xe3\x03\x59\x01\xaf\xa3\x90\x52\xb7\xf7\xe0\xb5\x95\xb2\xd2\x22\x5c\x56\xd2\x11\xe6\x0d\x3b\xca\x98\x33\x62\xc7\xc8\xf2\xdd\x69\xf6\x3e\x2b\xd4\xae\xf9\xb7\xb1\x89\x21\x39\x67\x07\x7e\xb9\x03\x5f\x45\xb4\x48\xf4\xa6\xa8\x51\x10\x35\xce\xcd\x9b\x2c\x21\xb4\x7d\x32\xb9\x83\x24\x89\x12\x20\x8e\x16\x7d\x3d\xce\xe5\x80\xe7\x8b\xbe\x1d\x88\x91\x2c\xc5\x0b\x99\x8a\xbc\xdb\xfb\x60\x24\x5c\x7f\x2c\x74\xb7\x43\x83\xf6\x33\x75\x90\x4e\xb3\xa2\xd3\xfb\xaf\xff\x82\x2f\x01\x51\x0a\x42\xf3\x52\x76\x3b\x86\x52\xfd\x5c\x8e\xcd\x03\x1f\x93\x29\x8d\xf2\x31\xe1\x43\x9d\xdd\x70\x2d\xa2\x21\x07\xa5\xbc\x55\xa2\xec\xf4\xfa\x4a\xe8\xcb\x4c\xe7\xa2\xdb\x79\x45\x91\xc1\x43\xc0\x7e\xe5\x72\xdc\xe9\xc5\xfc\x5b\xdc\x63\x8f\xed\x31\xf8\xa5\xb8\xf7\xbb\xcb\x17\xa7\x4f\x79\xa9\xfa\xf6\xc5\xdd\x0f\x59\xfa\xb8\xf3\xe7\x49\x2e\xff\x71\x78\xf0\x6f\x9d\x64\x90\xcb\xe1\xf5\xe3\x3f\x7d\xe8\xa8\xf9\x74\x20\x73\xd5\x79\xfc\xf6\x5d\xd2\x71\x70\x07\xf3\xf7\xdb\xfd\xe4\xed\xa3\x6f\x92\x4e\xce\xe7\xb2\xd2\xbb\xb9\x1c\xcb\x9d\x89\xe0\xe6\x02\xee\x24\x45\x95\xe7\xc9\xdb\xb7\x1d\x6d\x88\xd5\x49\x3a\xa9\x50\xc3\x4e\xd2\xc9\x86\x12\xa4\x48\xe7\x88\x08\x12\x90\x0f\x47\x1b\xca\x62\xc8\xb5\xa1\x83\x8d\x7b\x95\x55\x01\x0a\x86\x79\xe0\xeb\xe4\x6d\x87\x78\xca\x1c\x03\xbc\x03\x41\x14\xb1\x63\xfc\xa3\xe5\x31\xca\xdb\xc1\xc7\xba\x83\x2a\xcb\xd3\x96\xa7\x6c\x5a\x16\x3c\xd6\xeb\xbc\x83\x25\xbc\xa3\xc7\x00\x41\xc2\x0b\x38\x7c\x27\x66\x0d\x49\xe7\xa0\x28\x64\x55\x0c\x45\xe7\x9d\xf9\x2f\x01\x09\x88\xa2\x11\xef\x42\x10\x96\xc9\xdb\x47\x5f\x26\x1d\xbf\xdf\x08\x14\xdc\x31\xcb\xb5\x3f\x59\x4f\x8c\xd6\x19\xe8\x81\x72\xf4\xb7\x2c\x63\x02\x39\xf0\x38\x3c\x31\xff\xec\x67\xea\xf8\xa7\x8a\xe7\x5d\xd1\xd7\x46\x77\xd5\x86\x94\xc1\x6e\xf4\xb3\x22\x15\xef\x3b\xbd\x3f\xfe\xb1\x45\x3e\xf8\xa7\x10\x15\x96\x3f\xe4\x78\x2b\xc1\xcb\xe1\xe4\xf3\xb8\x9d\x96\x0b\x53\x8e\x79\xf6\x8f\x3f\x94\x02\xa8\xd2\xed\x7d\xc8\x46\xdd\x36\xa1\xfa\x1c\xc6\x21\xd1\xda\x2b\x85\xae\x4a\x04\xe8\xe0\x83\xf8\x9a\x4e\xaf\xef\x06\xfa\x78\x7f\x76\x24\xba\xfd\x96\xb9\xf2\xd7\xbd\xf9\xa2\x4d\xba\xc7\xfd\xb7\x78\x3b\x71\x4b\x2e\x34\xd7\x95\xea\xf6\xee\x71\x4f\x5e\xc0\x0f\xd9\x71\x31\xce\x0a\xb1\xc6\x21\xfa\x4c\xae\xc8\xa3\xbd\x71\x76\x71\xf6\xd3\x9b\x4f\x7f\x45\x22\xe1\x3a\x49\xe7\x5c\xe0\x9d\x05\xbe\x69\xa4\x26\x4a\xae\xc5\x97\x13\xfd\xf6\x8e\xab\xe9\x9b\xf0\x6a\xc2\x91\x77\x68\x64\x3b\xb9\x70\xdb\xe1\x92\xc4\xef\xdf\x25\x6f\xf1\xdd\xc0\x38\xe6\xca\x84\xd1\x50\x8a\x74\xcc\x97\x5f\x25\x7b\xc9\x5b\x73\xb9\xf9\x9f\xc0\x85\xda\x9c\xd0\xba\x96\x44\x8d\x3f\x1e\x78\x03\xaa\xa9\x9e\xfd\xa6\x04\xb5\xe2\x37\xe2\xe2\xc5\xe5\xab\xf5\x25\xb5\x1d\xe9\x10\xea\x2e\xe0\x50\xb0\xaf\x7d\x43\x94\x5e\xdf\x08\xd6\xae\x78\xf2\xef\xe2\x41\xa2\xdc\xd0\x75\x2b\xc8\x7f\x25\x41\x4e\x4b\xbb\xf8\xfe\x55\x7f\xc2\xd5\xa4\xfb\xc1\x6c\xc7\xe3\x16\x1e\x18\x0b\x1d\xb0\x40\xef\xe3\xbd\x24\xfc\x8b\xcb\x57\xec\x42\x68\x9d\x15\x63\xf5\x20\x09\x6f\x78\xe4\x33\x91\xef\x3f\xed\x5f\x7f\xff\x35\xaf\xfe\xfe\xe9\xe5\xfb\x0b\x9e\xe5\xec\x42\x94\x37\x46\xda\x74\x2e\x20\x44\x32\x87\xcc\x71\xc0\xa1\x0a\x80\xf6\xf1\x2c\xaf\x61\x4a\x95\x40\x1c\x6f\xa5\x00\xf7\x76\x93\x11\x10\xad\x90\x41\x28\x5c\x98\x61\xd4\xd2\x0b\xa2\x48\xef\x77\x3d\x4c\xf5\x6c\x47\xd9\x4d\x76\x8b\x43\xf9\x9f\x74\xac\x0c\xb9\xcf\xcd\x10\xfc\xe6\x53\x5d\x0d\x21\x63\x3d\xf0\x62\xf8\x4c\xf8\xf2\xe8\x72\x7a\xf8\xe3\xf7\x27\xb7\xab\xf1\xe5\xd7\x8e\x27\xa7\x5c\x69\x51\xee\x14\xfc\x86\xe0\x50\x9d\xe4\xad\xd9\xa3\xce\x5f\x15\xd4\x2b\x10\xe9\x89\x16\x53\x60\x48\xb7\xbb\x66\x23\xdc\x0e\x24\xcd\xc1\xb4\x94\xf9\x80\x97\x34\xd2\x3b\xd8\xcd\x0f\xb5\x19\x58\x6e\xd2\x66\x84\xbf\x24\x9d\x34\xbb\x01\xbe\xda\x4f\x3a\x00\x1d\xe9\x24\x9d\x9f\x65\x21\x76\xf6\xcd\xa7\xdf\x04\x8e\xc5\x95\x7e\xf5\xc8\xfe\xca\xfd\x60\xe9\x6f\x72\x3e\x10\x39\x1b\xca\x5c\x96\x3b\xe3\x92\xcf\x77\xfe\xb2\xb7\xd7\x36\xc2\xd5\x95\x76\x8e\x09\x7b\x0a\x16\xba\x1c\x02\x56\xf5\xce\x87\xd6\x1f\x05\x0e\x88\xf0\x47\xd6\x15\xd1\xfa\x9b\xd0\x1d\x11\xfc\xa8\x17\xad\xb6\x49\xb3\x7b\x51\xf1\xcb\x16\xda\xc3\x91\x9b\xf1\x92\x4f\x85\x16\x25\x30\xd7\xc7\xba\x70\xf0\x0c\x31\x2e\xb3\x74\xd7\x66\xb3\xdd\x83\x21\x6a\x23\xa8\x2c\x15\x2b\x33\xd4\xd2\x75\xd1\x48\x3b\x84\x8d\x5f\xb0\xc9\x4b\x7e\x8f\xa9\xed\x0b\x7e\xb7\xf4\xa7\x28\xe7\xfd\x0f\xb9\xb9\xb4\x33\xa5\xb1\xa4\x4f\x73\x73\x56\x18\x32\xcf\x54\x6d\x09\xe6\xaf\xaf\xcc\x17\xc5\xf5\x8e\x96\x5e\x0e\xc3\x65\x2d\x0e\xe9\x77\x6e\x4a\x7c\x6c\x04\xa4\x61\x27\xd0\xc0\xf0\x94\xe3\xb1\x37\x57\x91\x39\xf9\xf8\xe2\xa4\xc5\xe1\xb1\x68\x13\x74\xed\xff\xd1\xfc\x33\x98\xfd\x23\xf7\xf6\x9a\x3b\x2f\x35\x17\x1f\x5b\x7a\x25\x05\xe2\x07\x2f\x84\x36\xc9\xd0\xfe\xf2\x16\xe2\x15\x66\xe5\x9e\x78\xcf\xed\xaa\xee\x64\x77\xeb\xf9\xfb\xd4\x74\x06\xa9\xa4\x7e\x69\x32\x1f\x4e\xc4\xf0\x7a\x20\xdf\x7f\x22\x32\x9f\xd2\xa2\x3e\x1b\x2a\x8f\x64\x9e\x9a\x77\xfe\xc2\x64\x7e\x5e\x66\xe9\x27\x22\xf1\xc5\x8c\x0f\xc5\xe7\x44\x62\xa3\x8a\xfe\xe2\x04\x7e\x05\x11\xf5\x4f\x44\xe2\xd7\x46\xb9\x7e\xe1\xca\x50\x7e\x46\xb4\x1e\x97\xb2\x9a\xfd\x0a\xc4\x96\xb3\x5c\x7c\x4a\x62\x3f\xa7\x75\x7d\x36\x84\xce\x0a\x2d\xc6\x54\x8e\xef\x97\x26\xf7\x49\xfc\xee\x4f\x41\xf4\xf8\x15\xf7\xa1\x7a\x36\xea\x58\x1b\x8f\xfc\x14\x86\x88\x91\xa7\xc2\x4e\xb9\x41\xb4\x4f\xbd\x69\xc6\xe0\x5b\x79\xb3\x36\xa9\xba\x14\xf7\x14\xf6\xf7\xd9\xaa\xd0\x51\xf0\xf9\x9c\x0f\x5e\xe9\xc9\xaf\x40\xea\x53\x39\xbc\x16\x9f\x90\xd8\x07\xde\xfd\xd8\xd4\xda\x7f\x4d\x7a\x2b\xeb\xd2\xff\xe5\x99\xdb\xc6\x12\x3e\x0d\xc5\xed\xf8\x0f\x90\x41\xdf\x24\x1d\xf1\x93\x93\x46\xad\x56\x7a\x73\x59\x04\xdc\xe8\x24\x9d\xe3\x42\x8b\x72\x56\x66\x4a\x1c\xbb\x1f\xb8\x45\xfe\x2a\xf2\x8b\x57\x69\xa6\xef\xb3\xc7\x9b\xdb\xe6\xa7\x95\xd6\xb2\x38\x18\xd6\xe9\xb0\xd2\x66\xdf\xef\x84\xa5\x99\x66\xa7\x00\x81\x58\x6d\xcb\xef\xfb\xf9\xa7\x3f\x8c\x03\x3e\xbc\xae\x56\xbf\x69\x36\xb4\x45\x47\x5c\xf3\x01\x57\x9f\x4a\x0f\x7b\x0a\x8b\x62\x7f\x64\xe7\x42\x69\x59\x8a\xed\x91\x84\xad\xce\xf2\x3c\x2b\xc6\xbf\x82\xe0\xfd\x8e\x17\xa9\x9a\xf0\xeb\x7b\xee\xf7\xbd\xb6\xdc\x2e\x6e\xcd\x93\xf8\xe9\x4f\x1c\x01\x9d\x7e\xe9\x23\x17\xa2\xbc\x3e\xc1\x91\xf3\xe8\xb7\xd5\xcf\x5a\x6d\xb9\x8b\x1c\x8b\xad\x9f\xb7\xb9\x88\x97\xfa\x7b\xdb\xbc\xb5\xd6\xb7\x7a\x1f\x6f\x2d\x21\xe1\x64\xa5\x73\xa1\x3b\xcd\xa0\xd3\xf2\x79\xdc\xfd\xe5\x1a\x41\xa2\x35\xe3\x43\xe0\xfc\xf8\x3c\x90\x03\x66\x2a\x17\x18\x5c\x6e\x8f\x38\x77\x2a\x88\xdd\x52\x54\xfa\xe2\x66\xb8\xe0\x31\x1b\x16\x4e\xd4\xbc\x18\x9e\x14\xaf\x4a\x39\x2e\x85\x52\x8f\xff\xb0\x9f\x98\x11\xa0\x7a\xc7\xe3\x47\x5f\x27\xb9\xe4\xa9\xb1\xde\x95\x59\x9e\x0f\x12\x07\xf3\xc0\xd0\xf2\xa1\x9c\xce\x72\xa1\x45\x57\x24\xf1\x53\x30\x52\xa7\xe7\x31\x06\x38\x8a\x32\xdf\x53\x68\x51\xb8\x60\x34\xc0\x1e\x64\x71\x90\xc2\x3b\xcd\x2b\x1b\x98\x86\xf8\xcd\x3c\x4d\xbb\xa2\x3e\xf6\xd8\x8f\xdd\xeb\xcf\x2a\x35\xc1\x6d\xe9\xe2\x7b\xdc\xf0\x6a\xb5\xf1\x9f\x56\xf9\xb5\x7b\x47\xb7\x67\x5f\xe2\x09\xd3\xe9\xd0\xb8\x47\x02\x29\xb0\x98\x50\xa5\x98\xca\x1b\xb1\xda\x68\x17\xfc\x66\xe9\x58\x8a\xaf\x3a\xd2\x2b\xae\xd4\xad\x2c\x53\xc4\x54\x2c\x1a\xaf\x9a\xa5\x5c\x0b\xff\x6c\x3f\x4b\x13\x0d\xbf\x7f\x96\xe5\x1a\x77\xa3\xf6\x06\x81\x13\x9d\x17\xc3\xbf\x8b\xf9\x30\x97\xfc\xda\x22\x09\x60\x7b\x63\xd6\xea\x24\x7f\xd8\xeb\x25\x75\x60\xc2\xc5\xcd\xd0\xac\x25\x1a\xa2\xbe\xa4\xf6\xc1\xf6\x69\xb0\x36\xd2\xcd\x8b\xe1\xe9\xd1\xc1\xab\x35\x66\x83\x3f\x5f\x6f\x26\x0d\x49\xf3\xc5\x6a\x92\xe6\xb7\x8c\xa5\x59\x59\x40\xdd\x01\xba\x69\xc1\xcd\xd4\x50\xff\xf7\x87\xca\x14\xe2\x36\x84\xcb\xbc\x2a\xe5\x34\x53\xa2\x26\x37\x16\x4b\xb6\x4e\x27\xd9\xdf\xdb\x23\x9e\xd0\x4f\xfe\xfd\x83\xe8\x6a\xb3\xcd\xf7\x01\xd2\x00\x7b\x3c\x04\x40\x83\x9c\xf1\x99\x20\x15\x9e\xef\x7f\x99\xfd\x74\x5e\xbe\xfc\xf4\x08\x9a\xba\x97\x3e\xe9\xe0\x1f\x6c\xc0\x55\x36\x0c\x6b\x6b\x24\x6c\x46\xa2\x0b\x93\xb2\x83\x34\xfe\x95\x42\x0c\x2b\xc3\x64\xcc\x4e\xec\x40\xe4\xd7\x4f\x1f\xc3\x23\x49\xc7\xdd\x2d\xe1\xbf\xc1\xf9\xba\x2a\x62\xc6\x8f\xe0\xd3\x13\xee\x7a\x54\x2d\x86\xd7\x2c\x5d\x04\xc4\x9e\x1b\x6b\xa8\x8b\xb7\xe0\x16\x37\xef\x0c\xa5\xbd\xfb\xc0\x48\x4b\xf8\x03\xaf\x0a\xf8\x27\xde\x86\xf8\x08\xbf\xc1\x7f\xd8\xdb\xa5\x95\x22\xe0\x6e\x8e\x5f\xee\x3e\xf7\x73\x58\x4e\xbc\x68\x76\x2b\x50\xd0\x4d\x7e\x85\x67\x69\x6d\x2b\x3c\x49\x4b\x5f\xe5\xfd\x86\x32\x2b\x3c\x17\x10\xee\x13\x01\xa9\x62\x01\x73\x2f\x4d\xd9\xa6\xfb\x7e\x1e\x2a\xf2\x7d\x27\x0d\xd8\xe5\x05\x53\x4f\xfc\x8f\xe8\xbe\x45\x0c\x1e\xb0\xc1\xa7\xbc\x5e\x9b\xeb\x0a\xee\x58\x3b\xf5\xe5\xf7\xac\x7d\xaa\xd3\x4b\xec\xae\x2e\xff\x81\xbb\x5c\x7a\x09\x61\x64\x96\x3f\x6f\x81\x34\xbd\x24\xcf\x8a\xeb\xe5\xcf\x9a\x27\xcc\x83\x72\xc8\xf3\x0b\x2d\xcb\x85\xcf\x99\x07\x76\x94\x96\x25\x1f\x8b\xbb\xb5\x04\xd0\x77\xca\x85\xc0\x5d\x44\x0a\x5d\xf2\xc1\xe3\x8e\x96\xc3\x4e\xf2\x53\x25\xca\xf9\x2b\x63\x64\xaa\xc7\x6f\x3b\x50\x42\xab\xd0\xaf\xf8\x58\x9c\xa4\x46\xf0\x41\x85\x92\xce\xbb\x64\x18\x54\xab\x44\x5c\xfc\xe3\x4e\x27\x81\x7a\x4b\x37\x66\xfa\xee\x13\x6f\xb1\x5c\xe0\xab\xd0\xd8\x77\x9a\x32\xaa\x8b\x6e\x16\x60\xe9\x18\xf5\x74\x22\x6f\xcd\x5b\x63\xed\x3e\x50\x17\x86\x66\xeb\x8d\x3a\xf3\x7f\xcc\xf8\x58\xec\x74\xfa\xe8\xce\xe8\x8a\x9e\xb3\x0c\x8e\x68\x77\xe3\x31\x6a\x9c\xb1\xd8\x4a\x00\x36\x9e\x5f\x54\xc3\xa1\x50\xaa\xdb\x31\x23\xa6\x46\x67\x4d\x96\xaa\x2f\x02\xbf\x01\x0f\x47\x6f\xe1\xb3\x66\xc3\x8e\x7c\xb1\x28\xfb\x2b\xf1\x7e\x28\xca\x99\x31\x05\xcd\x1a\x0e\xe5\x6c\x8e\x34\x30\x87\x27\x17\x9a\x15\x4f\x9a\xeb\xe8\x67\x69\xa7\x97\xc8\xe0\x1b\x43\x10\x65\x38\xf4\xc9\xdb\x0f\x33\xd8\xb9\xc7\xe2\xe3\x3b\x4b\xa0\x65\x94\x30\xaa\xdc\x24\xcb\xd3\x52\x14\x5d\x99\x88\x5e\x2f\xc9\x9e\xbc\x7d\xf7\x85\xea\x8f\x64\x79\xcc\x87\x93\x6e\x57\x24\xd2\x10\x28\x7b\x2b\xdf\xb5\xcc\xc5\x8f\x34\xb4\x73\x2f\x12\xd1\xc7\x49\x18\x4b\xa9\x97\x04\xca\x25\xcf\xf3\x6e\x16\x92\xbd\x78\xf2\xe4\x89\xfe\xe3\x1f\xbb\x9e\x31\x66\x96\xf1\x3a\x21\x29\x31\x8f\xad\xff\x4f\x64\xed\x17\x99\xe1\x85\x6c\x00\xb6\xe3\xa8\x14\x6a\xd2\x0d\x1f\x0e\x0e\x1e\xae\xd0\xb2\xc5\x69\x56\x5c\xab\x16\x72\x00\x41\x5b\x6d\x71\x33\x94\x42\x5b\x9c\xac\xa8\x17\xf2\x46\xfc\x4b\x6d\x11\x11\xa3\x48\xbb\x70\xe3\x8e\x05\xde\xe3\x69\x27\x31\x5a\xaf\x48\x86\x34\x37\x90\xdf\xde\x48\xbf\x9b\x46\x40\xa0\x02\x3f\x03\x72\xa9\xe0\x21\xaf\x95\xf6\xbe\xc8\x46\x5d\x7a\x6c\x56\x4a\x6d\xe5\xeb\x93\x27\x4f\x94\xb1\x56\xe8\x83\xcb\xf9\x4c\xf4\x4f\xe5\xf0\x9a\x12\x3e\xcc\xaf\x84\x1f\xfc\xc9\x93\x27\xf4\x57\x29\x72\xa8\x08\x79\x92\xfa\xe4\x10\xb8\x6b\x6e\xb3\x22\x95\xb7\x7d\x23\x6c\xa1\xb0\x50\x29\x8c\xe9\xda\xed\x7d\x61\x16\x90\x3d\x81\x5d\x7b\x2c\xfa\x5a\xfe\xed\xe2\xe5\x59\xf7\x03\x95\x8e\x38\x49\xf1\xe2\x02\x9d\x42\x2f\xf8\xf6\xe3\x17\xcb\xb6\xc5\xfa\x18\xc6\xc2\xec\x6f\x40\x90\xe6\x3e\xb4\x4b\xa8\x64\xd9\xe8\x23\xa1\x87\x13\x33\xb8\xea\xca\xa4\x99\x6a\x61\x34\x9c\xc5\xfc\x8f\x5c\x9b\x88\x7b\x1c\x2f\x79\xd7\x41\xfa\xe8\x1c\x30\x8e\x97\x8c\xbc\x36\x54\xd6\x0b\x8f\x52\xf1\x04\x5c\x2f\xf2\x89\xe8\x5b\x86\x8b\xf8\xc5\x1e\xaf\x6c\xe9\x01\x08\x8f\x92\x4a\x8a\xde\x17\x7e\x82\xb5\x7b\xcf\xe8\x93\xbd\x44\xfe\x47\x37\x03\x5f\x59\xd7\x9e\xd9\xe2\xe3\x72\x6a\xa7\xb0\x20\x24\xb7\x4e\x8a\x96\x2d\xbc\x7b\x9b\x16\xd1\xe0\xc1\x9b\x67\x28\xde\x7b\xbc\xda\xb4\xcd\xac\x3f\x97\x39\x1b\x2e\x39\x29\x94\x28\x35\xf5\xc3\x0e\x7c\x93\x0b\xdc\x16\xfa\x8e\x29\xf3\x34\xc5\x55\x2e\x98\x6f\xe8\x36\xad\x0b\x2e\x0c\x0e\xf6\xfa\xd8\xd6\x22\xfb\x59\xe0\x74\xcd\x6c\xbf\x68\x3e\x05\x6c\x53\x10\x05\x6a\xe7\x16\x17\x75\x9f\xa3\xfb\x70\xfa\x16\x6d\xf4\xb5\xf3\x82\x82\xd3\x4f\x2b\xd5\xa7\xe2\x3f\x7e\x78\xf3\xda\x83\x34\x35\x72\xde\x9c\xbc\x5e\xd2\xd1\x7c\xd0\x01\x31\x6a\xc6\x30\xe2\xf6\x3f\x1a\xae\x26\xf0\x7f\x05\x53\xb4\xca\x70\x30\x4d\x84\xa5\xd6\x27\x4f\x9f\xaa\xbc\x1a\xb7\xd2\xa4\xfe\xbc\x7f\x03\xfe\x02\xa6\xf8\xb8\xbb\xf0\x38\xe3\x12\x34\xf8\x6f\x7b\x81\x0c\xb2\x37\xd5\x81\x7a\x9a\xcb\xe1\xf5\x7d\xf9\x2b\xb6\x08\xc8\x33\x4e\x03\x85\x67\xa8\xeb\x5e\x68\x65\x25\x79\xc5\x97\xab\xa9\x78\x2a\x9d\x52\xbb\x5c\x71\xf1\xa7\xb5\x65\x47\x90\xbe\xf7\xdc\x87\x80\x46\x97\xd6\xd3\x55\x73\x96\xd7\x6c\x28\x52\xad\x0f\x94\x7b\x7e\xe1\x39\x4b\xf4\x5d\x97\x9b\x1d\x83\x29\xab\x87\x03\x01\x2b\xa8\xc5\x59\x8f\x28\xb4\x10\xcf\x3d\x78\xd7\xa2\xdb\x25\xc0\xc2\x79\xb9\x19\xa4\x9d\xe0\x26\xbb\x80\xba\xe2\x43\x61\x8d\x1d\x47\xa7\x56\x76\x5c\x7e\xee\xb1\x5a\x46\x38\xea\xe2\xf3\xff\x39\xc9\x6a\x33\xfc\xa9\xb8\x11\xf9\x66\x89\x00\x43\xfe\x36\x28\x70\xc9\xc7\xde\xda\x5d\xa4\xd1\x74\x7a\x5f\x68\xfc\xbd\xe6\xe3\xba\x76\xb5\xc0\x58\xbd\xf3\xb4\x5c\x84\x87\xe4\x38\xcd\xc0\xe0\x8c\xe4\x4b\xe0\xfb\xed\xdb\xb7\x98\x07\x5d\x21\x10\x54\x8f\xc1\xc2\xea\xf4\x6a\x21\x84\x40\xa4\xdb\x54\xc8\x0f\xa1\xe3\xe0\x83\xe6\x83\xc7\x1d\x9b\x41\xf3\x91\x42\x8a\x50\x6e\xda\xfc\xec\xf5\x0c\x75\xe9\xa5\x1b\x34\x16\xda\xff\xe2\x7e\x76\x1a\xf7\xbf\xb3\x91\xd3\xf0\xf5\x6d\x31\xc8\x45\xe2\xd6\xff\xea\x4e\x25\xe1\x4e\x96\xdb\xe8\x8a\x7a\x1f\x13\x6b\xed\xae\xad\x06\xc1\x59\x70\x77\x11\xd7\xfc\x8e\xb9\xc5\x4a\x84\x63\xe4\xa4\x70\x9c\x44\x3c\xac\xbc\x98\x35\x6a\x86\xcd\x42\x69\x7e\xeb\xbf\x0c\xbf\x8b\xe2\x13\x45\x3f\xf8\x33\x7c\xaa\x94\x39\x28\x31\x7d\xf8\x47\xf8\x0d\x99\x19\x45\x1f\xfe\x11\x7e\x43\xb9\x88\xf0\xa5\xfd\x77\xf8\x7d\x44\xef\xa2\x1f\xfc\xf9\x6b\xeb\x68\xed\x9a\xc6\x58\x68\xc8\x87\x01\x75\x43\xb5\xdf\x71\xad\x8c\x05\xc1\x29\xe2\xa9\x44\xfc\xc7\x22\xab\xf7\xb1\x55\x5a\x50\xa0\xbc\x9f\xf1\x22\x3d\xc8\xf3\x2e\x8a\x35\x11\x88\x35\xef\xbe\x74\xe6\x20\xa9\xeb\xdf\x65\xe9\xc2\x9b\x0b\xcc\xfa\x3d\xd0\x27\x73\x51\x8c\xf5\x24\x12\x55\x68\xcd\x39\x0f\x07\xc4\x15\x51\xa3\xd6\xfe\x09\x1c\xe7\x63\xef\xa3\xc8\x95\x60\xe2\xc9\xdb\x77\x5f\x2c\x98\x95\x5a\x75\x56\x4e\x16\x2b\x74\xce\x99\x55\x5f\x68\x88\x2d\x8a\x80\x10\xed\x8e\x8d\x87\x12\x42\xff\x47\xf1\xe4\x9f\x7d\xaa\xdd\xd9\x2d\x12\xd1\x7b\x5c\xe0\x62\x63\xbb\xfb\x61\x2b\x2a\xea\x21\xf7\xc5\x81\xd5\x9a\xf7\xff\xb7\x1c\x71\xbf\x77\x34\x60\x65\x6f\x3d\x9e\xaf\xe5\x8f\x92\x88\xeb\x25\x2b\x07\xfe\xef\x1d\x03\x58\xd5\x1d\x1f\x42\x06\x9c\x4e\x22\xfa\x5a\xf6\x83\xeb\xbb\x8f\x5e\xfe\x2f\xf0\x52\xe9\xfe\xb3\x9f\xa9\xb3\x2a\xcf\xbb\xba\xf7\x5f\xff\x65\xfe\x78\x5d\xe0\x76\xa5\x5d\xdd\xeb\xfd\xf1\x8f\x5d\xfd\xa4\x63\x38\x6b\x15\xe4\xc0\xdd\x12\x13\xf0\x6d\xea\x99\x2c\xc3\xfd\x70\xf7\xca\x3f\xb3\x74\x99\x00\x75\xea\x9f\x6e\x13\xa1\xba\x97\x08\x6b\x7b\x59\xd8\x43\x20\xbe\xe0\xa3\x45\x2f\xfe\x22\x04\x41\x91\x2b\xdf\x39\xfd\xdf\xe0\x61\xbd\xa8\x46\xa3\xec\x7d\x6b\x04\x20\xf8\xc5\x9d\xae\xff\xa4\x51\xae\x84\xae\xcd\xc7\x8b\xa7\x49\x4f\x10\x3b\xde\xf9\x60\x62\x3f\x59\xf2\xa4\xfd\x67\x02\xd4\x7b\xdc\x74\xae\xc1\xa5\xba\x64\x00\xf8\xde\x86\xc9\x96\x3d\x68\x1f\x49\x82\x0b\x7e\xc9\xe3\xc1\x53\x09\x5c\xf9\x4b\x9e\x85\xef\x11\x81\xb1\xec\x31\x7c\x20\xb1\x9a\xc0\x92\x27\xed\x23\x49\xa0\x12\x2c\x79\x3c\x78\xca\x70\x9d\x12\xba\x9a\xf9\xb8\x65\x60\x12\xfd\x13\x1a\x0e\xc2\x07\x89\xa8\xe9\x4d\xda\xeb\x4d\x22\x56\x9a\xb4\x53\x9a\x44\x5d\x17\xd3\x81\x2e\x26\xe2\x63\x00\x2e\x1b\x3f\x18\x69\x49\xda\x6a\x49\xf4\xb1\xdd\x15\xf3\x8d\xfd\xb7\x1f\x2a\xd4\xcc\x74\xac\x99\x89\x48\x2d\xd3\x56\x2d\x13\xb1\xc2\xa1\x89\xe8\xee\x0b\xaf\x92\xe9\x40\x25\x13\x2d\xfa\x98\x8e\xf5\x31\xd1\x72\x3d\xaf\x7e\x0d\xf7\x83\xfb\xb1\x17\xc0\x94\x7c\x11\xc5\x78\x87\xfa\xfd\x3e\x2f\xc7\x15\xbd\x9b\xf4\x25\x17\x8d\xdc\x4b\xf6\x56\x06\x2e\xd5\xee\xd7\xcf\x04\xb7\x54\x8c\xbf\x3e\x7c\xf5\xe7\xeb\x72\x53\x15\x56\x00\x18\xfd\x2b\x14\x52\xa9\x43\xaf\xbf\x4e\xdc\xe1\x70\x94\x57\x04\xef\xb1\xa5\x60\x8c\x06\xdd\x49\x3a\x7f\x4d\xe5\xf0\x84\xf0\x37\x5f\x26\xf6\xb0\x59\x98\x8d\x3f\x62\x9d\xcc\x16\x0f\x5a\xa3\xfa\xc8\xa3\x96\xea\x23\xf7\xa8\x59\xd2\x86\x30\xff\xa6\x65\xa9\x9e\xc8\x0e\x4e\xc6\x07\x90\x7c\x00\xa7\xd4\xca\x86\x8e\xa5\x81\xc2\xec\xfa\x24\x5c\xae\x3f\xa1\xf1\xf9\xef\x90\x21\xea\x70\x4c\x97\x8e\x95\x3b\x71\x24\x1e\x41\x4f\xd6\x63\x86\x7f\x45\x2e\x50\x0f\x7a\x32\xd3\x73\xd0\x26\x9c\xa5\xfb\x13\x27\xeb\xfe\xb4\x1b\x14\xff\x1d\x3c\xe0\xd6\xe0\x3e\x71\x4b\xf1\x63\x06\x2b\x5a\x5e\xc8\x0f\xd7\xba\x22\x70\xc9\x91\x62\xc5\xe7\x1d\xa5\x56\x81\x50\x39\x42\xae\xf2\x70\x9d\xce\x0b\xd1\x70\xab\xe4\xf9\xff\x2e\x6b\xe1\xb4\x4f\x61\x67\x2c\x77\xb4\x9c\xb5\x8a\xb3\x55\x7e\x8e\xf0\xb1\x1d\xb7\x2b\xab\xad\x67\x79\xfa\xce\x97\x7b\xab\x64\xed\xa0\x75\x8a\x05\x9f\x29\xe7\xc7\xa7\xa7\x8d\xb5\x4b\x4f\x8b\x6e\xce\x0e\xda\xdf\xe6\x57\x7b\x96\xad\x3a\xb6\x66\x94\x10\xc5\xce\xd7\x50\x34\xca\x71\xcf\x82\x02\x41\x34\xf9\xaf\x12\xba\xba\x41\xfe\xe8\x6c\x16\xd4\xd4\x9c\xc8\xdb\x23\x91\xf3\x39\x2c\xf2\xeb\xbd\x76\x82\xe0\x1a\x76\x87\x32\xcf\xf9\x0c\x72\xfe\x96\x67\x04\x35\xc8\xf7\xe5\xa2\x03\xe1\x9c\x18\x70\xdc\xdb\x73\x87\x96\x33\x7e\x7d\xf7\xab\x6c\xb7\xca\x76\x40\x72\x96\xfe\x52\xc9\x7e\xc6\xe4\xae\x47\x86\x6e\xef\x5a\x7f\xbf\x40\x76\x5b\x0e\x02\x5c\x96\x25\x1b\xc6\x18\x1b\x72\xdb\x6a\x84\xa1\xbc\x8e\x85\x74\x1d\xca\xe5\x31\x56\x04\x3b\x8d\xbc\xf5\xee\xb3\x38\x92\xe1\xe5\x33\xcc\xe3\x81\x02\xba\x29\x8f\x1b\xd2\x17\x58\x3a\x9a\xf1\x1d\xa0\x56\xbb\x96\x95\x80\xa2\xf1\x52\x57\xfc\x49\x83\x12\x8b\x25\xe8\x43\x72\xcc\x36\x98\x66\xd6\x2e\x08\x9d\x2a\x30\x15\x9a\x2f\x11\x83\x77\xfc\xda\xe2\xd2\xef\xaa\x0d\x36\xd9\x5f\x96\xf5\xb7\xdf\xd4\xa6\xf0\x6b\x4f\xcd\xe5\x75\xc2\x26\x8f\x1a\x33\x14\x6a\xb8\x64\x78\x6b\x60\xaf\xfc\x86\x36\x22\x70\x8d\x25\x87\x96\x0a\x3d\x3a\xc7\x08\xbb\xd7\x22\xdd\x49\x51\xad\x6f\x4c\x69\x58\x0a\x08\x1c\xba\xac\xca\x06\x5e\xb9\x96\x53\x5c\x48\xbd\x13\xe4\x15\xb7\x0e\xd5\x5c\x39\x14\xd1\x8b\xab\x45\xb4\xe6\x10\xb7\x66\x90\xfe\xcf\xff\xfb\xff\x31\x1a\x80\xdd\x6b\x71\x8d\xb7\xb6\x81\xb1\x7f\x89\xe4\xce\x55\xb4\x63\x38\x12\x9b\x51\x8d\x23\x53\xb5\x2e\x83\x1b\x6e\x3a\xf3\x83\xc8\x4b\xf7\xeb\x69\xc0\xe1\xc4\xef\x10\xcc\xcd\x65\xf8\x51\x6a\xab\x69\x4f\xb8\xb8\xc7\xbd\xf9\xe5\x82\x7b\xb3\x6d\x3f\x6f\x32\x71\xeb\x14\x3d\xb7\x9d\xb1\x7e\x63\xb7\x95\xdc\x1e\x6e\x7b\xad\x63\xc2\x5f\xa5\xce\x01\x13\xf8\x42\x16\xdf\xaf\xf1\xbe\xd7\x6f\xdb\xd0\x44\x22\xbd\xcc\xaa\xfc\xee\x0a\xb6\x78\x5f\xf8\xc3\x22\x4b\x83\x3c\x11\xf7\x67\x84\x82\x8a\xc6\x21\xe4\xca\x7d\x6e\x74\x48\x92\xa9\x85\x66\x6b\x1f\xd6\x6d\xb3\x90\xa0\x8b\x38\x14\xc9\xbb\x88\x61\x89\xd8\xab\x33\xb0\xdb\x81\xfb\x2a\x11\xad\x5c\xbd\xba\x66\x71\x0f\x73\xcf\xaa\xdb\xab\x19\x7a\xab\x2a\x2b\x8e\x29\x56\x78\xd6\xf1\xcc\x8a\x1a\x8d\xc5\xee\xae\xf0\x78\xcc\x72\xf7\x58\xa3\xe5\xc8\x5f\x5a\x2f\x5b\x9a\x13\x56\x67\xf7\x7b\xfd\x66\x25\x0b\xfa\x97\x4d\xe3\x5f\xe0\x4a\x7c\x58\x86\x92\xad\xb9\xbb\x28\x9d\xff\x77\x92\xf0\x73\x47\x5e\x0c\x95\xe2\x38\x27\x62\x3c\x86\xcb\x24\xc8\x66\x79\xca\x87\xd7\x11\x82\xe5\x2e\xa8\x0c\xb5\xd9\xf9\x98\xc8\xc2\x0e\x5a\x4b\x82\xa9\xbd\xd2\x06\x99\xcf\x65\x9e\x0f\xcc\xdb\x6a\x68\xbb\x66\x2c\xad\xa4\x27\x97\x63\x5a\x17\x61\xa4\x56\x5d\xc0\x03\x22\xc8\x9e\xa5\x7e\xe3\x51\xe4\xc5\xc5\x22\x3e\x9f\xe0\x71\x9c\x16\x7e\x77\x5e\x77\x00\x4c\x5b\x1e\x02\x8d\x38\x0a\xcb\x00\x04\x78\x7f\xcb\xb6\xca\x82\x32\x02\xcc\x09\x84\x63\x1d\x7e\xc3\xbc\x14\xe7\x62\xf8\x5e\x18\xcb\x8d\x72\x48\x10\x01\xe2\xb8\xc5\x25\x5b\x61\x40\xc9\x7e\x4c\x91\x5c\x5d\x0b\xe5\x2e\x6a\xf6\xf0\x79\x46\x4f\x3f\x55\xac\xd3\x51\x29\x78\xa7\xa7\x5c\xef\xb3\x8d\x42\x3e\x3c\xa2\x18\xf2\x45\xc0\x3b\xe1\x1f\x04\x2a\xfa\xf7\xbd\x3f\xfe\x51\x2c\x12\xb6\xc1\xe3\x6f\xf7\xde\xdd\x37\x12\xf8\xc5\xca\x40\x82\x5f\x00\x41\xb0\x86\x7c\xfe\x4c\xa2\x90\xc3\x47\x4f\x87\xf2\xd1\x57\xed\xd5\x13\x82\xae\x00\xbf\xb5\x78\x24\x79\x74\xd0\xe2\x6d\x84\xe4\x52\x5e\x5e\x83\x65\x3a\x9e\x80\x07\x85\x83\x03\xc5\x4c\xaf\x04\x43\x6d\x20\xcb\x54\x94\xa0\xb0\xbf\x05\xd5\x30\x59\xf0\x7f\xef\x28\x0f\x16\x98\xce\xd1\x4c\x76\x06\x50\xfd\x30\x70\x84\x4c\xc4\x14\x66\x50\xcd\x66\xa2\x1c\x72\x25\x6c\xe1\x09\xea\x26\x81\x76\x6b\x9e\x81\x82\xff\x56\x97\x95\x9d\xc6\xe2\x52\x62\x65\x29\x6f\x4f\xc5\x48\xb7\xba\xaa\xac\x0f\x70\x89\x22\x6e\x14\xaf\x3b\x52\xfc\x97\x7a\x95\x7e\xe9\x08\xed\xbf\x62\x24\xed\x93\x77\x95\x38\x3f\xfe\xfe\xe4\xe2\xe4\xe5\xd9\xc5\x22\xd7\xe0\xc3\x1a\x4a\x08\x3e\x9c\x38\x5f\xa6\xbf\x57\x16\x16\x72\x5e\x56\x73\xcf\xbe\xb7\x1e\xb6\xcb\xb4\x98\x36\xc3\x71\x81\x57\xb7\x71\x35\xc1\x79\xf8\x2a\xd9\x47\xc9\x45\x21\x39\x57\x2b\x70\xa5\x58\xdc\x46\xab\x01\x5e\x96\x19\x2f\xc6\xb9\xb8\x98\xf2\x3c\x3f\x07\x61\xf5\x69\x4a\x33\x2e\xf6\x35\x03\x35\x96\xf8\xcf\xef\xac\x4b\xb8\x30\x2c\xe8\x15\x02\x4f\xf3\xbb\x4e\xf1\xfe\xaf\x54\x96\x70\xc3\x95\x09\x1f\x5a\x80\xe8\x10\xdf\xc7\xce\xbd\x22\xd6\x31\xff\x16\xb7\x6c\x66\x0e\x91\xac\x14\xa3\x39\x31\xcc\xe3\xc1\xf2\x43\x46\xfd\x64\xc6\x5e\x65\x22\xcd\xf4\xb2\x12\x44\x97\xd9\x54\xa0\xdc\xbf\xcb\x9d\xdc\xea\x11\x76\xfa\x42\x14\x45\x5d\x2d\x6c\x1a\x68\x97\x5e\xef\x00\x46\x21\x63\x3b\x0e\x89\xae\x1f\xf5\x0c\xc5\x4e\xb2\x4c\x22\x2c\xbc\x21\x83\x99\x7d\x0a\x17\x95\xbd\xab\xd6\x72\x54\x35\x35\xce\x07\x3a\xab\x7e\xc3\xfe\x84\x7b\x56\x90\xb9\xb7\x87\xeb\x5e\xee\x85\x95\x9d\x16\xad\xee\x85\x7a\x3e\xcf\x49\x4a\x18\xcc\x76\x38\x37\x3e\xf4\x4f\xc8\xc2\x6d\xe4\x11\xdd\xf1\xdb\x00\x0a\xbe\x1e\xe8\xfc\x8e\x84\xa7\x93\x9a\xfb\xa2\x25\xdf\x49\x2f\xcf\x77\xd2\xcb\xf2\x9d\xf4\x5d\xf9\x4e\xfa\x8e\x7c\x27\xbd\x30\xdf\x49\x2f\xcb\x77\xd2\x77\xe7\x3b\xd5\xf1\xb5\x75\xcc\xfc\x4a\x8e\x96\x71\x48\x8a\x5e\xe4\x5a\x09\xbe\x0a\xd8\xba\xa5\x22\x41\x9b\x9b\xa4\x9e\xbc\x08\x9e\xdc\x3c\x72\xb1\x20\x81\x22\x80\xfa\xd8\x93\xa7\x57\x83\x79\x8f\x23\xfa\xf4\x9a\xc0\xee\x71\x9d\x40\xbd\x1a\xa8\x7d\x61\x4a\x16\x64\x48\x45\xe8\xf3\x35\xb2\xb7\xa2\xfa\xaf\xa2\x2c\x25\x54\x1b\xcd\x46\x5d\x11\x35\xb5\x8d\x9d\xb7\xbb\x85\xd4\x3b\x23\x59\x15\x69\xa7\x97\xfc\x61\xff\xfe\x9e\x5b\x9a\xeb\xe7\x51\xb6\x6c\xb9\xcb\xfe\xde\xf2\x31\xf0\xe6\x1f\xf2\x62\xe8\xab\x68\x2e\x2b\x62\x40\x9d\xa1\xfd\x1e\x61\x8f\xe0\xf6\x5c\xf2\xe8\xbb\x46\x39\x03\xfc\x76\x51\x76\x60\xed\x5b\xfa\x75\x9c\x66\x4b\x65\x48\xea\x3f\x72\xe9\x70\x36\xf3\x36\xb8\xda\x30\x4d\xed\x17\x29\x5f\x23\x9a\x02\x35\x2a\x68\x53\xd4\xaa\x6b\xe8\xf5\xaa\x6b\x58\x21\xfc\x9b\xd9\xbd\x28\x0a\xfd\x38\xa0\xcc\xc7\x8f\x8d\x9c\xe5\xf5\x52\xa6\x5b\xe6\xba\xb8\xd8\x74\xff\x53\xa7\x4f\xb7\x51\x6e\xfd\x24\xea\x55\xd7\xd8\x96\x4a\x7d\x6f\xb5\xd3\x8a\xc5\xdf\xb2\xfa\xf9\x69\xf5\xc9\x95\xc3\x55\x53\x9b\x8c\xf8\x99\xc6\x6f\x5a\x15\x90\x88\x14\xc8\x95\x75\xad\x64\xf3\xe9\x71\xf7\x4e\x39\x83\xe0\xd3\xd2\x4a\x4f\x63\xa1\x7d\xb0\x78\x29\x21\x02\xb9\x8d\x35\x7f\x40\xff\xc6\x8b\xe2\xee\x17\x40\xf9\x89\x07\xbe\xe4\xe3\xfd\xe3\x19\xf6\x78\x7e\x26\xd1\x8c\xfc\xf6\xcb\xf2\xe9\x7f\xfe\xb8\x62\x2d\xe8\x6d\x0c\xe3\x37\x18\xc3\xb0\x1d\xe0\xef\x17\xcb\x40\xb5\xf3\x5f\x22\x9a\xf1\x80\x40\xc6\x42\xb4\xae\x48\x33\x2d\x43\x9e\xf3\x44\x77\x0e\x3d\xca\x93\x40\x60\x6f\x0d\x9c\xe9\x08\x0f\xc0\x2e\x17\x94\x58\xb0\x93\x8d\x3d\xae\x3b\xf6\xec\xe7\x71\x4a\x84\xfd\x14\xd1\xf6\xf5\x4f\x1b\xb0\xc4\x15\x79\x64\x29\x44\x2d\x02\xe7\x2d\x72\x94\xb6\x66\x9a\xa0\xbc\xdc\xf1\xb3\x0a\x6a\x9e\x83\xe6\x79\x4a\x27\xc5\x90\xfe\x85\x4c\x85\xa7\x70\x48\xfc\x0c\xa1\xb5\xf7\x00\x94\x76\xf0\x7b\x76\x10\x39\x20\xcc\x19\x5c\x85\xb6\x8b\xf7\x68\x75\xfa\x7e\x5a\x30\xe0\xa7\x04\xfb\xd5\x6f\xb9\x87\x79\x50\x6d\x09\xa7\xdf\x14\xda\x6f\xb9\x27\xe0\x8e\x8a\xd8\xf7\xd2\x63\xef\xad\x25\xbb\x84\x73\xa3\x7b\x2d\xa9\xde\x71\xe1\x8a\x77\xc4\x25\xb7\x01\xf6\x9f\x44\x05\xb4\x36\x85\x3b\xbc\xe4\x83\x18\x72\xa8\x83\x82\xdb\xbf\x83\x82\xd9\xe7\xb6\xfc\x73\x58\x93\xf0\xce\x5a\xd1\x0f\x71\x8a\xd1\x91\xd9\x9a\x7f\x1b\x32\xff\x3e\x57\xeb\xef\x5f\xba\xc6\xc9\x83\x0c\x2f\x3a\x19\x9f\x89\xe5\x35\xd9\xe5\x2f\x9e\xce\x8e\x67\x5b\xcb\x6b\x6b\x79\x6d\x51\x64\x5b\x14\x59\x8c\x22\x7b\x39\xd3\x2d\x8d\xff\x1f\x8a\x21\xdb\x30\x0c\x8c\xd2\x3f\x9d\x12\xf8\x70\xe4\xd7\x86\x60\x5f\x17\xb6\xd6\xeb\x27\x6a\x02\x4b\x08\x21\xff\x9a\x65\x23\x2f\xc5\x70\x41\x1f\x19\x4f\xb8\x3b\x07\xda\xc4\x36\x19\xb5\x6e\x2c\xcb\xf9\xaf\xbf\x4f\x87\x6e\x26\x9f\x66\x9f\x70\xf8\x4c\xac\xbf\x43\x9e\x66\xbf\xc8\x16\x69\x3e\xfe\xf5\x77\xe7\xd2\x4c\xe2\x93\x6c\xcc\x25\xdf\xc0\xa1\x01\x1a\xd5\xef\x9b\x5f\xbb\xb3\x39\xbd\x3a\xf2\x07\x45\x20\x3d\x7b\xf7\x1f\x40\xf2\xb9\xb8\x27\x60\x77\x83\x2c\x16\xb4\xa4\x59\x0b\xa9\xbb\x39\x7e\x3b\x95\xc3\xeb\xb8\xf6\xc3\x4a\x00\xdd\xfb\xb7\xef\x66\xe4\xb0\x59\xce\x82\x2b\x33\x62\x48\xc9\x87\x74\xe0\xbf\x9b\x59\xbe\x47\x33\xe7\xd7\x63\x16\x5f\x82\xe1\xf3\x60\x95\x43\x39\xbb\xe7\xa5\x71\x4f\x46\xf9\xde\x2f\x78\x13\x2c\x12\x95\xb0\x58\xb3\x71\xff\x6f\x0b\xb7\xbd\x4c\x24\x2f\xd0\x1b\x57\xe0\xf1\xf6\xc8\x00\x6a\x63\x3b\xce\x17\xe9\xea\x77\x51\x39\x94\x85\xc8\xe9\x46\x41\xbb\xb7\xab\x85\x51\x16\x3b\xf5\x57\xad\xd1\xd7\x5e\x4a\xef\x01\x66\xde\x4a\x84\xae\x6b\x7e\xeb\x52\xda\x8d\xb7\x25\xf5\x12\x0d\x6e\x5d\x2a\x9b\xa1\xb6\x04\xbe\x5b\x7f\x59\x97\xce\xc1\x88\x0d\x72\xb7\x55\x52\xaa\xd3\xfd\xbc\x56\x5b\xf4\xfe\x7b\xd0\xa8\x25\xb3\xc9\xcd\x39\xbf\x5f\x39\xd0\x5f\x6a\x1f\xeb\xaa\xc5\xfd\x76\x51\x38\x25\xdd\xef\x23\x8d\xf8\x90\x4d\x0c\x8a\x63\x7d\x2e\xfb\x19\x7e\x19\x57\xc2\xfa\x8c\x76\xfa\xd7\x2b\x23\xd3\x70\xe3\x3f\x2c\xb4\xfc\x99\x04\x01\xfe\xb6\xf7\xfe\xf6\xe0\xe2\xd1\xed\xea\xad\xf8\xbf\x4c\x3a\xb2\xd2\xb9\x30\xbb\xb7\x89\x16\xe2\x0d\x8a\xdc\x8b\x9e\xc8\xf0\xbb\x30\xf9\xdf\x51\x94\xde\xa6\x41\x2c\x2c\xa9\xe2\x53\x9f\x1e\x10\xff\xb6\xb0\x6d\xeb\x4d\xc4\x8e\xca\x11\xcc\xff\x3e\x3f\x6f\xeb\x6f\x45\x45\xcc\x16\x82\xec\xeb\xd8\x64\x78\xbe\xd3\xfb\xa2\xa0\xe0\x3b\xa6\x53\x52\x24\x1b\xff\xea\xf5\x12\xfa\x76\x20\xd3\xb9\xfb\x12\xfe\xf0\xdf\xd9\xa8\x77\xd2\xec\x1d\x41\x4f\x94\xfc\xf6\x29\x0c\x40\x90\x4a\xfb\xb7\x7f\x62\x28\x8b\x51\x36\x76\x0f\xd0\x9f\xe1\x3b\xb4\x28\x0b\x9e\x5f\x60\xc7\x6f\xfb\x5c\xed\xe3\x5e\x5b\x57\x22\xa8\x0c\x83\x79\x00\xd8\xfe\x70\x41\x0b\xd1\xcd\x90\x7e\xf5\xf8\x7d\x74\x8e\x7e\xcb\xa1\xfb\x7b\x9c\x9c\x3b\xd1\xd5\x70\x7d\xd7\x83\xc1\x36\x8c\x6f\x43\xe6\x4b\x82\xd6\xee\xd1\x30\x64\x8d\x72\x76\x01\x67\x8c\x85\xa6\xae\x98\x78\x22\xee\x87\xf1\x8d\x36\xf1\x33\xb9\x60\x5e\xff\xdf\xf9\x37\xff\x50\xe7\x3f\x6f\xa3\xcc\xbf\xfb\x28\xb3\xd5\x7a\x7f\xf9\x10\xf3\x36\xec\xbb\xa9\xb0\x2f\x1f\xc8\x6a\xa1\x87\x6f\xf9\x48\xe2\x7d\x38\xf3\x17\xbc\xe0\x63\xc1\x4a\x51\x29\x3e\xc8\x05\x53\x45\x36\x9b\x09\xad\x98\x1c\xb9\x82\x07\x23\x59\x42\x62\x26\x43\xce\xf9\xbc\xfd\x8a\x8d\xa3\xb7\x56\x3d\x88\xa7\xb6\xa2\xae\xfd\x00\x6f\x6d\x36\x2b\xe5\x4d\x96\x1a\xba\xed\x10\xe1\x2c\xb1\xf4\x84\x6b\x36\xe4\x05\x1b\x08\x96\x51\x57\x6c\x96\x15\x5a\x32\x5e\xcc\x99\x37\x30\x17\x9e\xdc\x93\x42\x8b\x71\xc9\x6d\xa9\xd8\x7b\x16\x8b\x80\xf9\xad\x84\x2e\x1f\xb8\x2a\xbb\x6b\x21\xc9\x89\x27\xea\x1f\xe3\xe8\xbf\x1c\x2c\xfc\x17\x37\x34\x5b\x2f\xf1\x87\xd8\x44\x9f\x45\x5a\xf2\xfd\xa6\x8c\x25\x5a\x7f\x3f\x66\xdc\x27\x2e\x4b\x71\x6f\x34\x35\xc1\x86\x17\x2b\xc7\x0e\x57\xec\xa7\xbe\x4a\x55\xcf\x18\xa5\x1d\x38\xfd\xed\x3f\x1f\x77\x3a\xc9\x28\xcb\xb5\xd1\x7e\x8e\xe4\x50\x61\xc9\x58\x25\x4b\xfd\x74\xfe\xf8\x83\x51\x18\x1e\xff\x61\x2f\xa1\x9a\x45\x8f\xff\xb0\x9f\xa0\x89\x04\xff\xe4\x6a\x68\xbe\x34\x92\xf4\xf1\x1f\xf6\x3f\x3e\xdc\xe0\x55\x9d\x75\x90\xd0\x09\xd6\x90\xf6\x38\xf0\xd8\x98\x4d\xe4\x93\xb7\xef\x12\xf5\xe4\xed\xbb\x2f\x84\xab\xe6\x19\xb3\xa5\x7c\xab\xdf\x3d\x29\x96\x64\x03\x06\x18\xf3\x8f\x51\xab\x43\x9e\xe7\x5d\x19\x1a\x8a\xb2\xed\x15\xb2\xf7\x41\xf8\xac\x5e\x5b\xcc\xd1\x88\x51\x28\x1b\x12\x74\xaf\xa3\x48\x6a\xf2\x87\xfd\x5e\xa2\xde\xca\x25\xb3\x22\x38\xfb\xc7\x96\x09\xa9\x70\x42\xc6\x32\x2e\xd2\x6e\xe0\x0b\xf4\x8d\xfc\xe3\xde\xfc\x51\xbb\xef\xa4\x58\x48\x30\xd9\xfb\x50\x98\xa9\xe9\xe5\x59\xd4\x4b\x69\xd6\x34\xae\xdb\x66\x89\xcd\x6a\x65\xa9\x9b\x73\xfc\x40\xe4\x6b\x94\x11\x08\xb3\xe2\x53\xae\xf9\x63\x41\xfc\x7d\x39\x9f\x59\x91\x6e\xce\x46\x6b\x41\x00\x30\xf5\x50\xae\xb9\x76\xe5\x71\x59\x16\x7f\x50\x01\x71\x7d\x5b\xe4\x92\xa7\xcf\xb2\x1c\x3a\xc5\x2f\x4b\xc2\xff\xbf\x3a\xfd\x89\x9e\xfe\x6f\xf6\xde\x75\xb9\x6d\x1c\x5b\x14\xfe\xef\xa7\x60\x78\xaa\xdc\xe2\x09\x25\xdb\x49\xba\xa7\x5b\x7b\xab\xb3\x1d\x27\x3d\x9d\x99\xdc\x26\x76\xa6\xf7\xec\xc4\xd5\x05\x91\x90\x84\x36\x09\x70\x08\xd0\x8a\xda\x71\xd5\xf7\xeb\x3c\xc0\xa9\xef\x01\xce\x5b\x7c\xff\xcf\xa3\xec\x27\xf9\x0a\x37\x12\xbc\x93\xb2\x64\x2b\x3d\x9e\xa9\xea\x58\x24\x08\x2c\xac\xb5\xb0\xb0\xb0\xb0\x2e\x81\x8e\xb7\x2f\x84\x1d\xc8\x69\x66\xd5\xcf\x7f\x52\x4b\xb2\xaa\x06\x7b\x41\x74\x98\x26\x1b\xb9\x6e\x6d\x67\x2f\x2d\x7f\x0a\x9d\x2f\x5f\x06\x78\xc4\x17\xf2\xfe\xfe\x00\x4e\xe0\x48\xb6\xd1\xb1\x0b\x2e\x1b\x89\x7c\x04\xa7\xb2\x2a\xe9\x4b\x06\x43\xc5\x9a\xaa\xa1\x3e\x36\x08\x23\x8b\x92\x03\x85\x9e\x74\x46\xb3\x4e\x9d\xa5\x8d\x79\x7f\x4a\x98\x14\xfa\xd3\x45\x38\x3a\xf5\xa7\xba\x90\xfd\x71\x51\xf4\x54\xf4\x15\xc3\x4b\x18\x53\x28\x37\x1c\x3a\x68\xeb\xea\x6d\xac\x32\x6a\x71\xad\xd0\x71\xc6\xdd\x5a\x03\xde\xd8\x4c\x93\x63\x08\x52\xdb\x85\x4e\x6f\x2b\xcf\xd7\x5f\xb4\x58\xef\x2b\xcd\x3b\x65\xba\x11\xf5\x4f\xfc\x9c\x31\x7b\x61\x28\x9d\x21\x49\x24\xa5\xc9\xd2\x23\xd5\xda\x87\xaa\xf3\x3d\xa7\xb4\xf4\x32\x8f\x41\x97\x8d\xf4\x58\x26\xb5\xd3\xf1\x93\x30\x04\xb1\x30\x5b\x52\xf9\x67\x55\xab\xd7\x82\x84\xa2\xb3\x50\xfe\xb9\x40\x51\x55\x46\xe8\xc6\xb8\xa3\x2e\x53\x52\xcb\x75\xaf\x58\xe4\x3c\x3b\x79\x38\x6e\x29\x75\x76\xa1\x27\xba\x97\xcf\x7c\x5d\xb5\x41\x5d\xcb\x21\x70\x6d\x57\x5a\xac\xd2\x3d\xdc\xb5\x33\xd2\x02\x97\x92\x80\x60\x0a\x83\x97\xbe\xed\xec\x35\x07\xe0\x6c\xda\x42\x28\xc6\x1d\xff\x3a\x9a\x21\xce\xf4\x35\x1f\x88\x46\xd4\xbd\x42\xfe\x98\x5c\x3b\xf2\x9b\xfa\xee\x55\x6b\xf1\x8f\xe0\x5c\x2a\xfa\xe7\x72\x64\xc0\x72\x27\x02\x35\x55\x58\x40\xc1\x64\x32\xe1\xc3\xa4\x11\x47\xa9\x7e\x48\xc7\x38\xfb\xfb\x79\x0c\x66\x2c\xeb\x19\x67\x3d\xb3\x2c\x1d\x9a\x4e\x38\x35\x83\xde\xca\x0b\xa0\xe8\x1b\x8e\x5e\xe9\xdf\x23\xd1\xc9\x75\xa6\x81\xd2\x57\xe8\x12\xde\xb4\x53\xde\xc7\xb5\xe3\xea\xf3\x54\x3d\xa6\xd2\x16\x6e\x0c\x3d\x88\xd9\xb1\xef\x57\x8e\x5d\x42\x15\xf0\xfd\xf7\xe2\x0b\x11\xd6\x27\x3f\xfe\x20\x76\x8d\x6e\xdf\xcb\x1d\xc6\xe8\x82\x2e\xc8\xf2\x94\x81\x4c\x2d\xe1\xca\x70\x4c\x08\xff\x7d\x42\x12\xcc\xc6\x87\x6e\x26\x3e\xc6\x25\x89\x85\x44\xa2\xaf\x82\xf8\x28\x37\x4b\x05\x4b\xd6\x56\x09\x91\x8a\xb6\x5a\xbc\xc8\x8c\x5b\x33\xae\x2b\x4b\x23\x7a\xa6\x0c\xc3\x6c\x41\xba\x64\x02\x47\x85\x4f\x5d\x3a\x39\x74\xd1\xe4\xd7\x51\x08\xa2\x01\x71\x73\x19\x90\x0a\x0b\x18\x8d\x54\x72\x25\x3a\x30\x12\x00\x71\x4d\x83\x3e\x9c\xf0\xb5\xec\xc2\x91\x89\x8f\x09\x5d\x6b\x1f\xdc\x11\x43\x39\xa5\x53\xf4\xfb\xb3\xff\x3a\xaa\x4e\xeb\xad\x2d\x64\xf7\xf6\xf2\x5d\xb3\x97\x1b\x01\xf9\xdd\xcc\xe5\x66\x2b\x9d\x3a\x40\xca\xe4\x3f\x58\x5c\x56\x8d\xdd\x54\x2d\x3e\xc1\xd1\x65\x9e\x48\x5d\x66\xf4\x6d\x42\xde\x5f\x26\x15\xcf\x66\x88\x84\x9b\x53\xa3\x52\x91\x92\x77\xaa\xa9\xf1\xa1\xa9\x70\x7a\xa9\xcd\x61\xd1\xe4\x29\x93\x01\x96\x11\xda\x0c\xe1\xc8\x35\x36\xc0\xcd\x52\xe2\x9a\x5a\x7d\x2f\x77\x9b\xdd\x29\x54\x5c\x45\xe1\xf4\x9a\xa4\x96\xc2\x52\x39\x29\x10\xb7\xda\x2f\x3d\xf7\xb7\x50\x14\xcc\x07\x7c\x93\x17\xa9\x88\xd5\xc6\x9d\xfe\x2d\xf7\xe1\x22\x9f\x94\x34\xeb\xb2\x16\x6d\x9b\xfb\x8b\xd1\x40\x1e\x9c\x05\x7f\xe9\x33\xf4\x86\x99\x4d\x21\xa5\x0b\x9f\x75\xe2\xcf\x0c\x83\xf5\xaf\x24\x42\xeb\xdf\x0b\xfc\x96\x5e\x67\xe8\xae\x79\xa5\xb0\xdf\x69\x15\x14\xde\xa5\xb4\xa9\x6d\xa0\x49\x55\x1e\xdb\xa4\x5c\xcd\x9a\xac\x5d\x61\x29\x51\x3b\xdc\x21\x74\x58\x8d\x5b\x75\x6a\x2f\x70\x92\x9b\x2a\xed\x1c\xbc\x9e\x4e\x8e\x35\xf7\x8b\x62\x21\xcb\x0d\x30\x93\xed\x1f\xb0\x78\x8f\x66\x48\xee\xd0\x6d\x51\x06\x1b\x19\xfb\xe8\x07\xae\x02\xad\xb8\xc2\x55\xb1\x5e\xb8\xce\x30\x3f\x21\x01\x89\xed\x34\x3c\xe4\xa8\xa6\x61\x43\x49\xdd\x12\xb6\x8d\x82\xe0\xb9\x6e\x4e\xb5\x28\xcb\x0a\x83\x1f\xf5\xaa\x23\x5b\x17\x9d\x22\x82\x65\x8c\xa9\x0f\xfd\x98\x44\x3e\x59\x62\xab\x35\x52\x45\x68\x1c\xa2\xfc\xc0\x73\xb2\xc4\xea\xa2\xaf\xac\x92\xa9\xd2\xe3\x11\x89\xc8\x25\x34\xa4\xb3\xc6\xfb\x02\xf9\xf0\x2d\xef\x8f\x1f\x43\xc4\x1f\x88\x9e\x2e\x78\x8f\xae\x1d\x05\xc0\x83\xda\x31\x55\x19\x8d\x64\x7f\x30\xe6\x3d\x46\x82\x0d\x3d\xae\x26\x59\xe2\xbf\x24\x61\xfa\x81\xad\xf4\x36\x7b\x4a\x18\x23\xe1\x30\x44\xbe\x1f\x08\x42\xf4\x29\x20\x91\x04\x45\x3e\x09\x21\x4e\x2a\x75\xcf\x5c\xdd\x8a\x2a\xea\xd5\xc6\x38\xd5\x95\x17\x96\x05\x16\x50\x85\xbc\x4b\x97\x20\x5a\xb3\xa2\x70\x6e\x9e\x4f\x64\x21\xd6\x21\x23\x65\xf2\x28\xe3\x9d\x1c\x59\x04\x0d\x89\xd8\xaa\x14\x06\x9d\xcd\x55\xca\xad\x38\x06\xab\x0a\xd0\xe5\x2f\x61\x38\xce\xa0\x2d\x13\xe2\x28\x6d\x9a\x5f\x33\xed\xce\xd8\x5d\x63\x8d\xea\x8b\x44\x54\xde\xf6\xb7\xab\xba\xfd\xbf\x6c\x54\x8f\x6e\x70\xf3\xaf\x0b\x8a\xd7\x30\x4a\xe6\x2b\x53\xf9\x5a\xd6\xed\xae\x67\x33\x8f\xe0\xce\x57\xf9\x4a\x2b\x4b\x77\xf3\xa1\x08\xd3\x2f\x5d\xe5\x53\xd3\x6f\x5d\xab\x68\xf5\x9a\x59\x6a\x21\x2f\x68\x42\xf9\x1b\x15\xa3\x52\x6f\xee\x91\x79\xa3\x96\x61\xa9\xac\x0a\xdf\x48\x95\xea\xab\x32\xa9\x29\x6d\x4e\x43\x28\xe0\xa2\xc3\x17\x05\x54\x75\xac\x6f\xdb\xee\x57\x7f\x77\xfe\x0c\x37\xa8\xbe\xaa\x7a\xf8\x9a\xef\x2b\xb6\xeb\x08\xa0\xb1\xda\xdc\x3c\xb5\x73\x39\x2e\x95\x17\x4e\x35\x0d\x6d\x65\x4e\xae\xbf\xfa\x97\x3a\xd4\x0d\xea\x5d\x14\x4c\xe4\xdd\xeb\x55\x54\x24\x17\xfe\x49\x3c\x2a\x55\x06\xa8\xad\x51\x91\x56\x99\x30\xfd\xb3\x8b\xfd\x52\xc8\x4e\x64\x0a\x72\xdd\x7d\x65\x5f\xf9\xaa\x14\x59\x3d\x88\xf4\xa2\xa5\x35\x77\x73\x55\xd9\x87\x2e\x85\x1d\xea\x0a\x4a\x54\x14\x59\xc8\x4c\xf5\x6d\xc9\xc3\x83\xe0\xd9\x4a\x68\x45\x03\x98\xab\x43\x92\xb7\x9a\x4b\x8f\x89\x3c\xcf\xa9\x4a\x0d\xe0\x12\xfa\x67\xba\x75\xbe\x13\xf3\x86\x22\xbb\x5b\x48\xdd\x9e\x05\xa8\xb5\x75\x1c\xb8\x9e\x4b\x02\x38\x0a\xc8\x7c\x00\x1d\x77\x1b\x65\x1d\xb4\xd1\xe2\x8f\x97\xf2\x71\xcb\x4e\x45\x2d\x19\x25\xb7\x92\xc1\x31\xa7\xe4\xb6\xe6\x6f\xdc\x72\xee\xc3\x22\xe7\x7c\xcd\x1b\x55\x58\x21\xcb\x37\x70\x4b\xec\xae\x79\x75\x5a\x93\xe1\xb0\x78\x8d\xdc\xfb\x8a\xb5\xcf\x3d\x60\xa7\xab\xd5\xde\x41\x1a\xbb\x96\x0d\xf0\x18\xbc\x89\x67\xdf\xb2\x8b\xfb\x38\x8d\xaf\xe4\xde\x69\xfd\x38\x8d\x8a\xc3\xe7\x7d\xa0\xc6\xd7\x16\xa8\x21\x4e\xe6\x56\x28\xa2\x2c\xf4\xe9\xf9\x3e\x51\xdf\x5d\x27\xea\x7b\xad\xac\x3d\x5f\x5f\x72\x3e\x99\xb3\xee\x3e\x3d\x5f\x47\x1a\x15\xee\xae\xb6\x4f\xa6\x9c\xa5\xea\xae\xe9\xb4\x4e\xe2\xb4\xce\x54\x7a\x97\x9b\xe9\xcd\xc8\x54\xb4\xef\x6d\x9f\x4e\x2a\xfa\xfa\xce\x49\xa4\x02\xcc\xb6\x9b\x8f\x54\x0f\x72\x43\x2a\x69\x9c\xed\x54\x6e\xc5\xa6\xeb\xa7\x1b\x73\x09\x88\xbd\x05\xba\x34\xac\xc7\x77\x59\xb3\xfc\x58\x02\xb3\xa5\x42\xe5\x87\xe9\x00\xbe\x75\x92\xe9\x4d\xeb\x57\x21\x97\x3c\x93\x61\x70\xb3\x19\x10\x85\x5e\xf5\x76\x89\x61\x7c\xcb\xa5\xed\x35\x6b\x88\xb0\x96\x1b\x27\xc9\xdc\x10\x6b\xe8\x12\x2e\xdb\xe2\x8c\xe7\xd9\x64\x6f\xcc\x11\x19\xe2\x36\x75\x5b\xd8\xfc\xbc\xca\x9d\xee\x2b\x4f\x6d\x58\xb0\x4d\x94\x13\x1b\x56\xac\x15\xc3\x57\xa9\x69\x65\xf5\x77\x7c\xda\x5a\x1e\xb7\xb2\x26\x75\x33\x2c\xe5\x90\x52\x8d\xa9\xb4\xee\x75\x76\xf8\x6e\x70\x16\xeb\x80\xb7\x16\x84\xae\xef\xac\xb4\xa1\x64\x84\xd9\x95\xeb\x26\x30\x6c\x5c\x3f\x37\x73\xa2\x39\xee\x26\x98\xd1\xbc\x3a\xde\x16\xae\xf2\x1a\xe3\xcd\x10\xa5\xfa\x6a\xc4\xd2\x9a\x98\xd9\xf4\xf4\x6f\x35\x3d\x76\x37\x2d\xac\xbb\xcf\x56\x45\x32\x40\xe1\xac\x95\xf6\xd8\x44\x81\x1b\x93\x62\x13\x24\xda\x60\x76\x57\xb4\xa9\x65\x5e\xce\xee\xba\xab\xd8\xeb\x83\xa5\xa2\x42\x77\x33\x1c\xc9\xa8\xe7\xaf\x06\x43\x77\xe5\x6e\x72\xb3\x2c\x8d\xaa\x93\x1d\xb9\x9a\xf1\xbd\xe0\xbf\xfc\xa3\xb7\x7f\xbd\xbb\x1c\x8d\x05\x7c\xac\x81\xcb\xfa\xfb\xf4\xdf\xc4\x05\x71\xc5\xc5\x3a\x48\xd8\xa2\xe2\x71\x48\x7c\xa1\xde\x9a\xb7\xa3\x2e\x76\xc9\xa6\x88\x41\x6b\x2f\xdc\x71\x7a\x4d\x4a\xb2\x0b\xd3\x4d\xd6\x53\xf4\x48\xb4\xd2\xde\x13\x22\x1f\x06\x89\x56\x99\x35\x4c\x3f\x31\xc3\x01\x17\x80\x9e\x04\x04\xeb\x9e\x3d\x12\x46\x09\x83\xfe\x08\x13\xf6\x22\x8c\xd8\x6a\x60\x7b\xfc\xb5\x2f\x9c\x3a\x64\xb6\x02\xe3\x81\xca\xc2\xa1\x8e\x97\x7f\x47\x70\x39\xb6\x41\x10\xd8\xe9\x23\x15\x2a\x2a\x9a\x45\xc9\x34\x40\x5e\xee\x89\x4c\x5f\x5c\x68\x06\x63\x4a\x30\x08\xcc\x67\x32\x89\x82\x47\xf0\xd8\xb6\xe5\x0f\x11\xf7\x94\xfe\x7a\x0e\xa9\x97\xfe\x90\xfc\x97\xf3\x0a\x38\x5d\x90\xe5\x6b\x4e\x76\x7d\x83\x2f\x78\xe0\x6d\x04\xf1\xc0\xfe\x1f\xc0\xf7\x87\x72\xf3\x95\x9c\xe1\x5e\xd1\x05\x59\x72\x02\xbb\xf6\xff\xc0\x70\xa9\x5e\xca\x8b\x68\x91\xe8\x92\x23\x40\x80\x77\x2a\xa6\x99\x77\x1b\x30\xd0\x93\x96\x7f\x84\x8c\x03\x9f\x6f\x97\xce\xc9\x68\x25\x66\x55\xd1\x4c\x45\x79\xc9\x76\xc7\xbe\xaf\x5c\x6c\x9c\x2b\x38\x8a\x62\x78\x29\x4a\xa5\x0a\x76\x1a\xe4\x62\x9d\xe7\x69\x07\x6f\x64\x12\x05\x52\x7c\xfe\x5c\xe4\x11\x70\x69\xf1\xb9\x80\xcb\x71\x51\xf1\xf9\x2b\xe5\xb7\x05\xcc\x78\xed\x02\x83\xec\xa1\xd9\xe0\xd7\x11\xa2\x92\x7f\xb0\xa3\x5c\x6d\x06\x87\x6e\xea\x26\xe0\x0c\xca\x98\x1d\x01\xdf\x3f\xe1\x87\xfc\x81\x8d\xe8\x10\xe1\x4b\x10\xf0\xde\x46\x33\xe2\x25\x74\xe0\xb8\x0f\x8e\xc4\xd4\x82\x89\xcc\xf6\x82\x65\x3e\x17\xe2\x22\xce\x16\xea\x92\xfd\xa5\x3f\x46\x92\x3f\x5f\xfa\x63\x90\x5f\x0e\x66\x80\x79\xf6\x58\x2d\x1a\x63\x91\xe4\xdb\x65\x2f\x54\xcb\xe7\xb9\x02\x87\x69\xbb\xd4\x73\xd2\x51\x09\x3b\x68\x1e\xf7\xae\x9d\xcb\xc0\x90\x21\xbf\xea\x85\xb2\x9d\x94\x5f\xe8\x68\xbf\xdc\x9b\x1c\xc3\xf1\xe5\xe2\xb8\xad\xb8\x8e\x61\x48\x2e\x61\x05\xba\xdd\x6c\x79\x9c\x04\x84\xc2\x8a\xf5\xd1\xe4\xf5\x06\x7c\x7f\x10\x54\x26\x24\x69\xf5\x8f\x83\xaa\x5f\xd3\x4f\x47\x38\x99\x64\x0e\x77\x30\x57\xc2\x5e\x72\xa5\x48\x5a\xa2\xb2\x91\x64\xcb\x91\x2e\x11\xf3\x16\x03\x03\x7d\x86\x8c\xe2\x0b\xc9\x85\xce\x95\xb8\x26\xe7\xe2\x6a\x5c\x6e\xa7\x03\x33\x8a\xb9\x52\x94\x7e\xe4\x38\x7b\xd3\x18\x82\x8b\x3d\xd1\x87\x94\x6c\xdd\xba\x31\xa5\x60\xb1\x1b\x2d\x0e\x3b\xf6\x94\x97\x9e\xc5\xce\x94\x18\xed\xd8\x57\x4e\xe8\x66\x5d\x29\x1e\xea\xd2\x87\x4c\x23\x92\xdb\xd3\xe9\xb5\xb3\xd7\xbc\xa7\x7f\xcd\x9e\x4e\x9b\xdc\xb8\xb9\x10\xab\xf7\x96\x45\x52\x1a\xb7\x7b\xd6\xad\xe9\x77\x9b\xf1\x81\x9a\x13\x27\x75\x12\x89\x52\xe4\xce\xfe\xfe\xa0\x2e\xa7\xcf\xc8\x0b\x20\x88\xa5\x8f\x68\x85\x23\xa5\xe8\x44\x54\x0f\x6e\xab\x43\x2b\x57\x55\x17\x57\xd4\xae\x4e\xa0\x62\xec\x4c\x03\x93\x7c\x21\xbe\xfa\x95\x26\x91\x7a\x50\xcc\x67\x95\xf2\xb4\x5a\xe6\xa5\x06\x52\x7a\x08\x99\x51\xde\x68\xcd\xbc\x25\x69\x2e\x2f\x17\x4d\x3e\x9e\xef\xfd\x3a\x82\x80\x8b\x23\xd5\xaf\x2b\xb3\x8b\x64\xdb\xea\xd9\x2a\x92\x19\x27\xf0\xe8\x54\xff\x1e\xbd\x13\x92\x62\x7f\x9f\x8c\xa2\x84\x2e\x24\x4f\x0b\xdf\xd5\xd6\x0f\x63\x74\x09\x18\xdc\xdf\x47\xfd\xbf\x54\x22\x65\x7f\x9f\xe6\xbf\xbd\x76\xdc\x74\x12\x2a\x17\x08\x9e\xfc\x78\x25\x73\xa1\x64\x99\x40\xf4\x04\xaf\xf4\x76\x8c\x33\x91\x7d\x9d\x26\xe7\xf6\x64\x30\x2c\x19\xc9\xa8\x37\x8d\x66\xa3\xad\x4b\x64\x76\x86\x6c\xeb\xab\x22\x8b\x8e\xfb\xd5\x20\xa5\x2f\x72\x42\xd6\x25\xd9\xf3\x82\xc8\x74\x8d\x4f\xf2\x12\xd0\x45\xe9\x1b\xbe\xfa\x5e\x89\x48\x97\x8c\xd6\x6a\xbd\x2a\xa7\x65\xbd\x67\xf3\x56\x03\x47\xb9\x20\x73\x12\xb4\xa5\xc9\xd1\x61\xfb\x3d\x7d\xff\x76\xc6\xe7\xef\x32\xfc\x7c\xe6\x25\xa8\xfa\x60\x99\x3a\x9e\xe5\xfc\xd0\xd6\xf0\x04\xb4\xff\x43\xaf\xbf\x97\x0c\x86\x22\x54\x8d\x66\x91\x77\xb7\xee\x20\x78\xfb\x19\x10\x4a\x46\x22\x12\xa7\x46\x22\x15\x89\x21\xc2\x2b\x5f\xc8\xe4\xaa\x59\x1c\x92\xf1\xee\xd8\x0f\x51\x27\x83\xe7\x1d\xb8\x3c\xe6\xaf\x55\x2b\x67\xd4\xf9\x22\xb5\xb3\xcb\xa4\xe2\x4a\x4f\x04\xfb\x56\x7a\x49\xd6\x5e\x6a\xbe\x0b\x12\x5a\x6d\x6c\x3e\x51\xbd\xfd\x39\x86\xb0\xc6\x1e\x9d\xcb\xd8\xd1\x72\xd9\x92\x9e\x5b\x1b\x03\xb2\xaa\xa6\xff\xb8\x38\x7d\x1f\x5d\x22\x5f\x06\x19\x74\x36\xc0\xd5\xd3\x25\xcf\x4d\x37\x21\x8b\x24\x43\x0d\x51\x78\x23\x86\x22\x5b\xc6\xb1\x9e\x91\x46\xaa\x18\x9e\x79\x5d\x28\x23\x09\x60\x65\x95\x10\x6c\x2f\xa1\x8c\x70\x59\x6b\x6f\xc2\x0e\x7e\xef\xd8\x7a\x47\x8e\xad\x52\x17\xd9\x4d\x77\xd6\x9c\x22\x29\x6e\x90\x82\x1d\xf0\x69\x3d\xe6\x40\x6c\xc5\xcf\xeb\x38\x08\xac\x81\x5d\x91\x44\x81\x96\x13\x1f\x18\x0b\xce\xb9\x81\x47\x98\x34\x02\x28\x2d\x7d\xbb\x2e\x7b\x25\x6a\x2a\x43\xc0\x9d\x13\xf4\x17\x12\x07\x5b\xf3\xae\x14\x73\xcc\x53\x35\xaf\x6f\x6f\x91\xa6\x1a\xc1\x4d\x8e\x7e\xf9\xbd\x2a\x67\x35\xb8\x65\x8f\xac\x32\x7f\xa4\x16\x9e\x5d\xf0\xcd\x7a\x07\x49\x14\x6c\xd1\x37\x2b\x3d\x4d\x16\x98\xa5\x78\x08\x5b\x8b\x5f\xba\xb3\x4c\x86\xf3\x9e\x6b\x60\x03\xf4\xd6\x46\xb8\xdd\x20\x37\x07\x66\x8b\xe4\x56\x93\x2d\x50\xbb\x70\xae\xde\x32\xb1\x53\x84\x6f\xdf\x85\x2f\xff\xea\x5b\xad\xd8\x8a\x9d\x2d\xce\x8e\xae\x42\x9f\x74\x3f\xda\x8f\x0f\x0f\xcd\xf3\xea\xad\xab\x45\x59\x06\xa4\x26\xc1\x99\x39\xcf\xf5\xd1\xec\xbb\x6a\x53\x76\x45\x46\x9d\xb6\x11\xab\xf2\x28\x3d\x71\x1f\x0b\x1e\x57\x99\xb9\x0e\xd7\x4e\x94\xb3\xe9\x15\xaf\x41\x33\xd3\xf7\xac\x5d\x79\xbc\xe7\xd2\x97\x79\x9e\xc4\xd1\xa9\x31\x44\x66\x01\xbd\x8b\x29\xf9\x9c\x13\x04\xbc\xef\x34\x2b\x96\x9c\xc2\x74\x3e\x2b\x65\xc2\x6a\x2f\x57\xde\x59\x60\x1c\xa5\x03\x15\xf3\x68\x1d\xba\x76\x26\x42\x0a\x94\xee\x25\x32\x7a\x08\x8e\x3c\xdd\xd6\x4d\xf9\xf3\xb8\x29\x0b\x51\x87\xf3\xde\x8d\x56\x1b\x0c\x23\xb6\x32\x96\xdb\x1b\x62\x65\x6e\xb5\x1d\x0f\x9a\x4d\x22\xb0\xfc\x70\xdb\xde\xca\xc6\xb8\xfd\xd3\x26\xf1\x46\x99\xb9\x20\xf3\x15\x54\x62\x51\x9b\x08\xb2\x17\x21\xa4\x14\xcc\xc5\x2b\x16\x27\xb0\x5b\x4a\x24\x79\x8c\x51\xbe\x7b\xf9\x74\x48\xd9\x09\xa7\xe0\xdc\x5c\xb8\x6d\x48\x41\x69\xf0\x5b\xee\x70\x00\xd7\x5e\x2d\xe2\x21\x03\x53\x95\xbe\xcb\x96\x76\x4b\xfe\x30\x26\x12\x3f\x08\x04\x64\xae\x1f\x22\x9f\xeb\xc8\x85\x1b\xde\xbe\x87\x77\xf1\xd5\x50\x76\x6c\xc9\x1f\xc1\xbc\x38\xac\x91\xa4\xa9\xef\x56\x26\xbb\x6c\x36\x2d\x74\xeb\x83\x73\x8d\xb4\x0d\xe8\x55\x02\x97\xd6\x69\x53\xf1\xb0\x6e\xfd\x8a\x1a\xa2\xdd\xce\x76\x33\x12\x87\x5a\x9c\x13\x4c\x93\x69\x88\x98\xdd\x58\x62\x4a\xf9\x7b\xd8\x79\xbd\x6d\x2d\x95\x8d\x0f\x3e\x9c\xc7\x24\x89\xda\xa0\xcd\xf5\x94\xe9\x0e\x47\xa2\x0f\x2e\xcb\xf3\x2e\x05\x06\x46\xd5\xcf\x8e\xa2\x59\x2d\x24\x84\xa3\xc4\x58\x3c\x6c\x15\x41\x5b\x71\xa7\x86\x5d\x24\x0d\x5c\x68\xef\x77\x71\x73\x21\x14\x2b\x51\x37\xae\x04\x90\x9a\xab\x72\x1a\xb3\x42\x92\x50\xc8\x62\x10\x69\xcb\xab\x25\x5b\xa9\x25\x99\xfa\x69\x54\xaf\xbe\x46\xe4\xd0\x50\x1a\x71\xca\x88\xe6\x90\x59\xfc\x3f\xc3\x30\x91\xdb\x7f\x1a\xff\xb6\x00\x31\xf0\xb8\xd4\xb4\x00\xf6\x2d\x9c\x88\x1c\xa4\x16\xc1\xc1\xaa\x0b\xee\x1a\x74\xd1\xdb\xe1\x83\x34\xfa\x86\x7a\x31\x8a\x3a\x05\xe0\x94\x48\x2e\x1c\x7b\x86\x05\xc2\x0b\x8a\x2b\xea\x4b\x12\xd7\x31\x00\x48\x18\xf1\x48\x18\xc9\xf8\xa2\x34\xdb\xa5\x12\xff\x92\x29\x0c\xea\x3e\x57\x89\xf0\x72\x6c\x91\x32\x83\x6f\x4c\xc4\xb5\xc9\x6c\x56\x61\x02\xde\x69\x4a\xbc\xf4\x7a\x91\xa0\x1a\x96\x04\x09\x73\xfc\x30\x42\xde\x45\x4e\x4a\x76\x52\xf8\xca\x29\x35\xbb\x1d\x00\xd2\xfb\xd5\x7e\xc6\x99\x1a\xbc\x54\x67\x42\x6d\x57\xe4\x53\xbf\x2b\xa5\xc5\x3f\x92\xe9\x47\x6e\xac\xc1\x57\x71\xbe\x3c\x28\x0a\x54\x8b\xec\x8e\xf9\xeb\x8f\x73\x29\xff\x25\x00\x9d\x85\x51\x6e\x9c\x06\x7d\x97\xc9\x63\x80\x31\x42\x8b\x76\xf8\xa8\x25\xb5\x66\xfd\x52\x58\xbf\xd9\xae\xac\xaa\x57\x15\x67\xe6\xde\xab\xc0\xcc\xc2\xbb\xde\xca\xaa\x61\x6a\xd1\xa5\x85\x09\x86\xed\xac\xad\x66\x62\x24\x74\x6e\x66\xea\x37\x04\xc3\x36\x4e\x4a\xbd\x11\xab\xcd\xb1\xbd\x4e\xf9\xad\x4b\xbc\x0b\x2a\xba\x63\x21\x97\xc8\xb6\x19\x21\x85\xa3\xf1\x91\x38\x1a\x1b\x07\x63\xfe\x5e\x9d\x3d\x0a\x59\x6e\xfb\x89\x88\xec\xc4\x5b\x4e\x94\xdb\xad\x93\x8e\xf4\xca\xcf\xbd\x6d\xf9\xb7\x65\xd6\xfd\x8a\x16\x75\xa6\xbc\x0a\x97\x59\xa5\x2d\xea\xc4\xd8\xa6\x76\xc6\x5f\x77\x39\x16\xd4\x0b\x77\xaa\x0c\x0b\x39\xbd\x26\x3d\xfa\xda\x51\x4c\xc2\x48\x5c\x52\x79\x5a\xe7\x10\xca\xc7\xdf\xb9\xca\xf3\x0e\x88\xb8\x05\xf9\x44\x10\x4d\x3d\x91\x9d\x2a\x65\xab\x7a\x12\xa6\xca\x23\xce\x96\xea\x23\x55\x21\xb9\xb1\xe8\x6d\xc1\xad\x3d\x13\x14\x02\x78\x53\x5f\x36\x5d\x8e\x6f\xaa\x31\x8b\xce\x61\x08\x50\xf0\x33\x0c\xa2\xbe\x7a\x34\x89\x56\x56\x96\x69\xcd\x32\x53\xb4\xa5\x25\x8d\xa9\x35\x8b\x49\x68\xc1\xcf\x88\x32\x84\xe7\xcd\xc5\xa2\x3b\x73\x63\x08\xe2\x39\xc2\x43\x46\xa2\xe1\xd1\xa1\x5d\xb6\x90\xd9\x25\xdb\xaa\x8e\xb5\x58\x57\x0a\xda\x66\x4e\x32\x4f\x9b\xf1\x32\x83\x43\x26\xbd\x52\x27\x09\xc3\xd1\xfd\xbc\x2a\x33\x77\x09\x85\xed\x11\x6b\x9b\x06\xd0\xf0\xb0\x6f\x04\xb1\x10\x79\x76\xbb\x40\x66\x89\x91\x9b\x40\xcc\x95\xc8\x58\x37\xb5\x79\xbd\x9c\x6d\x65\xd9\x76\x1b\xc6\xfa\x16\x8e\x19\x21\xac\x5d\x73\x29\xc9\xc1\xa2\xd7\x55\xea\x6e\xa5\xfc\xc8\xb4\xdb\x95\x8f\x28\xa7\xae\x5d\xe9\xe0\x93\xf9\xee\x80\x95\xb6\xcf\x35\x78\x56\xe9\xea\xdd\xf5\x86\xbc\x3a\xb0\x1f\xe7\xc1\x1e\xce\x41\x54\x72\x98\xda\xe0\xa4\x1b\x7d\xcd\x4a\x0e\x4b\x2d\xb3\x4e\xeb\xa7\x74\x37\x24\x75\x72\x26\xab\xf7\xa1\xd9\x56\xa2\x8b\xad\x05\x75\xae\x19\xcc\xf9\x5b\x12\x46\x8c\x7c\x55\xe5\xd0\x15\xc8\x5f\x73\x78\x45\x80\xf0\x45\x43\x20\x03\xc2\x17\xb6\xe3\xf2\x79\x9e\x91\x57\x08\x5f\x8c\x6d\xdb\x8c\x6a\x18\xa7\x20\xcb\xb2\x82\xaa\xc0\xa8\x91\x41\x5c\xa2\xc8\x76\x46\xfc\x8f\x5f\x91\xbf\xd7\x5c\xd3\x95\xe5\xa2\x99\x14\x70\xba\x96\x2b\x07\xe0\x43\x1c\x0c\x60\x31\xf4\x49\x38\x90\x67\x40\x8a\xc8\x23\x36\x30\x13\x7c\xd7\x00\x3a\x2f\x7c\xe8\xec\x2d\x11\xf6\xc9\x72\x14\x10\x4f\xf8\x46\x8f\x16\x31\x9c\x4d\x60\x57\xc7\x71\xc5\x10\x3b\xe2\x37\xfe\xf0\x6f\xf1\xe9\xc3\x6f\x8f\xbe\xed\x14\x90\xbc\xce\x7a\x2f\x4c\xb7\xd7\x72\x4f\xd3\x7f\x7f\x55\x2b\x3e\x83\xfa\x6b\x5e\xf4\xf9\xb8\xa4\x2c\x90\xc2\x5c\x25\x66\x14\xcf\x68\x34\x02\xf1\x5c\x2a\x5d\x2a\x06\x49\x85\x59\xa4\x41\x16\xbf\x20\xb6\x20\x09\x3b\x4d\x66\x33\xf4\x79\x60\x1f\x2f\x5d\xeb\x14\x83\xe8\x41\xf7\xa0\x8b\x0c\xb5\x3b\xb2\x7c\xd0\xfc\x9f\xcf\xdf\xff\xf6\x97\xcb\x6e\xf1\xfc\x35\x77\xf1\x69\x92\xfb\xa2\x4a\xa7\x34\xc1\x85\x99\x11\xf9\x2d\x89\xe8\x03\xeb\x6c\x01\x98\x15\x81\x39\xb4\x3c\x92\x04\x3e\xfe\xf4\x0d\xb3\xa6\xd0\x12\xdd\x8c\xaa\x36\x79\xd1\x91\x79\x5a\x7f\x0d\x56\x53\x68\xb1\x05\xef\x41\x66\x00\x5c\x91\xe4\xd3\x37\x31\xb4\x02\x42\x2e\xf8\xe1\x6c\x46\x62\x0b\x51\x0b\x13\x2b\x20\x78\x0e\x63\x0b\x5c\x02\x14\x80\x69\x00\x9f\x76\x1a\xe1\xff\xfe\x9f\xda\x66\x40\xe3\x80\x8b\x4e\xdb\xb5\x0f\x8c\xcf\xde\xab\x74\xe5\xc4\x7a\xae\x68\x6f\x2d\x48\x08\xc5\x6c\xed\xf2\xc1\xae\xf8\x73\x0b\x29\x13\xca\x5c\xd7\x4b\x8a\x45\x31\x99\xa1\x00\xee\x86\x0c\x4b\x68\x5b\x24\x64\x22\x22\xa3\x9a\xeb\x8a\x38\x59\x48\x3f\x05\x97\x22\xfe\x9d\xef\x98\x6c\x02\x47\x11\xa0\x74\x49\x62\xdf\xc5\x13\x38\xf2\x08\x9e\xa1\x38\x14\xdb\xe4\x5e\x29\x0f\xbd\x01\x8b\xed\x8c\x44\x47\x59\x66\x76\xb5\x7f\x0f\x9c\xc9\x8f\x57\x0a\x06\xfa\x2e\x86\x14\x62\x36\x60\xce\xfe\x7e\xf1\x19\x76\xf6\xf7\xeb\xba\x96\xf5\x98\xdf\x29\xc8\x06\xc5\x48\x62\x19\x6d\x9d\x05\x5c\xc3\x60\x24\xb3\xa5\x31\xf8\x12\x23\x86\x40\x40\x07\x66\xa8\xb5\x76\x69\x75\xa4\x52\x21\x10\x66\x7c\xdc\x16\x3d\x2d\x4b\x2e\xf7\xe5\x9e\xaf\x79\x2f\xe9\xcc\x74\xbd\x22\x75\x5b\x38\xb4\x46\x05\x2d\x91\x71\x94\xf7\x4b\x76\xbe\x7c\xa9\x08\xa0\xe5\x6d\x46\x01\x99\x23\x6c\x57\xa9\x8b\x2d\xac\x3d\x87\xec\x03\xcd\xd5\xb5\xd1\x63\x57\xc2\x30\xe2\x5f\x0b\xae\xcc\x55\xe6\x1e\x9b\x82\xa2\xc3\x06\xab\x62\x4c\x67\x49\x10\xa8\xd2\x0d\x3d\x83\x71\x55\x84\x40\xf6\x20\x2d\xb7\x53\x1d\x1d\x3c\xf2\xcc\x34\x02\x7c\xbc\x8e\xdb\xba\xe6\xf1\x1d\xd9\xd4\x8f\x56\x41\x7c\xf6\xf3\x4b\xff\x6e\xeb\x27\x98\xe6\x79\xfb\x3e\xe4\xa8\xa3\x6f\xed\xbb\xf7\x6f\x7f\x7a\xf9\xea\x45\x8b\xbd\xa4\xa6\x2f\xf8\xb9\xd9\xa7\xe9\x14\x0a\x2d\x29\xb6\xb4\x73\xb3\x85\xf0\x8c\xa8\xfd\xcd\x22\xb1\xc5\xf7\x22\xdd\x44\xed\x36\xa3\x8e\xe6\x9a\x9b\x41\xf6\x33\xb8\x84\x16\xb0\x22\x99\x61\xcf\x42\x3e\x04\xae\x45\x93\xf9\x1c\x52\x0d\x1b\xe5\x4a\xd4\x0c\x42\x7f\x0a\xbc\x8b\xa7\x56\x8d\x26\x16\x02\x14\x30\x32\xa6\x49\xc4\x97\xdf\x7f\xe8\x75\x3a\xf2\x48\x68\x00\xf0\x67\xc8\x2c\xc4\x75\xb4\xc4\x5b\x54\xa8\x9b\xb7\x62\x9b\xba\x53\x9f\xc6\xcc\x3d\x20\x1f\xe3\x22\x75\x81\x4c\xe6\xf2\x09\xbc\x16\x85\x1d\x14\x57\x48\x49\x27\x5c\x8d\x34\x87\x74\x0a\x14\xe8\xe4\x03\xc9\x47\x3f\xe0\xff\x19\xaa\x71\x32\xf8\xd3\x68\x2f\x70\x59\xca\x25\xd7\x64\xab\x54\xed\xeb\xad\x94\xb7\x6d\x3f\x2c\xee\x15\xbd\x54\x71\x0a\x41\xec\x2d\x76\x43\x13\xef\x55\x6b\x6b\xa6\x8b\x94\x87\x80\x79\x8b\xe7\xc4\xd3\x7f\x9e\xa4\x17\x99\xe2\xe7\x19\x98\xeb\x3f\x7f\x12\xf4\xb7\xa9\x74\x31\x95\x1d\x8c\x6d\xdb\xd5\x3d\x8c\x1f\x1c\xba\x66\x17\xe9\xef\x33\x30\x4f\xff\xe6\x9d\xf0\x1f\xbc\x97\xf1\x83\xa3\x7e\x68\xfe\x9a\x55\x56\x3d\x7b\x8e\x34\xb1\x86\x4c\x7b\x48\x7a\xdc\xb9\xca\x90\xf9\xe0\xd7\x11\xa2\x1f\xb0\x04\xcb\x1f\xc0\x11\x23\x23\x83\x86\x23\xdd\xd2\xf9\xf2\xc5\x66\x71\x02\xed\xc9\xa4\xb6\x4d\x81\x2e\x9d\xba\x56\xad\x5b\xbb\x57\xed\x0c\x52\x77\xea\xfe\x0c\xcc\x5b\xbb\x3e\x03\x73\x93\x6b\x3a\xf5\xcb\x9b\xb6\x76\xcc\x1b\x29\x16\x6c\xe9\x93\x37\x72\xf6\xf7\x75\x77\xe5\xfe\x78\x03\x33\x2f\x98\x41\x67\xae\xe9\x96\x34\xe4\x71\x9e\xf9\x3a\xab\xca\xf9\x7e\xb3\x03\xa7\xf1\xb8\x5f\x7a\x12\xb1\xa4\xba\x5b\xca\xd4\x12\xdc\x11\x8d\xfa\xf2\xf3\x7f\xbe\x7f\xfd\xe1\xef\x1d\xd3\x5e\xae\x97\x87\x44\x22\xe8\x5e\xd1\xbe\x25\x45\xfb\x35\xe7\x64\xeb\xa7\xdb\x8b\xf0\x37\x3e\x45\x8a\xe8\x1d\xef\xbf\x1b\x1c\x9b\x85\xd7\x81\x74\x31\x50\x1c\x34\x3c\xd2\x8f\x85\x33\x82\xd2\x93\xcc\xd5\x9c\xed\xc1\xdd\x1c\x6e\xea\x9d\x9f\xd2\x11\x9b\xc3\x39\xb5\xcb\x83\x85\x5b\x1d\xfa\xd7\xf5\x2c\xd8\x2a\x46\x1f\x75\xc3\x68\x5a\x51\x64\x33\x58\x7d\xd4\x15\xab\x5e\x97\x4a\x26\x3b\x89\xd8\xc7\xdd\x10\xcb\x95\xc2\x0d\x21\xf5\x71\x0b\x52\xcf\xc0\xfc\x6b\xe5\xd2\x27\xdd\x90\x29\xd4\xea\x0d\x61\xf3\x49\x0b\x36\x8f\x19\x03\xde\xe2\xe6\x4b\xbf\xd7\x31\xbc\x6b\x14\xf5\xa3\x62\x14\xf5\x6d\xee\x3e\x42\xa5\xb3\xe0\x67\xc0\x0f\x12\x4d\x55\xab\xea\xbb\xbc\x44\x70\x39\xd4\x5a\x43\x63\x8e\xaf\xca\x4a\x07\x54\xa6\x5e\x7c\x17\x13\x95\xcd\xa9\x2a\xd5\xd1\x29\x23\x71\xd6\xc4\xb5\x5f\xaf\x4e\xff\xf6\x6a\x23\xe5\xaa\x4c\xb4\xae\x30\x03\x9f\xdb\xd6\x45\x73\xc4\xaa\x44\xa4\xd1\x07\x88\xa2\x00\x5a\x53\x80\x01\x6e\xa9\x82\xd8\xde\x77\x14\x00\x64\x52\xfd\x74\x41\x96\x56\x0c\x69\x12\x30\x6a\xb1\x05\x90\x22\x18\x20\x6c\x01\x66\x05\x10\x50\x66\x11\x0c\x2d\x32\x13\xd7\x93\x6c\x49\xac\x25\x89\xfd\x96\xda\x64\xfd\xa7\xf8\x50\xce\xf1\xe1\x6d\x4f\x72\x4a\xd8\x62\xab\x33\x0a\x81\x87\x30\x23\xb2\x1c\xcd\xed\xcc\x89\x13\x8a\x4f\xc9\xfa\xf4\x49\xb2\xce\xa7\x4f\xb6\x6b\x4d\x13\x66\xc5\x00\x5f\x58\xfc\x40\x63\x2d\xd0\x7c\x01\x63\x0b\x09\xb2\xae\x2c\x10\x50\x92\x7e\xff\xe9\x93\x9d\x42\xfd\xe9\x93\xbd\x25\xc4\x0c\x77\x04\x33\x02\x31\x98\xb0\x5b\x9a\xf6\xc3\xc1\x8f\x2c\x89\x31\xb9\x84\xb1\xf5\xef\x94\xc5\x89\x0f\x83\x4e\x31\xfb\x9b\xc5\x00\xcd\xa1\x00\x60\x81\x12\x0d\x98\xe0\x17\x12\x57\x35\x51\x10\xf3\x27\x03\x2e\x23\xf0\xca\x12\x19\x0e\x1d\x83\xc1\xf4\x67\x96\xd1\x9f\x66\x38\xb6\x00\x38\x6b\x90\xf5\xb6\x69\x6c\x8b\xfe\xff\xe7\xed\xe1\x55\xe2\x94\x26\xde\xc2\x02\x34\xbf\xf0\xf4\x0f\x9a\xff\x05\x12\x0f\x16\x11\xcd\xb6\x80\x09\x4e\x34\x12\x2a\xaa\x6f\xa0\xff\x7e\xbc\x06\x3f\x03\x8f\x59\xd1\x22\x06\x14\x5a\x45\x50\xac\xc1\x8c\xc4\x5a\x71\x70\xa5\x60\xca\xf5\x90\xfb\x80\xef\x41\x4b\x44\x7d\x12\x16\x56\xad\x68\x82\x09\xa2\x59\xcf\xdd\x12\xe7\xf4\x2e\x6f\xb8\x51\xfd\xe3\x1d\xa1\x6c\x1e\xc3\xaf\x4b\x09\xf9\x72\x17\x6a\x08\x44\x8c\xcb\x0e\x71\x3f\xb3\x0d\x39\x61\xed\xdf\xfa\xac\xb6\xa7\x77\xc8\x19\x3d\xf8\x17\xdb\x5d\xe7\x84\xcc\x05\x21\x07\x9a\x4f\x43\xe4\xc5\x84\x92\x19\x73\xac\x7d\xeb\x01\x9a\x86\xdb\x47\xc4\x02\x5c\x0a\x21\x27\x81\x11\xc2\x5d\xb1\xae\x89\x11\x29\xef\x53\xf0\x0a\x48\x42\xd3\xb0\x0b\x7a\xee\x5e\x7c\x9d\xfe\xed\xd5\x29\x8c\x2f\x8d\x7a\xae\x35\xd2\xeb\x8f\x52\x25\xd4\x18\x77\xfd\x3b\x6a\x7d\x77\xe0\xda\x3f\x21\xec\x5b\xd9\xe8\xf5\xe9\x7b\xb5\x29\xbd\x5b\xe6\x1d\x79\xd5\xa0\x6c\x1a\x97\x22\x31\xbf\x06\x69\x56\xb4\x9d\x28\x6b\xb1\x1c\x5b\xe7\x87\x3d\xaf\x30\xb7\xd4\x98\x58\x6e\xfb\xba\xb9\x70\x8f\xd2\xf3\xb6\x99\x25\x51\x6d\xb1\xac\xb4\x6d\xc2\x50\x40\x0f\x20\xf6\x88\x20\xe7\x76\xef\x3b\xab\x2e\xa2\x7f\x03\x9f\xbb\xb9\x79\x56\x38\xba\xf1\x8f\x45\x15\x9b\x7f\x26\x90\xb2\x81\x2d\x27\x6d\xbb\x57\x21\x64\x0b\xe2\x8f\xed\x77\x6f\x4f\xcf\x6c\xd7\x07\x0c\x8c\x33\x17\x49\xf1\xfb\x6c\x15\xc1\xb1\x74\x6d\xb9\x36\xbd\x3d\x55\xec\x85\x9e\xc5\xe8\x19\xa0\xf0\xbb\x27\x23\x81\x20\x38\xb0\xc7\xf6\x43\xc3\x51\x53\x84\xab\x3e\x2c\x3c\xd4\x9e\x15\x35\xa1\x1a\xb6\xb8\x6d\x3e\xa0\x94\x1c\xd8\x0f\x65\xb7\x1f\xde\xbf\x3c\x21\x61\x44\x30\xc4\x6c\x00\x9d\x87\xf6\xd3\x59\x3c\x39\xe2\x70\x79\x9c\x27\x25\x60\x25\xaf\xcd\xa6\xeb\x37\x4e\xfa\x8a\x0b\x70\x55\x22\xed\x16\x2f\xb5\x0b\x9e\xfc\x12\xbb\x3a\x3e\x72\xc4\x85\x88\xbc\x20\x95\xa1\xc6\x24\x1e\xd8\x1f\x23\x05\xc0\xc4\x9f\x2e\x00\x5d\x9c\xdb\xce\x48\x49\x8d\xbd\xc3\x07\x93\x09\x54\xd5\x22\xf6\xf7\xed\xab\xab\xd1\xf3\x67\xbc\xcd\xf5\xb5\xcd\xdf\x74\x75\x9e\xbc\x39\x20\x92\x13\xaf\xfc\xa9\xa8\x41\xd5\xb9\x1b\xde\xda\xe8\xc6\x95\x1d\x8f\xa1\x2b\x84\xa7\xf0\x8f\x90\xd9\xc7\xc6\xf6\xd9\x02\xd1\xcc\x07\x1d\x09\x31\xe9\x41\xad\x7a\x50\x0b\x04\x81\x45\x92\xd8\x62\x10\x84\x69\xc0\xa9\xba\xa5\x04\x41\x40\x96\xc7\x98\xe0\x55\x48\x12\x7a\xec\x79\x90\xd2\xf1\x83\x23\x77\x86\x62\xca\xb0\x2a\x8b\x16\x80\xec\x6f\xc1\xc7\xfc\x0f\xcd\xbb\x63\xa8\x2f\x87\x11\xc1\x7f\x85\x2b\xd1\x48\x16\x4b\xed\x3a\x5b\xd5\xdc\x98\xee\x75\xee\xc6\xb9\x50\x9b\x4a\x64\xce\x32\x8b\x7f\x4d\x81\x77\x31\x8f\x49\x82\x7d\x99\xcb\x70\xc8\x16\x30\x84\xc3\xa3\xc3\x43\xdb\x71\x53\x18\x04\xe2\x26\xf6\x2f\x30\xf0\xf8\xa1\x88\x11\xa1\x94\xe5\xf1\x26\xa4\xdf\xb5\xeb\xc3\xd6\xd1\x73\xe5\xb0\x9a\x00\xe8\xb7\x12\x77\xe4\x1e\xfc\xaf\xfe\x63\xfa\xd7\xcf\xde\xe7\xee\xe5\x1f\xc5\xfe\xca\x67\xa0\x67\x35\x54\x02\x76\xbb\x8e\x5d\xeb\x6e\x96\x26\xae\x7b\xed\x95\x9c\xb2\x08\xcf\xdb\x77\x4b\xe5\x2f\x84\x09\x43\x33\x24\xab\x28\xdc\xea\x76\x69\x96\x9d\x32\xca\x1a\x26\x62\x89\x6b\x37\x0e\x01\xdd\x4a\x3f\xb4\x4f\xc1\x25\xf4\x65\xc5\xc2\x97\x78\x46\xf2\xad\xc4\x13\xfb\x17\x12\x5f\xf0\xdd\x5f\x34\xfa\x05\xc4\x38\xdf\x48\x3c\xb1\x7f\x02\x28\x80\x3e\x5f\x62\x73\xc8\x64\xd3\x17\x71\x4c\xe2\x7c\x5b\xf9\xc8\xfe\x80\xc1\x34\x10\xeb\x91\x93\xda\xf2\x16\x00\xcf\x45\x81\x1b\x97\xe0\x67\x22\x2c\x5a\x84\x3c\x73\xde\xe7\x3a\x20\x09\x20\x97\xd1\x03\x59\xd9\xf0\x4c\xba\x49\xd4\xb5\xe8\xba\xf8\x34\x55\x4b\x1b\xe1\x36\xd7\x5e\x7e\xf7\xeb\xc9\x7f\x3b\x22\x28\xc8\x2b\xef\xe1\x3f\x0e\xfe\xf2\xf7\x6e\x82\xe2\x49\xd1\xcb\x25\xf5\x38\x11\x52\xa2\xc1\xbe\xa3\x72\x0b\xfd\xc9\xb5\xa7\x69\x46\x81\xfc\x11\x87\x2d\x49\x5b\x8b\x45\x0c\x61\x6d\x14\xd8\xb3\x18\xe1\xb9\xde\x15\x98\x60\xc9\x25\xc2\xc3\x25\xc2\x16\x4d\xe2\x4b\x74\x09\x02\x8b\xb2\x18\x30\x38\x47\x90\xf2\x86\x10\xd3\x24\x86\x56\x14\x13\xb1\x5b\x40\xcb\x27\x21\xc2\x52\x7f\xb3\x8e\x99\xb4\xf1\x61\x5f\xdf\x0f\xf9\x60\xe5\x5a\x73\xa2\x22\xd6\x96\x20\xf6\x5d\x0b\x88\xd8\x61\x4c\xe2\x10\x04\xfa\x9c\x4c\x2d\x78\x49\x82\x4b\xe8\xcb\x1c\x24\x2a\xc2\x07\x11\x6c\xfd\xa7\x85\xa8\x45\xa4\x31\x21\x4e\xf0\x12\xac\x2c\x75\xb6\xb2\x18\xe1\x1d\x52\x0b\x70\x18\x21\x08\x03\x84\xa1\x6f\x79\x01\x49\x7c\x8b\x92\x20\x91\x40\x7d\xa0\x30\xd6\x1d\xc2\xf4\x84\x65\x21\x6c\xc5\x10\x04\x43\x86\x42\x3e\xe9\x20\x90\xa7\xf5\x30\x09\x18\x12\xb6\x6a\x92\x78\x8b\x88\x20\x91\x17\x85\xc4\x16\x99\xcd\xe8\x82\x70\x7c\x75\x0b\xe1\xbb\x47\xed\x06\x50\xdb\x62\xc6\xc8\xaf\xab\xf4\xec\xdc\xb6\xae\xec\xb6\x44\x14\x42\x93\xf1\xab\x33\x50\xb4\xa4\x97\x38\x15\x3b\x77\x63\x7e\x09\x43\xbe\xdb\xee\x51\xb3\xfb\x76\xaf\x7c\x1b\x3d\xe6\x55\x9f\x61\x43\xcc\xaf\x65\x92\x1f\x44\xc8\x5e\x9f\x69\x3e\xda\xf0\x34\x1b\x24\x5e\x87\xd7\xdd\xb2\x90\xac\x95\x7d\xe4\x46\x9c\xa1\x74\x92\x16\x97\xfe\xcd\xf2\xc4\x5a\xd3\xfd\x07\xe4\x47\xa8\xe6\xf9\x76\x62\x12\xae\x5f\xed\xfe\x74\x75\x42\x9d\x2e\xb9\x74\x1a\x26\xcb\xf5\xc4\xdd\x9f\xec\x7b\x55\x02\xa4\x76\xae\xcf\xa1\xcc\x25\xdb\x38\x57\xa1\xe7\x6e\x7a\xb2\xb7\xb1\xea\xb7\x99\x7b\x68\xd7\x45\xc0\x3a\x73\xcf\x44\xc1\x26\x36\x8d\xbb\x93\x07\xeb\xd1\xbd\x67\xa2\xad\x9d\x14\x0e\xeb\xcc\x5c\x09\x89\x96\x89\xff\x4b\x48\x8a\x5c\xd9\xd6\x0d\x09\x8c\xd6\x02\x9a\x5f\x99\x44\x59\x07\x47\xad\x82\xa5\x53\x3d\xcb\xaf\x4b\xfa\xac\xc7\x4b\x8d\x42\x48\xb3\x52\x8c\x64\x69\x98\xaf\x5d\x4c\xad\x83\xa2\x66\x69\xa5\x30\x64\x0a\xab\x3f\x8c\x40\xb3\xcd\x2c\x9e\xb7\x5a\xac\x38\xbd\xcb\x2f\x51\xb8\x53\x49\xdb\x2e\xf5\x85\x9b\x28\x56\xd2\x66\x6b\xc9\x65\x5a\x53\x5b\xce\xe3\x5b\x9d\x4d\xc3\x0a\xad\x3a\x76\x75\x9c\x4f\xe3\xc1\xbb\xf7\x7c\xba\xcc\x23\x2f\x8f\x3b\x82\xf9\x78\x97\xd1\x6e\x1c\xee\x3b\x4e\xe7\xc9\xad\x63\x3d\x4d\x46\xd0\x1d\xc8\x6f\xef\x0e\xe7\x7d\x0a\x83\xdf\x78\x36\xed\x39\x84\x77\x48\xc0\x66\xe6\xb7\xec\xf7\xbd\x74\xbd\x97\xae\xf7\xd2\xf5\x5e\xba\xde\x4b\xd7\xf5\xa5\x6b\x41\xa4\xde\x4b\xd7\x7b\xe9\x7a\x2f\x5d\xef\xa5\xeb\xbd\x74\xdd\x92\x71\x20\x13\xb2\xf7\xf2\xf5\x5e\xbe\xde\xcb\xd7\x7b\xf9\x7a\x2f\x5f\x37\x67\x1b\x48\xff\x73\x2f\x5c\xef\x85\xeb\xbd\x70\xbd\x17\xae\xf7\xc2\x75\x73\xa6\x81\x7b\xe1\x7a\x2f\x5c\xef\x85\xeb\xbd\x70\x35\x71\xce\x1b\x31\x14\x6d\x5e\xcc\xda\x6f\xe0\xb2\x43\xd1\xd9\x3f\x98\xc8\xdd\x31\x7d\xf6\x76\xb7\xc5\xaf\x44\x44\x6d\x95\x95\xee\x63\x66\xee\xc3\x91\xee\x51\x7b\x8f\xda\x7b\xd4\xde\xa3\xf6\x1e\xb5\xf7\xa8\xbd\x47\xed\x3d\x6a\xef\x51\x7b\x8f\xda\x7b\xd4\xde\xa3\xf6\x1e\xb5\xf7\xa8\xbd\x47\xed\x3d\x6a\xef\x51\x7b\x8f\xda\x7b\xd4\xee\x06\x6a\xeb\x8d\xc1\xeb\xa4\xa2\x2b\xe6\xf3\xea\x95\x8c\x4e\xd6\x8b\xa7\xb5\xc9\xe8\x6e\x25\x89\x67\xff\x92\xa1\x2d\x05\xd1\x31\x5c\x52\x5d\x53\xd2\xb6\x5d\x84\x11\x1b\xe4\x2b\x1a\x8e\x46\x23\x10\xcf\x45\x5a\x47\xea\xec\xa9\x3c\xac\x59\xaa\x57\x39\xfa\xe8\x12\xc6\xb2\xfc\xbd\x8b\x2b\xde\xaa\xa4\x93\xb6\x33\x62\xe4\x15\x59\xc2\xf8\x04\x50\x3e\x3a\x11\x6d\x5d\x3a\x79\xc8\xd9\xf6\x39\x60\x70\x2f\x4b\xf1\x0a\x7e\x03\x9f\x07\x57\x49\x1c\x8c\xed\x05\x63\x11\x1d\x1f\xa4\xf9\x0e\x47\xf4\xf1\x10\x26\xc3\x25\xa4\x6c\x78\x34\x02\x21\xf8\x9d\x60\xb0\xa4\x23\x8f\x84\x07\x7c\x46\x07\xf6\xc8\x23\xd8\x03\x6c\x80\x5d\xfb\x40\xa6\xba\xe4\xbf\xa0\x6b\x8f\x16\x2c\x0c\x9e\x7a\xd3\x49\xf6\x94\x3a\x2e\x13\x69\x67\xff\xfc\x42\x65\xa5\x95\x59\x68\x79\x4b\xdb\xa5\x32\x8e\x3d\x57\x68\x9d\xc8\xe9\x21\xfa\x1c\x52\x16\x93\x95\x2c\x11\x5f\x7c\x2a\x52\xf7\xf1\xc7\xa2\xf8\xa3\x81\x69\xdb\x85\xce\xf5\x75\xe7\x6c\x95\x9a\xf3\xee\x30\x61\x5e\xe7\x92\x94\xef\x54\xb1\xe9\x37\x70\x49\x8b\xf9\x38\xdb\xd7\xd6\x8e\x24\xda\xfb\x69\xfa\x16\xfd\x67\x78\xfa\xc3\xdd\xd6\x7a\x6f\x2e\x27\x59\x9d\x1d\xfe\x77\x82\xa1\x2c\x1d\x58\x7b\xf1\x55\xf7\xd5\x23\xbb\xa2\x4e\x43\xfd\x37\x22\x10\xde\x92\x19\x58\xe7\x31\x58\x0d\xff\x74\x78\x58\xd5\xc3\xa7\x4f\x2c\x4d\xfb\xaa\xef\x1e\xf3\x59\xdf\xb5\x70\xc8\xdf\x04\x5a\x2f\xe4\xe3\x9a\x8f\xb4\xbc\x29\x7c\x34\x98\x26\x28\xf0\x6b\xbe\x89\xe1\x25\xaa\xf8\xc8\x69\xcc\xe5\xde\x13\x8b\x8f\x2b\xef\xaf\x9b\x13\xc2\xdb\xf7\xf5\x45\x3b\x56\x78\x3b\x7e\xf6\xf6\xc3\x59\x99\x26\x5d\x7a\x6a\x2b\x96\x9f\x32\xa9\x2e\x97\xaf\x64\x92\x05\x62\x68\xc5\x30\x80\x80\x0a\x0d\x0a\xfe\x33\x81\x98\x05\x2b\xa1\xb8\x4c\x09\x5b\x94\xbb\x92\x5a\x12\xc0\xbe\x45\x61\x30\x1b\x2e\x08\x15\xca\x51\x42\x19\x09\x61\x4c\x6f\xb3\xf8\x3f\xbe\xaf\xfa\x7f\x6b\x15\x15\x72\x5b\x9f\x6b\xbf\xe2\xdc\xc3\x52\x76\xe2\xdb\xbf\xe0\x09\xc5\x57\x0d\xa5\x16\x8e\x31\x26\x09\xf6\xea\x2a\x4a\xb6\x2e\x58\x35\xe4\x90\x0f\xd9\xb0\x5a\x55\x26\x10\x53\x2f\x91\xb9\x4a\xfa\x2c\x6e\xd0\xb2\xb6\x4d\x36\x7c\x6a\x9d\xe6\xd8\x70\x0b\x1c\xf8\x60\x9b\x6c\xb6\x85\x4a\x12\x45\xc5\xa7\xeb\x89\x24\x86\x94\x1f\xe9\xe2\xaa\x42\xfa\xe9\xbb\x6d\x1d\x45\x52\x15\xbd\x4d\x7b\x15\x0a\x6b\x5d\xce\x6e\x8f\xe0\x19\x9a\x1f\x40\x7c\x89\x62\x82\x43\xc9\x7e\x5b\x2f\x80\x90\x9d\x9b\x74\xf9\x87\x71\x76\xe2\xd0\x8f\xb8\xfa\xef\xc6\x84\xb0\x0f\xef\x5f\x19\xaf\xd5\x93\x6b\x67\x14\x82\x68\x90\x82\xaa\x54\x62\x31\xd9\x81\x3d\x23\x81\xcf\x99\xc3\xbd\x8a\x00\x5b\x8c\xed\x03\xfb\xda\x71\xcd\x06\xda\x3b\x4a\xbd\x57\x3f\x8b\x8d\x30\x08\x56\x0c\x79\x59\x3f\xd9\x93\x8a\xfe\x2e\x11\x5b\xe5\x7a\x14\x0f\x0a\x0d\x25\x64\x69\x33\x7a\x30\x96\x4f\x7e\x45\x7e\xfa\x27\x0d\x92\xb9\x7d\xed\xd6\xcc\x8d\x6a\x4f\xaf\xb4\x0f\xfd\xa0\x30\x94\x50\x9b\xd3\x56\xe2\xd7\xc1\x58\xfc\xf3\x2b\xf2\xed\x6b\xa7\xd0\x5c\x97\x0d\x68\x87\xed\xc0\x3f\x48\x0b\x1d\x88\x77\xe9\x8f\x36\xc8\xf3\x58\x57\xbf\x0f\xc6\x11\x98\x43\x09\x93\xbb\xd6\x4c\xb5\x4e\x99\xb5\xcc\x9e\xf4\x20\x54\xa1\xa9\xd4\x15\xd0\xef\xb0\x62\xfc\xba\x29\x4a\x33\x4c\x90\x7e\xa1\x7f\x17\xba\x16\x7a\x7b\x06\xad\xfa\x59\x68\x34\x8f\x49\x12\x65\x8d\xd4\xcf\x42\xa3\x84\x9a\x7c\x2e\x7f\x55\xb2\x5c\xd6\x48\xff\x2e\x62\x3b\x64\x51\x36\x53\xfe\xa3\xd0\x40\xed\x68\x69\x1b\xfd\xbb\xd0\x0c\x13\x86\xbc\x0c\x67\xea\x67\x91\x0c\x09\x5b\x64\x24\xe0\x3f\x4a\x0d\x7c\xc4\x8c\x16\xfc\x57\x89\x3d\x64\xf1\xa4\x94\x38\xe2\x67\xa1\x11\xc2\x0c\xce\xa5\xa5\x2d\xc3\x40\xee\x61\x71\xd5\x00\xef\x22\xc9\x10\xa1\x7e\x16\x1b\xa1\x20\x10\xea\x88\x6e\xa5\x7e\x97\x78\x48\xd7\xdc\x49\xf9\xa7\xdc\x17\x85\x5e\x12\x9b\x3c\xc6\x7f\x1e\x8c\x19\xb9\x80\x25\x89\xf4\x5b\x12\x46\x8c\x64\x7c\x83\xf0\xc5\xc1\x98\x3f\xfc\x95\xad\x22\xa8\xfe\x2c\x2f\xa4\x0a\x6c\xd7\xae\x51\x9a\x75\x4f\x29\xa9\x81\xe3\x02\xae\xbc\x80\x80\x4c\xba\xa4\x0f\x8a\x8c\x2e\x6a\xcb\xa4\xf0\x8a\x5f\x25\xf6\x8c\xe7\x84\x19\xdc\x29\x7e\x96\x56\x38\x85\xcc\x58\xdd\x14\xb2\x1a\xd0\xb8\xba\x98\x30\x73\x48\xfe\xb3\x88\xf3\x05\x30\x51\xce\x7f\x1d\x8c\xb9\x24\x13\xe2\x6d\x4c\x61\x8c\xc4\xa2\x2d\xaf\x80\x19\x0a\xa0\xb9\x02\xc4\xef\x75\x18\x13\x78\x1e\x49\x84\xc6\x99\x0a\x22\xf5\xa0\xd0\x50\xd9\x4b\xd3\x76\xfa\x77\x51\x10\x68\x8d\x56\x8b\x02\xf5\xbb\xbc\x3a\x87\x33\x92\x60\x3f\xdb\x1b\xff\xe7\x12\x05\xbe\x07\x62\xb9\x27\x74\x52\x27\xe8\x01\x88\xa2\x00\x79\xda\xbe\x52\x52\x7f\x28\x0a\xa3\x00\x0e\x45\x35\x27\x55\x17\xc4\xf8\x62\x28\x3a\x19\x8a\x17\xe5\x7a\x5b\x18\x16\x95\x10\x17\x6f\x4a\x0d\x21\x55\x86\x35\xb3\x70\xc8\x8d\xec\xb8\x11\xc2\x18\xfa\x75\x6f\xb9\x62\x13\x9c\xca\xea\x7a\x75\x6d\xcc\x8a\x50\xb0\xcd\x04\xcc\x0c\x23\xaf\x82\x6c\xa4\xff\xe5\x98\x87\x98\x71\x84\x93\xd8\x76\xf6\xca\xe5\xc1\x94\x45\xc6\x19\x4d\x09\x61\x03\x38\x62\x20\x9e\x43\xc6\xf5\x63\xd7\xb6\x55\xd5\x2f\x38\xf9\xf1\x0a\xcd\xa4\x00\x49\x7b\x1b\x6b\x7a\xd9\x0f\x26\x13\xb6\xbf\x5f\x78\x9b\x8a\x82\xca\xb7\x81\x0f\x22\xf5\x06\x8e\xaa\x6a\x31\xed\xef\x3f\x28\x9b\xae\x85\xe0\xe4\x58\xb1\x9d\x9a\xf7\x5c\x68\xca\x06\x4e\x69\xaa\x0a\x27\xb6\x63\x62\x05\x16\x67\x05\x34\x1c\xc2\x30\xec\x5c\x6b\x62\x1f\x1b\xdf\xf8\x03\x87\xe3\xa3\x11\x40\x55\x68\xab\x15\x3e\xc1\x95\x59\x53\x93\x3b\x6c\x67\xe4\x05\x10\xc4\xc7\x41\x30\x28\x5b\xfb\x0b\x2d\xe7\x90\x9d\x4a\x48\x5f\x32\x18\x0e\x6c\x88\x59\xbc\xfa\x10\x07\xb6\xb3\xf7\xeb\x08\xd1\x37\x49\xc0\x59\xe9\xcb\x17\xfe\xe3\x03\x96\xeb\xc7\x17\x4f\x06\xcd\xa3\xd7\xf4\xea\xfe\x3a\x42\xd8\x0b\x12\x1f\x52\xbe\xfc\x64\xc5\x36\xdb\x71\xae\xb3\x92\x74\x4b\x14\x04\x67\x69\xa1\xb1\xb1\xb1\xd5\xbc\x26\x09\x85\x2c\x06\xd1\x48\xc8\xf0\x81\x73\xed\x42\x51\x14\x47\x1c\x35\x24\x66\x1e\x0c\xe0\xfe\xfe\x20\x5f\xd7\xc6\x35\x7f\x32\xc7\xc5\xe9\x79\x00\xd1\xe3\xdf\xc0\x67\xc9\x3b\xb2\xbe\x0e\xac\xe3\x91\x94\x44\x4e\xfb\xe4\x05\xea\xdd\x96\x92\x69\xc5\x72\x3b\xa4\x4a\x60\xca\xcd\x04\xfd\x0e\xe3\x56\xa9\xe9\x03\x06\x72\xed\x7f\xa3\x04\x0f\x41\x84\xb6\x7f\x8a\x4c\x4f\x64\xf2\xda\x12\xfd\x0e\xc7\x62\xa4\xc9\x8f\x83\x2b\x51\x22\xf0\x0a\xf9\x63\x36\x42\xbe\xbc\xa5\x81\xb2\x9e\x9f\x90\x16\x80\xb1\x18\x4d\xf9\xae\x30\x66\xd7\x5d\xb6\x10\x73\x86\x7c\x55\xcd\x49\xbc\x1a\x46\x30\x0e\x91\x5c\xa7\xd5\x47\xd5\x3a\x3c\xee\x0a\x6a\x96\x0b\xf2\xd2\x7f\xaa\xfe\x1d\x1f\x6e\x18\x4f\xfa\x88\x75\x8f\xa7\x66\x3c\xf1\xa3\xe4\xd0\x34\xdc\x7f\x8d\x28\x42\x1c\x3f\x68\x1d\xe4\xec\xb5\x23\x27\x14\xf7\x30\x5f\x35\x5e\xd8\x48\x2f\x87\x97\x9b\x96\x47\x02\x45\x11\xc4\xd2\xda\xfc\x55\x63\x69\x1b\x4b\xeb\x2b\x47\xc9\x36\x19\x27\x26\x0c\x7a\x0c\xfa\x43\x69\x5f\x19\x46\x20\x66\xc8\x43\x11\x10\xb7\x1f\x5f\x37\xd6\xe4\x94\x5e\xfa\x0f\xd9\x28\xa1\xfc\x8f\x0d\x23\x4f\xc4\x40\x7f\x55\x5b\x9b\x1c\x88\xab\xe6\x78\x62\x1f\xda\xe9\xf9\x6a\x84\xfc\xfd\xfd\x01\xff\x14\xf9\x8e\x9b\x61\x13\xb7\x61\xac\x83\x1f\x8a\x39\x7d\x4e\x86\xdd\xc7\xd2\x6d\xc8\x27\x7e\x72\xa6\x07\xc3\x39\xa4\x2c\x89\xc5\x95\x5e\xc7\x8b\x0e\xad\x75\xeb\x2f\xab\x3a\xdb\x86\x1d\x42\x5c\x36\xa6\x96\x08\x40\x29\x9a\xe3\x2f\x5f\xe4\xaf\x10\xc6\x73\x28\x4e\x7c\x74\x42\x06\x57\xd7\xee\x55\x42\xe1\x09\x88\x38\x34\xe3\x07\x47\xd7\xce\x1e\x7f\x4e\xb3\xfa\xbc\x23\x0d\xaa\x23\xa8\x81\x26\xb8\x44\x0d\xa3\x07\x3a\xca\x7e\xe4\x90\x8b\x1a\x91\x2b\x4a\x89\xf7\xc6\x2b\xff\xaa\xd0\xc7\xf6\xcc\x3a\xe5\x69\xb7\xd8\x6a\xba\x58\x63\x5a\xac\x41\x0b\x42\x99\x71\x33\x05\x22\xf4\x33\xa1\xcc\xc5\x20\x84\x42\xa0\xe5\xdf\xbd\xd1\x8f\xdd\x05\x04\x3e\x8c\xa9\xea\xd6\x23\x61\x94\x30\xe8\x97\x6d\x38\xea\xee\x3c\x67\xb5\xf0\x47\xd2\xea\xe9\x5e\xf1\xa3\xab\xae\xd5\x7d\x75\xad\xb8\xaa\xc9\x24\xd4\xd4\x5d\x66\x20\xda\xdf\x1f\x40\xd1\x84\xc4\xe8\x77\x21\x38\x26\xcc\x71\xe1\xf5\xb5\xe3\x2e\x00\xf6\x03\xf8\x1e\xd2\x88\x60\xaa\x24\x20\x8b\x57\x02\x06\xd2\x7b\x60\x21\xc1\x1c\x97\x4e\xd8\x47\xfb\xf3\x30\x2b\xa2\xcc\x00\x4b\xf8\xc2\x43\x85\x17\xa9\xb3\xd1\x1e\x9a\x0d\x9e\x1c\x1e\xc9\xa2\xe6\x79\xab\x06\x92\x76\x0e\x6d\x9e\xa8\xaa\x31\xaf\x2c\x16\x76\x57\x13\x40\x75\x9d\x7a\x61\xf4\x50\x56\x00\xf7\xc9\xe1\x23\x0e\xcc\xfe\xbe\x2d\x6e\x9c\x85\x79\x2b\x3f\xa7\x64\x4a\xbd\x18\x45\x52\x0c\x2b\x03\x11\xcd\x79\x6e\x82\x00\xf9\xb6\xfb\xe0\x48\xd9\x1c\x72\x78\xcc\xe1\x4d\x58\xc0\xf8\xac\x5f\x84\x11\x5b\x0d\xa8\xfe\x99\x21\x81\x3a\x9a\x2d\xfe\x72\xfa\xf6\xcd\x28\x02\x31\x85\x03\xca\x57\xbb\xf4\x68\xde\xdf\x27\xc2\x17\x94\xc4\x93\xc9\x04\xaa\x3f\xf9\x43\xe0\x87\x08\x8b\x67\xe2\x2f\xf1\x48\x5f\x78\xca\xc7\xfa\x17\x7f\x75\x89\xe0\xf2\x03\x85\xb1\x7c\x95\xfe\xda\x18\x5a\xaf\xaf\x65\x81\x7f\x9c\xaf\x71\x8c\x9d\x6b\xd3\xc0\x57\x65\x1c\xed\x66\x94\x51\x62\x29\x8a\x2a\x4e\x44\xca\x8d\xb8\x64\x9a\x0e\x91\xf0\x36\xe9\x7e\x7d\xee\x62\x97\x6c\x4a\xc8\x51\xb5\x63\x9c\x4a\xd8\x33\xb7\xd0\xdf\xc0\xe7\x9b\x48\xb9\x0b\xef\x38\x61\x8b\x06\x19\xc8\xa5\xda\xd8\xb6\x5d\x25\xe0\xc6\x76\xea\xd8\x4b\x8a\xc2\xcf\x71\x21\xf6\x85\x53\x79\x53\xab\x9c\x3b\x30\xa9\x14\x92\xc2\xe2\xa7\x96\xfc\x8b\xac\x4b\x97\xc4\xf3\x97\x3e\xff\x43\x38\x00\xf1\x3f\x54\x23\xfe\xa7\xbe\xf5\x1d\xdb\x47\x87\x87\x87\xb6\x1b\x42\x4a\xf9\xc4\x8d\x02\xfd\xf6\x09\x09\xc3\x04\x8b\x1b\x60\xb1\xe8\xc6\x0f\x0e\xdd\x2a\x3b\xf4\xf8\xc1\x91\xcb\xd9\xf1\x5d\x4c\x2e\x91\x0f\xe3\xb1\xf0\x3c\xe2\x4f\x4e\x04\xd1\xe5\x6f\xc9\x00\x49\x0c\x45\x3f\xa9\x89\x91\x7f\x9c\xd9\x7c\xf9\xaf\x10\x7c\x3e\x03\x73\x3a\x7e\xec\x52\x49\x8d\xb4\x5f\xdb\x76\x53\x2f\x08\x9b\xc2\x60\xc6\xb7\x15\xdb\x95\xf7\x37\xc7\x97\x00\x05\x60\x1a\x88\x3e\x44\x05\x57\xde\x7e\x0e\xd9\x33\x40\xe1\x87\x58\x5c\x12\xc8\xe5\xf0\x31\x5b\x75\x9a\x04\xb6\xe3\xc2\xf3\xd1\x6f\x04\xe1\x01\x47\xf8\xb5\x2b\x2d\xfd\x9c\x23\x85\x86\xc1\x45\x6c\xfa\x51\xe6\x02\xe5\xec\x69\x13\xb7\x14\x51\x06\x12\x6c\x17\x8d\x8e\x8d\xdf\x23\xed\xb0\x27\xac\xc2\xd2\xd6\xac\x4f\x58\x23\xbe\xcd\x8d\xc4\x42\x3a\x85\x01\xf4\x18\x89\x07\xf6\xc7\x48\x71\xff\xc4\x9f\x2e\x00\x5d\x9c\xdb\xc2\x16\x4b\x27\x7d\xbf\xd2\x9b\x8a\xe3\xd2\xfd\x7d\xfb\xea\x6a\xf4\xfc\x19\x7f\x73\x7d\xcd\xa5\x2f\xd5\x02\xb0\x63\xaf\x8a\x39\xce\x0b\xf7\x24\x14\x32\xb5\x58\x11\xa4\x83\x2b\xc9\x71\x6a\x0d\x32\x11\x28\xb1\x60\x61\x70\x0a\x66\x70\x60\xa7\x9e\x8b\xa7\xe2\x8e\xd7\xa9\xe1\xa9\x1c\x8f\x1c\xa6\x5c\x69\x18\xea\x9f\x1a\x1c\x3a\x86\xd7\xe6\x7e\x50\x2f\x4d\xd5\xa5\xd6\xe9\xdf\xdf\x8d\x94\xe3\x91\x20\x60\x2a\x2a\xe1\x04\xe6\x9d\xfe\x47\x2c\x46\xe1\xc0\xec\x5c\xe8\x67\xce\x48\xb8\x56\x52\x36\xb0\xa3\x64\x1a\x20\xef\x20\x94\x77\x44\xe2\x36\x88\xca\xdb\xa0\x0a\xdc\x50\xd5\x93\x60\x18\xbd\x51\xbb\xf6\xa5\xfd\x30\x1b\x20\x0d\x4e\x30\xdb\x2a\xe9\x62\x97\xf7\x03\x21\x4c\x74\xc3\x33\xce\xf9\xc6\xbe\x22\x56\x02\xef\x49\xdf\x9e\xf3\x3d\xc8\x59\x97\x76\xa7\xa2\x0f\x4b\x33\x8b\xc5\xf7\x32\x11\x36\xd0\x40\xc4\x6c\x6d\x1f\xde\x90\x46\x7b\x86\xc2\x42\xb2\xfb\x14\xa9\xda\xc8\x4d\x9e\xe4\x2e\x95\x0a\x43\x70\x79\x02\xab\xef\x6a\x5c\x22\x6f\x8f\xe4\x3a\x77\x81\x11\xe1\x91\x9e\x57\xb3\x73\x04\xe3\xea\xc2\xa0\x7f\x98\x07\x67\x91\xd1\x6f\x94\x60\x11\xd0\xa1\xc5\x3a\x70\x72\x21\x03\xf2\xbe\x92\x73\x84\xf0\x1c\x94\x0c\xae\x03\x56\x5c\xa2\xde\x40\xcc\x60\x1c\xc5\x88\xc2\xf4\x15\x9d\x20\x25\xd5\x74\xf8\x8a\x0b\xf4\xa3\x94\xa5\xf6\x90\x64\xa7\xb4\x67\xe9\xf7\x69\xbb\xcc\x71\xd5\xab\xac\x6b\xfd\x8e\xa4\xef\x0a\xb2\x56\xe8\x61\x02\x71\xc1\xc4\xbc\x68\x7a\x03\x97\x7f\x97\x23\x0e\x80\xcb\xdc\x07\x87\x8e\x1b\xd7\x37\x20\xbc\xc1\x9e\xb1\x9a\x27\x93\x09\xdd\xdf\x0f\xf6\xf7\x6b\x47\x3d\x74\x5c\xfb\x45\x0a\xa7\xfa\x20\x6e\xfc\xe0\xda\x71\xa9\xbc\xac\x54\x8b\x04\x8a\x1b\xca\xc1\x61\x76\x44\x74\x06\xf6\xff\x10\x0b\x66\x18\x20\x7c\x21\xd6\x78\x48\x2e\xf9\xde\x7e\x38\x99\x4c\x06\x65\xd9\x10\xc3\x28\x00\x1e\x1c\xd8\x96\xed\xda\x43\xdb\x78\xa0\x7a\xb4\xe5\x0d\xb1\x10\x21\xce\x28\x80\x78\xce\x16\x6a\xf5\xed\x49\x93\x88\x5a\xce\x80\x52\xc8\x5e\x83\x28\x42\x78\xae\x2a\x90\xa7\x0c\x02\x9d\xf3\x7f\x2b\x80\xc9\xa5\xb4\xed\x8c\x40\x14\x71\xc5\xe6\x9b\x7f\xe7\xf0\x5a\xc8\x9f\xd8\x06\xf8\x56\x0c\x83\x89\x4d\xd9\x2a\x80\x74\x01\x21\xb3\x2d\xa9\x3a\x7e\x93\x05\x1b\x7d\x63\xff\xf8\x8d\xe3\x5c\xf3\x6d\x52\xe0\x84\x0e\xf4\x26\x69\x75\x92\x77\x22\x44\x4d\xb8\x52\x84\x90\x2d\x88\x2f\x63\x92\xae\xb3\x3b\x71\x58\x50\x31\x69\xa3\x8a\x39\x05\xf4\xd6\x62\x69\x8a\xba\x21\xe2\xdc\x74\x09\x02\x7d\xdc\x16\x87\x65\x97\xef\xfc\x03\x32\x61\x2e\x9d\x60\xd3\x11\x08\xcd\x06\xb2\x4f\xce\x79\x5f\xbe\xd0\xe1\xd0\xfa\xf1\xd0\xb9\x12\x81\x45\x21\x24\x09\x1b\x20\x2e\x52\xf8\x99\x0f\x8e\x3c\x10\x04\x03\xae\x04\x39\x4a\x51\xe7\xa7\xc1\x45\x4c\x96\x16\x9d\x70\xb2\x32\x22\x05\xed\x40\xde\x92\xe6\x3a\x61\x5d\x82\x92\x32\x04\xaa\x10\xa7\xdb\x8f\xf4\x2b\xa2\x53\x9d\xc8\xd4\xe3\x6a\x95\x39\x73\x37\x68\x0d\xe4\x4b\xf7\x37\x7e\x06\x7c\x0e\xd3\x33\xe2\x40\x2d\x68\x11\xcd\x05\x9d\xab\x54\x8d\x11\xdb\xd8\x04\x3e\xb4\xad\x2f\x96\xb9\xb7\xe6\xe1\x1a\xe9\x53\xa5\x74\x92\x37\x3a\x3b\xa6\xef\x16\x31\x5f\xe4\xe5\x4e\xbb\x76\xf6\xd0\xb6\xec\x87\x30\xeb\xf2\x17\xc4\x16\x24\x61\xa7\xc9\x6c\x86\x3e\x57\x01\x2b\x9a\x16\x27\x08\x9d\xab\xc2\xda\xe7\x0b\xef\x23\x06\x21\x9c\xf8\x59\xbb\x73\x53\x5a\x0d\x1a\xdd\x19\x9c\xfd\xfd\x41\x87\x59\xa8\x23\x81\xf0\x57\xa0\x5e\x4c\x82\xe0\x8c\x70\x68\x24\x29\xe3\x04\x8f\xa8\xb7\x80\x9c\x4d\x06\x36\x98\x31\x18\xbf\x87\x58\x28\xbe\x03\x67\xf2\xa3\xb2\xf7\xe6\x21\x87\xce\x88\xcc\x66\xc2\x99\x61\x2f\x0f\x14\xe6\xaa\x6d\x41\xc2\xb1\x30\x70\xad\x29\xf1\x57\x5c\xce\x61\x14\x8a\x70\x37\x0d\x48\x34\xc6\x23\x46\xa2\x6b\xf7\xd1\xb7\x87\xc2\x05\xc5\x27\x4b\x1c\x10\xe0\xff\x84\x82\x9c\xc5\x99\x6f\xe3\xcf\x02\x32\x1d\x7c\x84\xe7\xee\x95\x8c\x9b\x64\xf0\x33\x3b\x10\xd1\x92\xd7\x42\x83\x57\x22\x58\xc5\xc1\xf1\x13\x7e\xf1\xc9\x28\xa4\xa7\xe0\x12\xbe\x8d\xdf\x46\x10\xf3\xee\x9c\xd6\x16\x03\xec\x32\x67\x0f\x06\x14\x16\x35\x6c\x2f\x86\x80\xc1\x17\x81\x08\xeb\x18\xd8\xc0\xe6\xeb\x5b\x88\xe9\x89\xed\x23\x1a\x05\x60\x35\xb6\x30\xc1\xf0\xdf\x6c\x37\xfd\x88\x23\x42\x89\xfb\x93\x05\x0a\x38\x1d\xf7\xa4\x35\x49\x41\xf2\xe1\xfd\x2b\xd5\xb3\x5c\xd8\x1f\xde\xbf\x1a\x60\xde\xb3\x10\xfa\x84\xaf\x5e\x85\xa2\x09\x73\xe1\xc8\x0b\x90\x77\x91\x59\x17\xf8\xd7\x31\xbc\x24\x17\xc6\xd7\xc4\x29\x0c\x2f\xf9\x4b\x0f\xdf\xd1\x0e\x2f\x05\x93\x76\x5e\xa8\x37\xc4\x1b\x3b\xc0\xed\x99\xdf\x7b\x4a\xa9\x9b\xda\x0f\x84\x02\x5a\x6b\x3e\xf0\xfd\xec\x8c\x5a\xde\x7e\x23\xc2\xf7\xde\x0c\x8f\x57\xea\x58\x27\x63\x7f\xb9\x52\x29\x63\x81\xc7\xc2\x94\x45\xc5\x86\x82\x66\x2b\x4e\x28\xc3\x45\xad\xe4\x0c\xc7\x21\xb2\x9d\x51\x76\x5b\x63\x0c\x01\x2b\x9c\xe1\xf4\x07\x51\x42\xf9\x3e\x76\x2d\x95\x87\x0f\x14\xc6\x7f\x47\x14\x4d\xa5\x14\x6e\x55\x21\xf4\x18\xf2\x3a\xeb\xc0\xd0\x74\x6a\x35\x09\x05\xfa\xc7\x73\x0d\x13\x97\x20\xc7\x71\x0c\x56\xd2\x43\x0b\x4e\x3e\x9e\x3b\x2e\x9b\x40\x11\xed\xb0\xa5\xb9\xca\xd9\x1e\x07\xc1\xcd\x66\xe9\xda\x4f\x67\x28\x60\x30\x9e\x80\x20\xb0\x77\x7f\xce\x14\x5c\xc2\xec\x68\x02\x55\xdc\xb8\x5f\xe9\x2c\x59\x87\x83\x74\xf6\xcc\x98\xef\xbb\x0f\x67\xb6\xbb\x33\x8c\xec\x8b\x94\xf2\xfd\x48\x5b\xc9\xba\xcf\x5f\xbc\x7a\x71\xf6\xc2\x56\xec\xf2\x2e\xbd\xac\xa5\xeb\xf6\xed\xda\x07\xc6\x95\xef\x1d\x31\x4c\xee\xd6\xb9\xcf\x7a\x11\xd6\xee\x1b\x4c\x5d\xdd\x7f\xdc\xea\xa4\xe5\xad\x71\xf7\x15\x02\xd9\xdf\x11\x5c\x8a\x79\xca\xf3\xc3\x3a\x2b\x23\x47\xe6\xa7\x42\x6a\x18\x79\x1f\xe0\x9a\x0b\x07\x6b\x3a\x9c\x26\x61\x08\xe2\xd5\x4d\x65\xd7\x01\x95\xfd\x34\x90\x04\x4a\x94\x9c\xa8\x4e\x5e\x8b\x6b\x4e\xba\x40\x91\xe9\xbd\xda\x65\xf4\x50\x7c\xf9\x34\x24\x3e\x9c\x54\x4b\x90\xb7\xa7\xfd\x44\x88\xc0\xc4\x73\xa5\xd7\x28\x00\x11\xec\xc9\x9e\x5a\x2f\xea\xb4\x73\x41\x85\x7d\x8e\xc8\x2a\x8c\xf4\xc7\x47\x8f\x6d\x93\x0f\x3e\x83\xcc\x5b\x88\xe1\x9f\x03\x06\x3a\x0d\x28\x3e\x39\x58\x7f\x9b\xbe\xd2\x9f\x8e\x3f\x9e\xbb\x61\x3a\x59\xfe\x4b\x71\x8f\x4c\x8d\x33\xe1\xa7\x63\xd9\x72\x8b\x7b\x58\x66\xc3\xd3\x1f\x4e\xb0\xcb\x46\x19\x5c\x5c\x36\xa4\x3f\x5c\x36\x52\x30\x4e\xa0\xfe\xcb\x65\x9d\xf2\x9f\x64\xfa\x2e\x21\x17\xa8\xe8\x62\x21\x2f\xfb\xd5\xab\x72\xdb\x3b\x8f\x7f\x4d\x21\xca\x02\x1c\x2b\xb5\x75\x79\xc3\x27\x97\xd5\x6e\x9b\x15\xd4\x0d\xd2\xe9\xa5\x57\xd3\x34\x6f\x21\x76\xa5\xf7\x56\x73\xef\x2a\x2e\xb5\xf9\x34\xd0\xa8\xe9\x1b\x02\xa8\xd3\x62\xd4\xe4\xa0\x7d\x56\x60\xe3\xfa\xc9\x08\xdc\x69\xfd\x8c\xa4\xd9\x0a\x4e\x7e\x34\x6e\x16\x54\xb4\xb4\x53\xf0\xfa\x3f\xc8\xe2\xa6\x1c\x17\x3a\xa9\xc6\xfc\x6c\x25\x24\x50\xbf\x09\xeb\x3d\xb0\xfb\xb4\x25\xca\xc5\xee\xff\x2e\x26\x9f\x57\xea\x4c\x3c\xd0\xc7\x25\x45\x93\xe3\xc1\xc7\x73\x43\x30\x6c\x42\x63\xe8\x89\x53\x13\xab\xf0\x66\x3a\x76\x05\x7f\x94\x94\xec\xfa\xed\x50\x6a\xbd\x26\x43\xaa\x1b\x88\x4a\xb6\x6b\x85\x86\x55\xaa\xc1\x7e\x22\xbd\xeb\xa0\x56\x8f\xa4\xed\xe2\x4a\xd0\xf7\xa5\x3f\x86\x6e\xe6\x6e\x3a\x66\xe9\x0f\x91\x83\x00\x5f\x77\x47\xc1\x41\x3a\x90\x5d\xd4\x11\xaa\x30\x40\x04\x06\x80\xef\xbf\x03\xf3\xbc\xa3\x62\xd5\xe4\xb9\x7a\x06\xe6\x90\x36\xd0\x44\x9c\xd2\xb1\xf2\x66\x2c\x0c\xc6\x9c\x0a\x3d\x85\x8f\x2f\x6f\x2b\x34\x08\xd2\x11\x42\xba\x31\x90\xa7\xf6\xd3\x78\xc2\xe2\x04\xda\x63\xfe\x97\xf4\x9a\x51\x37\x55\x8d\x30\x1a\x6e\x03\xcc\xc8\x1c\xa6\x01\x97\xab\x80\x42\x36\xc0\xa3\x10\x32\xe0\x72\x56\x73\x85\x03\xcc\x4b\xac\x1f\x8e\x90\xef\x34\x5c\x7c\xa2\x0e\x2c\x86\xab\xe7\xdc\x4b\x58\x49\x6f\xea\x9e\x82\x4a\x29\x5d\x1c\xa9\xdd\x74\xbb\x66\x82\xd7\x8b\x9d\x2a\xd1\xb1\x57\x3c\x91\xf4\x14\x25\x3d\x66\x7c\x9d\xcd\xb3\xa3\x6e\xdd\x99\x6b\x6e\xb4\xc3\xf4\x99\x82\x9e\xc0\x6b\xc8\xb5\xd3\x8d\x4e\xc2\xb5\xd5\xbd\xfc\x8d\x27\xa3\x7c\x9f\xfa\xb0\xa1\x30\x84\x67\x22\x56\xf1\xa2\x29\xff\xd6\x15\x33\x1a\x0f\xa4\x5a\xd2\x54\xae\x3a\xb7\x4a\x2c\xa7\x80\x75\x16\x7e\x39\x16\x69\x05\x10\xd7\x19\x45\x84\x15\x39\x86\xd8\x1c\xf7\xe3\xb9\x4b\x26\xbf\x8e\x66\x08\xfb\x2f\xb1\x0f\x3f\x0f\x60\xee\xfe\x4f\x7b\x68\xc8\x81\x38\x30\x23\xbe\x3f\x4e\x26\xe2\x52\x8c\x4e\xe0\x47\x72\xbe\x37\x23\xf1\x40\xba\xf7\x92\x87\x47\xff\x86\xfe\x5d\xb5\x96\x37\xaf\xb6\xb3\xbf\x3f\x40\x0f\x26\xfc\xdd\x97\x2f\xf0\x23\x3a\x37\xfa\x0a\xe0\x25\x0c\x6c\xe7\xc1\x64\x42\xcb\x4f\x9d\xfd\xfd\x07\x83\xea\x0f\xfe\xbd\xb2\xfd\xbf\xa1\x87\x0f\x1d\x2c\x59\xe2\x8a\xbf\xe1\x9b\x5c\xfe\x7b\x0e\xbc\x2b\xda\x17\xdf\xa8\x4e\x86\x47\x99\x86\x82\x73\xe7\xd6\xf7\x3a\x69\x47\xcb\x76\xed\xda\x07\x59\x7e\x8f\x5e\x7b\xb7\x5c\x25\xe9\xd2\x34\x06\x5c\x83\x4f\x7a\x82\x81\x5b\xc1\x78\x8e\x66\xb3\x1e\x2b\xa9\x0e\x16\xe3\x39\xee\xb4\xd8\x4c\xb0\x8c\xcc\x9b\x22\xbb\x59\xee\xd0\x6d\x48\x00\xdb\x76\xae\xdd\x98\x04\xc1\x14\x78\x17\xd9\x26\x7f\x37\x80\x0b\x55\x48\x21\xf4\x0c\x4c\x03\xf8\x76\xa6\x92\x69\xdd\x7c\x97\x7c\xaa\x64\xce\xe4\x70\xc7\xf7\x4b\x6f\x01\xf0\x5c\x48\xbd\x53\x91\x1e\xcf\xeb\x21\xfd\xa8\xfa\x62\xd3\x3a\x60\x06\xd3\x2b\xbe\xf8\xbb\x03\xa4\x64\xc5\x66\xa1\xe1\x47\x36\xc6\x80\xb7\x08\x6f\xca\x19\x20\xeb\xa6\x8f\x09\xb7\x2c\xf7\x1f\x3c\x80\xfb\xfb\x70\x24\x9c\x2f\xe3\xc4\x93\x3e\xd9\xd2\xd8\x70\x3d\x80\xce\x53\x36\xee\xc9\x34\x19\x64\x3d\x58\x47\x6e\x98\x19\x6e\x6e\xa6\xae\x18\xc8\xa9\xd1\xbc\x0a\x37\x09\x5c\x49\x22\x97\xf0\x84\x44\xab\x33\x91\x84\xa2\x93\xc3\x8e\xca\x1e\x45\x0f\x64\xe2\x8a\x06\x77\x9d\xad\xac\xce\xde\x07\xe3\x6b\xd7\x23\xd1\xca\x14\x95\x9b\xd4\x07\x79\xdf\x39\xf9\x59\x92\x8e\xdb\x53\x74\x43\x72\x09\xb7\x35\x2f\xde\xf7\x5d\xcd\xeb\x92\x88\x93\x7d\xb6\xa9\xd9\x7b\xb9\xe4\x1f\x45\x17\x93\x7c\x98\x86\x53\x11\x12\xa3\x9b\x26\x14\xc6\x42\x53\x32\x5d\x29\xf2\xb0\x48\x03\x5f\x45\x7e\x0f\x80\x09\x7e\xc9\x3f\x25\x93\x07\x86\x47\x4c\x29\x0c\x84\x3f\x82\xca\x39\xef\xc7\xc9\xd1\x77\x4f\x73\xf1\x48\x98\xe0\x0f\x22\x92\x33\xe7\x04\x9c\x1b\xb8\xec\x58\xaa\x86\x76\x89\x73\x2d\x43\xd4\xae\x64\x34\xe8\x98\x08\x5c\x35\xd9\x34\xe4\x45\xbf\x72\xb2\xab\xb8\x68\x70\xed\x03\xde\x85\xed\x54\xcb\x74\x5a\x27\xd3\xa5\x21\xb7\xdd\xc5\x40\xb6\xb3\xab\x7b\x87\x95\x27\x8b\x42\x0e\x72\xd3\x1f\xc7\x14\x95\xf5\x23\xcb\xbf\xd3\xa6\x79\x3b\xe7\xb5\xbe\xc2\xd0\xda\x6f\xcf\x5b\x8c\x5e\x97\x35\xfa\xfe\x42\x7f\x34\xbe\xba\x76\xb3\x3b\x39\xca\x7f\xc6\x24\x80\xe2\x0f\x95\x1e\x6e\xfc\xf1\x5c\xfd\xc9\x1f\x06\x08\x5f\x88\x47\xca\xe5\x56\xfc\x6d\x08\x7a\x75\xef\xd1\x55\x62\xa6\x61\xd8\xce\x5e\xd5\x47\x62\x0d\x62\xed\x0a\xd4\xd8\x69\x39\x72\x18\x8e\x8c\x99\xf1\x55\x52\xd3\x3f\x31\x19\x3f\x67\x22\x97\xb9\xd4\x07\xb6\xd1\x4f\xea\x4a\x4d\xbb\xcd\xb1\x00\x91\x40\xae\xb3\x57\xf5\xb1\x80\x85\x6a\x3f\x6d\xa8\x42\xad\x69\x9f\xad\x48\xe7\x94\xec\x24\xd6\x5c\x30\x81\x23\x83\x72\x5b\x55\x2e\x0c\x37\x73\x85\x18\x71\x45\x65\x20\x76\x42\x5c\x26\xd1\x33\xa1\xae\x0e\x34\xa7\x13\x94\xfe\x3d\x41\xe2\xe8\xfc\x6c\x25\xec\xc6\x2e\x56\x23\x49\x0b\xab\x08\x26\x18\x09\xe6\x9c\x40\xf9\xaf\xcb\xb4\xeb\x38\x7f\xa4\xff\x74\x99\x39\xe7\x09\x70\x59\xd1\xac\x26\x56\x55\x85\x31\xa3\x32\x42\xc6\xa5\x93\x07\x47\x2e\xe2\xff\x01\xfc\x3f\x01\xff\x4f\xcc\xff\xe3\x4d\x1e\x1c\xa9\x59\x67\xfe\x8a\xb8\xe4\xaf\x88\x85\xbf\x22\x9e\xd8\x76\x53\x0c\x86\x5c\xe9\x7c\xcf\xca\xbb\xd9\x50\x92\xc4\xb9\x4b\x74\xdc\xb2\xf4\xf5\xc5\x93\xb8\x20\xd8\x4b\x4d\x0e\x33\x12\xbf\x00\x12\x05\x57\xcd\x33\xe2\x9d\xf8\x9d\xb6\xd6\x11\xff\xd7\xd9\xab\x6a\x2c\xd8\xc2\x97\xac\x9e\x74\xb7\x4d\x09\xab\xad\xb3\x57\xf5\x85\xe8\x31\x91\x3d\x86\xb9\x39\x72\x29\x20\x92\x78\xe4\x26\x29\x71\xd1\x63\x1a\x6d\xd2\xa9\x03\x4e\x0a\xd3\x68\x47\x8c\x62\x71\xb9\xb5\x4a\x4b\x90\x1b\xe9\xa7\x2a\x3c\xd6\x71\x17\x13\x91\x56\x20\xbb\x51\x71\xf9\x60\x63\x2c\xb3\x1d\xfb\x2e\x59\x62\x18\x8f\xe1\x48\xfc\xab\x0f\x62\x12\x25\xe3\x68\x32\x99\x90\xd1\x89\x78\x76\xca\x00\x83\x23\xf5\xe6\xcb\x97\xda\x57\x6f\xe0\x52\xf5\x72\xbc\x04\x88\x21\x3c\x7f\x0f\x2f\x11\x5c\x56\x74\xc6\xd9\x3c\x96\x6f\xd5\x27\xef\xe1\x6f\x22\x37\x46\x45\x63\xfd\xca\xe5\xf3\xfd\x19\xd0\x93\x1c\xa4\xc9\xfe\xfe\x60\x4d\x68\x9d\x7c\x8f\x05\xa8\x93\xfd\xfd\x66\xc0\x73\x1f\xa7\xf0\x57\x7e\xa6\xdf\x5e\xbb\xb3\x0e\xec\x90\x26\x97\x59\x38\x7b\x55\xed\x05\x33\xcc\x1c\x37\x14\x7f\xc9\xb3\x20\xff\x5d\x60\x80\x07\x35\x33\xdf\xdf\xef\xd8\xf0\x0d\x5c\x8a\xc8\xbb\x07\x87\x6e\x30\x49\x4a\xfd\x37\x21\x67\x7f\x7f\x80\xf8\x77\x71\x97\xef\x34\x76\xf6\xf7\x07\xa0\xc8\xc5\xf5\xdc\xe0\x4d\xc0\xfe\x7e\xc2\xb7\x10\xbe\x28\x22\xc1\xec\x7e\x91\xd9\x7d\xc9\xec\x89\xab\x70\x3a\x0e\x0b\x8c\x4e\xab\x59\x16\x15\xd9\x12\x54\x73\x5f\xd0\xc8\x42\x71\x0d\x8f\x78\xfa\xf9\x1b\xb8\xe4\x1b\x8a\xee\xcd\x97\x11\x42\xfc\x11\x57\xbd\xd5\xe3\xfa\xf3\x44\x7a\x48\x70\xae\xdd\x45\x07\xc6\x32\xb2\x5e\x45\xce\x5e\xd5\x17\x82\xb5\x16\x9c\x64\x06\x6b\x2d\xb8\x52\x80\x0b\xdb\x61\x0f\xa7\x10\x78\xc9\xf5\x9d\x69\x42\xef\x28\xc6\x45\x3e\x7c\xc1\xa1\x80\xbe\x7b\x25\x8e\x18\x74\x61\x26\x1d\x34\xf5\x14\x16\xa3\xf9\x1c\xc6\x23\x10\x45\xc1\x6a\x20\xc3\xe2\xb2\xc0\x71\x57\x45\xea\x4f\x61\xdd\xf7\x04\xd7\x7d\x9a\xe0\xf6\x8f\x67\xb3\x9a\xaf\x7b\x44\xc3\x68\x6d\xaf\xec\x83\x23\x12\x6e\x88\x74\x8a\x9d\xdd\xd0\x6f\x25\x05\xc7\x4e\x38\xa2\x7b\x49\x1c\x43\xcc\x7e\x92\x47\x1a\x11\xbc\x6d\x9e\x80\xc4\x83\x6e\xf1\x3a\xa6\xf6\x7a\x75\x7d\xdd\xcd\xc5\x5d\x28\xac\x5b\xf4\x6f\xef\x75\x06\x10\x66\x37\x89\x89\x4e\x27\xce\xde\x8e\x72\x9b\x03\x75\x13\x4e\x3a\x69\x9a\x14\x63\x1c\x41\x8e\xec\x1e\x2a\x09\x82\x07\x13\xf8\x14\xc3\xa5\x55\x11\xa7\x0b\x9d\xb1\xf8\x34\x86\xfc\xf0\x3f\xb8\x99\x5f\x4b\x01\x99\x37\x71\x1c\xbf\x76\x55\x70\x94\x69\x57\xaf\x70\x6d\x2d\x18\xd1\xd6\xbe\xe1\xec\xe1\x4a\xde\xc0\x32\x46\x87\x04\x4f\x09\x88\xfd\x1c\xfc\xca\x46\x24\x93\x72\x77\xf1\xd1\xd1\x77\x01\x39\xc4\x19\x89\xaf\x0e\x0c\x24\x32\x89\x34\x49\xc6\x8e\xb3\x68\x30\x2c\x6f\xc3\x47\xbb\xdf\x4a\x36\x17\x88\x88\x35\x43\xf4\x27\x12\x4f\x91\xef\x43\x2c\xd2\xe1\x3a\xc2\x10\xd8\x3d\xdb\x6d\xd3\x02\xcb\xe5\xbe\x4d\x57\x58\xdf\x48\x80\x0a\x06\x35\x2d\x2d\x9b\x74\x89\x87\x23\xe4\xf3\x15\x31\xb4\x1f\xf2\x3f\xcb\x59\xb3\x3b\x19\x94\xfa\x04\x94\xe4\x90\xd1\xe9\x16\xa5\x3b\x3a\xfa\x88\x07\x29\xe6\xc5\x22\x6a\x86\xc3\xd8\x9e\xf2\x40\x20\x7c\x89\x18\x50\x21\xf7\x5d\xf7\x2d\xa6\xe3\x06\x4e\xcc\xed\x56\x05\xa5\x97\x33\x50\x1b\xf6\x6b\x33\x7e\x3c\x2f\x51\x05\xc8\x32\xbc\xdf\xec\x94\x13\xa6\x3e\xf1\x42\xd9\x78\xad\xd7\x15\x73\xf6\x4a\x66\x80\x3a\xeb\xbc\x6d\x4f\x26\x13\x2c\x2d\x35\x87\xb6\x36\x48\x96\x44\x78\x9e\x64\x2a\xb2\xa3\xfd\x02\xdb\xe0\x6c\xc9\xa8\xc9\x0d\xf9\xb4\xd2\x02\xab\x58\xb4\x98\xd9\xa4\x60\xde\xc4\xe2\x0c\x70\xed\x86\x00\x83\x39\xec\x2c\x1b\x0f\x64\xfb\xdd\x16\x91\xd7\xee\x3c\x06\x98\xbd\x5d\x62\x7e\xea\xd2\x93\xee\x21\xab\xe4\x24\x0f\x84\x29\xa5\x7a\x4f\xd3\x1e\x08\x3d\x32\x4f\xcd\x03\x32\x05\xc1\x5d\x25\x06\xd8\xa0\x6a\xde\x92\x25\x4f\x45\xef\xd7\x7b\xab\xa7\x15\x4c\x9b\x15\x78\xb9\x27\x35\x78\x9f\x9f\xbe\x3e\x7b\x27\x73\x33\x15\xb3\xf4\x17\xd6\x37\xa2\x7f\x16\xb8\x3f\xf6\x43\xb1\x93\xb5\x72\x81\x24\xd5\x81\xaa\x90\xd3\x14\x1d\x04\x2e\xa1\x01\x06\xbc\x15\x38\x5a\x3c\xa1\x45\x88\xd4\xd4\xc8\x2d\xd0\x02\x53\x67\x68\x72\x59\xed\x6a\xbd\x88\x38\x4c\x15\x71\x43\xaf\x90\x07\x31\x85\x9b\x83\x26\x90\x1d\xd6\x03\x52\x76\x67\x12\x1b\x95\x06\xa4\x95\x56\x37\x80\x24\xa5\x90\x01\x89\xa4\x18\xd4\x7e\x29\x69\x5e\xb1\x2d\xf1\xae\x2a\x01\xd4\xc2\xbb\x06\x18\x5b\xe2\xdd\x02\x1c\x2d\xbc\x4b\x57\xd8\xfb\xab\xaa\x27\xb2\x39\x56\xd1\xcb\x68\x85\xbd\x03\xa3\x92\x51\x2d\x6e\x0a\x21\x0d\x2b\xec\xbd\x7a\x7e\xfc\x6e\xe3\xf0\x04\x3e\x88\x04\x50\xdd\x61\x89\x62\x61\x8a\x14\xe0\x6c\x8e\x81\x4d\x78\xd4\x08\x9d\xe2\x0e\x72\x46\x8b\x12\xda\x44\x15\xa4\x53\x61\xf8\xdd\x96\x7c\x16\x43\x1c\x28\xe3\x72\x23\xb3\xc7\x10\x09\x5f\xdc\xad\x02\xa2\x06\x29\xe2\x8e\x33\xb6\x2c\x2b\x66\xa8\x20\x05\xcb\xc3\xbb\x98\x84\x88\xc2\xc1\x80\xb9\xd8\x99\xfc\x78\xd5\x15\x44\x33\x4f\x58\x1d\x03\x7c\xf9\x82\x07\xe5\xbb\xf5\xb4\x4a\x7c\x96\x3c\x90\xd6\xab\xc8\x9d\x72\xca\xba\x68\x62\x24\x81\x74\x6d\xa5\xf2\x1c\xc8\xc9\x3f\x15\xad\xf2\x15\xe0\x81\xc8\x6c\xf2\x9f\xaf\x5f\xfd\xcc\x58\xf4\x5e\x62\x75\x0f\x8c\x48\x04\xf1\x40\x31\x1e\x72\x5c\x51\xcb\x45\xbd\xfd\x59\xe4\xd2\x1d\xd8\xca\xdf\x73\xc8\x25\xac\xed\x96\x8f\xff\xfc\xab\x58\x65\xae\xe5\x6d\x26\xf6\x34\x20\x53\xdb\x05\x23\x22\xd3\x87\xe4\xd3\x20\x3d\x3a\x3c\x9c\x4c\xe4\xf4\x25\x3b\xe5\x4c\x48\xba\x23\x17\x37\xe6\x3f\xc1\x95\xf9\x4f\x9a\xd2\x9f\xa4\x3e\x0f\x80\x63\x5d\x67\xda\xd5\x73\x34\x32\xca\xce\x50\x00\x31\x08\xa1\x91\x9c\xeb\x1b\xfb\x1b\xd7\x16\x54\x6b\xc8\x9d\x02\x39\x54\x22\x77\x0a\x75\x71\x96\x3b\x85\xb8\xb8\x4b\xee\x14\xda\x94\x3b\x05\x3b\x2e\x3f\xd3\x5c\xc3\x80\x42\x4b\xa4\x30\xe2\xb8\x15\xe6\x68\x13\xb9\xea\x0d\xe5\x5a\x68\x49\x7e\x28\x9b\x96\xd0\x03\x8b\xf9\x6e\x7e\x22\x71\xf8\x1c\x30\x90\xda\xec\xe4\x29\x46\xb5\x1e\xca\xc2\x6c\xcc\x71\xeb\x57\x12\xd9\xfc\x4a\x22\x83\xb2\x5b\x48\xc5\x4a\x42\x37\x5d\x49\xc0\x58\x49\x34\x5b\x49\x6a\xf2\xa5\xa5\x84\x5c\x7b\x9f\xc4\x73\x33\xcc\x7e\x44\x2e\x61\xbc\x8c\x11\x83\x6f\xe3\xb9\x6b\xef\x8b\x52\x91\xb9\x06\x31\x94\xdc\x22\x12\x1b\x38\x6e\x50\xb5\x16\x83\xdc\x5a\x04\x8e\x1b\x54\xac\x9f\xd2\xe2\x79\xca\x06\xce\x98\x70\xc2\x07\x55\x2c\xa1\xde\x08\x96\xc0\xca\x21\x55\xa4\x2a\x06\x6c\x93\x7a\x59\xd6\x69\x69\x37\xcb\x59\x37\x8a\xea\x99\x36\x52\x76\xf2\x49\x65\x49\x74\xa0\x3e\xa8\x90\xfb\x3d\xae\x79\x44\xb9\xcf\xfb\xc4\x42\x37\x4b\x2c\xa4\x90\xb8\xb5\x5b\x17\xd5\x7f\xf7\x4b\x17\x79\x1b\xd1\xae\x47\x28\xb8\x6f\xd3\xa8\xd2\x6b\x2e\x69\x7c\xe7\x9a\x97\x20\x62\xb0\x3b\xc8\x9e\xd3\x8f\x60\x3d\xee\x3b\x0a\x13\xaa\xcf\x9b\xf3\x67\xde\x50\x25\xca\x58\xab\x67\x11\xfc\x27\x3e\xef\x63\x2a\x5f\x87\x19\x86\x72\x9c\x1e\x3c\x21\x72\x4d\x77\x33\x7b\x57\x4c\x8b\x7f\x5d\x13\x31\x90\x2a\xce\x01\x04\x97\x5d\x63\x42\x2b\x86\x10\x9f\xb7\x46\x25\xf4\xf0\x7e\x40\x5e\xbe\x5a\xcd\x6d\xda\xf0\x74\xfa\x95\x97\x1e\xc1\xaf\x10\x65\x15\xf7\x9c\xa6\xcf\x22\xab\x72\x02\x64\xa6\x2b\x08\x1c\xf1\xae\x84\xf2\x72\xca\x40\xec\xb8\xb5\x6f\x93\x88\x4f\xb7\xbe\xc1\x6b\x99\x66\xb1\xbe\xc1\x71\x14\xd1\xfa\xb7\xcf\xc8\xe7\xfa\x97\x7f\x46\xb3\x86\x91\x9f\x43\x8a\xe6\xb8\xa1\xeb\x24\x98\x36\xc1\xcd\x62\xe4\x35\x40\xf6\x0e\xc1\x93\x05\x68\x9a\xfa\x33\x10\xb7\xb4\xf8\x09\x61\x80\xbd\x06\xe4\xbc\x02\x0d\x20\x9e\x10\xbf\xe1\xd3\x9f\x61\x10\x35\x4c\x0f\xe0\x04\x04\x0d\xd3\xfb\x29\x20\xcb\xfa\xb7\x6f\x93\x86\x59\xbd\x6c\x40\xfa\x3b\x10\x33\x0c\x1b\x18\xea\x6d\x3c\x6f\x98\x13\x09\x1b\x66\xfc\x12\xcf\x10\x46\xac\xa1\xc5\x19\xf1\x49\x03\x6c\x31\xf1\xa0\x9f\xc4\x0d\x1d\xbc\x4d\xd8\x9c\x20\xdc\x00\xe2\x4b\xec\x91\xb0\xb1\xc5\x59\x0c\x2e\x61\x50\xff\xfe\x17\x84\x1b\x31\xf4\x9e\x00\x3f\x04\x4d\xb4\x25\x18\xae\x1a\x96\x2c\xf4\x92\x18\xb1\x86\x16\x67\x09\x6e\xc0\xc1\x9f\x13\xd4\xc4\x77\xa7\x21\x0a\x1a\x5e\xbf\x27\xde\x05\x6c\x60\x9e\x33\xd4\x44\xe2\x93\xa4\x91\xa7\xe3\x0b\xc8\x1a\x71\x7f\x8c\x31\x49\x1a\x57\xdc\x73\x78\x49\x9a\x04\xd2\x2f\x24\x0e\xfc\x06\x1e\x0a\x40\x03\xf7\x9f\x90\x30\x22\x58\x79\x10\xd5\xf5\x00\x49\xd4\x84\xc0\x93\x05\xf4\x2e\x02\x24\x92\xe2\xf7\x39\x46\x5c\x78\x43\x69\x72\x6d\xc8\x79\x54\x2e\xb8\xbd\x63\x09\x8f\x6e\x70\xfb\xa4\xed\xbb\x7d\x1c\xbc\x64\x51\x0f\xe1\xdb\x25\x2a\x66\xb4\x1a\xe9\x64\x91\x33\x7e\x4e\x2d\xc4\x60\x65\x1b\x71\x6a\x67\x76\x74\xa4\x96\xb8\xf7\xae\x6c\x90\xab\x10\x0d\xab\xdb\xec\x65\x86\x91\xd4\x40\x6e\x94\xfb\x29\x5b\x23\xb2\xca\x25\x7c\x04\xe3\x52\x3d\xb3\x80\x63\xf3\x3e\x3d\x1b\x6b\x24\xb1\x36\xa2\x89\xa8\x7f\x20\x13\x40\xd4\x80\x75\xed\x8c\x54\x3d\xe7\xc9\x8f\x57\x4c\x5a\xf1\xb9\xd6\x46\xe6\x08\x77\xc1\x63\x66\xec\x94\x98\x97\x0a\x2d\x51\x4a\x2b\x9d\xe4\xea\x15\x1c\x47\xd1\x87\x38\x18\xe4\x9e\x9d\x26\x53\x9f\x84\x80\x8f\xe6\x3c\x54\xc5\x14\x34\x7c\x32\xe1\x9e\xf4\x5f\xd9\x23\xd2\x91\x65\x70\x15\x43\x1f\xc5\xd0\x63\x1f\x62\x34\xa6\xd7\xf9\x69\xc2\x81\xa3\x27\xc4\x7f\xe2\x81\x80\x5c\xfc\xb6\xc5\xe7\xd6\x0c\xa0\x40\x44\xfb\x65\x33\x25\x49\x77\x96\x29\x4d\x15\x4f\x7e\xbc\xc2\x23\xd5\x4b\x0f\x82\xe6\xa9\x53\x49\x46\xe1\xe9\x73\x46\x2e\x20\x1e\x38\x2e\x1c\x14\x68\xd5\xfa\x45\x4a\xcd\x34\x58\x26\x26\x33\x14\xc0\x9b\xcf\x15\xf8\xc2\x1f\x5a\x77\x97\x4e\x85\x49\x3e\xab\x61\x2a\xe1\xac\x10\xe9\xaf\xd2\x93\xd4\x95\x24\xbf\x28\x11\xc4\x21\x1f\x57\xce\x4c\xbc\x12\xde\x73\x0c\xbe\xf4\x8d\xfa\x2b\x23\xe4\x97\x93\x8b\xf3\x87\x4f\xe1\x08\x86\x00\x05\x63\xfe\xcb\x95\x7f\x1a\x9f\x89\x07\x15\x5f\xca\xe7\x4f\x6d\x7b\xac\xfe\x16\xce\xe1\x18\x84\xd0\xfc\x5a\x3f\xab\xe8\x20\x7d\x25\xfb\xd0\x3f\xdd\x19\x8a\x29\x2b\xf6\x23\x1e\xbe\xa9\xee\x28\x7b\xf7\x34\xeb\x66\x6c\x3c\x77\x03\x50\xee\x91\x3f\xab\xe9\x30\x7d\x95\xef\x4f\x3f\x76\x21\x06\xd3\x00\xfa\xe3\x07\x83\x07\x26\xa2\xe4\xd3\x8a\x78\xd5\xf4\x95\xf3\xe5\x4b\xfa\xa3\x57\x3e\xee\x00\x4c\x61\xf0\xc7\xb5\x99\xdd\xdc\x1e\xa6\x10\xb4\x35\x7b\x98\xea\x7f\xe3\xf6\x30\x0d\x77\x1f\x7b\x58\x1a\x17\xbd\x9e\x39\xac\xd7\x54\x6e\x6a\x0e\x13\x83\xdd\x81\x39\xac\x1f\xbd\x7a\x98\xc3\x0a\x13\xaa\x36\x87\xf5\x59\xd9\x08\x5f\xd4\x2c\xec\x10\x7d\x46\x98\x1e\x60\xc2\xd0\x0c\xc1\xf8\x76\x35\xd9\x74\xbd\xbb\xcd\xf5\x46\x37\xa3\xcc\x36\x0a\x00\x11\x87\xf3\x2c\xa1\x1d\xf2\x73\xbe\x42\xf8\xe2\x46\xf9\x4f\x44\xa4\x6d\xd9\xfc\x28\x73\x60\x01\xec\x23\xbe\x16\xba\x27\x8d\x16\xdd\xe5\x47\xc8\x67\x81\xe8\x14\xe9\x9a\x46\xf1\xf2\xe9\xe5\x6a\xe3\xb5\x0c\x5d\x1f\xd9\xd0\xea\x3e\x04\x62\x6f\x61\x4e\x38\xcd\x5b\x25\xa6\xf4\xf4\x02\xae\x96\x24\xf6\xe9\xc4\x7e\x08\xb1\x47\x7c\xf8\xe1\xfd\xcb\xf4\x34\xd8\x33\xef\x64\xd5\x6c\x11\xf6\x8d\x31\x25\x38\x5b\x18\xf4\xda\x9d\x26\x28\xf0\x39\x5e\x8d\xe1\x6c\x17\xf3\xff\x54\x38\x11\xe8\xdc\x07\x35\xbe\x04\x85\x56\xa2\xa4\x63\x2a\x25\x75\x5e\x17\xfb\xc1\x44\x85\x74\x73\xfc\xef\xef\xdb\x0c\x4c\x4b\xcf\xd2\x94\x02\xb9\x17\x5f\xbe\x0c\xf0\x44\x32\xa9\x41\xda\xf4\x75\x8e\x9f\x84\x6e\xe7\xb2\x89\xfd\xef\xc0\xe2\xc4\x4e\xaf\xd8\x27\xdf\xb0\x38\x81\xdf\xc8\x87\xfc\xd3\xa1\xf4\xb8\x45\xfe\xe4\x1b\xa3\x53\x15\x88\xee\xda\x66\x4b\xd1\x26\x37\x44\xfe\xbd\xcc\x58\x33\x4c\x93\x05\x14\xdb\x1b\x45\xea\xab\xbe\x2b\x36\x97\x8f\x4b\x8d\x57\x11\xcc\xb7\xcb\x10\xf0\x8d\x2c\x9a\x65\xbc\xc5\xae\xfd\xcd\x8f\xb9\x4e\x11\x0b\xa0\x6b\xff\xfb\x01\xf8\x51\x14\xda\x13\xf7\xeb\x93\x3c\xfe\x45\x00\xbb\xe9\xe0\xa1\x62\x37\xcc\x9c\x17\x8e\x79\x6d\x5d\x05\xf5\x3d\xf6\x3b\x60\x1f\x43\xb6\x24\xf1\x45\x15\x01\x38\x61\x18\x19\x1f\x98\xac\xce\x77\xa7\x18\x83\xe0\x8f\x8a\x5d\x3d\xbf\x52\xf3\x6c\xe2\xdb\x24\x07\x53\x2e\xac\xf8\x42\x1b\xea\x32\x57\x95\x2b\xde\xf1\x4b\x7f\x2c\x12\x4e\xa8\x62\xf6\x1f\x6d\x13\x7f\xf6\xf9\x48\x68\x1b\xae\x06\xa1\xb6\x2d\x87\x3a\x6d\x6d\xa6\x12\xae\x6b\x5f\xc2\x7d\xfa\xb5\x4e\x49\x5c\xf7\xa9\x66\x80\xf4\x03\x8d\xf8\xb6\xc1\x8c\x4f\x32\xe4\x8f\x0b\x66\xb0\x9a\x2e\x0c\x32\xda\xe7\xe2\x80\xdb\xa9\xa5\x1a\x2e\x89\x83\x5c\x7b\xe1\xd7\xa4\xde\x91\x38\x5a\x00\x3c\x7e\x70\x74\xbd\x87\x47\xf2\xc7\x24\xab\xa7\x89\x47\x92\x48\xb9\x22\x9b\xd8\x60\xcd\xc2\x0b\x85\xbc\xc2\xd3\x54\x80\xed\xef\x9b\x8f\x8d\xb5\xa7\x9c\xb9\x60\x21\x83\x89\x1a\xdc\x3c\xac\x64\xb8\x22\xce\xd3\x14\xe2\x07\x87\xe3\xf4\x6f\xa2\xfe\x70\xb1\xcc\xc6\x73\x22\xdc\xb5\x04\xe3\xa1\xd9\x80\xa9\xb7\xf9\x2a\x8c\xe5\x80\x2e\xb7\x32\x1d\x0e\x84\x17\xef\xa1\x47\x62\xdf\x88\x92\x49\x27\xed\x56\x66\xad\x31\x3e\xc9\xf2\xfa\x30\x13\x85\x2e\x9a\xa4\xc7\x30\xe2\x3c\xb5\xa9\x3d\x26\xaa\x93\x20\x11\xc5\x55\xb3\xf7\xd4\x79\x6a\xfb\xf6\x98\x9a\xef\xf7\xd0\x2c\x4d\xf2\xc6\xe5\x1e\x33\xf6\x77\xa1\x0c\xe4\x9e\x19\x95\xf0\xd3\xf4\x26\x32\x41\xe9\x84\x65\x42\x44\x28\xf4\xb8\x10\xd5\x66\xc2\xaf\x45\x1e\xca\xcd\xc5\x05\xee\x95\x28\x37\xf8\x0e\xc4\x20\xa4\xc2\x2d\x88\x43\x67\xaa\x1f\x26\x28\xfc\x9d\xde\x2f\xcb\x20\xda\x76\xc5\x69\x4b\x79\x81\x2d\x00\x95\xd5\x68\xcf\xa4\xe3\xd7\x53\x38\xb1\x9f\xca\x6a\xb3\x93\x8a\x82\x7f\x23\x6a\x36\x1e\x97\xdf\x97\x4a\xc7\x0f\x78\x87\xca\x5d\xac\xa2\x3f\xde\x5e\xf5\xe6\xb8\x6c\x94\xc4\xc1\x44\xfc\x37\x2b\x01\x9a\xcb\xee\xe7\xe6\xd2\x5b\x39\x02\xbf\x95\x55\xf7\x65\x2f\x0f\xa1\xc4\x9b\xb1\x9b\x99\xe8\x11\x97\xd5\x0d\x35\xe5\xb8\x0a\x0e\x62\x08\x6c\x23\x85\x8d\x58\xee\x13\x66\x0a\x7e\x38\xa2\x22\xd1\xa3\x14\x0b\x03\x3b\x86\xc0\x27\x38\x58\x89\xaa\xa5\xae\x2a\x4a\x37\x8a\x88\xe4\x80\x89\x0d\xa6\x94\x04\x09\x13\x59\x5f\xe4\xbb\x00\xce\xd8\xc4\x1e\xfe\xf0\xc3\x0f\x3f\x44\x9f\x9b\xcb\xd5\x89\xd1\x02\xbe\x07\x18\xbe\x91\xf0\x33\xf4\x4e\x48\x18\x02\xec\x0f\x6c\x8f\x44\x2b\xbb\xb9\xe8\x9c\xe4\x4b\x41\x0d\x71\x8c\x5d\xbd\xc4\x33\x32\xb0\x4f\x48\x84\xa0\x6f\x69\x44\x5a\x8c\x58\x5e\x80\x22\xe9\x5c\xe6\x5c\x2b\x4f\xcb\x35\xb8\xb9\xdf\xd1\x9b\x78\x20\x18\xaa\xcc\x70\x77\xe5\xea\x90\x45\xa9\x5e\x99\x9e\x63\xd2\x42\x2d\x02\xb2\x0b\xf1\x7e\xe3\xbc\x11\xc0\xfc\xe8\x23\x3c\x9f\xc8\x1d\xbc\xba\x7d\x7a\x6a\x2c\x7c\x74\xed\x8a\xd1\xea\x3e\x92\xd6\x91\xf2\x47\xf2\xdc\x7d\x2a\x05\xd9\xcf\xc8\x37\x6c\x44\xb9\xb6\x1c\xf5\xc3\x05\xf2\xe1\xd0\x2c\x91\x5b\xbd\x49\xb0\xdc\x56\xc4\x9c\xa7\x1f\xcf\xc7\xbf\x8e\x68\x14\x20\x71\x5e\xfe\xa2\x6a\x7e\x16\xc7\xcd\x67\x5f\x2d\x0d\xb6\x77\x28\x17\xa4\x48\x19\xf8\xb4\x6a\x3e\xf8\x7c\x5c\xf8\x3d\xf9\x55\x16\x98\x37\x46\xfd\x09\xc5\x94\xbd\x4f\x70\x91\x56\x33\xf5\x7c\xf2\xe0\xf0\xda\x45\x54\x37\x1b\x0f\x9c\xc9\x8f\x05\x5b\x70\xe5\x77\x8e\x9b\xe0\x7c\xf7\x15\x20\xa6\xad\xfb\x5c\x92\x06\x64\x3e\xcf\xa7\xd4\xb8\x4d\xde\x06\x62\x9c\x1c\x2f\x71\x49\x48\xb8\x20\x22\xf3\x01\x3f\xe8\x8b\xeb\x8f\xc6\x16\x08\xcf\x48\x53\x83\x1e\xd8\x20\xf1\x1c\x60\xf4\xbb\x0c\xfd\xfd\xc3\x87\x27\xb6\xd5\xb4\x79\x1b\xcf\x3b\x19\x92\x4c\xac\x6d\x2c\x55\x46\x9e\x14\x1d\xcd\xb4\xc5\xdc\x14\xc8\xaf\xb0\xf8\xa4\x26\x98\x42\xa1\x7c\x55\x1f\x77\xac\xcc\xd7\x69\xb9\x5c\x57\x56\xd0\x57\x8f\x55\x2d\x60\x37\x04\x9f\xcf\xc0\x9c\xa6\xad\xe5\x4f\x5b\xa4\xd3\x54\xa9\xf7\x5e\x28\x1b\x90\x6e\x53\x7e\x63\x3b\xd7\x4d\x49\xf0\xaa\x11\xdb\xa3\x14\x8c\x24\xe2\x29\x64\x0c\xe1\x79\x47\xd7\xc1\x1a\x6a\xba\xf6\x01\x95\xfd\x3c\xbd\x80\xab\x49\xa7\xba\x12\xc6\x25\xae\xc8\x98\x40\x45\x41\x5d\x13\x9e\x4e\x36\xd2\x9b\x40\x54\x1f\xb2\x95\x56\xd1\x93\xb1\x0f\x29\x50\x7d\x01\xca\xc1\xd0\x81\xf9\xab\x90\x52\x00\xa1\x3f\x9d\x5a\x81\xa8\xc7\x83\x5c\x39\x09\x85\xcf\xa5\x8c\x7a\x45\xe6\xe4\x26\xcb\xde\xb5\xf9\xa6\x42\xec\xea\xc1\xed\x9e\xb1\x00\x11\xc2\x18\xfa\x77\x2c\x8b\xef\x4c\x08\x23\x8c\x18\x12\x02\xd1\x1f\x3f\x38\xea\x9a\xa4\x09\x61\x3a\xf9\x78\x9e\x56\xea\x7c\x87\x30\xad\xca\x03\xa4\xce\x3d\x59\xca\x87\xda\xa3\x59\xe1\x28\xf5\x34\x6b\x61\x00\x68\x3b\x75\x39\x84\xb2\xe6\x1c\x34\xdb\x31\x4f\x6b\x45\xa6\x8a\x50\xc7\x2d\xa4\x21\xb1\xf9\x7a\x25\xc3\xfa\x96\x28\x40\x5d\xb7\x25\x37\x73\x38\x32\xd1\xe5\x3e\x38\x34\x5f\x09\xd4\xb8\xc2\xc7\xcd\x19\xd7\x20\xd2\x80\xdb\xb9\x76\x23\x24\xd3\x7b\xa4\xfb\x5d\x13\x6d\x75\x20\x51\x05\x18\x47\xb9\x34\xd8\xd5\x24\x6f\x0f\x31\xca\x11\xae\x9b\x04\xee\x7d\x67\xdb\x1d\xe7\xd7\x6e\x82\x77\x19\x3f\xf9\x0b\x81\xea\x88\x09\x79\xad\x9e\x55\xb4\xe8\x33\x8d\x0d\xc3\x9a\x15\xc9\xe8\x4f\xd7\xaf\x72\xa1\x9a\xab\x91\x9f\xd8\xf4\xf5\xf1\x3b\xb1\x1d\x75\x0f\x5e\x2e\xa5\xf1\x6e\x13\xba\x99\xc0\x36\x1d\xc5\x74\x22\x5f\xf9\x4b\xf4\x64\xe4\xc8\x25\x69\xe2\xd3\xcc\xd2\x21\x5e\xc0\xfd\x7d\x36\x30\xf2\xe4\x8a\x39\x0e\x6c\x5b\xf9\x6d\x20\x2a\x62\x28\x76\x75\x4e\x32\x03\x51\x79\x62\x59\x9a\x57\x9d\x09\xbb\x75\xaa\x3d\x14\x0e\x79\x93\xfc\x07\x38\xfc\x35\x2a\x16\xfa\xfa\xbc\x43\x58\xa7\x44\x47\xa7\x65\xdf\x52\x1a\xf0\xae\x25\x81\x4f\xbc\xa1\x9c\xcf\x30\x86\x34\x09\xd6\xac\xec\xd9\x8b\x99\xbc\xa2\x29\xe1\x5f\xc8\x2f\xaf\xbb\x93\x9b\x2e\x68\x73\xcb\x71\x9f\x29\x79\x3a\xbb\xba\x09\x27\x9b\x7c\x96\x7c\x58\x96\x50\x2e\x9d\x64\x47\x7e\xbd\x20\x64\x52\x08\x3d\xd3\xa7\x69\xfb\xe7\x13\xd3\x8f\x60\x5f\x35\x98\xe4\xbc\x07\xf6\x25\x56\x26\x9d\x12\x59\x0a\x7f\x47\xd4\xad\x90\x60\x29\x59\x44\x3a\xc9\x33\xf8\x99\xfd\x91\x27\x5a\x55\xe3\x24\x86\xb3\x18\xd2\x45\xce\xaf\x48\x55\x5a\x52\xaf\x2a\x67\x73\x23\x67\xa6\x6e\x8c\x9d\x2f\x77\x63\x36\x31\x2a\xdd\x1c\xee\xef\x0f\xb6\x57\x68\xcd\x31\x0a\x47\xa4\x85\x30\x81\xef\x3f\x0b\x88\x77\xd1\x21\x0b\xb0\xc6\xe4\x94\xb7\xa7\x7d\xca\xd1\xf4\x3c\x25\x88\x01\xfa\x78\xe2\xb6\xce\xa0\x5c\x78\x4b\x4e\x62\x63\xc6\xce\xde\x20\x0b\xc5\x4d\xc0\xdd\x31\xf1\x68\x01\xf0\xde\x69\x8d\x37\x2b\x78\x7b\xcd\x37\x3d\x0a\x6d\x82\x4e\xc2\xe7\xad\x5f\x25\x6d\x31\x6c\xee\x82\xa1\x28\x1c\xca\xdc\xb0\x5e\x55\xed\x1e\x57\x93\x7a\x7b\x6e\x0a\x6e\x0b\x11\xf5\xd2\x0c\xe9\x14\x85\x51\x00\x45\x44\x5c\xb9\x97\xdb\xcc\x8c\x7e\x03\x5b\x59\xd2\x98\x4c\x31\xe9\x90\x49\xb1\x4b\xee\x0d\xe9\x07\xf2\xae\x98\x21\xbd\x22\x8b\xba\xe1\x82\x30\xb6\x6d\x37\xef\xc1\xa0\xba\xf7\x48\x18\x25\x0c\xfa\x82\x29\x53\x87\x05\xd7\xc8\x01\x53\x36\xcc\x19\x8e\x0d\x8a\x91\xba\x97\x3b\xe3\xb4\x58\x00\x7a\xec\x79\x24\xc1\x8c\x96\xa0\x40\xf4\x38\x67\x0e\x70\xed\xe6\x34\x3c\x02\xab\x6e\x29\xab\xbf\x6d\xb4\x22\xf1\x18\x60\x82\x57\x21\x49\xa8\xf0\x07\x69\xb2\x40\x90\x98\x9f\xe0\xca\x4d\xea\x47\x1f\x01\x35\x17\xdb\x31\x27\x09\xea\x66\x68\xcc\xbe\x02\xf0\x0a\xf3\x66\xa7\xa1\xaf\x25\xfb\x6d\x1e\x9f\x39\x93\x4d\xb1\x37\x4e\xec\x72\xfc\x9b\xe4\x90\xd7\xc4\x87\xb6\x53\x6f\xd8\x6d\x18\xdf\xf9\xf2\xe5\x0a\xf9\x63\xfb\xd0\xbe\x76\x5b\x44\xb5\x84\xb7\x8b\xa4\xe6\x34\x31\x87\xaa\x58\x00\x6b\x30\x5a\x55\xc0\x68\x0d\x5b\xb5\x23\x6b\x7f\x7f\x70\x43\xc6\xb5\x0f\xab\x1b\x36\xf0\x90\x36\x47\xa8\x7c\x4d\x9b\x41\xcb\xdd\x4c\x63\x7f\xff\x41\x9a\xdf\xaa\xf3\x12\x92\x49\xaa\x04\x02\x5e\xf8\x88\x43\xfb\x2f\x86\x01\x28\x66\xad\x50\x60\x64\x5a\xfb\x57\xc3\x83\x4a\xfb\xcc\xf1\x70\x89\xe0\xf2\x18\x83\x60\xc5\x90\x57\x96\xe0\x7f\x70\x3c\x00\x3d\xf1\x14\x15\xcf\x01\x5d\x08\xdf\xb6\x7f\x35\x54\xf0\xc9\x8b\xa4\x7b\x29\x2a\xc4\xaf\x7f\x6d\x34\xa4\x9e\xa8\x9b\x41\x83\xd5\x63\x07\x35\x53\x3f\x56\x6d\xa0\x4f\x6d\x7b\x5c\x8b\xd6\xca\x59\x17\x46\xf8\xf2\xc5\x3e\xac\x6e\xd8\x82\x56\xe1\x22\xdf\xf1\x23\x95\x3a\xf2\xda\x69\xbd\x31\x37\xb2\x16\x64\x9d\xd7\x96\x09\xb9\x76\x29\x84\xf8\x0d\x5c\xfe\x5d\xba\xf1\xe4\xbe\x2a\xf9\x1b\x67\xaf\xd2\x49\xe4\xf8\x29\x4d\x50\x35\x7a\x71\x09\xe3\x15\xc1\xf0\x83\xba\xff\x28\x7e\x9b\x56\x43\xe6\x0d\x06\x15\xfd\xe6\xca\x29\x88\x0b\xac\x00\x50\xa6\xa0\xb4\xdd\x32\x4d\x95\x1f\x92\x70\x75\xae\x18\x4a\xf9\x51\xf1\x33\xf0\x02\xd0\x5f\x16\x80\xd1\x37\x70\xd9\x9a\xee\x00\x4e\x7e\x7c\x30\x78\x50\x8b\x12\x93\xb9\x52\xd0\x27\xdd\x50\xb2\x36\x4e\x70\x76\x63\x95\x1e\x45\x45\x31\x3a\x4d\x43\x75\x69\x64\x22\xcc\x69\xc2\x98\xfb\xe0\xc8\xd9\x83\x03\xe2\x5c\x3b\xbd\x8a\x1e\x30\x18\x46\x81\xc8\xc0\xf9\xc7\xbe\x5a\x42\x21\x9f\xdb\x29\xb8\x84\xfe\x99\x9a\xf2\xb8\x68\x5d\x50\xc5\x44\x34\x4a\x68\xfe\xb6\x59\x1e\xc0\xcd\x0b\x72\xd7\x7e\x2a\xc2\x98\x38\x5f\x76\x89\x2a\x27\x95\xf7\x55\xb8\xa7\x55\xae\x6f\x9d\x7b\x61\x98\x33\xe7\xdd\xcd\x36\x57\x81\x85\x5d\x76\x7c\x59\xa3\xfa\xbf\xc8\xaf\x4f\x35\x56\xf2\x4c\x70\xf5\x3c\xb5\xa8\x8f\xa1\xfb\x06\x84\x70\xcc\xdc\x17\x9f\x3d\x18\x47\xac\xa9\xaa\x7a\x19\x7d\x9d\x2e\x29\x49\xea\x9b\xa0\x6d\xd8\xc5\xeb\xbc\xbd\xfa\x25\x2c\x37\xd8\x3f\xf6\xf2\x6d\x49\xa6\x91\xa2\x5d\x24\x51\xb6\xdd\x2b\x26\xec\xf4\x37\xb8\x15\xee\xc0\x72\xdd\x6d\x10\xea\x4a\x22\x09\xba\xd9\x89\xc5\x24\x0e\xa4\xc4\xaa\x9a\x0b\xac\x48\x8f\x5c\xe4\x1f\xed\x66\x67\x18\x86\x65\xb7\x3d\xcd\xc1\x72\xf0\x35\x2e\x0f\x7a\x61\xa7\xfb\x9d\xac\x98\xc4\x53\x91\x37\x1a\x4e\x8e\xec\x0c\xa6\x41\xe5\x0d\x40\x2f\x19\xd2\x03\x64\x55\x69\xed\x84\x84\x91\x4c\xc1\x91\x39\xc7\x0e\xe0\x04\x8e\x58\x8c\xc2\x81\xe3\x98\x77\x60\x70\x52\x19\xfc\xef\xb8\x59\x59\x72\x56\x4a\xea\xc3\x44\x59\x72\x36\x39\x3a\x3c\x6c\x72\xc9\xce\x61\xe5\x70\x7f\x86\x02\x06\xe3\x89\xe9\xfd\xba\x1f\xa0\x10\xb1\xdc\x0d\xe6\x1d\xe3\x4e\x5c\x16\x89\xe3\x45\x89\x47\x4b\xf7\x40\x5b\xbf\xc9\xec\xb9\xdb\xf4\x61\xee\xca\x00\x00\x17\x97\xd6\x63\xb7\x22\x90\x4a\x18\xd4\xdf\x10\x55\xca\x35\x7d\x57\xf5\x0e\x50\xba\x24\x85\xfa\x8e\x45\xb9\xe0\xda\x07\x91\x6a\xd7\xa0\xd4\xe8\x22\x8f\x66\x15\x47\x59\xfa\xf2\x66\x02\xa7\x74\xff\x64\xc8\xb5\x7a\x6c\x1b\xd1\xaf\x92\x36\xb6\x31\xac\x33\x92\x57\x66\xaa\x85\x74\x99\x20\xf1\x9c\xb0\x0c\x1f\xc2\xe2\xad\x36\x1f\x15\xc5\x95\x96\xc0\xcb\x3b\xbd\x8a\xf8\x72\x1b\xe1\x4b\x10\x08\xb7\x32\x39\xd9\x02\x1d\xae\x54\x6a\xb2\xeb\x0e\xb9\x86\x54\x8e\x06\x09\x51\xa5\xba\x50\x4a\x33\xa4\xf0\x4d\x21\xcb\x53\x54\xfa\xd6\xe8\x1e\x45\x83\x2a\xfc\x17\xe7\xf9\xe5\x4b\xfe\x09\x73\x9e\x36\x4d\xb9\xde\x51\x1a\x57\x2a\x3b\x4c\xa6\x86\x63\xde\x42\x2d\x77\x43\x58\x6e\x48\xf6\x1d\x88\xee\x9f\x2a\x21\xd7\xec\xf0\x6b\x62\xb3\xa1\xce\xc0\x2e\x49\x90\x2e\xce\x5d\x42\xc7\x12\x61\xa1\x90\x1e\x18\x8e\x25\x55\x85\xa9\xf3\xd7\xae\xf9\x2f\x7d\x10\xf1\x6d\xe4\xf6\x3c\xbf\x5a\xaf\x97\xb3\xa3\x48\xcd\xb4\xb6\xa9\xf1\xfe\x7c\xf6\xfa\xd5\x33\x10\xd3\x91\x86\x62\x20\xee\xa8\x96\xf0\xe7\x17\xec\xc3\x67\x60\xbb\xe2\x9a\x7d\xfc\xcd\x95\x4d\x57\xe1\x94\x04\xd4\x1e\x7f\x3c\x77\x45\x41\x7d\x11\x25\xcd\x7f\x7f\x3c\x72\x3f\x3e\x7a\xec\xda\x24\x61\x81\x4c\xed\x0a\x02\x0a\xcf\xdd\x8f\x87\xae\xfd\xe9\x13\xb6\xcf\xcf\x5d\x7b\x01\xe8\x8b\x4b\x10\xd8\x63\xf1\xee\xfa\x1b\x59\x49\xff\x2a\x14\xf0\x8a\x03\x48\x0b\x42\x46\x8b\x29\xb5\x3b\x70\x4a\xf6\xb1\x97\xa6\xc1\x55\x09\x62\x86\x11\x89\xc8\x65\x4d\x2d\x73\xd1\x02\xc6\x9d\xbe\xbf\x31\xef\xd4\x7e\xa0\xa6\x66\xbb\x57\x10\x27\x21\x8c\xc1\x34\xe0\x9f\x70\x85\xa2\xaa\xc8\xbb\x46\xc5\x35\x5f\x46\x1d\x71\xe1\x25\x94\x11\xf1\x9a\xaf\x8f\xa1\x0a\x62\xba\xb5\x6a\xfa\x35\x0c\xf7\xfd\xef\x1f\xf0\xdf\xc3\x9f\xe3\x4a\x86\x93\xe2\xa4\xc4\x76\x7f\x72\x6d\x1f\x5d\xda\xe7\xee\xc7\xa3\x23\xd7\xf6\x02\x40\x39\x3d\x2f\x11\x5c\x0e\xd3\x49\xf2\xb7\x3f\xa4\xac\xf8\xe9\x13\x67\x4f\xfe\xe1\x8c\xc4\x61\xe9\x5d\xf6\xba\xa2\xdf\x25\xf2\xe7\x90\x0d\x03\x44\xd9\x30\x42\xde\x05\x8c\xad\xf2\xa3\xe1\x82\xc4\xe8\xf7\xaa\x8e\xb3\xbe\x93\xa0\xd8\x35\x89\xa4\x23\x66\xf5\x67\xd9\x97\x01\x12\x5f\x3e\x4a\xbf\xfc\xf8\xf8\xd0\xfd\xa8\x3e\xb7\x6c\xf7\xe3\xa3\x1f\x5c\x1b\xcd\x6c\xf7\xe3\xc7\x47\xdf\xba\x1f\x6d\xe5\x42\x8f\x7e\xe7\x64\xbb\x44\x3e\x47\x22\xc7\xa2\x48\x20\x00\x7d\xfb\xdc\xc5\x49\x10\x9c\x9f\x9f\xd7\x0e\xdc\x88\x11\xbe\xa1\x0c\x17\xa2\x58\x94\x01\xba\x1e\x52\xb4\x3e\x5c\xaf\x57\xa3\xbb\x67\x09\x0a\xd8\x10\x61\x4b\xa8\x1c\x99\xea\x96\xef\x9d\xff\x7c\xd2\x3e\x77\x39\x61\xf7\xaa\xc0\x48\xa2\x0f\x56\x0d\x61\x35\xca\x7d\xe4\x29\x8c\xf3\xb1\xb2\xaa\x07\xae\xfd\x52\x14\x68\xb0\xcf\x90\x77\xc1\x07\xd4\xa8\xcd\xc1\x7a\xee\xda\x11\x88\x41\x08\x19\x3f\xce\x8f\x3f\x9e\x5f\x4b\x42\xb8\x45\x48\xf8\xd8\x8f\x5d\x1b\x68\x87\xe6\x8f\x8f\x9e\xb8\x87\xee\x47\xde\x01\xc1\x19\xa2\xeb\x31\xbd\x36\xe3\xe8\x24\xcf\xb7\xc8\x38\x7a\xc8\x0d\x31\xce\xdf\x11\xb0\x0c\x5b\x38\x9f\x28\x85\xb1\x14\xdf\x6d\xac\x53\x31\xfb\x3f\x14\xeb\x64\xa8\xde\x02\xeb\xbc\x7a\x7e\xfc\xee\x16\xd9\x86\x0f\xb7\x21\x96\x39\x21\x18\x43\x8f\x59\x8c\x58\xbc\xd7\x03\xeb\x58\x98\x1c\xac\xe7\x22\x61\x37\x89\x57\x1d\x58\xa7\x30\xfb\x3f\x14\xdb\x48\x54\xd7\xe0\xba\x92\x06\xa5\x87\xc6\xf3\x6f\x5d\x3b\x41\x07\x09\x92\xb9\xc0\xb8\x56\x76\xee\x7e\xfc\x68\xff\x07\x55\x9b\x87\xfd\xf8\xf0\x50\x60\x30\xfb\x78\x73\x6b\xb5\x9e\x27\xb8\x66\x30\x94\x75\x9b\x5a\xf7\x63\x91\xce\x56\x7d\x3f\x23\xfc\x5c\xae\x73\x7e\x0f\x93\x38\xa8\x90\x6d\xd6\xa9\x10\x41\xd6\x87\xf7\xaf\x1a\x78\x56\xbc\x92\x2b\x6b\x46\xbc\x84\x0e\x11\x8e\x12\x66\xcb\x59\x7d\xfc\x28\xd2\x7a\xd9\x4c\x56\x9e\x14\x7a\x97\xad\xc1\xe7\x68\xcb\x81\xa0\x78\x5c\xb1\x8d\x7e\xa5\xf2\xb8\xbb\xb6\x80\xf2\xbc\xb4\x88\x35\xb8\x1f\xe2\x40\x64\x9f\x17\x0c\x24\x10\xc3\x4f\x94\x31\x09\x2c\xc4\x81\x92\x07\xe6\xfc\x1b\x73\x91\xe7\xcf\x01\x15\x08\xa4\x21\x08\x4a\xda\x90\xe8\x8d\x43\x6d\x89\x05\x1f\x26\x52\x74\x68\x54\xc2\xd1\x7c\x64\x2d\x18\x8b\xc6\x07\x32\x57\xd0\x82\x50\x36\xfe\xfe\xfb\xef\xbf\x97\xc5\x7e\xfb\xb0\xe7\x6d\x30\x42\x0c\x41\x10\x56\xb1\xc2\x7b\xfd\xa2\x9d\x0b\xd6\xa3\xbf\x1c\xb9\x85\x03\x14\x78\xf5\x3c\x20\xc0\xdc\x4d\x2e\x08\x01\xc2\x3b\x47\x6f\x69\x9d\xfa\x2b\x5c\xd5\xd2\xdc\x7a\x27\x9a\x58\xaa\x4d\x3b\xf9\xd3\x44\x64\x8d\x1c\x10\x93\x25\xad\x66\x84\x0c\xa4\x16\x66\x30\x60\x3f\x77\xff\x54\xcb\x12\xef\x74\xb3\x9d\x63\x8b\x13\x12\xad\x2c\xb6\x80\xd6\xfb\xd3\x63\x03\xcd\xd6\x2c\x26\xa1\x42\xbe\x4a\xf8\x41\xad\xff\xfe\x5f\xff\x9b\xbf\xa3\x3b\xc7\x41\x5e\x80\x64\xa8\x57\x05\x03\xbd\x7d\xf9\xfc\xc4\x3a\x11\x0d\xac\x97\xcf\xb7\x29\x3d\x52\x28\x5a\x78\x26\x83\xb6\x5e\x86\x9c\xa8\x36\x3b\xc7\x2f\x42\x8c\x28\x7f\xf3\x9d\xe3\x83\x62\x0f\x29\x13\x88\x9a\x8e\xd6\xcb\xe7\xd6\xe0\xad\x50\xc3\x41\xe0\x6c\x93\x13\x54\x11\xcb\x66\x36\x50\xc0\x9e\x17\x09\xb8\x2d\xca\xbd\x9c\x59\x2b\x92\x58\x4b\x80\x85\xbe\x4e\x57\xd8\xb3\x84\xad\xdc\x42\xd8\x02\x56\x04\x62\x86\xbc\x24\x00\xb1\xc2\xd6\x40\x90\xfa\xd3\xa7\xd4\x3e\x61\x09\x6b\xfd\xa7\x4f\xb6\xe3\x5a\x91\xd4\x1d\x85\xe4\xc8\x90\x2b\xbe\xf8\xf6\xe8\xc8\xff\x7e\xfa\xdd\xd1\xf0\x08\x7a\xdf\x0f\x9f\x7c\x3b\xfb\x6e\x38\xf5\xbe\xf7\x87\xdf\xfa\xf0\xbb\x27\xfe\xb7\x4f\xbc\x1f\xfc\x47\xb5\xd8\xbf\x33\xd6\x11\xfe\xdf\x43\x65\x36\x2b\xf1\xcf\x07\x55\x3d\x65\x9b\x4c\x63\x40\xd0\xc2\x39\xa2\xe5\x07\x2a\x0f\x8b\x75\x12\xe4\x58\x37\xda\x39\x11\xf2\x81\x42\x5f\xa4\xca\x54\x87\xc7\x25\x62\x8b\xb4\x46\x96\x05\xb0\x6f\xf2\xa6\x78\x99\x72\xe0\x40\xba\x0a\x89\x77\x56\x82\x7d\x18\x5b\xaf\x01\x65\x30\x56\x5b\x15\xff\x18\x50\x8a\xe6\xd8\xfa\xf4\x8d\xb0\x6b\x8a\x5e\x3e\x7d\x63\xc5\x24\x80\xe5\x83\x2e\x98\x03\x84\x29\x53\x5f\xd3\x08\x7a\x68\x86\xa0\x6f\x81\x29\xb9\x84\xbb\xca\xa4\xa6\x45\xaf\xc8\xa8\xef\xaa\xad\x7d\x5b\x60\xd4\x14\x0a\x7e\x50\xd6\x7f\x36\x31\x6c\x06\x5a\x0b\xd3\xea\x86\x7f\x20\xc6\xbd\x5b\x4e\xd2\x76\x66\x44\xc1\x34\x80\xd6\x2b\xe1\x4b\xdc\x8d\x43\x3e\x0f\x19\x99\xcf\x03\x98\x31\x89\x66\x0c\x61\x74\x70\x6d\xb6\x80\x21\xff\x97\xe0\x33\xd9\xf0\x5c\xd3\xb4\xc4\x05\xbe\x1c\x5f\x0f\x7f\xee\xda\x21\xf4\x51\xc2\x0f\x5c\x01\x9a\x2f\x98\x32\x8d\x55\x58\x52\xc4\xf3\x90\xb3\x6a\xd7\xbe\x35\x2b\xb4\x72\xc4\x6d\xaf\xe5\xc0\x07\xd1\x50\xdd\xf6\x64\xc1\x9b\xc7\xbe\x2f\xdc\x5f\x4c\xc5\x1c\x60\xeb\x44\x4a\x3b\xf1\xaa\x56\xeb\xde\x22\xc1\xea\xc1\xdc\x2c\xf1\x1a\xc6\x59\x97\x90\xad\x16\xbc\x0d\xd9\x22\xb7\xca\x27\x0b\x42\x4d\x6b\x2b\x87\x4e\xd9\xc3\xb6\x66\x0b\xcb\xc6\xcd\x2b\x21\xfc\x79\x4a\x30\x79\x2d\xf0\xb3\x80\xae\x2c\xcc\x79\x53\x21\xbb\x4f\x73\xcd\x76\x45\x8a\xbf\x7c\x67\x91\xd8\xe2\x53\xb4\x80\xef\xc7\x90\x52\xd7\x12\x8a\x2b\x87\x7b\x04\x3f\x83\x30\x0a\xe0\x88\xc4\x73\xd7\x3a\x7a\xf4\xa7\xd1\xe1\xe8\x70\x74\xb4\x2b\x9a\x80\xa0\x8e\x70\x03\xad\xe4\x0a\xeb\x9d\x7a\xb5\xe1\xad\x3f\x1b\xd6\xb5\x71\x22\x4b\xce\xd7\xb2\x85\x84\xa1\x95\x2d\x74\xb3\x5d\x61\x0b\x0e\x8f\x25\x27\xa7\xf8\xe1\xf1\xf7\x3f\xec\x14\xdd\x21\xf6\xe2\x95\x38\xbe\x1a\x5d\xbc\xc8\x3d\x6c\xbe\x99\x92\xd7\x4a\xb6\xba\x2c\x21\xd8\x5b\x00\x2c\x32\xc6\xd7\x48\x6e\x75\x81\x91\x1f\x42\x6f\x28\x9c\x2f\x64\xd9\x86\x91\x7a\x20\x6e\x1e\x4a\x73\xce\xe8\xd7\x7a\x83\x45\xb2\x79\x3c\x4a\xd9\xb0\x7c\x7d\x73\x9c\xb0\x45\x2a\xa4\x4d\x0c\x9c\xad\x22\xf8\x86\x60\xb9\x6d\x88\x3e\xd2\x8b\x34\xc5\x8d\x74\x08\xff\x99\x80\x20\xc7\x93\x29\xfb\xc2\x5c\x47\x92\x85\xd7\x1b\x5b\x6d\x59\xf5\x13\x36\xd6\xe2\x3a\x23\x34\xac\x80\x06\xe6\xdc\x38\xae\x4f\x19\x88\xd9\xd9\xab\xd3\xbb\xc2\x77\x6e\xfc\xad\xe1\xdc\x18\x65\x6d\xbc\xef\x94\x1c\x99\x02\x0a\x9f\xbf\x31\x3e\x7f\x06\x28\xb4\xe4\x93\x6d\x6c\x1c\x6a\xbc\x06\x7d\x42\x43\x74\x6b\xb6\x30\x41\x53\x84\xe7\x96\xc8\x6f\x6e\xcd\x48\x6c\xc9\x94\x7b\x96\x74\x95\xd7\x2a\x01\x49\x26\xe2\x34\xe7\xfa\xde\x44\x69\x06\xfc\x4f\x8f\xd4\x5e\x43\xdd\x0d\x45\x11\xf6\xf3\x14\x45\xd8\xdf\x26\x45\xe5\x78\x4d\x14\x55\x10\x35\xa8\x01\xcf\xd2\x26\xbb\xa2\x02\xc8\x82\xe1\x5e\x0c\x7d\x88\x19\x02\x01\x15\x8c\x21\xf4\xab\x4a\x47\x98\xbb\x27\xfa\xbb\xb2\x29\x48\x90\x7e\x8b\x66\xa0\xf2\xd8\x65\x03\x50\x89\x15\x9a\x6c\x3f\x39\x86\x30\x1b\xde\xb3\xc5\x3a\x6c\xc1\xe5\xd5\x4f\x42\x88\xe5\x2d\x57\xb1\x95\x3d\xdd\x06\x4b\x18\xe3\x36\xc8\x05\x13\xba\x06\x56\x78\x43\xb2\x46\xbb\xc2\x06\xa7\xe6\x06\x21\x58\x60\x86\xb0\xcf\x37\x11\xb9\x45\xc8\x1d\x63\xf0\x65\x40\x84\xfb\xef\x09\xef\x75\x12\xc1\x98\x12\xec\xe4\x9e\xf1\xe6\xf9\x27\x08\x8b\x0a\x18\xef\x64\xe3\xb6\xab\xa9\x3e\xf0\x5b\x0b\x34\x5f\x48\x03\x8d\x31\x13\x61\xe7\x5e\x59\x06\x57\x58\x00\xfb\x07\x44\x5f\xfd\x34\x73\xca\x9d\xb0\xb5\xf8\xba\xc4\xd7\x5d\xc0\xbd\x29\x63\x9b\x23\x37\x70\x76\x0e\xc0\x3f\x16\x6b\x5b\x97\x08\x58\x62\x7e\x29\x97\xef\xe7\xf8\x57\xbc\x73\x06\x5f\x06\x1e\x9e\xd0\x05\x8a\x7e\xf5\x62\xb8\x74\xf8\x2f\x61\xf9\xff\x95\x32\x30\x9b\x39\xf5\x8c\x5d\x7a\x7e\x4b\x4c\x95\x96\xa6\xe4\x2b\xe1\x7d\x4e\x83\x12\x6b\x23\xad\x51\x67\xbd\xdf\x9e\x32\x55\x02\xa2\x81\xc9\xca\x00\x37\x70\xda\x71\x45\xe3\x5d\xe1\x38\x7d\xa1\x7a\x20\x37\xd7\x74\x5e\x8a\xbf\x12\xe4\x5b\x08\x8b\x3d\xd6\xb5\xe8\xf1\x6b\x95\x29\xef\x0d\x08\x21\x7f\xde\xe2\x65\xba\x71\x81\x99\x67\x06\xca\x57\x85\xb8\x08\x8a\x21\x8b\x21\x87\xc4\x07\x0c\x58\xcb\x05\xc4\x56\x42\xf9\xb2\xe9\xb0\xdf\xde\x89\x14\xcd\xf1\x8f\xa8\xd3\xa6\x6f\xb5\xab\xd9\x3e\xd7\x64\xeb\xcc\x9f\x8d\xd6\x75\x09\x18\xf0\x75\x5d\x08\xb9\x4f\x76\x65\x39\xa4\x40\x95\x56\xc2\x1c\x5d\x42\xfc\xa6\x81\x02\x77\xcf\x47\xaf\x40\x1b\x1b\x99\x2d\xb6\xce\x45\xe9\x60\x5d\x99\x28\x83\xae\x2b\x0f\x99\x5f\xec\x0a\x0b\x69\x98\x4a\x1c\x44\x77\xc6\xe3\xb3\x4c\xab\x17\x21\x40\x41\x3d\xdf\xa4\xaf\xb7\xce\x34\x72\xa4\xae\x1c\xa3\xe0\xea\xca\x2e\x69\xf3\x5d\xe1\x15\x01\x50\x89\x51\x9a\x90\x7d\xb7\xac\x22\xd4\xfc\xd7\x22\xee\xb4\xa4\xfc\x67\xdc\x92\x35\xd8\x2a\xbb\x98\xc0\x74\x61\x98\x1c\xf0\x5d\x58\xa6\xf0\xc1\xae\x30\x4d\x86\x68\xb6\x00\xcc\x42\xc2\x1a\x32\x43\x90\x5a\xfc\xac\x70\x89\xfc\x04\x04\xf2\x94\x60\x85\xd0\xb8\x46\x93\x3f\x2c\x12\x5b\x09\x46\xff\x4c\x60\x27\x32\xdd\x58\x65\x2b\x30\x47\x07\x9d\x6d\x67\x8f\xbe\x05\xdf\x96\xbb\xf2\xe7\xc9\x71\xf7\x06\x7d\x79\x1a\xfb\xbd\xf7\xe3\xb9\x29\xa1\xb6\xe3\xc3\xd3\x79\x8c\xdd\x26\x20\x08\x02\xb2\xfc\x89\xc4\xa1\x48\x68\x6e\xae\x2d\x2e\xcc\x5e\xf1\xb3\xe9\xed\x92\xab\x08\xd0\xc6\x68\x54\xea\xb8\x33\x61\x6e\xa8\x6a\x60\x21\xa3\xe4\x31\xff\x12\x01\x69\x37\x07\xd8\xb7\x62\x38\x17\xde\xe6\xa9\x73\x6f\x3e\x5e\xdd\x1a\x24\x14\xce\x92\x40\x98\xa3\x18\xa4\xe2\xba\x8e\x7f\xbc\x96\x5b\xae\x22\x93\x0c\x9f\x9c\x26\x8c\x71\xe4\x69\x52\x79\x24\x90\x2c\x21\x11\xac\xb8\x85\xd3\xea\x24\x10\x31\xa2\x1a\xa3\xe6\x9d\xf1\x89\xfa\xe8\x1f\x90\x63\x96\x53\x8a\xc5\x09\x74\xed\x33\x48\x99\xf5\xdf\xff\xeb\x7f\xb7\xba\x55\xbc\x8b\xe1\x25\x82\xcb\x0e\xfb\xb6\x9e\xc0\xe3\xfc\x04\x86\x73\x10\x55\xe7\x0e\x69\xf4\x7b\x5b\x13\x29\x48\x06\xcd\xf6\xc2\xcd\x9f\x63\x08\x71\x8a\x9a\xda\x40\xdc\x57\xc4\xbb\x80\x7e\xb5\x03\xc0\x2b\x35\x9e\x30\xf9\x00\x96\x1d\xd2\xaa\x11\x7b\x0a\x44\xa6\x9a\x7a\x8c\x96\x4d\x8d\x76\xce\x0f\xf0\x07\xd7\x9e\x97\x5d\x15\x7f\x02\x28\x48\x62\xbe\x7e\x65\x02\x37\x0e\xc5\x61\x6e\x05\xd5\x3b\x09\xaa\xc5\x13\x15\x17\x8e\x74\xa3\x56\xd9\x44\x86\x33\x39\x82\x15\xae\x86\x8f\xed\x0a\xc7\x6e\xe5\x73\x8c\x08\xb6\x78\x53\xe8\x8f\x2d\x83\x2d\x8a\x70\x66\x13\xef\xe8\x12\x59\x46\x49\x5e\xe6\x0a\x75\x53\xba\x81\x49\xb6\x1d\x86\xc4\x07\x25\x61\x90\x7b\xc8\xc0\x14\x61\x1f\x7e\xb6\x5d\x7b\x78\xa4\x1f\xc6\x84\x0b\x49\xdb\x47\x20\x20\xf3\x92\xdc\xae\x17\xf6\xa2\xe7\x61\xf6\x99\xd9\x97\x4e\xf5\xd9\x2b\x3b\x89\xec\x50\xe5\x7b\xaa\xd9\x40\xda\xbe\xae\x0c\xad\xb7\xb2\x85\xdd\x73\x43\x93\x9d\x4e\x89\xbf\xca\xc3\x63\x97\x3c\x55\x39\x25\xf4\x30\xae\x8d\xa8\x76\x95\xef\x1c\x3c\x5f\xc7\x94\x42\x86\xfb\x00\xcf\xb3\x69\x1d\xb9\x55\x63\xea\xba\xf3\xe7\xdd\x59\xed\x86\x50\xd1\xc4\xf3\x20\x35\x73\xbe\x9c\x64\x6b\x42\xbd\x9c\x25\x81\x6b\xcd\x48\x82\xfd\x74\x75\x94\x41\x57\xb1\x6b\x39\xe1\x20\x2f\x3a\x46\x76\x71\x1a\x02\xf1\x10\x88\x52\x9b\x55\x7d\xc9\xfc\xa2\x6b\x65\x2d\x88\x4c\x04\x3f\x71\x8f\xdc\x8f\xf6\xcc\xb4\x4d\x9a\xd0\xd9\xb9\x66\x01\xa8\x6e\x35\xc8\x37\x83\xda\xec\x60\xb4\x29\x6e\x9e\x65\x42\x1d\x69\xa1\x50\xa6\xa0\xfe\x6a\x6d\x8d\x4d\x32\xf8\x8c\x90\xfc\x2d\x5e\xbd\x5a\xd5\x6f\xbf\xf6\x11\xe5\x0a\x68\xdb\x9e\x04\x56\x0d\x5b\x92\xde\x6f\x4e\x00\xf6\x60\xa0\x1b\xf6\xd5\x5b\xcb\x0f\x2b\x38\xab\x48\x86\xf5\x32\x7e\xb5\x27\xaa\xba\x51\x22\xb0\xac\xcf\x29\xf0\x2e\x92\x68\x18\x43\x99\x90\xee\x6e\xb3\x5f\x25\x3f\x9c\xfd\x89\x2c\x1e\x5e\x74\x4b\xb7\x76\x93\xbc\x57\x15\x1f\x16\x30\xd1\x6b\xdb\x51\xdf\xfe\x2e\x1c\x39\x9b\x85\x7c\x5a\x3c\xcd\xce\xd5\x63\xe9\x2c\x6d\x8a\x72\xa6\xd2\x69\x31\xd5\xbe\x11\xb5\x80\x15\x26\x01\x43\x43\x06\x31\xc0\x0c\xfa\x96\x91\x4d\xce\x82\x5c\x91\xe7\x3a\xf8\x94\xb0\x85\xf5\xe9\x93\xcd\xa0\xb7\x18\x85\x2b\xce\x2b\x00\xaf\x46\x1e\x09\x3f\x7d\xb2\x85\x66\xff\xe9\x93\x4d\x41\x00\x69\xf9\x2d\x23\x56\x9c\x68\x83\x0b\x5b\x40\x8b\x82\x10\x5a\xf0\x33\xf4\x12\xc6\xcf\x09\x07\x3e\x60\x60\x0a\x28\x1c\x95\x21\x3d\xe6\x00\xa6\xe0\xaa\xc9\x4d\x4d\x93\x8f\xc0\x91\x25\x90\x84\x28\x8b\x45\x29\x07\x63\x9d\xb9\x32\xfe\x15\x05\x81\x35\x85\x56\x04\x63\x7e\x74\xe1\x80\x00\xcb\x53\x79\x7b\x2d\xba\xa2\x0c\x86\xc3\x25\xf2\xa1\x25\x49\x65\x01\x2f\x26\x94\x5a\x20\x08\x2c\x89\x18\x5a\x05\x5c\x23\x64\x67\xe2\xbb\x7a\xc8\x2c\x0f\x60\x75\x44\x62\x44\x43\x66\x01\x35\xde\x30\x80\x97\x30\xd0\xe0\x0c\x94\xad\x36\xbe\x80\x7c\x75\xe7\x71\xec\x14\x41\x6b\x15\xf7\xed\xfb\xf2\x1f\x8d\x8d\x76\x97\x87\xda\x18\xbc\x95\x8d\x38\x6c\x9c\x95\x6e\x99\x83\x2a\xf4\x82\x02\xc3\xbc\x0b\x20\xa0\x22\x6c\xd7\x02\x96\x9a\xc6\x33\x09\x8d\xb0\xc0\x86\x68\x1e\x03\x71\xc2\x9f\x42\xb6\x84\x10\x5b\x14\x06\xb3\xa1\x0c\xd2\xc1\x7e\x86\x95\x93\x80\x24\xbe\x08\xde\xe1\x90\xb7\x68\x20\x26\x04\x2f\x99\xc0\x0c\x03\x17\x95\xa8\xa5\xf0\x12\xc6\x20\xb0\x42\x84\x13\x96\xb7\xd1\xc9\x88\x4f\x45\x5b\xce\x6c\x0a\x8d\x51\x4c\xb8\xca\x69\xfd\xf7\xff\xf3\xff\x5a\x91\x9c\x1f\x67\x09\xc0\x44\xaa\x89\xe5\x02\x05\xb9\xe6\x7c\x1f\x94\x4b\x00\x89\x88\xfb\x28\x26\xf3\x18\xd2\x92\xce\xd9\x51\x93\x02\xf1\x1c\xe1\x21\x23\xd1\xf0\xf1\xa1\xa5\x7e\x4d\x09\x63\x24\x1c\x3e\x3a\xac\xdc\x59\xa4\x2e\xe5\x2d\xa0\x77\x31\x25\x9f\x33\x6d\xca\x48\x36\xa6\x36\x1e\x09\xf1\x69\x04\x3d\x91\xee\x86\x01\xb9\xe9\x9c\x77\x50\x6f\xdf\x8b\xd6\x7a\xce\x33\x8e\x83\x34\x8d\x5c\x8f\xbc\x5a\x6d\xa7\xf4\x0c\xca\xf7\x09\xc6\x08\xcf\xfb\x6e\x8a\x8b\xc7\x1d\xcf\x18\x8a\x4b\x63\x39\x8c\xab\x29\xbd\x04\x88\x8d\x46\xe5\xf3\xc2\x7a\xe2\x75\xeb\x86\x98\x82\x91\xaa\xd6\x12\xf3\x5c\xc9\xcd\xd4\xca\x22\x13\x27\x73\x65\xef\xd9\xf1\xc9\x5f\x3f\xbc\xb3\xce\x5e\xbc\x39\x7e\x73\x66\x0d\xf4\x9d\x97\x2a\x3c\x63\xbb\xfc\xaf\x34\xd4\xcf\xd1\x36\x98\x26\x5b\x8d\x44\x6d\xbd\xb5\x66\xf3\x1a\x51\x4f\x5b\x5a\xcd\xa7\x3b\x47\x29\x4d\x9b\xd3\x7f\x9c\x9e\xbd\x78\xdd\x68\x78\x3c\x15\x7b\x53\x3b\xe6\xeb\x96\x69\xa5\xf0\xaf\x5a\x97\x3f\x09\x23\x55\xdf\x65\x59\xaf\x30\xcf\xf2\x8e\x02\x6a\x59\x4a\x53\x98\x29\x82\x85\x7c\x53\x02\x87\xab\x54\xc5\xeb\x96\x26\x09\x54\x35\x8f\x53\x2d\x11\x36\x35\x91\x5a\x11\x93\x99\x30\xb2\x83\xfc\x63\xfd\xd9\x4f\x28\x80\xca\x83\xa6\xd7\x69\xbe\x42\xbc\xb6\x9e\x4d\xb7\x79\xfc\x51\x1f\xdd\xd5\xf9\xe7\xbd\x1c\x5e\x66\xb7\x02\x95\x8a\x80\x58\x20\x6a\x03\xcb\xa9\x01\x74\x41\x92\xc0\xb7\x08\x0e\x56\x86\xee\x07\xf9\x13\x0b\xe0\xaa\xbe\x60\x18\xb1\x55\xa6\xbb\xa4\x4a\x69\xda\xed\x1a\x19\x27\x1b\x26\x95\x69\x18\x42\x3f\xad\x00\x28\x86\x43\x99\x40\x25\x37\x31\xe5\xbe\xae\x1d\x7c\xa3\xac\xa4\xb4\x6b\x89\x4c\x93\xd4\xb5\x3c\xc0\xe0\x9c\xc4\x08\x52\xa1\x8f\xe9\x82\x76\x77\xa3\x80\x29\x26\xea\xac\x81\xc5\x25\x04\xdd\xb6\x0a\xd6\x4d\x42\x48\x5b\xc4\x90\x6b\x4d\x8d\x87\x2d\xd5\x83\xf4\x61\xa9\xef\x63\x98\x6b\x20\x2c\xf8\x7a\xf9\xe9\x21\xf8\x0b\xe0\x79\x30\x62\x72\x03\xd7\xc7\xb4\x83\xdf\x51\x6a\x84\x15\x87\xb9\x48\x58\xda\x85\xe8\x11\xcf\xbb\xc5\x0f\x27\x51\x40\x40\x96\xc5\x56\x5d\x0b\x48\x37\x1b\x73\x96\xad\xd1\xaa\xb9\xfb\xdb\xaa\xa9\x56\x5c\xf0\x16\xe7\xaa\x8d\xc6\x0b\x42\x28\x34\x35\xd4\x3a\x26\x6e\x0f\xe9\x6c\x65\x8c\x8c\x0f\xba\xb9\xbd\x97\x85\xa0\x9a\xc5\xc6\xb6\xd3\x14\x2b\xf9\xfd\x34\x15\x8c\x9b\xd9\x50\x8b\xe0\x55\xce\x69\x73\x5b\xab\x9e\x54\x79\x6f\xd5\xf3\xd2\xf2\x43\x4e\x8d\xb7\x07\x31\xe3\xe7\xe5\xd8\x9a\xc6\x64\x49\x65\x04\x0c\x9f\x9f\x55\xba\xf2\x5f\x7f\x86\x1f\x04\xff\xbf\x87\xc0\x5f\xad\xa3\xa3\x6e\x55\xd1\x7c\x2f\x6f\x5c\xc5\x92\xee\x7a\x20\x30\xa6\xf6\x4c\x80\x24\xad\xe5\x2d\x57\xb2\x0b\xb2\x54\x64\x78\xad\xae\x07\x7b\xab\x9d\xc5\x3d\xb0\x42\x0d\x6d\x36\x4b\xf4\x35\xc8\xd7\x5f\x82\x7a\x04\xcf\x50\x1c\x6a\xf5\xe7\xfe\x1e\xb4\xea\x1e\xf4\x44\x22\xc9\x7a\x9f\xe9\x88\x9b\xb9\x0a\xad\x90\x07\xba\x30\x85\xdc\x93\x68\x32\x0d\x51\x83\x97\x8c\x4d\x70\x06\x54\x6b\xce\x80\x7a\x00\xbb\x38\x1f\xd5\x6f\x61\x72\x87\x92\x55\xa8\x64\x36\xef\x61\xc1\x83\x5e\x59\xcc\xf8\x66\x69\xbd\x7f\x71\x7a\xf6\xf6\xfd\x0b\xa5\x07\x85\x10\x7b\x52\xaf\x51\xfa\x4f\xc3\x26\x55\x92\x27\x05\xbf\x57\xb5\x17\x4b\xc6\x56\x33\x8b\x02\xe0\xc1\x85\x28\x6e\x9a\x7a\xc3\x8a\x64\x1f\xc2\xd3\xb5\xc8\xff\x05\x2f\x54\x2b\x24\x09\x85\x2c\x06\x91\x5d\x39\x07\x23\xc7\x04\xef\x25\x25\x45\x8b\x03\x52\x0e\x93\xeb\xb8\x21\xfd\x83\x24\x39\x05\x5e\xab\x84\x8c\x70\xdd\xbd\xa0\xa8\x23\x21\x06\xbd\x0e\x05\x39\xb6\x9e\xee\xe1\x8f\x78\x63\x7a\x03\x2b\xcc\xda\x13\xed\xb3\x25\xb6\xcc\x33\xe3\xd9\x3e\x42\x66\x4b\x17\xc8\x9b\xbd\x36\xce\x9f\xec\x37\x74\x6f\x2c\x4f\x09\x43\xbe\x5f\xdd\xed\x9d\xf1\x77\xd1\x43\x04\xfc\xd5\x9b\x9b\xdc\x19\x47\x31\xf1\x13\x8f\x0d\x65\xf9\xc4\x1e\xfb\xb6\xfc\x60\xc8\xc7\x48\x68\x9b\xe5\x23\x33\xaa\xca\xcf\x8e\x2f\x01\x0a\xc0\x34\x80\xbd\x72\xd2\x81\x22\x0c\x0c\xb1\xec\xd8\xb7\x88\xe1\xcc\x76\xed\x05\x63\x11\x1d\x1f\x1c\x2c\x97\xcb\x91\xa6\xe8\xc8\x23\xe1\x81\x4f\x96\x98\x6b\xaf\x26\xb0\xa9\x84\x54\x68\xb0\x24\x78\xe2\xd2\x4f\x83\x68\x8d\x1b\x1d\x34\xab\xdc\x7b\xb8\xbc\x8d\x13\xaf\xa5\xa4\xd3\x19\xb1\x92\x68\x1e\x03\x1f\xba\x56\x0c\xc5\x2e\x65\xc1\xcf\x48\x3a\x86\x4e\x11\x06\xf1\x4a\xf9\x95\x4a\xe5\x5e\x03\x3b\xb2\x5e\x8b\xdb\x25\x98\xde\x2d\x9d\x90\x30\x4c\x30\x62\xb2\xfd\x0b\xcc\x60\x1c\xc5\x88\x42\x0b\xfa\x48\x00\x61\x51\x08\xc2\x00\x52\x1a\xac\x46\x0d\x4b\xb5\xb7\xb9\xbf\x9e\x3d\x52\xd2\xe8\xed\x5f\x21\xf8\xb9\x49\x85\x1e\xd7\x70\xf5\x23\x05\x08\x5f\xd4\x61\xb9\xc2\x6c\x53\xe3\x09\x1c\x01\x5c\xec\x58\x21\xaf\xa8\xc8\x64\xc8\x7e\x21\x1b\xe4\x3c\xb3\x32\x4e\xf7\x74\xbb\x57\x5c\x94\xb0\x2a\xc7\xb2\xff\xfb\x7f\xf8\xff\xab\x21\x2a\x31\x3b\x9f\x67\x0d\xaf\xa7\x7c\x4e\x1f\x0f\x61\x32\x5c\x42\xca\x86\x47\x23\x10\x82\xdf\x09\x06\x4b\x9a\x67\xff\xb4\xf5\x30\x85\x70\xb8\x44\xd8\x27\x4b\x3a\x04\xa1\xff\xdd\x93\x11\xfc\x6c\xce\xf7\x17\xf9\xce\xce\xc3\xfd\xff\xed\x00\xd4\x01\xc2\xc9\x67\x09\xb3\x01\xef\x2b\xfe\x74\x07\xa1\xf5\x41\xbc\x44\xb8\x04\x6e\x08\xbc\xb7\xa7\x79\x70\x7b\x68\x58\x1b\xe5\x6c\x43\x70\x34\xb3\x36\x4c\x1b\xee\x2c\x6f\x67\x20\x7e\x55\xcc\x6d\x80\xfd\x35\x70\xb7\x01\xee\x56\xd8\xbb\xf2\x64\x24\x54\xe2\xe1\x3c\x06\xab\xe1\xb7\x87\xa9\xa1\x3a\x6f\x9d\x2c\x2f\x87\x74\xab\x4f\x18\x0a\xd0\xef\x90\x5a\x4a\x4d\xe1\x58\x19\x32\x62\xa8\xdc\xda\x08\x47\x12\xa9\x11\x99\x23\x7e\x77\x78\x98\x5a\x6a\x39\xbe\x30\x61\x48\xc6\x1e\x55\xec\x93\x6c\x81\x62\x5f\x14\x22\x58\xb5\x98\x82\x2c\x12\x41\x6c\x51\x92\xc4\x9e\xb4\xed\x49\xad\xf3\xe6\x6a\xb5\x7a\xd2\x5a\x69\xeb\x49\xb1\xd2\x56\x93\x59\x3f\x53\x80\x6b\x2c\x33\xea\x28\x24\x1b\xca\x76\xe2\x0c\xd5\xd9\x5c\xb5\x69\xff\xd1\x0c\xe4\x0d\x1d\x02\xe6\x10\xc3\x18\x04\xbb\x52\x3c\xf5\xc9\x7f\x79\xfe\x32\xfa\xeb\xea\x4e\xdc\x47\x9b\x4d\x47\xf5\xe6\x22\x8a\x18\x3c\x2b\xe8\x89\xa7\x88\x41\xab\x36\x3d\x84\x71\x5c\x5e\x23\x15\x74\x36\x5e\x3e\xcc\x39\x24\xbe\x38\x08\x2b\x9a\x66\xda\x6b\x39\xb8\x79\x01\xa8\xe8\xe1\x25\x1f\x77\xd3\xf9\xfc\x6f\x60\x0e\x52\xc9\x3e\x2d\xba\x20\x31\xb3\x04\xf8\x32\xce\x6c\x81\x68\x17\x3b\x50\xf5\x93\x4d\x91\x5b\x60\x82\x63\xff\xb5\x0e\xb2\xc8\xd3\xdb\x78\xdc\x44\xf2\x9a\x22\x58\xaa\xea\x55\x35\xbd\x75\xd7\xae\xfd\xb8\x9e\xdc\x46\xec\x47\x05\xc1\x55\x17\xbb\x4d\x72\x35\x05\x0b\x7e\x8e\x02\x80\xb0\xf4\x23\xbd\x6b\xda\x9b\x34\x3e\x13\xf1\xa2\x2d\x14\x4e\xd0\x81\x88\x2b\x55\xb5\x94\x33\x42\x13\x7c\x22\xef\x66\xcf\x55\x4c\x5b\xb5\x91\x4a\x0c\x92\xb6\xec\x11\x34\xb7\x95\x29\xbf\x22\x73\x52\x3b\xe3\x6c\xb0\x9a\x73\x6b\xa3\x59\x50\x9b\x03\x53\xf3\x60\xd9\x2c\x58\x63\xf5\x2b\x1a\x41\xed\x0f\x14\x5a\xcf\x75\xd1\xf1\x06\xdc\xaa\x36\x6a\x52\x9b\x0c\xf1\xbc\xf9\xb4\x91\xdf\x61\xc6\x99\x27\x9a\x2d\xef\x31\xad\x13\xb1\xd9\xd9\xfa\x5e\x9f\xab\x07\xa4\x36\x47\x6f\x13\x25\xd7\xb5\xe0\x7b\x00\x5b\x9e\xbc\xbf\x67\xc4\x92\x50\x58\xc0\x12\xdd\x59\x1c\x1a\xe5\xdb\xfc\xdd\x93\xe8\xb3\xf5\x59\xfc\x53\x61\x8c\xaa\x50\xa5\x72\xf1\x9f\xf0\x9f\x15\x86\xb8\x80\x48\xcf\x08\x5d\x9f\x77\xa6\x6a\x33\xf4\x09\x01\x5d\xe7\x1a\xa9\x5e\x1d\x20\xf1\xfc\x39\xd1\x05\x1d\xcd\x75\xf4\xe1\xfd\x2b\xeb\x34\x99\xfa\xa4\xb5\xda\x63\xcf\x5c\x28\xf9\xbb\x21\xbe\x65\x64\x30\xe4\x55\x04\x3d\x76\x31\xa1\xb3\xaa\x1f\xe7\x13\x8f\x36\x25\x77\xbe\x01\x9b\xa8\x2a\x67\x20\x86\xda\x4b\xdc\x22\xd8\xfa\xf4\x89\x6b\xaa\xd4\xac\xee\x20\xe2\x08\x16\x10\xcb\xf8\x01\x8d\x2e\x4b\xcc\x58\x5f\x15\x4d\xa1\x45\xa1\xa8\x96\xa6\x3a\xf8\xf4\xc9\xee\x72\xae\xe8\x14\x84\xbd\x61\x11\xaa\x6a\x37\xca\x1c\x13\xd6\xdf\x11\x5c\x0a\x6b\xec\xb3\x95\x75\x8c\x09\x5e\x85\x24\xa1\xb2\x80\x5b\xdb\xa6\x72\x83\x54\x06\x65\x55\x41\xa4\x1d\x48\x01\x38\xd6\x0e\x1f\x37\xc8\x6a\xd0\x79\x8c\x6e\x09\x0e\x6e\xc0\x6a\xa7\x0b\x20\x3c\x4b\xc4\xcd\xb9\xac\xf7\x94\x60\xa3\x80\x3a\xf4\x2d\xae\x52\x59\x97\x88\x22\x46\xaa\x10\xbf\x5d\x35\x52\x8a\x09\x8f\xe0\x4b\x18\x53\x44\xf0\x0b\xec\x8b\x74\xe7\x76\xee\x9e\x5e\xbd\x14\x15\x44\x90\x07\x6b\x0b\x2d\xaf\x23\x30\xa4\x31\xa0\x34\x7e\xdb\x71\xa2\x0a\xe4\x4a\x55\xf3\xa4\xd4\x70\xd7\xb4\x4e\x53\xaa\x69\x18\xc5\x49\x63\x01\xb0\x2f\xe2\xa0\x50\xc8\x4f\xc1\x07\xf2\x30\xac\xf6\x2f\x6d\x66\x02\x11\xca\x5d\xca\xb8\x15\x42\x12\xd4\x9b\xa8\x68\xfe\x46\x87\x1e\xfc\xf2\xe6\x45\x14\xb1\x5f\xfe\xf2\xc3\xf1\xf1\xb3\xf7\x78\x01\x0e\x40\x16\x4a\x84\xb8\xb6\x91\x20\x1f\xd2\x03\xff\xe0\x97\xb7\x87\x11\xfb\xf5\xf5\x7f\xa2\xf9\xf1\xb3\xef\xe8\x5f\xfe\x94\x9e\xdf\x65\xd9\x08\xf3\xfe\x20\x86\xc0\x17\x32\x54\xbb\x9f\x80\x62\x31\x12\xa7\xb7\xf9\x65\xb3\x2b\x20\x04\x9f\xcf\xc0\xdc\x84\xf9\x35\xf8\x8c\xc2\x24\xb4\xf8\x63\xeb\x1d\x54\x39\x48\x60\x4d\x45\x53\x4d\xfe\xac\x7a\x4a\x43\x8d\x93\xf4\xfc\x56\x1e\xb5\x82\x78\xf9\x2a\x1c\xf5\xd5\x33\x1e\xeb\xb5\xa2\x3b\x3d\xcf\xfb\x54\xea\x65\x67\xa6\x8e\x78\xdc\xb4\xf5\xf7\x18\xfb\x49\xc7\xb1\x4d\x33\xe6\x93\x0d\x8d\xfd\x6d\xc7\xb1\xbf\x35\xc6\xfe\x76\x43\x63\x7f\xd7\x71\xec\xef\x8c\xb1\xbf\xdb\xd0\xd8\x7f\xea\x38\xf6\x9f\x8c\xb1\xff\xb4\xa1\xb1\xbf\xef\x38\xf6\xf7\xc6\xd8\xdf\x6f\x68\xec\x1f\x3a\x8e\xfd\x83\x31\x76\x63\x91\xa6\x1e\x63\x1f\x1d\x76\x1c\xfc\xc8\x34\x9b\xcb\x1f\x95\x32\xe3\x71\xf5\xd1\xd0\xcb\x4e\xe6\xb6\x84\x2b\x7d\x74\xbe\xe1\x33\xd3\xcf\x64\x69\x85\x00\xaf\x2c\xc6\x05\x1d\x3f\x3d\x4d\xa1\xaa\x8f\x2a\x93\xe1\x81\x54\x6a\x5b\x03\x7d\x3b\xfe\x58\xdc\x8a\x1f\x1d\x8a\x8f\xda\x8f\x4f\xc6\xc3\x1d\x49\x27\xa4\xeb\x95\x37\x27\x14\x92\x99\x82\x1a\x7c\x78\x68\x63\x2a\x21\x85\x85\xcd\x9a\xdd\x8b\x56\xf2\x0d\x19\xdf\x11\x66\x70\xae\xb6\xf8\x1d\x31\xc0\xff\xd7\x5f\x1f\xbf\x7a\x04\x3e\xfc\xbc\x7d\x03\xbc\x76\x0f\xad\xd1\x17\x16\x8f\x8c\x97\x7f\x41\x31\x68\x52\x01\x4c\xc5\xe3\x39\xa2\x51\x00\x56\xd4\x42\x94\x26\x50\xd6\x7b\x45\xb8\x5e\x0b\xea\xe0\x8a\x7b\x03\x63\xc0\x6f\x28\x06\xc3\x24\xce\xe5\xd2\xad\x51\xe4\x6f\x7c\x2f\x90\x8e\x95\xd7\xe3\xf9\xe3\x93\x18\xfa\xc2\xdb\x29\x2e\xe7\xbb\xdd\xd2\x81\xff\xa7\x24\x08\x56\x16\x97\xe1\xb2\x74\xb3\x3a\xc7\x8b\x54\xc8\x5c\xd1\x16\x3e\xfe\x9c\xb0\xa9\x49\xd7\x4a\x75\xec\xf1\xc1\x01\x87\xda\x34\x0b\x74\x39\xde\x6f\x9d\x8e\x46\xb5\x71\x23\x31\x72\x53\x06\xed\x75\x4f\x67\xf9\xf1\x1a\x08\x9a\x8e\x7f\x3b\x54\xfd\x47\x4a\x35\x99\x16\x43\x8f\x7f\x00\x6b\xb3\x14\xdf\x32\x91\x28\xf4\x62\x68\x9e\xa5\xdb\x6a\x2e\xdd\x88\x44\x6a\xb4\x72\xa9\x25\x93\x48\x1a\xa4\xdb\x21\x91\xbe\x50\x39\x7e\xf7\xd2\x3a\x23\x17\x10\x5b\x68\xa6\x52\x72\x1c\x33\xde\x05\x02\x58\xe5\x6b\x20\x71\x5a\x91\x4a\xe6\x7b\x48\xb3\x3b\xf0\xd6\x8d\x52\xb7\x2d\x3e\xea\x46\x41\xa2\x55\x7b\xc0\x59\x0c\x83\xa0\xfa\x1e\xa2\x65\x23\x98\x12\x10\xfb\x3d\x36\x82\x1b\xc7\x17\xd4\x73\x28\x13\x93\x18\x5e\x40\x33\x7c\xe2\x38\x8a\xac\xbf\xc2\xa6\x62\x19\x37\xe0\x52\x63\xc4\xbc\x14\x91\x2f\x34\x8b\x82\x28\x12\x20\xdc\x5e\xa5\x3f\x98\x86\x9b\xd6\x59\x4a\x24\x84\xc2\x44\x02\xa2\xa8\x80\xb4\xe6\x46\xc5\x28\xde\x3a\xef\x93\xaf\x31\x2b\xe7\xcb\x4c\x6b\xbc\xa9\x2a\xdd\x3f\x2f\xe7\x56\xd4\xeb\x2a\x3d\x78\x43\x2a\x76\x80\x3c\x88\x29\x94\xfc\x7f\xa7\x9a\xf5\x3f\x00\xfb\x69\xf9\xb7\xe0\xed\xb6\x34\x6b\xbb\xe1\xba\x8c\x26\x53\xea\xc5\x48\x1e\xb8\xe5\x50\x09\x5d\x23\x57\x6a\x39\x3b\x8b\x74\x29\x8b\xa1\x2f\x3c\xca\x4c\x1f\xcc\xdf\xc8\x4a\x98\x1f\xd3\x9b\xfb\x59\x0c\xa1\x15\x05\x00\x3f\x68\xd2\x08\x80\x36\x08\x48\x61\xf0\xf1\xf1\xa1\xfb\xb1\xde\x19\x5e\x04\xc1\x92\x84\x3d\x8d\xe1\x6c\x02\xa2\x68\x3f\x98\x94\x13\xa0\xe4\xae\x08\xf7\x91\x9f\x36\x29\xa0\x05\xc9\xea\x86\xfb\xa4\xa2\x0f\x12\xcf\x5f\xaa\xd7\x49\xdd\xf7\x14\x02\x26\x2f\x51\xf6\x41\x5d\x1b\x20\x2a\x24\xa9\xfb\x1e\xde\x12\xd6\xb5\xd4\x59\x22\xcf\x6b\x02\xe1\x7a\x8b\xa4\x74\x3b\xea\x9e\x33\xf9\x83\xf4\xeb\xb7\xde\x88\x87\x9d\xee\x93\xbb\xe5\xf1\xe8\xc8\x9e\x47\x9b\x61\xcf\x39\x17\xac\x05\x06\x7d\x83\x3c\x28\x93\x86\x2d\xc0\x25\xb4\x00\xb6\x24\x69\xd2\x10\x0a\x13\xa8\x7b\x8e\xfd\x5a\x38\x56\x3a\xcd\x58\xef\x02\x80\xef\x84\x63\x1f\x6d\x4b\xa0\xfe\x1c\x86\xae\x3c\x33\x57\x31\xa8\xb5\x00\xd4\x82\x9f\x23\x14\xc3\xea\x73\xce\x3d\xaf\xee\x1e\xaf\xbe\x87\x18\xde\x8d\x5c\x7d\xbc\x55\x2e\xd5\xb8\x6b\x27\x90\x99\x24\x59\x89\xdf\x84\xc2\xd8\x12\x99\xa0\x2d\xf8\xd9\x83\xd0\xa7\x32\xf1\x0d\x63\xd0\x6f\xea\x39\x65\x8f\x62\xf2\x68\x2b\x40\x21\x6a\x34\x42\xdc\x2f\x8a\x1d\x5a\x14\x4a\xe5\xb8\x93\x65\xf1\xe4\x8e\x84\x37\xa2\x16\x26\xcc\x92\x2e\x10\xad\x8c\xda\x21\x46\x34\x8a\x91\x87\xf0\x5c\xb3\x68\x83\x21\xed\x2b\x22\xa7\x44\xbf\xbd\x56\x14\x48\xf7\x7b\x87\xcd\x5a\x24\x69\x32\x1d\x22\xd3\xec\x21\x5d\x35\x61\x6c\xbd\x7c\xbe\x49\x7b\xa4\x74\xf7\x20\x38\x10\xd6\x0f\x3d\x6c\xde\xe0\x53\x2d\x7a\xf2\x6e\x80\x1d\x72\xaa\xaf\x69\xef\xf9\x5b\x42\x44\x96\x30\x44\xad\x97\xcf\xa5\xb1\x91\x8f\xca\x85\x93\x28\x67\x7c\xc7\xa6\x63\x8e\xb1\x62\x80\xac\x26\x55\x6b\x95\xcf\x9b\x13\xab\xc2\xca\x5f\x20\x57\xb5\x91\x7f\x8b\x04\x3b\x5b\x40\x6b\x9a\x50\x84\x21\xa5\x16\x89\x2d\x59\x31\x1d\x04\xf2\x06\x87\xcc\x2c\x2e\xce\x3c\x85\xa3\x1d\xa0\x1e\x2c\x94\xac\x3c\x91\xdc\xd5\x5c\xab\x72\x43\xe4\x83\xaa\x4a\xa5\xfa\xb7\x71\x73\xbd\x3d\x0a\xfe\xb2\x80\x31\xb4\x96\x50\xa6\x1d\xa4\x10\xfb\xc5\xfc\x00\x00\xfb\xd6\x14\x05\xc2\xdf\x4d\x46\x00\xee\xc2\x3a\x54\x4a\x4d\xc9\x2b\xac\xde\x4b\x76\x73\x94\x94\x63\xbb\x36\x4e\x64\x1d\xc9\x16\xad\xeb\xb6\x48\x29\xae\xdd\x84\x36\x1b\x01\xef\xc2\xe2\x1b\x9d\x48\x98\x96\xda\x2f\x6e\xac\x73\x53\x0b\x30\x61\xaf\x0b\x49\xa3\xc3\x5d\xd3\xbd\xcf\x56\x7c\xf4\xb7\x78\x1b\x23\x08\xce\x40\x6c\xde\x16\x9e\xca\x1c\x15\x85\x5c\x9c\x15\x5d\x6e\x82\xd9\xc4\xd8\x99\xd8\xff\x41\x4e\x08\xf0\xb3\xce\x50\xe4\x31\xa9\x57\x59\x63\xa3\x0a\x63\x4f\x3e\xbc\xb1\x54\xc1\x82\xef\x06\x31\x74\x94\xc7\x52\x3e\x23\x6b\xc3\x7d\xcb\xad\x90\x14\x62\x13\x5e\x71\xca\x06\xc1\x2d\x91\x94\x8f\xbd\x06\x41\x05\xc8\x77\x42\xce\x33\x91\x87\x55\xa2\x48\xec\x09\x64\x26\x4f\x2a\x00\xe3\x04\x04\xb9\x83\xca\x2e\x11\x99\x1f\x71\x4c\x6d\xed\x58\x82\xfb\x4c\xee\x66\xdb\x27\xb4\x1c\xbf\x86\xd4\xea\x65\x35\xad\x15\xe4\x77\xb4\x78\x81\xc8\xae\x69\x45\x60\x65\x41\xe0\x2d\xac\x15\x04\x5d\xab\xea\x6e\x30\xad\xce\xb6\xe4\x36\x99\xdd\x1e\x07\x7c\xbd\xd2\x7b\x09\x2d\x51\xd1\xcc\xf2\x16\x20\x9e\x43\x5f\x2e\x78\x2f\x86\x3e\x62\x96\x07\x62\x99\x8c\x55\xbf\x84\x97\x30\x5e\x59\x8f\x0f\x2d\x1f\xac\x28\x57\x11\x62\x08\x66\x3b\x54\x8b\xb9\x4a\x1a\xbc\x26\x98\x2d\x82\x95\x75\x1c\xca\x9a\x72\xf7\xd2\xa0\x55\x1a\x24\x54\x0a\x84\x90\xa3\xee\x06\x12\xa1\xe6\x42\xba\x62\xea\x2c\x46\x20\xe8\xe5\x10\xb4\x15\xde\x51\x60\x18\x8e\x46\x08\x04\x4f\xb7\xcf\x33\x72\x5c\xcd\x33\xf6\x3f\x60\x29\x6c\xa5\x67\x89\xbb\x75\x6c\xa1\x5f\x87\x92\xae\xbc\x38\xcc\xed\x5e\x96\x9d\x45\x04\xb7\xb8\x4e\x19\xc4\xaa\xc9\xbb\xa0\x09\xa5\xf2\x2f\x18\x79\x17\x8c\x91\x75\xc1\x4a\x0d\xc8\xb9\x88\x30\x28\xc5\xbe\xa9\xf7\x9b\x0e\x74\xdb\x88\x96\x07\x32\x94\x5d\xc0\x95\x58\xf7\x31\xf4\x20\xba\x84\xbe\x25\x04\xba\xc5\xb5\xf9\x61\x67\x5d\xbe\x7b\x51\x8b\xad\x25\x06\xcd\x7b\x4c\x65\xb5\x88\x9b\x83\x07\x5e\xa5\xdc\xd4\xd7\xed\xa9\xf7\xc9\x57\x65\x28\xab\x76\xd3\x52\xb9\x04\x6d\x33\x63\xd9\x8b\xf4\x83\xe6\x95\xd7\x73\x3d\x7b\x01\x49\xfc\x3e\x51\xf1\x6b\x24\x5a\x6a\x94\x01\x2d\x31\x01\x6d\x9f\xfb\x30\xe3\xde\x8a\x1a\x25\x15\xab\xc4\x94\x35\xaf\x20\xe3\xdb\xdb\x05\x26\x4b\x0b\xc9\x38\xf4\xa5\x88\x23\x0f\xd0\x85\xc8\x58\xe0\x05\x84\x42\x75\xec\xf1\xe4\xe5\x23\x89\x2d\x4f\x24\xce\x95\x8f\xcd\xad\xab\xb6\xba\x46\xf5\xe8\xef\xe1\x3f\x13\x48\x19\xcd\xca\x6c\x24\x11\x1f\xf4\xd1\x13\x6b\x41\x92\x98\x8a\xd2\x82\x32\x63\x74\x9f\x9e\x6b\x72\xe2\x4d\x49\xe0\x0f\xff\x94\xbb\x7d\xfa\xe5\xf8\xfd\x9b\x97\x6f\xfe\xac\x0a\x53\xab\xde\x8f\x03\x71\xde\x03\x69\xcd\x3c\x99\xf4\xda\xb7\x28\xd1\x15\x06\x74\xa2\x34\xb3\x86\x9e\x2e\x9a\x36\x13\x35\xf3\x04\x6a\x78\x2f\x15\x95\x3a\xec\x9a\xb4\x64\x46\x3a\xb2\x34\xfb\x98\xae\xea\xd2\xa5\x92\xd9\x9a\x12\xa5\x7b\x26\x65\xfb\x7d\x82\x2d\x5d\x89\x69\xed\x5c\xf8\x06\xa4\xbb\x9b\x4c\xd9\x3e\x11\x8c\x7f\x2c\x79\xbe\x25\x39\xbb\xe0\x62\xfe\x41\xb2\xb1\xf4\xc9\x7d\xea\x59\xe5\xdd\x72\xcb\xa2\x42\x6c\xaa\x39\x39\x11\x4b\x90\xef\x2b\x01\x54\x55\x02\x50\xf4\xd4\xb4\xb7\x32\xc2\xae\x95\x09\xbd\x5c\x11\xc0\x2a\xfc\xcf\xae\xbb\x7e\x2d\x36\x34\x1a\xf7\x50\x26\xab\x7a\x31\x7a\xaa\xf2\xc5\x5f\xc8\xb4\xa6\xb0\x90\x79\x21\xac\xb0\x7f\x37\xf5\x9e\x0b\xd8\xaa\xd1\x31\xb3\x5c\x8c\x46\x8e\x2f\x21\x03\xf9\x02\x4c\xc1\x28\x65\x65\xf9\x36\xcb\xcb\xaf\xc0\xaa\x58\x72\x2d\x53\x5f\xeb\x64\x08\x2d\x10\x2c\xf9\x79\x7f\x09\x03\x8f\x84\x99\x5b\xe4\x0c\x42\x9f\x8b\xeb\x0e\x08\x6a\x69\x62\xd7\x87\xe2\x12\xcc\xf5\x20\x83\x14\x69\x44\xae\x2a\x23\x51\x1d\x91\xbb\x96\xf1\xe1\x3e\x93\xff\xee\x6f\x3e\xcf\xb5\x58\xdf\x7a\xde\xfe\x82\x02\xd3\xb6\xc5\xa8\x72\x19\xf2\xc7\xfd\x3e\x53\xb1\xcf\x3c\x37\xd0\x65\xa9\x4d\xa7\xc6\x47\x75\xad\x6d\xa6\x45\xf9\x16\x17\xa7\x4a\x11\x10\x4e\xb2\x53\x59\xc4\x18\xcb\xfa\xc5\x69\xc1\x68\xa9\x7f\x73\xf5\x77\x41\x62\x16\xac\x7a\xea\xf8\x2a\xbb\xd5\x02\x5c\x42\xfc\xe9\x93\xcd\x2c\x10\xc4\x10\xf8\xab\xb4\x2e\x6d\x9c\x60\x0b\x68\xed\x99\x11\x43\xb7\x6e\x56\xa3\xff\x15\xc4\xda\xdb\xbf\x76\x10\x69\x1b\x59\xd5\x9b\x4e\xc7\x6b\x44\x17\x6d\x28\x5e\x89\x42\x10\x7b\x8b\xa1\x92\x12\x77\x1a\xb0\x14\xbe\xf8\x1d\xff\xe5\x25\xb9\x51\x59\x8e\x8d\xa4\x02\xb8\x81\x87\x49\x5d\xa1\x4b\xb9\x08\x1f\x1f\xea\xb2\x96\xa2\x72\x3d\x9c\x26\x28\x90\x39\x93\x24\x19\x2c\x41\x86\xe6\x45\xb9\x2b\x75\x87\x4f\x05\xc4\x99\xa1\x69\xda\xb1\x0e\x5c\x0c\x25\xaf\x75\x48\xb5\x75\x97\x2b\xcd\x5c\x17\x9b\x5a\x6a\x21\x8b\x76\x25\xed\xc6\xa9\xf7\x5f\xec\xcf\x2f\x1e\xfd\xe5\x6b\x5e\x6b\x55\xb6\x7b\x8e\x62\x75\x8f\x90\xe5\xbe\xa1\x8d\xdb\xd9\x0d\xf2\x62\xa7\xa3\x55\x27\xb2\xe3\xef\x6d\xd7\x5e\xa8\x62\xe8\x45\xdb\xfd\xe9\xeb\xb3\x77\x1c\xb8\x17\x61\xc4\x56\x5b\xb0\xe0\x77\x3a\x8e\x19\x88\x12\xd9\x30\xc2\xd5\x88\xc3\x3b\xf2\x48\xd8\x71\x07\xdc\x2a\x2d\xf9\x02\x31\xbe\x7c\xa7\x7e\x6e\x32\xad\x42\x36\x4e\x23\x15\x25\x24\xd5\x54\xe4\x60\xdd\x29\x15\xab\x0f\xd5\x82\xa0\xdf\x7e\x5f\x9d\x0f\xec\x96\x09\x99\x50\x18\xe7\x1c\xd3\xb7\x95\xc8\xc4\x1c\xad\x91\xa0\x1a\xa2\xdb\x49\x92\x21\x68\xf1\x2a\x97\xc2\x44\x64\xa5\xe1\xec\xa3\x8a\xea\xee\x02\x99\x22\x23\x77\xc9\x96\xd3\x99\xe4\xc7\x2b\x27\x34\x29\xae\xbf\x14\x8c\x5b\x27\x98\x1e\x7a\x17\x09\x46\x21\xce\x9f\x7f\x4f\xc5\x83\xcd\x7b\xa1\xa7\x24\x53\x23\x16\x9c\xcf\x0b\xd4\xd2\x60\x55\xcb\x4b\x09\xe3\xae\x4a\x4c\xbe\x3e\xff\x83\x92\x10\x0e\x65\x0a\xa9\x5d\xd9\x0b\x25\x4e\xdf\xe4\x83\x46\x14\xb9\x37\x1d\x32\x52\xa0\xf6\x9b\x72\xb8\x48\x25\xc1\xdf\xa8\xa0\x91\x22\xd1\xb3\xb7\x3b\x48\x6f\x9d\x30\x62\x17\x68\x3c\xfb\xa7\x8f\xcb\xd4\x3d\x95\x45\xd7\x65\x86\xb3\xbf\xa5\x19\xce\x64\xc6\xf5\xed\xd1\x5e\x00\xd3\x48\x75\x09\xee\xed\x08\xe4\x81\xcc\xdf\x09\x02\x47\xca\x60\x7e\xb6\x8e\xe1\x3f\x13\x14\x43\x19\xc9\x68\x66\x7c\x73\xad\x34\xbf\xfc\x9d\x27\x75\x4b\x1d\x86\x75\xf6\xf5\xe3\x2c\x35\x38\x22\xd8\x1a\xbc\x9c\x63\x12\x43\xeb\x24\x86\x3e\x7f\x0c\x82\xaa\x6c\x9b\x25\x7a\x6e\x20\x3d\xbb\xa2\x22\xd0\x90\x6d\x26\x21\x7b\x45\xaf\xdd\x53\xb0\xdf\x02\x21\x9e\x01\x0a\xbf\x7b\x62\xbd\xc0\x1e\xf1\x73\x58\xbf\x55\xa4\x4f\x05\x14\x9e\x48\x87\xb5\x49\xb4\xe7\xfb\xdd\x29\xc4\x7f\xa0\xd0\x3a\x3d\xed\x92\x8c\x72\x73\x68\x4e\x28\xa4\x34\xd8\x28\x86\xd3\x2e\x6f\x88\xdc\x5d\xc9\xef\x75\x2a\x83\x41\x72\x76\xbc\x33\x61\x1a\x68\x49\x8a\xcb\xc5\xf0\x9d\xe7\xf2\xca\x59\xd5\x36\x65\xa9\x13\x85\xf8\x45\x4e\xfc\x3b\xb6\xd3\x9d\xfd\xe5\x2f\x94\xfe\xfc\xb7\x67\x95\x76\x3a\x5b\xc0\x69\x97\xcc\x75\x05\x27\x68\x51\x08\xa4\xcd\xed\xf9\x56\x18\xb2\xab\x6d\xf9\xc5\x67\x6d\x6d\x51\x7f\x5a\xc7\x41\x60\x9d\xa8\x8b\xc2\xa6\x8b\x5b\xfd\x65\x0b\x53\xb6\x7a\x1b\x3e\x6e\x08\xe8\x5f\xcb\xdb\x50\x7d\x9b\x94\xb4\x1e\xc9\x6b\x01\xa2\x85\x1b\x50\x5b\xba\xb3\x41\xe0\x2d\x7a\x92\xb2\x24\x86\x51\xe5\x98\x35\xb2\xbb\x4d\xf8\x23\x3c\x23\x95\x90\xd6\x38\xde\xb9\x52\x7c\x4a\xb5\x72\x26\x2a\x06\x8d\xf4\x6d\x93\xa0\x63\x1c\x83\x95\x22\xe3\x91\xfb\x51\xa5\x09\xd0\xbf\x68\x90\xcc\x0d\x49\xdb\xc5\x5f\xaf\x6d\x02\x85\xa8\xfb\x06\xd7\x5a\x05\x02\x47\xd6\x19\x57\x94\x2b\x9d\x6a\x4f\xd3\xd7\xba\xf4\x4e\xab\x2f\x6d\x1d\xcc\x39\xc8\x25\xd1\x1e\xa5\x70\xff\xff\xec\xfd\xdb\x72\xe4\x36\x96\x2f\x8c\xdf\xcf\x53\x60\x38\xb1\x7b\x77\xff\x9d\x59\x3a\x54\x95\xdd\x76\x6f\x4f\x8f\x4a\x52\x95\xcb\x56\x55\xc9\x25\x95\x3d\xb6\xbb\x62\x07\x92\x84\x32\x61\x31\x09\x1a\x60\x2a\x95\x9e\xe8\x88\x79\x87\xff\x5c\x7e\x17\xfd\x16\xdf\x7d\x3f\x4a\x3f\xc9\x17\xc4\x81\x04\x49\x10\x00\x99\xcc\x83\xdc\x9a\xe9\x28\x2b\x33\x79\x00\x16\x16\x16\xd6\xf1\xb7\xf8\xc0\x42\x92\x84\x30\xdf\x01\x41\x94\xef\x3f\x10\xb4\xef\xa1\xef\x09\x8d\xa3\x0a\x74\x7d\xeb\x62\x1b\x06\xf0\x6c\x14\xc0\x2c\x83\xe1\x6c\x9c\x11\x12\x67\x38\x2d\x97\x95\xcd\xc8\xf2\x0c\xc5\x50\x26\xc1\x1f\x1e\x9a\x57\x45\xb6\x21\x92\xac\xe6\x87\x7a\xd9\x3a\x9c\x35\x8a\x0e\xba\x2f\x22\x25\x99\xe8\x0c\xb0\x17\xeb\x78\x89\x48\xaa\xf5\xfb\xdf\xc1\x42\x2a\x7a\x3c\xc8\xb5\x94\x49\x3c\xfb\xb1\x92\x94\x55\x33\xed\xb7\xbd\x92\x0a\x51\x63\xab\x0b\x69\xa1\xad\x52\x3a\xc4\xba\x2a\xc4\x91\xf6\x5c\xb1\xb6\xd7\x77\x3c\x01\x22\xc4\x42\xdd\xc9\x42\xe6\x08\xe4\xdf\x29\x78\xa4\x6c\x06\x33\x80\x79\x8c\x7e\x82\xc0\x12\x53\x5e\x71\x9e\x7f\xcc\x66\x22\x23\x5d\x56\x7c\xaf\x43\x01\x2f\x35\xe4\xb8\xaa\x86\x48\x36\x10\xf7\xe4\x5c\x30\x81\x5a\xaf\xcf\x08\xd2\x5b\x4d\x41\xa3\x10\x33\x14\x71\x15\x8d\xf2\x46\xae\x13\x42\x23\x24\xf1\xfa\x38\x8d\x85\x16\xc6\xff\x29\x3f\x77\x3c\x63\x2b\x3a\xa3\x1c\xd2\x58\xe8\x86\x85\xa7\x49\xb0\xbf\x52\x20\x0b\xee\xb5\xeb\x8c\x72\xd3\x9c\x44\xd1\x07\xa6\x3c\xc9\x4e\x43\x27\xbf\x1c\xcc\x57\x0c\xc5\x37\x00\x32\x40\x96\x89\xc0\xd4\x68\xd5\x17\xdf\xa9\x2b\x34\xe5\xc3\xab\x36\x6a\xab\x44\x38\xe3\xa5\x12\x76\x1a\xc8\x4c\x47\x79\xad\xdc\xe2\x56\x24\xe6\x19\x59\xfa\xce\xbc\x1b\x77\x5b\x76\xa7\x73\xd7\x1c\xb5\xd5\x74\xf9\xb5\x9e\x31\xe4\x4f\x0a\x05\x5b\x54\x9b\x6c\x26\x65\x72\x13\x59\x93\x6b\x27\x4e\xf6\xc9\x9d\xe4\x47\x27\xe0\x1c\x64\x41\x5f\x58\x3b\x6d\xb2\x99\x1c\x92\x9f\xaa\x24\x91\xb9\xd6\xf6\xc4\x5c\xb1\x13\xbc\x4e\xd0\xa0\x99\x93\x75\x42\x79\xd9\x15\x60\x0b\xf9\xc7\x12\x26\xbc\xaf\xa7\xe0\x0f\x81\x17\xc6\x39\x86\xa7\x6b\xc2\x38\x2e\xf0\xfb\x99\xad\x44\xd7\x45\x16\x9f\x92\xd4\xfa\x63\x0c\x31\x02\xc9\xc5\x82\xa5\x6b\x86\xcc\xa5\x48\xfc\xcc\x56\xa9\xdc\xfd\x02\x38\x2b\x23\x40\x26\x0d\xfb\x1e\x9a\xe6\x78\x81\x0c\x15\x54\xaa\x0b\xf4\x2e\xb0\x7a\x91\x81\xac\x30\x6e\x8e\xb6\x16\xf5\x99\x93\x05\x43\x19\x85\xa9\x52\xdb\x80\xb8\x4a\xf6\x8e\xe5\xb7\x5f\x09\x41\xa6\xb4\x83\x0e\x52\xb9\x77\xe9\x2a\x66\x22\x4f\x57\xf2\x44\x85\x09\x38\x5b\x14\xee\x23\xd5\xe3\xa1\x64\x1b\x33\x72\xb3\xbf\xee\xe2\x2f\x3b\xbb\xec\x47\x57\x5a\xee\xbe\x64\xe6\x76\x29\x38\x58\xa3\xe6\x60\xab\x65\x07\xed\xb3\xd5\x8f\x75\x5f\x89\xe7\xae\xc1\xf0\xcd\xe6\x76\x9e\xaa\x1d\xe0\x57\x0c\x92\xf6\x9a\x83\xc1\x41\x8a\x40\x42\x00\x9b\x41\xaa\x0c\x48\xae\x57\xcf\x61\x02\xa7\xf5\xa8\xa5\x15\xdd\x61\x13\x39\x9e\xa5\x9b\x77\x50\xc7\x31\x67\x95\x5d\x67\x78\x1e\x66\xdf\xc3\xaf\x8e\xaf\x9f\x99\x3d\xc7\xea\x6c\x19\x2a\xd1\xb3\x53\xf7\xf9\x76\xd7\xb1\xb3\xf7\xbe\xd4\xf3\x5b\x35\xe5\xd3\x19\x0a\x6f\x27\xe4\xde\xde\xa7\xe4\x24\x8a\x5c\x6d\x4a\x66\x64\x79\x12\x45\x6f\xa4\x66\xd8\xba\xf7\x06\x71\x28\xb7\x3a\x85\x05\x1f\x39\xdd\xc2\xea\xba\x0e\xa8\x19\x4d\x9f\x70\xa9\x6d\x1c\xe7\x5c\xb1\x8a\x51\x69\x1c\x4c\xa6\x62\x05\xda\x70\x9a\xad\x27\xd0\x94\xe2\x88\x9f\xf8\x10\x27\x88\x8e\x3f\x1d\x3f\xeb\xe9\x79\x16\x0f\x42\x71\x3c\x3e\x02\xe5\xdf\x73\x1c\x45\xb1\xdd\x99\xdd\xcf\xd3\xe0\x3e\xa7\x5d\xc3\x3c\xd6\x86\x49\xf9\x1e\x30\x2d\xe5\xb0\xd6\xbc\xf8\x53\xfb\x77\xcf\xec\xf9\xf3\x08\x67\xbe\xc6\xfc\x07\x01\x1a\x2a\xe5\x84\x63\xb7\x8a\x8b\xc5\x86\x55\x0b\xfd\x1b\xb1\xe5\xfd\x08\x20\x2e\xf6\x26\xc0\xa6\x4c\xfa\x35\x4c\xfd\xc6\x1d\x9e\x15\x92\x30\x8a\x84\xac\xdc\x65\x45\x24\x10\x1f\xe2\x3d\x2e\x8d\x3c\x89\x22\x70\x51\x88\xf9\x4d\x55\x43\xf6\xb7\x7e\xdb\xed\xde\x72\x85\x6b\x46\xaf\x2d\xf7\x6d\x03\x16\x6d\x6d\x1c\x16\x73\x96\xd3\xb9\x62\xce\xf2\xfb\xde\xfa\x58\xb1\xbd\x0c\xbd\x9e\x34\x2e\x50\x08\xf8\xf9\xee\x49\xc8\x05\x3e\x10\x54\x10\xfd\x07\x52\x1c\xde\x22\xed\xe8\x22\xc9\x69\xd9\xda\xda\x22\xb4\x50\xa6\x5e\x3b\xb4\x6d\x33\x80\x49\xfc\xe0\xec\xe1\xbe\xc6\xf0\x66\x2d\x61\x57\x0e\x92\xbf\x4a\xce\xaf\xd8\x75\x31\x3e\x8a\x70\xf6\x78\xd6\x78\x9c\x35\x52\x77\x7b\x98\xc7\x8d\xb6\xca\xbb\x3d\x6f\xea\x03\x79\x3c\x70\x1e\x0f\x9c\xc7\x03\x67\x90\x03\xc7\xa3\x57\xad\x90\x61\x5b\x3e\x74\x0a\x8f\x80\x3c\x21\x4a\xf1\x81\x33\x2e\xe4\x65\x34\xe7\x14\x2a\x58\x5b\x41\x3e\x35\x7f\xc6\xc3\xba\xf9\x79\x19\xaa\x20\x9e\xb2\x23\x6b\x7e\x67\xb7\x01\x2a\xb3\x0e\x0b\xe3\xf2\x4c\x1e\x5a\x9d\x1c\xd6\xfe\x2e\x63\x77\x70\x4e\xda\xc2\x0a\x69\x6a\xa2\x6e\x3e\xaa\x84\x8c\xd4\x3c\x0d\x6e\x9e\x32\x86\xe7\x8b\x0a\x37\xb8\xbf\x59\x78\xeb\x06\x72\x38\x2f\x18\xa2\x7b\x91\xa8\x8c\x17\xc9\xbb\xd5\x0f\xc9\x87\xad\x75\x1b\xce\xf9\x54\x8a\x01\xcc\x4e\x16\xd9\x4c\xb6\xa1\xa7\x65\x39\x97\x62\x60\xcc\xce\x16\x30\xce\xaf\xf1\x4f\x04\xeb\x2c\xa4\x36\x98\xa0\x5f\x24\x8e\xad\xa5\x3f\xbf\x4b\x51\xf2\x81\x21\xea\xf4\x69\x9b\x0f\xb3\xc2\xd3\xc2\x59\x6e\x53\x79\x14\x1b\x55\x81\x87\x50\x84\xd7\x70\xbd\x58\xdb\x09\x0d\xa1\x11\x57\x9e\xd1\x39\xb5\xa2\xc8\xb4\xf2\xcd\x4e\x74\xa8\x86\x94\x2c\x5d\x43\x75\x3d\x27\x24\xb1\xdf\x23\xac\xda\x7c\x82\x96\xf9\xc4\x5e\x62\xca\xb2\x9a\x3a\x5f\xf9\xce\x95\x1b\xe1\xd2\xef\xf5\x8a\x4a\x97\x7e\xdf\x18\x53\x01\xcb\x5e\x03\x64\xd4\xae\x10\x9b\x5f\xde\x99\x5f\x59\x0e\xde\xd7\xc1\xed\x99\x3a\xb9\xbd\x45\xb9\x80\x8d\x35\xd1\xbf\xda\xc1\x92\x14\xaf\x6f\x5b\x91\xf2\x82\xfa\x82\xc4\xf0\xc1\xaf\xc7\x79\xad\xa9\x9d\x15\x46\x60\xc3\x2b\x71\x5e\x6d\x72\x57\x5f\x87\x73\x1d\x7e\xa0\x5c\x04\xbd\xa7\xec\x70\x2b\xe0\x7b\x4d\xd7\x8c\x5e\x17\x15\xed\xba\x87\xd2\x39\xd6\xb2\x93\x3c\xd4\x8e\x21\x7c\x77\x95\xb3\xc5\x3f\x1c\xd7\x3d\xb0\xde\x79\xe9\xf6\xe5\xc0\xf4\x4d\x0f\x74\xbb\xae\xf8\x93\xc6\xb5\x34\xf7\x17\x8b\xf8\x16\x7c\x48\x63\x02\x5b\xa1\x5c\xda\xf9\xd0\xd1\xca\xa2\x06\x37\xac\x6f\xec\x8f\xbc\xa6\x34\xbe\x15\xda\x4f\x51\x64\xaa\xbe\x68\x36\x35\x0c\x9e\xeb\x67\xdb\x08\x28\xa9\x3a\x02\xc5\xd6\xee\xb0\xb1\x7b\x26\x01\x9e\x92\xf9\x1c\x8e\x23\xc4\x7b\x79\xa3\x08\xc4\x98\x65\x5f\x00\xdb\xa8\x86\x93\x21\x7b\xb1\xf5\x65\xd1\xd1\x60\x5b\x9f\x75\xd9\xfb\x1e\x7e\xc1\xde\x2a\xb4\x47\x2a\xe4\xde\x38\xe3\x62\xc2\x50\xb7\x64\xc8\xb5\x42\xf4\xc6\x2f\x6d\x79\x02\x1b\xc4\x5f\x2c\x1d\x1b\x43\x7a\x4a\xb8\x60\xdc\x75\x66\xde\xcf\x2f\x3f\x3d\x9f\xff\xf8\x03\x32\x67\xe6\x2d\x84\x1a\x33\x47\xa2\x1f\x6c\xa0\x4e\x85\xad\x64\xea\x6d\xd5\xa9\xa1\x44\xcc\x00\x79\x7a\xaf\x72\x22\xb9\x1d\x1b\x16\xaf\x86\x38\x32\x1f\xcb\x43\x5c\x4e\x8c\x57\x4a\x49\xd9\xb7\xca\x10\xc5\x05\xdd\x6a\x43\x36\x57\xaa\x91\xa0\xa5\x64\xaa\xce\x21\xc4\xc6\x11\xe4\xc4\x26\xf5\xb0\xa8\xf4\xc1\x18\x4d\xdb\x4a\x34\x91\x37\x88\x02\xfc\x16\x50\x33\x76\x05\x95\xb7\x58\x90\xc1\x91\x9c\xde\xf0\x84\x71\xca\x46\xe0\x0c\xdd\xa1\x38\x97\xcc\x6c\x04\x4e\xc2\x39\x02\xd7\x08\xba\x6b\x5b\x7c\xad\x80\x6d\x30\x44\x4d\x31\x3f\xd3\x4a\x4f\x4b\x90\xab\x8e\x2c\xd2\x45\x41\xaf\x72\x04\x1f\x4d\x73\x79\xd3\x05\x4d\xa5\xfa\x51\x57\xd0\x9f\x7a\xe9\xe0\xbd\x95\xb8\x35\xa4\xcb\x83\xa9\x73\xe9\xae\xd9\x3d\xdc\x32\x17\x2f\x1b\xa1\x2a\xbb\xb7\x58\xe5\x32\x50\x0e\xbf\x31\x11\x3c\x57\x36\x3d\xa1\x5d\xa4\x66\xba\x66\x73\x52\xbf\xa6\x97\x5e\xa0\x28\x2d\x8c\xf4\x6c\xf4\xd4\x9c\x40\x0f\x7e\x5f\xbd\x44\x28\xb0\xac\x76\xd5\x1f\x86\xd8\xeb\xba\xfc\x2c\x5f\xa8\x09\x2c\xf5\x42\xcb\x93\x1f\x6c\xe9\x7d\x63\x47\xef\xae\xe8\x5e\x88\x3a\x51\x73\x2f\x57\xdb\xa7\xa6\x86\x5f\xaa\xe5\xa9\x3f\xf5\x28\x3f\xaf\x05\x7f\xa7\x99\x7c\x78\x8d\xd3\x0e\x7b\xc0\x7c\x6c\x83\xa0\xef\xd1\x9c\xdc\xa1\x0e\x34\x15\x37\x78\x93\x55\x5c\xde\x8b\xb2\x9d\xab\x00\xf6\xa0\x40\x44\x12\x29\xbf\x54\xe8\xa8\x4e\x02\xe5\x97\x76\x22\xcc\x0e\x66\xde\xa3\x32\xc4\x6f\xf2\x8d\xca\x90\xe1\xf8\xc2\xe9\x2c\x7a\xea\x28\xf2\xb0\x1a\xe6\xb2\x80\xfc\xd1\x36\xf7\x69\x7b\xc5\x19\x62\x6f\xcd\x73\x31\xbe\x1e\x16\x7a\x67\xf4\x06\xce\x2d\xfb\x83\xd5\x60\xf4\x01\xe8\x58\x0d\xa5\x91\x3d\x18\x56\x43\x17\xd7\x40\x73\x98\x6e\xef\xc0\xab\x86\x5f\x20\xd2\x96\x77\x27\x58\x0d\x54\x1c\x98\x82\x98\xf2\xd8\x9c\xe1\x14\xe0\x24\x7f\x84\x00\x5a\xe6\x88\x1e\x8c\x91\x10\xc3\x0c\x45\x20\x45\x34\x37\xe8\x30\x49\xd8\x23\x6a\xc3\xa3\x35\x3b\x3c\x68\xc3\x1e\xd8\xb4\x6d\x25\x2c\x8f\x47\xaa\xfb\x48\xe5\xea\xe5\xde\x1e\xa8\xf9\xe8\xf6\xca\xe1\xad\xf1\xd5\xfa\x1e\xef\x35\x0e\xb4\xfa\x38\xfa\x3b\xbb\x51\x41\xe2\x47\x6f\xf7\x1a\xdc\xb0\x0f\xee\xee\xfa\x70\x0c\x2b\xfc\xe8\xf0\x7e\x54\x11\xb6\x58\x5c\xd4\x94\xdf\xfb\xa2\x20\x88\x6d\x22\x14\xea\xb1\x50\xa5\x77\xac\x29\xf4\x4c\xf6\xdf\xbe\xca\x20\xdd\x76\xc2\x11\x07\xfe\xf1\xdf\xff\x53\x34\xec\x7f\x5e\x3a\x2a\x6b\x47\x8a\xd9\x89\xae\x5d\x9f\x33\x29\x4a\xa6\xbc\x7a\xa5\xe2\x4b\xdf\x82\x5a\xd2\x0b\xeb\xde\xef\x39\x82\xcd\x16\x0c\x51\x36\x2e\x5c\xb8\xae\x30\x49\xe9\xeb\xed\x8e\xe4\xdc\x3e\x14\x9c\xa1\xb9\xf1\xdd\xbb\x77\xf7\xbb\xc4\xdb\x0e\x9d\xd5\xca\x17\x59\xf1\x55\x5b\x75\xd6\x0b\x04\xef\x94\x93\x20\xff\xe1\x78\x24\xf2\x9d\x5e\x77\x87\xdd\x75\x53\x44\x0a\xf6\x86\xdc\xef\x26\xef\xc5\xe9\xa6\x06\x7b\xb3\x88\xe3\x44\xef\x71\x36\xe4\x3c\xd7\x01\xd1\xb6\xb9\x60\x8f\x3d\x90\xa8\x1f\xf5\x96\xb5\xf5\x96\xad\x9f\xd0\x30\x8a\x1e\x8f\xe7\xce\x09\x6c\xbf\xe9\xb3\xd9\xdf\x78\x6b\xb7\xdc\xa4\x6b\x48\xcc\x6f\xcc\x64\x9b\x77\xad\x64\x2e\x89\x78\x8b\x4c\x47\x29\xe3\x20\xf6\xfc\x28\xb8\x45\xab\xb1\x98\x8d\x79\x60\x6e\xeb\x5e\x34\xaa\x57\x3e\x61\xee\x04\xe6\xc3\x7f\xf2\xe4\x89\x32\x03\xc5\xb3\x9c\x3d\xaf\x48\xa2\x9a\xde\x77\x4b\x65\xef\xe9\x09\xe8\x5b\x6d\xe0\xfe\x75\xb3\x8a\x1d\x9f\x4c\x88\x92\x86\x80\x1f\x48\xa9\x2a\xf5\x99\x42\xbd\xd2\xff\xd5\xb4\xac\xe0\x0d\xbc\xc7\xf3\xc5\x5c\x2c\x38\x0f\x14\x61\x96\xc6\x42\xf2\x77\xd4\x1c\xfb\xe8\x18\x0c\xc5\xa2\x93\x4c\x47\x75\x23\x78\x2e\xd5\x28\xd9\xf7\xe4\xb9\xd4\x1f\x2e\xf0\x5c\x04\xc7\x9f\x7f\x54\x27\xba\x45\x09\xe1\x17\x17\x97\x76\xac\x87\xdb\xe6\x6c\x8f\x0e\x1d\xd3\x3d\x3a\xf4\x9f\x6f\x71\xed\x1e\x4f\xf8\xd8\xb5\xbe\xc7\x1d\x16\xf8\xf8\x01\xac\xf0\x73\xd7\x0a\x3f\xef\xb0\xc2\xcf\x1f\xc0\x0a\x1f\x1d\xba\x79\xba\x13\x53\x3f\x80\x39\x1f\x3b\x57\xf9\xb8\xcb\x32\x1f\x3f\x84\x75\x7e\xee\x5c\xe7\xe7\x5d\xd6\xf9\xf9\x43\x58\xe7\xa3\xd1\xa1\x0f\x77\x77\x63\xef\x07\x30\xef\x93\x8b\x0b\xc7\xac\x3f\xcf\xff\xcf\x7f\xda\xfa\xe5\x03\xb8\x03\xbc\xf4\xf1\x61\xea\xa9\x07\xf4\xe8\x49\x53\xe2\xb7\xe9\xcf\x2b\x93\x56\x65\x97\x25\x26\xcc\xcf\x5e\xf3\x75\x73\xfe\x83\x74\x02\xf6\xec\x3e\xb5\xaf\x84\xeb\xd3\xb0\xcc\x4d\xb4\xaf\x09\x4e\x3a\xd1\xac\x3f\x2d\x86\xf5\x9b\xea\x2d\x12\xd5\xc8\x75\xe0\x9a\x51\x00\xca\x29\xe9\x00\x2a\x6e\x29\xda\x99\x26\xc6\xfe\x22\x9b\xf1\xb9\x9a\xda\x98\xf9\xcb\xea\x47\x9f\xeb\x4e\x7c\xae\xa6\x55\x1d\xba\xa4\x5d\xd4\xf9\x0c\x59\xd3\xce\xeb\x8b\x76\x5b\xd1\x7e\xfb\x06\x27\xd1\x1f\x4f\x5e\x9b\x2b\xda\x65\x92\xba\xaa\x6c\x1f\xac\xa0\x3d\xa8\x54\x85\x34\x81\x00\xbf\x41\xab\x30\x26\xf0\xd6\xe3\xb0\xed\xa3\x19\x35\x5f\xcf\x56\x49\xf8\x3a\xb9\xa4\x64\x4a\x11\xeb\x50\xcb\xd5\xbf\x24\x7f\x9d\xed\x26\xcf\xab\x0b\x12\xde\xca\x33\x5c\x11\x8c\xbb\xcb\x40\x3e\x1b\x40\x17\x49\x82\x93\xe9\x93\x27\x4f\x0c\x29\x30\x9d\xcf\xe5\xf5\x26\x3b\x70\x93\x79\x6d\xe2\x57\xf9\x54\x97\x38\x9b\x81\x82\x67\xac\x5e\xe0\x55\x12\x96\xcc\x35\xe4\x69\xd3\x01\xe6\xf2\xe2\xec\xe4\x52\x53\x32\xba\x21\x5b\x3e\xf2\x7a\x4e\xbe\x7f\x62\x3e\xe7\xdc\xe3\xe2\x71\xc1\x62\x83\xf2\x77\x7f\x2b\xb4\x5d\xbb\x41\xf7\x69\x0c\x71\x22\x80\x49\x53\x44\xe7\xac\x5b\x28\x53\x00\x2b\x9b\xd5\xa2\xcb\xb2\x46\x00\x9c\x8b\xf7\xa0\xc8\xbc\x21\x66\x64\x99\x5f\x2d\xaf\xf2\xb6\xf0\x82\x96\xe6\xe2\x4f\x0f\x7d\x7a\x8a\x9f\x50\x4a\x96\x57\x73\x18\xc7\x1f\x52\x99\x9e\x2a\xca\x62\x7b\xb5\xf1\x1b\x7c\x50\x67\x64\x99\x74\x18\x96\xae\x2d\xe7\xaf\x7e\x6a\xe6\xce\x8c\x4c\xa7\x31\xba\x14\x2b\xdd\xa6\xe9\x99\xd7\xba\x95\x3d\x9c\x77\xd5\x93\x9a\x79\x5f\xd2\xd6\x18\xa8\xe3\x59\xb5\x94\xd8\x53\x98\x00\x18\xa9\xfe\x88\x23\x30\x21\xd9\x0c\xa4\xaa\x5b\x3b\x4c\x22\xd5\x40\x91\xef\x5d\x92\xcd\x2c\xd1\xd7\x6e\xb3\xf8\x0e\x33\x3c\x89\x5b\xb3\xb3\xbb\x4f\x83\x21\xd1\xc4\x95\x01\x72\x23\xc3\x6e\xf9\xf8\x85\xda\x3b\x02\x21\x4c\x40\x84\x19\x9c\xc4\x08\xdc\x10\x0a\xd0\x7d\x86\x68\x3e\x49\x71\x69\x8c\x6f\x11\x10\xea\x1e\xa2\xec\x20\x85\x34\x4b\x06\x9b\xeb\x09\x87\xc9\x1e\x6c\xa6\xa2\x85\x25\xef\x0e\x0b\x59\x8a\xc2\x8c\x4f\x59\xa1\x4f\x8f\xc4\x5c\x44\x63\xd8\x50\x98\xfb\x83\x4c\x22\x81\xf1\x2a\xc3\xe1\x80\x9c\x97\xeb\xd8\x00\xca\xe7\xc2\x18\x50\xa4\x0c\x89\x21\xc6\x1b\x66\xf8\x6e\x40\xfe\x8a\xc9\x14\x27\x2a\x88\x0f\x4a\xac\xef\x7e\x39\x36\x3d\x0f\x23\xfb\x79\x64\x4f\xc2\xd0\x74\x03\x23\xac\x4f\xd7\xac\x08\x33\x48\xed\x0d\x8e\x33\x44\x65\x9e\x86\x94\xd4\xe2\x3b\x47\x86\xc3\x4b\x7e\x51\xd1\x4e\xc3\x07\x24\xbc\x4f\x6e\x83\xc8\xb8\xe8\x04\xa8\xd8\xf8\xc6\xbe\x0a\xbf\x81\x2c\x84\xad\x47\x38\xb6\x9b\x76\xb0\xf5\xe9\x6d\x3d\xcf\x60\xeb\x33\xdc\x7a\x62\xc1\xf6\x59\x74\xdb\x99\x04\x3b\xe0\xd2\xed\xa7\x0e\xec\x80\x51\xb7\x9f\x2b\xb0\x03\x5e\xdd\x7e\x72\xc0\xf6\xd9\x75\x47\xd9\x00\x5b\x9f\xe8\xde\x85\xff\x6d\x0a\x51\x06\x95\x55\xa7\xab\x44\xdc\xec\xe2\xff\x8e\x29\x62\x29\x49\x18\xbe\x53\x5f\x08\xc5\x26\x46\x8c\x71\x3d\x65\x5c\x3c\xa1\xc5\x91\x92\xcd\x10\x8c\xec\x96\x74\xe6\xe8\x76\xc6\x9f\x52\x1f\x64\x42\xc6\x4b\x1c\x65\x45\xca\xb1\x3d\xd8\x95\xcd\x5c\x31\x81\x19\x64\x57\x72\xc9\x3f\xf4\x48\x35\x70\xba\xf2\x44\x3b\x3f\x6f\x7f\x1e\x87\x3e\x1f\x4b\xd0\x8d\x8a\x7a\x6e\x89\xae\x0b\x3d\xd2\x03\x38\x48\xc1\xc0\x28\x26\x2f\x0d\x00\x0f\x80\xa0\x17\x8b\xb8\xa3\x3b\xbb\x25\xc4\xd9\x66\xed\x75\x59\x76\xa7\x87\xa5\xe3\xc3\x1c\x8e\x8e\x8e\x4f\x73\x5a\xe1\x5d\x9f\x67\x73\x4d\x74\x7d\x96\xd5\xe2\x5e\x77\xeb\x79\x5a\xda\xda\x6b\x9a\xe5\x0c\x81\x35\x0d\xe8\xa7\x9f\x72\xf3\x96\xef\x15\x1e\xce\xf7\xf4\x55\xda\x84\x8d\x76\x55\xd4\x36\x69\xa0\x19\x8c\x00\xc6\x78\x9a\x8c\xe7\x38\x8a\xea\x32\xb0\x2a\x60\x44\x69\x97\x96\xb0\xd0\xa9\xd7\x7e\xab\x87\x95\x0b\xe0\x70\x86\xc2\xdb\x09\xb9\x07\x4e\x7f\xeb\x5b\x92\x9d\xc4\x31\x59\x72\x61\xd1\xdb\x05\x5c\x9f\x55\x71\x50\xee\x74\x6e\xa7\xf2\x4a\xfe\xdf\xea\x04\xad\xde\x61\x21\xf3\x8b\xf2\x3b\x71\xd7\x9a\x5e\xf1\x8d\x4e\x70\xb0\x99\x99\x86\xeb\x15\xa9\x31\xe6\xaa\x58\xe4\x48\x63\x57\xd5\x28\x21\x0e\xcd\x24\x57\x29\x34\xb6\x82\x52\x3c\x7d\x1c\x05\x38\x11\x1f\xf8\x39\xa8\x4e\x1e\x99\x10\xf4\x79\x8d\x1b\x45\x8f\xc3\xfc\x2e\xfe\x57\xe5\x96\x8f\xfd\xb1\x4f\x9c\xb8\xa7\x55\x2d\xa0\x59\x05\xea\x0f\x06\x62\x8a\x5c\xe9\xdd\x96\xca\xe7\xab\x3e\x27\x2e\x1c\xd3\xf2\xf1\x2d\x0c\x53\x62\x1f\x96\x75\xa8\x22\x45\xca\xe7\xa1\x36\x54\x5b\xbb\x40\x17\x6f\xea\x02\x69\x6b\x7e\x3d\x4b\x61\x62\x7c\xbf\xc7\x92\xd5\x17\xce\x04\x5b\x5b\x89\xb4\x27\x24\x1b\x4b\xcd\x9e\x5f\xad\x95\xfd\xaa\xb6\x11\x3c\x41\x4d\x64\xd4\xf8\xc4\xdb\x47\xc0\xa9\x34\xd9\xb3\x9b\x5d\xc0\x8a\x9b\xa1\xe8\xff\x49\x88\x8c\xd7\xfc\xbb\x73\x14\x2d\x52\xc3\x87\x2d\x79\xea\x1e\xd3\x50\x29\x3d\xb9\xb3\x8b\x44\x1a\xf6\x9c\x47\x11\xce\x48\x8f\xdc\xdd\x7d\x38\x0f\xcf\xc5\xd8\xad\x84\x7e\xb8\x67\x62\xdf\xd9\xad\x7d\xe4\x0d\xcb\x60\x77\x58\xb4\xb1\xeb\x21\x34\xf7\x81\xc7\x8a\x16\x5f\xbf\x45\x16\xeb\x39\xb9\x3d\xe3\x30\x58\x1a\xae\x0f\x91\xc3\x4a\xbb\xfb\x37\xca\x65\x6b\x4c\x70\xcf\x38\xed\xb7\x69\x14\x2b\x33\xe4\x21\xee\x1d\xd9\x25\xfe\xb7\xb9\x6f\xdc\x93\x33\x8d\x78\x3b\x76\xf1\xe3\xc6\xf2\xd8\x58\xca\x2d\xf0\x10\x77\x96\x18\xfb\x6f\x75\x6b\x79\xcc\xee\x01\xef\xad\x7d\x81\x78\x6b\x04\x9a\xf6\xa0\xb7\x86\xa8\xd8\xf1\x68\xad\x51\xe7\x8e\x4e\x55\x89\xdb\x98\x79\xc7\x8e\x36\x8c\xe1\x69\x22\xca\x03\x8a\x96\xa1\x76\x2a\x58\xbc\x19\xed\x11\x35\xc1\x80\x75\x0f\x69\x1f\x01\xbf\x25\x32\xf6\x68\x51\xe2\xc5\x43\xf2\xb9\xde\x84\x6b\xf3\xaa\x75\x6e\x66\xe3\x55\x64\xe9\x07\xa9\xd7\x7c\x5e\xe3\x31\xf5\x78\x7d\x45\x04\x49\x14\xb6\x32\x11\x94\x97\x25\xf0\xf2\xd9\x1b\x4c\xe7\xa7\x30\x15\xd4\x0b\x44\x04\x5a\x91\x9b\xcd\xc8\x92\xaf\xde\x89\xa0\xee\xc7\xd1\x4f\x8a\xf4\xb2\x23\x7e\x49\x5c\xc7\x92\x95\x85\x0c\xe2\x96\x33\x89\x0b\xe7\x01\x75\x5f\xba\xe2\x5b\x58\x36\xe8\xde\xcd\x43\x31\x74\xd9\x5f\x42\x4e\xa8\xc5\xff\x5e\xef\xf9\xe1\x76\xbe\x36\xbd\xdc\x25\x42\x3e\x3f\x56\x37\x82\xab\xd7\xee\x5b\xef\x89\x8e\xef\x7a\xa0\x1d\x48\xcf\x75\x77\x03\x45\x2f\x5f\x85\xca\xe2\xe4\xf4\x52\x4b\xa3\x97\x76\xeb\xe0\x79\x2d\xd7\x6b\x15\xdf\xd6\x68\x87\x6b\x90\x76\xcc\xbc\xa0\x8a\xb1\xbf\x23\x60\x3d\xce\x56\x1a\x81\x34\x48\x3d\xed\xbb\x75\x10\xf5\x8a\x44\x1f\x91\x43\x5e\xc3\xc4\x2f\x5f\xdd\x48\x17\x17\x49\xe4\xd6\xd5\x5c\xa7\xff\xf8\x76\x48\x5b\xf2\x52\xf1\x98\x0b\x38\x0c\x61\x6b\x49\xf9\x35\xc2\x16\x2f\x36\x82\x11\x1a\xe8\xaa\xe3\x1c\xec\x3d\x59\x2b\x41\xca\xc3\x51\x70\xee\x46\x20\x5c\x97\xa0\xe2\x95\xbe\xd4\x54\xe1\xd2\xae\xa4\x0c\xbc\x6b\x6d\xcb\x32\x13\x75\x48\x62\x76\xb6\x80\x71\x7e\x8d\x7f\xe1\xed\xd0\xeb\xe6\x5e\xba\x14\x32\xb6\x24\x54\x4f\xd3\xbb\xd4\xbe\x1a\xb6\x1f\x47\x6d\x0d\x8b\x77\xe7\x67\x70\xf1\xa7\x69\x29\x4d\x57\x6e\xa3\xd3\xc6\x3b\xd9\x7b\x02\x24\x68\x09\x52\x5f\xba\x78\x5d\xb0\xf9\xa5\x95\x5a\xe1\x65\x73\x85\x4f\xc5\x2f\x60\x6b\x2b\x5d\x1f\x4a\x97\x05\x97\xf7\x42\xa1\xba\x6e\x61\xd1\x15\x75\xd6\x59\xf3\x01\x52\x21\x6d\xdf\xaf\x83\xe1\xd2\x30\x02\x1f\x02\x80\x4b\x8f\x4e\x1f\xbd\xe7\x39\x68\x9b\x8f\x0f\x69\x04\x9d\xbd\xc0\xd4\x45\x7e\x19\xed\xeb\x82\xd6\xb4\x5b\x35\x65\xde\x94\x4a\x3f\x7e\xb4\x6e\xda\x1b\x69\x7e\xb0\x21\x5c\x0f\x62\x8d\x74\x31\x85\xab\xf9\xdc\xad\xcd\x2d\x1f\xa5\xca\x3e\x4b\x95\x01\xfb\x0b\xbe\x58\xc4\xb7\x75\xc7\xcb\xae\xe4\x8a\x0e\xcb\xbe\x4b\x91\xd2\xa7\x0b\xc1\x36\x65\xcb\x51\x01\x36\x5f\x56\xa3\xb4\x38\xb3\x86\x91\x39\x81\x21\xcd\xbe\x7b\x4e\x66\xfb\x7b\xa7\x14\x47\x9c\x42\x10\x27\x88\x8e\xff\x38\x3e\xf6\xb4\x34\x5b\x9f\x85\xe2\x58\xf0\x84\x9f\x6e\xbc\x36\x86\xbd\x7b\x54\x5a\xc7\x81\x19\xee\x96\x76\xea\x0b\x4d\x6a\x79\x8c\xc7\xe0\x74\x87\xc7\x51\x81\x83\x68\xce\x4e\x0e\x6a\xd1\xe4\xfc\xca\xb2\xeb\xdd\x1a\x80\xa4\x1e\xf9\xa5\xe3\xe2\x45\xc5\xdc\xff\xfe\xb7\x7f\xfc\xf7\xff\xfc\xfd\x6f\x41\x65\xe4\x5a\x17\x3e\xc3\x6e\xe8\x8c\x89\xeb\xa3\x8b\xf7\xbe\xd2\xdb\xb2\xda\x90\x3d\x59\x6e\x9a\x63\x50\xfe\x4d\xf9\xd9\xf4\x4f\xb6\x89\x4c\xac\xbd\x21\xb0\xdd\x1d\xe8\x04\x1c\x32\xd7\xa1\x12\xec\x13\xac\xee\x4e\x8c\xb1\xaf\x89\x28\x10\xd9\x38\x62\xac\x4b\xd4\xec\x8f\xf4\x70\xfa\x2d\x5a\x60\x6a\x1f\xed\x88\xa1\xd4\xe6\x8d\x60\xc8\xc6\x98\x65\x6b\x21\xc8\x2a\x95\xf8\x00\x46\xd1\x98\x21\xb5\x57\x76\x09\x21\xfb\xee\xe5\xcb\x5f\x3f\x4b\x5f\xbd\x34\x43\xc8\xf2\xef\x78\xf1\xbe\x0a\x72\x5b\xd1\x63\xa5\xbf\xa3\x98\xdb\x1e\x98\x25\x9f\x1e\xee\xa9\x59\x72\x38\x0a\x5e\x27\x0c\xd1\x0c\x5c\x15\xc4\xdd\x9c\xd3\xa3\xbe\x48\x09\x5a\x16\x8b\xb4\xc4\xbf\x42\xda\xcc\xea\x32\x5e\xb1\xf1\x10\xae\x07\x44\x97\xb1\xe3\x74\x15\xaf\x0b\x2e\x32\x92\xef\x3b\x69\xa9\x17\x68\x5d\xfa\xa4\xf4\x8e\xe3\x09\x5a\xca\x55\x78\xab\x77\x99\xd4\xe0\x0c\xaa\x57\xbc\xc1\x8c\xe1\x84\xa7\x68\x04\x45\xcf\x33\x50\x69\x85\xa6\x7f\x18\xc7\xd3\xbf\xfc\x25\xc3\xf9\x84\xee\x60\xcc\xc7\xef\x77\x57\x59\x9c\x29\x7a\xa5\xcb\xb1\xcb\x6e\xe9\x01\xb9\xb9\x71\x77\xc8\x6e\x3a\x14\xcc\x4b\xb7\x68\x6c\x54\xd1\x24\xdc\xa3\x97\x84\x1c\x96\xc5\xbe\x35\xe5\x5b\x51\x94\x61\xda\xa7\xce\x59\x8b\xd2\xe0\xfa\x98\x53\x8a\x18\xca\xc6\x62\xe8\x43\xa8\xbc\x61\x87\xc7\x68\x29\xa3\xf3\x69\xe3\x49\xf2\xab\xe3\x51\xc0\x68\xa8\xb2\x48\x0f\x14\xed\x0e\xca\x2c\x2c\x29\x66\xae\x73\x76\xcf\x39\xec\x49\xca\x59\xad\xbc\x99\xa1\xac\xcb\xfd\xff\x71\x7c\x5f\x3e\xc2\x82\xed\xd1\x4f\x9f\xb2\x92\xaf\x69\x26\xe7\x03\x94\xc8\xaf\x9e\x85\xb6\xe5\x3b\x5a\xeb\x1a\x85\x24\xbd\x2a\x4e\xd4\x2e\xc5\xe7\xc6\x04\x36\x2d\xd1\xac\x01\x6b\xf2\x22\x3f\x14\xfb\x17\xf2\x4c\x4a\xcf\x94\x87\x16\xda\x76\x83\xcd\x22\xaf\x6f\xcf\xc9\x7a\x03\x6e\x6e\x32\xfe\xc0\x4e\x7b\xac\x0b\x87\x1c\xad\xc1\x21\xe6\x77\xe8\x78\x96\xe5\x3b\xd0\x7d\x88\x68\x9a\xb5\xba\x3c\x38\x21\x61\x96\xc1\x70\x36\x2e\xd2\x35\xd5\x59\x24\xb3\xf5\xe0\x4a\xec\x92\xc3\xc3\xce\x5d\xa5\x03\xd7\x60\x3a\xf1\x8a\xf8\xdf\xe5\x62\x12\x63\x36\x43\x11\x98\xac\x40\xf5\x05\xce\x0c\xb1\x46\x2b\x10\xfd\xaa\x11\xd0\x0e\xe7\x0c\xcf\xd1\x18\x4e\x89\x66\xf3\x87\x14\x41\x1d\xb3\x62\x88\x1e\xcb\x1e\x3b\xfe\x85\xd0\x4f\xe5\x28\x3c\xf6\xbb\xb5\x3f\x88\x45\xe0\xd9\x94\xb3\xdf\xae\xc5\x06\x93\x10\xc5\x0f\xcb\x64\x33\x99\x58\xc3\xd8\x6c\x42\xe8\x21\x55\xf1\xbc\x4b\xa3\xed\xea\xd9\xfb\xd7\xb3\xef\xcf\xe6\x46\xa3\xcd\xb3\xc3\x47\x65\x3a\x26\x13\xeb\x48\x75\x11\x92\xa4\x28\x8e\x13\x71\x8f\xd4\x2e\x38\x6e\x50\x61\x53\x71\x47\x74\x88\x78\x2a\x0a\x2f\xd7\xc8\x97\x4f\xbd\xec\x0d\x89\x90\x70\x3e\x09\xbe\xaa\x26\x4f\xcb\x7c\xe3\xc2\x3a\x2b\xd2\xa2\xf9\x03\x8b\x8f\xfc\xb9\xc5\x27\xfe\xf8\x92\x91\x5b\x1d\x50\x8a\x93\xdd\x18\x71\xc5\x80\x2c\xc5\x03\x9b\x63\x5a\x7d\x51\x86\xe1\x5a\xa9\x0b\x8e\x63\x9c\xdc\xa2\x5d\xf3\x2d\x5b\xfd\xfa\xd9\xec\xe2\x2c\x31\x3b\x1b\xb8\x77\x79\x64\xfa\x8f\x8d\xa5\x8f\x85\x41\x58\xed\x78\x15\x54\xa7\x2d\xfc\x10\xe3\x40\xe7\xa1\x51\xd5\x05\xf9\x98\x8c\x61\xf0\x4c\x5c\xe0\xe4\x76\xa3\x6e\x89\xa6\xcd\x99\xc1\x49\x02\xef\x0a\x7b\xd8\x85\x26\x5d\x07\x1c\x74\xd9\xa1\xb6\xa4\xd0\xd8\x5c\xe7\x97\xc1\x49\x0d\x19\xe9\xb9\xf8\xf6\xe8\xaa\x44\xea\xd2\xf0\x2d\x0d\xe0\x48\x9a\x87\xa7\x55\xa1\xb9\x86\x13\x85\x30\x75\xe4\x6d\xb6\x18\x68\x70\xc2\x15\x56\x31\xe1\xad\x90\xe1\xd8\x9b\x0c\xe5\xd0\x7c\x29\x71\xdc\x81\x12\xad\x21\xf4\xae\x13\x7a\xda\x61\x5d\x55\x93\x7e\x9f\xc9\x3c\x75\xe3\xeb\xf4\x18\xed\x33\xef\xd1\xbe\x45\xd9\x92\xd0\x5b\xdf\xe1\x3e\xb3\x0c\xb7\xe9\x53\x6a\xee\xc7\xdc\x42\xea\xb3\x21\xdb\x05\x8b\x51\xa8\x17\x89\x10\x3e\xde\xc5\x5a\xfa\x57\x2e\xdf\x40\x46\x80\x7c\x30\x6f\xf3\x81\x13\xd1\x3c\x42\x97\xc6\xbe\x19\xf7\x42\x55\x8f\x31\xcb\xc6\x29\x0e\xf9\x79\x5b\xe4\xf3\x66\x68\xae\xcc\xdd\x97\x18\xc5\x51\xae\x2b\xe1\x44\xc3\x95\x0b\x48\x22\xff\x2c\x75\x77\x98\x44\x38\xca\xcf\x76\xa9\x51\xf1\xbe\x2b\xaa\x42\xcd\xae\xf4\x30\x94\x89\xc7\x59\xd5\x19\xbb\x05\xe4\x57\xc9\xd5\x5c\xf6\x9e\x32\x68\x07\x2b\x0f\x13\x00\x8b\xc1\xf6\x5f\x7f\xf3\xa8\x97\x38\x9a\xa2\xac\xc2\x0f\xde\xe9\x01\x6b\x78\x63\x2b\x5c\x03\x7b\x1f\x07\x9e\x82\x49\x0c\xab\x81\x1d\xf8\xac\x8a\x64\x69\x97\x4c\x6b\x64\xe3\x94\x19\xe7\x19\x5d\xe4\xda\x9f\x67\xde\x44\xfd\xd1\x26\x87\xad\x74\xfd\xd6\x3d\xb6\x90\x31\x94\xb1\x03\x3c\x9f\x1e\x68\xd4\x3d\x90\x14\x28\x34\xef\x1b\x1c\x23\x59\x03\x5c\x50\x84\xf3\xf1\x7d\x56\x0d\x7d\x77\xf0\xef\x54\x25\x8e\x78\x66\xc3\x55\xe6\x4b\xd0\xd6\x92\x9c\xc6\xea\xad\x99\xc6\xd1\xbf\xa3\xd5\x35\xcf\x52\xf0\x47\xbb\xf0\x4a\x49\xb2\x1c\x80\x15\xa1\xa9\x28\xec\xe1\x56\x7a\xe6\xe7\xcd\xda\x64\x4a\x81\x9f\x64\x56\x1a\xcb\xde\x08\xe5\xa1\xcb\x75\x1a\x9a\x59\x87\x12\x1c\x63\xd0\xb1\xbd\x10\xc7\x1a\x74\xac\xf4\x0a\xaa\x51\x4a\x34\xe1\x09\x8a\x9a\x1f\x63\xb1\xce\x2d\x5a\x2d\x09\x8d\xc4\x89\x2f\x3f\x80\xe2\x4e\x72\x73\x63\x2f\xee\x57\xf3\xef\x0a\x08\xd1\xb3\xbc\xe7\x4c\x4a\x3d\x20\x5a\x09\xc9\x09\x8f\xf4\xc3\xd5\xbf\x1e\xb4\x21\x97\xb4\xd0\xa1\xb4\x72\xde\xc0\x2c\x9c\xa1\xfe\x31\x8d\xb4\x11\x86\x20\xf9\xd1\xaf\x5b\xf2\x6f\xc5\x37\xe0\x86\x2c\x92\xe8\x49\xd7\xfd\xb7\xf7\x5a\xc2\x5c\x52\xb0\x3c\xb1\xb6\xab\x20\x3c\x7d\x48\x0a\x42\x09\x65\xdb\x38\x6d\x9b\x51\x9a\xf2\xe2\xf2\xb8\x1f\xf2\x70\x7e\xfa\x78\x38\xcb\xc3\xf9\xa9\xd7\xe1\xfc\xb4\x3d\x32\x5a\x6e\x02\x65\x5d\x6d\x6f\x03\x1c\x3f\xbc\x0d\x60\x8c\xdd\xb7\x6d\x80\xe3\x8d\x6d\x80\xf5\x50\xf2\x7f\x4b\x1b\xc0\x2f\xc9\xe1\xd8\x67\x03\xec\xca\x50\x3c\x7a\x48\xdb\x60\x2b\x86\xe2\xd1\x06\x0c\x45\x63\x4e\xc5\x00\x5b\xf1\xe8\x71\x2b\x26\x83\xe5\x1f\x18\x29\xde\xf5\x82\x81\x0c\xc5\xc2\x59\xbc\x37\x96\xa2\x6e\x0d\x5e\xa5\x28\xc4\x37\x2b\x90\x88\x51\x82\x88\xe2\x3b\x74\xc0\x9b\x35\x1f\xdc\x70\x7b\x0c\xc4\x24\x84\xb6\xb4\x5a\x8f\x61\x77\x36\x44\x37\x60\x47\x1a\xcc\x47\x39\xe9\x62\x82\x76\x3b\x52\x5e\x7d\x51\x90\xe3\xe3\x28\x40\x4f\xa6\x4f\xc0\x41\x85\x5e\xbe\xd9\xa4\x15\x9a\x75\xb6\x14\xb7\xc8\xd7\x8e\x87\xb6\xaf\xfa\x43\x4a\xd0\x79\xe8\xa5\xd9\xbe\x35\x46\x22\x1e\xed\xa8\x32\x12\x17\xc9\x98\xf5\x56\x8a\xb3\x07\xce\xfe\xa8\xee\xf3\x61\xf2\x3f\xd4\x1f\xfb\x91\xb8\x44\xff\xf3\xfc\xfb\xdb\xe9\xc4\x9c\x00\xd2\xc8\xf2\xe8\x97\x81\x54\xc8\xb3\x6a\x0a\x92\xae\xdf\x76\x4e\x42\x92\xcf\x74\x64\x21\x89\x4f\x55\x45\x7a\x5b\x59\x49\x83\x32\x62\x8d\x69\x06\xe6\x44\xb1\x20\x3b\xe5\xc3\xbb\x6f\x11\x9e\x2e\xff\xf8\xad\x39\x11\x29\xe7\xa2\x10\x66\xae\x6a\xa7\x22\xbb\x58\x9f\x18\x48\x48\x32\x4e\x29\x4e\xcc\x7d\x3c\x2d\xf6\x89\xd0\xce\x4b\x15\xe7\xfa\xe4\xfa\xc3\x95\x59\x22\x55\xd3\x9f\x1a\xbd\xbf\x4a\x64\x35\xad\x63\xaa\xb6\x43\x62\x7c\x83\xc2\x55\x18\xb7\x00\xca\x5e\x14\x3f\x8f\x82\x33\x0a\x6f\x34\x2b\x44\x8a\xf7\x71\x24\xbe\x56\x5f\x96\x02\x74\x34\xf4\x00\x2e\x74\x74\xf2\xe2\xfd\xb1\xe8\xb4\xb8\xf9\xd7\x9f\xd0\x70\x86\xef\x2a\x89\xcd\x72\x08\xb0\xf8\xc5\x62\xa6\xaa\xd3\xb3\x6d\x00\xe2\x7c\xb3\xb4\xf9\x5f\x3f\x03\xbd\x98\xcd\x17\x80\x2f\x26\xf8\xfb\xff\x0b\x72\xa2\xe6\xff\xd5\x66\xe7\x6e\x97\xd5\x60\xc5\x26\x90\x9f\x99\xdc\x29\x25\x99\xca\x43\x30\xd1\xfb\xb2\xf8\xfd\x5a\xa8\xc7\x6f\x49\x82\xfc\xe1\xfd\xda\xb7\x94\x58\x28\x92\xa2\xb6\x22\x85\x77\x97\xe7\x6f\xeb\x4a\xc1\xfa\x14\x3f\x9d\xc1\x64\x8a\xc0\xa9\xd0\xc3\xbf\x00\xef\x52\x94\xe4\xd4\x96\xf3\x44\x11\x5f\x02\x22\xa1\xee\xbd\xfa\x94\x75\x50\x7e\x37\xb1\x20\xef\xd1\x1d\x46\xcb\xe1\x96\x24\x55\x94\x68\x59\x97\xcb\xf7\xef\xae\xcf\x4f\xaf\xcf\xcf\x1e\x17\xc7\xbd\x38\xf9\x60\x87\x5b\x9a\x58\x4e\xdd\xb8\x2e\x17\xef\x4e\xbf\xf9\xed\x2d\x4a\x9b\x1b\x84\x1b\xd2\x78\xb2\xc8\x69\x7d\x95\xc1\x6c\xe1\xe3\x18\x75\xd1\x37\xb7\xc5\x6f\x62\xb2\x1c\x33\xf9\xc4\xd6\x84\x5d\x69\xad\x99\x46\xd1\x7a\x5c\xf4\xef\x06\xc2\x35\xd7\x34\xa5\xe4\x0e\xc6\xde\x93\x1d\x6c\xbe\xd5\x29\xd7\xc7\xe1\x69\xc3\x75\x81\xa7\xb7\x2c\xbb\xb6\x17\x95\xd2\x38\x0c\x29\xd4\xd3\x1c\x2a\xa2\xf8\xdf\xb5\xbc\x78\xf8\xcd\x76\x3d\xc3\x0c\x60\x06\x20\xd0\xa6\xb7\x99\x3d\x25\xef\x79\xae\x7c\x07\xbc\x96\x23\xb7\x41\xb9\xcd\xf6\x1f\x4c\xa2\xdc\x04\xc7\x87\x87\xc2\x90\x2b\x54\x8b\x4e\xaa\xf2\xe9\xc9\xf5\xf9\xab\x77\xef\x7f\x00\x07\xe0\xfa\xe4\x95\xd9\x63\x5d\xab\x57\x16\x1e\xeb\x53\x98\xa1\x29\xa1\xd8\x2b\xf2\x67\xf1\x18\xa1\x0c\x8e\xeb\x19\x28\x06\x67\x53\x4f\xdf\xb6\x1c\xe5\xaa\xc5\xbf\xdd\xd8\x41\x32\xf4\x56\xde\x65\xdb\x3f\x03\x08\x6f\xed\x45\x83\x70\x91\x25\x5c\x95\xc1\xe9\xaf\xfb\xbc\x54\xd7\x70\xea\xbf\x4a\x3c\x62\xb0\xd9\xb5\x11\xe3\x19\x66\x59\x8e\xda\x8a\x0e\x16\x09\xe4\x7d\x5b\x6c\x11\xa0\xea\x1d\x29\xa2\x73\xcc\x18\x4f\x54\x91\x25\x63\x6f\x60\x22\x7c\x2a\x6b\x09\x5a\x34\x4f\xb3\x15\x08\x17\x94\x11\x3a\x4e\x09\xae\xd5\x8d\x7c\xd0\x46\x6a\x49\x82\x3f\x8f\x70\xa6\x73\x75\xe7\x63\xb5\xc3\x60\x5b\x47\xe7\x78\xa7\x65\x55\x9b\x46\xda\x51\x2d\xe2\xc8\x70\x84\x26\x90\x8e\x4b\x57\x95\xd6\x80\x49\x53\x45\xb5\x65\xb2\x38\xc7\x2a\x97\x19\x7d\xae\x49\x9f\x53\x60\x53\x3e\xad\xfc\x09\x03\x7b\xb4\x84\xa7\x71\xa7\x1e\xad\x17\xb7\x9f\xcc\x8e\xaf\x6e\x5f\x74\x2e\x09\x55\xf5\x73\x5c\xc0\xe5\x13\x31\x97\xc9\x29\xf4\x89\x08\x66\x70\x2c\x0a\xee\x9a\xa5\x74\xe5\x15\x22\xd0\x55\xb9\xa6\x8a\x4a\xe1\x28\xe6\x42\x11\xce\x78\xbd\xe8\x3a\xc2\x7e\xb9\x62\x78\xb9\x6a\x56\xe7\x35\x22\x1b\xed\xde\x72\xc3\xae\xd8\x86\x7f\x39\x7f\xfd\x65\xc5\xc7\xcc\x09\xb2\x96\x9f\x59\x34\x21\x73\xfb\x9a\xaf\xe0\x1d\x12\xef\xb6\x07\x51\xfa\xd8\x1b\x6d\x8b\xa6\x1d\xb4\x3a\xcb\x64\x24\x7c\x9d\x44\x28\xc9\x4e\x19\xab\xf3\x8c\x75\x1d\x39\x1f\xcf\x10\x8c\x70\xa2\x75\x76\x42\xf7\x29\x4c\x22\x14\x35\xd6\x4e\x24\x7f\x89\x42\x4c\xa6\x2f\xb1\xf8\xa3\x28\x97\x96\x05\x8a\xb2\x90\x39\x45\x89\x78\x7e\x9b\xcc\x1c\x05\xe1\x82\x52\x94\xf0\xa5\x7c\x1d\x05\xea\x6c\xc9\xdf\x84\x6e\x28\x62\x33\xf1\x15\x1f\x96\x60\x1a\x92\xae\x2e\xc5\xd0\x48\xf2\x86\xc8\x85\x28\xdb\x3d\x15\x1f\xd5\x22\x9d\x30\x09\x81\x10\x90\x24\xff\x7c\x81\xee\x50\x2c\xcc\xe9\xe2\xbb\x2b\xf4\xcb\x02\x25\x21\xd2\xbe\xbe\x2a\x6b\xb3\xbe\x2f\xb0\x9d\x24\xa3\x29\x22\x79\x05\x3b\x8a\xa2\x24\xf1\x51\x10\xb0\x95\xad\x15\x39\x8b\x2f\x0a\x64\x92\x51\x51\xcf\x26\x77\x7d\x71\xb6\x08\x1a\x17\x5f\xb8\x8e\x1f\xa5\x9b\x55\x08\x6f\xdf\x1e\x5e\x1b\x43\xce\x4f\x2e\x5b\xe9\x0d\xb6\x5f\x5f\x2c\xae\xfb\x06\x7d\xf5\x3d\xae\x2d\x98\xc3\xe3\x5a\x8d\x77\x3a\xec\x7f\xc5\x5a\xbe\x33\xad\xb3\x9f\x3f\x8d\x0c\x4c\xea\x7f\xb3\x81\x95\x6d\x7d\x10\x4d\x67\x4d\xc9\xf1\x7e\xb9\x2e\x7d\x4f\x9c\x86\xbc\x92\xf8\x14\x07\x13\xc8\xd0\x98\xa2\x24\x42\x54\xaf\x19\x14\x1b\xaf\x50\x9a\xa5\x7e\xec\x0e\xf3\x77\xcc\x92\xf0\xd1\x36\xeb\x71\x80\xba\x42\x29\x31\xd5\x4c\x0a\xe5\x22\x8d\x09\x8c\x54\x24\xbf\x38\xd8\x0b\x19\xac\x1f\xad\x58\xc8\x5f\x92\x94\x15\x84\x1f\xf8\xed\xb5\x2f\x0b\x0c\xf6\x9f\x02\xf1\x3b\xd0\x4b\x0e\x47\x0d\x1d\xc2\x28\xc9\x9a\xa2\xc4\xf3\x48\x55\xac\xd7\x18\xa4\x3f\xd7\x36\xa7\x62\xef\x57\xb9\xb9\xa4\x83\x8a\x12\x3b\xb0\x5e\x5c\x74\x77\xdd\xa9\x6a\xfc\xf9\xe1\xdb\xe3\x1f\xdf\x4e\x8e\x2c\xa8\x13\x0d\x05\x79\xc8\x06\xb5\x2d\xff\x1a\x2c\xf6\xb6\xf0\x00\x4c\xd3\x37\x42\x53\xc9\x79\xda\x16\x1a\x88\x16\xbc\x94\x98\xa3\x05\xa6\x14\x33\x74\x5e\xdc\x60\x0f\x10\xd8\x0c\x74\xb5\x9e\xb2\x8d\xad\x05\xe2\xaf\xd2\xff\x34\xa2\x24\x8d\xc8\x52\xcb\x15\x52\xb9\x41\x90\x52\xb2\xe4\xbb\xf7\x44\xd6\x87\xb7\x75\xed\x2d\x5d\x20\x29\x49\xc9\x9d\x2e\x1d\x95\xcc\x9d\xe1\x08\xbd\x4b\x64\x47\x4e\xfe\x07\x66\xf9\xa1\x20\x5a\x72\x8a\xf6\x08\xe2\x19\x88\xe6\x4f\x49\xb9\x66\x17\xc6\x38\xbc\x05\xfc\x5f\xc2\x73\xe7\xf8\x9f\x41\xeb\xd2\xb4\xa6\x3b\x36\x4b\x70\xe6\x28\x59\x58\x4f\x80\x46\xaa\x74\x3b\xc4\xf6\xfb\xfc\x58\x64\x19\xd0\xa3\x00\x56\xdf\x45\x3e\x73\x79\xd3\xa9\x76\x8f\x68\x90\xeb\xd1\x3d\xba\xdb\xb0\x6e\x10\x8a\x26\x30\xb4\x63\x0a\x68\x43\x7a\x29\xaf\xdf\xd0\x70\x28\x82\x76\xcf\x8e\x36\x94\xf7\x08\x46\xc6\x61\x78\x46\xb5\xfb\x27\x51\x0c\x85\xc2\x17\x61\xde\x24\x2f\xe8\x86\x26\xe8\x4d\xcc\x74\x31\x89\x71\x99\x43\x6b\xa5\xa9\xc4\x9d\x6b\xa1\x67\xbf\x52\xb9\xf5\x26\xec\x3b\xdb\xab\x19\xa4\x08\xdc\x61\x08\x18\x0a\x17\x14\x01\x74\x9f\x21\x9a\xc0\x18\xc4\x12\xfc\xc6\x32\x71\x48\x91\x0f\x27\xaf\x11\xa7\xea\xf7\x7d\x8d\x95\xbb\x8b\xe5\x53\x09\x27\xf4\xa0\xc4\x72\x07\x81\xdc\x34\x02\x52\xcc\xa3\xab\xdc\x99\xc5\x2e\x71\x62\xf5\x66\xb7\x1e\x06\x1e\x9b\x6b\x4e\xee\x10\x98\x10\x72\x3b\x87\x0e\x2c\x96\x0f\x49\x2a\x91\xf5\x7d\x41\x63\xbc\xf6\x4a\x8f\xc0\x30\x43\x5c\x17\x10\xb9\xe9\x33\x94\x64\xb9\x5c\xd8\x0c\x81\x5e\xf8\x50\xe6\x72\x13\x74\xa9\xde\xde\x3d\x94\xdc\x7d\xae\x97\x14\x3b\xa0\x90\xb8\x6c\xcd\xaf\x72\x8a\x19\xdf\x77\x9e\x91\x65\x22\x6c\x15\x5b\x00\x84\x2b\xeb\xce\x83\x51\xeb\xdb\x6a\x56\x18\x4f\xa2\xc8\xec\xa7\x29\x2f\x39\x25\xe9\xaa\xc7\xd1\xd8\x8b\xef\x1b\x7b\xde\x32\xe8\xfe\xc0\x59\xed\xb4\xbf\x2e\xe2\xed\x8e\x25\x57\x17\x76\x3e\x4f\x7d\xe6\x57\xa1\xf8\xb0\x13\x14\x8f\x76\x4c\xee\x6c\x91\x72\xbd\xa2\xeb\xec\xd6\x9b\x75\xcd\xcc\xde\x0c\x8b\x75\x21\x1b\xa0\x55\x00\x85\xc2\xa3\x61\x27\x1e\xbf\x6c\x2d\x3d\x6b\x6d\x6d\xc4\x47\x1e\x70\x14\xa8\x30\xc3\x77\x38\x5b\x69\x58\x9e\x5c\xfd\xbe\xc3\xac\x82\x09\x36\xa8\x41\xf9\x15\x66\x19\xa1\xab\x87\xa5\xb9\xac\xab\xbc\xd4\xa8\xdd\x75\x6b\x3f\xcb\x79\x34\xb9\x1d\x67\xa4\x49\x0c\x4a\x16\xd2\xd1\x26\x01\x39\xd5\x86\x7a\x02\xb5\xe5\x35\xbc\x4a\x5f\x7d\x17\x1f\xf9\x6e\x6d\x33\xff\x6c\x7a\xa2\x54\x7b\xa3\xe9\x5d\xfa\x88\xd6\x98\xaa\x81\x21\x36\x62\x34\x74\x3d\x0f\xed\x5e\x9f\xaa\x17\x59\x2f\x14\x53\xbb\x56\x54\x36\x17\x65\x90\x22\x51\x46\x55\x8d\x15\x89\x2d\x7c\x61\xae\x49\x60\x2c\x17\x93\xd9\x35\x57\x28\xcb\x70\x32\x65\x66\x8b\xbb\x51\x53\x16\xbc\x47\x02\x8d\xa6\x4c\xf3\x1a\x81\x6b\x38\x1d\x01\x91\x58\x38\x02\xdf\xcb\xe4\x44\x7d\xb5\x59\xf9\x12\x7f\x10\x73\x1f\x5a\x1b\xba\xb0\x94\x8e\x52\x79\xe0\x3f\xb6\x06\x36\xa1\xd1\x5e\xc1\x3b\x04\x20\x03\xba\xfe\xb4\x31\x48\xda\x1b\x42\xb9\x4a\x73\x74\x9c\x9f\xb9\x6c\x31\x99\xe3\xcc\x0e\xb5\x04\xef\x90\x36\x32\xc9\x0f\x9b\xef\x94\x63\x6e\x52\x9f\xa0\x65\xc9\x4d\x7a\x6f\x85\xc3\x51\xf0\xd6\x1b\x81\xa9\xbd\x25\xbd\x2a\x59\xae\x55\x32\xeb\x15\xcc\x1f\x45\xbb\x9c\xda\x30\x94\x0a\xa0\x53\x6b\x54\x34\xcc\x0c\xd0\x1c\xe2\xb8\x56\xc2\x0c\x8a\x26\x39\x41\xa9\x3c\x4b\x1c\x29\x8f\x3a\xe5\xa0\x3f\x9c\xd5\x2b\x42\x22\x90\xe9\x6f\x04\x21\x49\xee\xd0\xaa\xc4\x85\x04\x9c\x02\x5d\xfc\x3e\xbb\xe3\x03\xbd\xff\x05\xd7\x35\x59\x48\x71\xea\x5d\x1d\xaf\xda\x3e\xa0\xfb\x0c\x52\x04\x5b\x38\xa2\x3c\x48\x97\xac\xc9\x03\x7c\x08\x66\x1e\x88\xf4\xe1\x7c\xac\x57\xb1\x07\xcf\x37\xbd\xd8\xe7\xf7\x69\x0c\x71\x02\x16\x0c\x81\x10\x32\x04\x6e\x08\x15\x18\xa0\x99\x43\xe0\x38\x97\xd9\x26\xa9\x7e\xbb\x55\xe9\xbe\x6d\x23\x1e\x7c\x59\xfa\x95\xbb\x3d\xa8\xf1\x74\xd8\x59\xcf\xf0\x32\xd8\x4b\x71\x92\x3d\x6a\x1b\x26\x6d\xa3\xf0\xca\x6d\x4c\xc5\x48\xeb\x6f\x03\x30\x8e\x0b\x10\x6a\x42\x81\xa8\x4f\x50\xdd\xde\x58\x13\x7c\xb0\x99\x19\xef\xc0\x2f\x2b\x6c\xe9\x70\x86\xc2\xdb\x09\xb9\xd7\x52\xc9\x4b\xbc\xa5\xb2\x3b\x75\x3e\x2a\x0d\x58\xdc\xb7\xb9\x51\xf0\xb1\xd2\x53\x5a\x24\x78\x24\x8b\xdc\x64\x96\x59\x5c\x1a\xdf\x3f\x01\xc6\xcb\x5b\x60\x8a\xfc\x95\xef\x7f\xca\xe6\xaa\xff\x34\x32\x57\x6e\x4f\xab\xd0\xbd\x2c\xd9\xd7\x0f\xfd\x7c\x5b\x62\x37\xe2\xee\xbb\x47\xb9\x6b\x92\xbb\xc2\xb5\x09\xce\x1c\xb8\xeb\x83\x4b\xe0\x13\x8a\xc0\x8a\x2c\x00\x5b\xc8\x3f\x96\x30\xd7\xee\x09\x10\x8b\x55\x45\x83\xff\xf3\xa3\x46\xf7\x20\xa5\x8b\x5f\xbf\xf7\x22\x48\x60\xcd\xa6\xad\x45\x14\xf6\x47\xb8\xa8\xc0\xca\xa3\x7c\x31\xca\x17\x45\x9e\x8d\x4a\x96\xce\xee\x23\x7d\x58\x3b\xf6\x1d\x95\x0c\xb4\x3b\xc7\x51\x6d\x0c\x2a\x55\x57\x7d\xfb\xd6\xdb\x5f\xf4\x76\x0b\x6e\xa2\xd3\xa2\x6f\x4c\x1c\x83\x09\x02\xc5\x30\xa3\x4a\x2b\x11\xd9\xc2\xee\xd1\x87\xf0\xcf\x74\xe2\xf8\xea\xb3\xda\xfe\xb7\x1f\x3b\x0d\x39\xf1\xb0\xc0\xed\xea\x49\xe1\xc3\xa6\x9a\x33\x8e\x9f\xbf\xe3\x44\xf3\x05\x7a\x76\xf3\xf2\x55\x2e\xed\x4c\x89\xe6\x11\x09\xf7\x25\xcf\x5c\x98\xc5\x0d\xfe\x57\x11\xbb\xfa\x3e\xc8\x66\x68\xce\xdf\xbd\x48\x53\x44\x43\xc8\x90\x02\x3d\x36\xee\x09\xce\xf0\x62\x00\xad\xa1\xbc\x13\x4a\xc9\xf2\x02\xdd\x34\x1a\x7d\x96\x21\x01\x9b\x53\x4d\x0a\x54\x4b\xc1\x44\x03\xd3\xc3\xc7\x39\x62\x09\x59\xda\xe2\x92\x7c\x32\x57\xf9\xf9\x71\xc6\xb3\x04\x4c\xee\x92\xb5\xf2\x0e\xe4\x31\xa9\x14\xa9\x7e\x39\x08\x39\xcb\x64\x19\x99\x8f\xe7\x38\x8a\x84\x87\x65\xf0\x9c\x84\x8a\x4b\xca\x49\xf4\x32\x73\x24\x21\xd9\x58\xa6\x59\x0b\x5f\x10\x8e\x2a\x75\x3a\xaf\xa3\xb5\xd2\xa7\xdd\x71\x7f\x7e\x38\xa2\x58\x04\x2e\xea\x09\x00\x52\x53\x16\x0c\x49\xf3\x03\x4c\x03\xbf\xce\x59\x51\x95\x18\xb6\x7e\x85\xab\x17\xc4\x8b\xa9\x5e\xf0\xd3\x98\x4b\xe9\x13\xab\xb6\xe2\xee\x9f\x5e\xe0\x8f\x43\x6d\x3a\x05\x36\x9a\xac\xbc\x91\x53\x46\x9c\x07\xc3\x9c\x31\xd5\x62\xe2\xdd\xe2\xa7\x7e\xf3\xf3\xc9\xf7\xff\xf9\xcd\xf1\x3a\x8d\x9f\xa7\x14\x47\x25\xf8\xf6\xf8\x8f\xe3\xe3\x0e\xa6\x9e\xb8\x19\xc5\xf1\xf8\x08\x94\x7f\x2b\x89\xd2\xc5\xc6\x53\x25\x83\x8a\xb0\x5d\xad\xbc\x62\x55\x5c\xba\xec\x67\x1c\x61\x24\x31\xde\x2f\x5c\xd3\xea\xfe\xa3\x6a\xf5\xb9\xd1\x6f\x6d\x4f\xbf\x6d\x7d\x51\x05\xb2\xa8\xf6\x9e\x86\xc3\xdb\x5b\xdb\x77\xaa\x74\x9e\x6b\x79\xac\xad\x25\xcd\x15\x8e\x61\xd7\x16\x24\x44\x04\x9c\x94\x61\x5c\x03\x9c\x50\xc7\x6e\x2b\xf0\x44\x27\xc6\x50\x2f\x57\x1a\x95\x23\x77\x2e\x84\x89\x67\x86\x53\xfd\xdd\x66\x8c\x20\xad\xef\x3c\x70\xe2\x05\x5d\xc6\x0b\x66\x99\x64\xfd\x10\x5b\x13\x0d\x48\x76\x75\x56\xa3\x83\x13\x72\xe7\x8d\xfd\x55\x19\x8a\x35\x45\xb5\x5a\x8c\x3d\xaa\x15\x2f\xf7\xcb\x88\x10\xa6\x9c\x5f\xba\x6d\x4f\xe8\x26\xc5\x04\x6a\x29\xac\xe8\x40\x7e\xd5\x07\xde\x13\xe9\x98\x16\xd8\x7f\x92\x5a\x06\x9d\x19\x82\x65\x83\xb9\xb1\x64\x91\x01\xa9\x8f\x76\x2f\xb6\xb4\xfb\x35\x3c\x0a\x2e\xcb\x07\xc0\xfa\xed\x2a\x89\x3d\xff\x6e\x46\xd1\x4d\x30\x0a\xfe\xad\x45\x52\x85\x24\x5d\x71\x78\x76\xa7\xac\x3a\x25\xe9\xca\x5d\x42\x96\x5f\x25\x00\xeb\x8d\x11\x5e\x63\x6a\x75\x29\xb0\x7c\x0a\x2b\xac\xd7\xbc\x21\x77\xc8\x75\xcd\x75\x1d\x03\xb1\x47\x93\x97\xf6\xa5\xeb\x58\xa6\x64\xcc\x0a\xee\x21\xc1\xd7\xe7\x09\x01\x4c\x9f\x84\x50\x38\x1d\x22\x2c\x0a\xe8\x95\xef\xc9\x8c\x8f\x54\xf3\xef\x4a\xe0\x91\x6e\xa2\x66\x07\xe5\x1f\x83\x92\x8a\x6f\xa1\xce\xa4\xf2\xaa\x2c\xc9\x2f\xda\x48\xc9\x8c\xdc\x27\x3b\xa3\xd9\x9c\xdc\xa1\xee\x34\x13\xa3\x76\xd0\x2c\xbf\x68\x23\x34\x6b\xc8\x8d\x1d\xd0\x2d\x15\x65\xc9\xdd\x49\x27\xeb\x99\x9d\xd4\xeb\x5b\xf7\xbc\x99\x8a\xa5\xb5\xe4\x6d\x9f\xa5\x50\x35\x4c\x9e\xcb\x21\xb3\x1f\xfc\x57\x23\x7f\xae\x80\x93\x23\xd3\x69\x8c\x2a\x41\xcc\x02\x69\x0e\xd2\x29\xca\x1a\xef\xfa\x37\xfd\x65\x22\xf0\xe1\xf9\xae\x09\x0c\x6f\x23\x4a\xd2\x40\x98\xd3\xb8\x9a\x39\xab\xaa\xb4\xfa\x00\x7e\x73\x94\xaf\xb6\x53\x9c\xc9\xea\x63\xc1\x6c\x70\x12\x4b\xc0\xa6\x6d\x9f\xba\xa6\x86\xbb\x6a\x6c\x98\x83\xb1\x9d\x61\x96\x0f\xaf\x77\xbf\xb7\x81\x36\x77\x46\xc2\xb1\x18\x50\xa7\xad\x2d\x00\xe5\x2c\x3b\x3b\xbf\x5b\x5d\xd4\x69\xa1\x5b\x88\x46\x16\xd9\x9e\x51\x4d\x8e\xa8\x13\xd9\xde\x89\x7b\x1c\x74\x2b\xae\x1a\x82\x70\x8b\x74\x8f\x68\xb6\x48\x3b\x9f\xbd\x40\xc4\xe2\x2d\xe4\xfa\x90\x0e\x43\xa9\x88\x2c\x93\x3d\xa2\x55\x3e\x9c\xee\xd4\x8a\xa4\x15\x69\xa1\x97\x0c\xaf\x0c\x53\xbf\x6a\x22\x40\x7f\x9b\xdc\xee\x17\xec\xe5\xd2\x58\xd3\x9f\xa1\x80\x07\x47\x81\xea\xb9\x5a\xe3\x1e\x1d\xe9\x51\x7e\xf0\xeb\xb9\x3a\x8c\x37\x2a\xd7\x9f\x0e\x66\x38\xea\xe8\x82\xb2\x1b\x4c\xc5\xa4\x07\x74\xa2\x36\x2e\xf0\x2e\x9d\xf4\xb1\xb5\x82\x06\x12\xaa\xd5\x68\xf2\x55\x65\x86\xca\xfa\xf2\x4e\xfc\x02\xe2\xc3\xf3\xc3\xfa\x73\x2d\x19\x60\x6b\x27\x81\xf5\xc9\x03\xe3\x9e\x99\x33\xc4\x32\x9c\xb8\x1a\x84\xba\x9e\x6d\xcf\x08\x33\xa7\x9b\xf2\xf6\x0b\x85\x0b\x36\x89\x78\xee\x7f\x82\x58\x86\xa2\x22\xe1\xbf\x48\x28\x0a\x49\x8a\x51\x04\x32\x02\xb2\x19\x02\x2a\x53\xbf\xc8\x46\xad\x17\x06\x18\xde\xee\x44\xdd\x3e\xaa\xf7\x5e\xf0\xd4\x21\xfb\x27\x9c\x15\x3d\x5c\x9d\x59\x51\xa6\x24\x05\x41\x04\x3d\x49\x47\x42\x15\xc9\x06\xd3\xdf\xc1\x78\x81\x2e\x61\x36\x2b\xbe\xe1\x99\x36\xf2\x1b\x56\x36\xed\x55\x22\xa4\x88\xec\x6b\xe8\xb4\x22\x65\x4d\xcf\x40\x13\x66\x86\x1c\xb3\x3d\x39\x81\xbf\xc2\x91\xa2\x60\x3f\x7b\xb6\xb7\x08\xae\x6c\xeb\x5d\xac\x83\x20\xf5\x99\xc8\x1e\x68\x5d\x8a\x33\x12\x7a\x2d\x04\xbf\x6e\xfd\x65\x58\x43\x4a\xb8\x12\xee\x1e\x62\xce\xdd\x1a\x69\x77\x7b\x93\x79\x57\x7a\xc8\xbd\x11\x99\x3b\x81\xef\xae\xad\x76\x0c\x85\xe0\xe0\xe3\xbe\xf4\x52\x43\x4a\x3f\xe4\xa3\x1a\xb2\xae\x1a\xc2\x6d\x9e\x07\xa2\x86\xe4\xeb\xfe\xa8\x85\x3c\x6a\x21\x8f\x5a\xc8\xa3\x16\xf2\xa8\x85\x0c\xab\x85\x94\x31\x78\xef\x5e\x0f\x0f\x53\x0b\xf1\x8b\x67\x79\xe9\x21\x7d\x62\x3b\x5b\xd7\x44\xf6\x5d\x01\x91\xf5\xb6\x57\x45\x91\xf4\x36\xd5\x0f\xaf\xa2\x5b\xa9\x87\xb4\xd6\xdc\x0e\x7e\x2e\xb5\x3d\x83\x83\x26\xb8\x9e\x61\x2d\x81\xab\x55\xbd\xf1\x07\xf2\x92\x0a\xcc\x03\xa8\x41\x09\xcb\xa0\xbd\x71\x2c\x1f\x22\xd3\xe0\x39\x65\x4e\x67\x38\x8e\x28\x4a\x0a\x91\x61\xde\x15\xe2\x7e\xdb\xae\xf0\xa8\x8c\x6b\x29\x16\x6c\x92\xa6\xec\xa8\x98\x6f\x58\x5e\x4c\xb8\xd6\xd8\x9c\x84\xfe\xcb\x5f\xb2\x93\x98\x15\xdc\x12\xe6\x44\x29\xd4\x56\xeb\xea\x38\xb5\x8b\x21\x4b\xf4\x1e\x8f\xe5\xbd\x3b\x96\x87\x2c\x04\x6f\xb4\x55\x7a\x98\x07\xb3\x6f\xa6\x8e\xd7\xd1\x5c\x49\xb9\x79\x3c\x9b\x7b\x9e\xcd\x32\xaf\x08\xbc\x47\x0b\x1e\xd5\x05\xaa\xd2\x58\xb5\xe4\xda\xf4\x59\x3d\x6c\x85\x79\x71\x28\xf0\xd0\x25\x2f\x5d\x11\x15\x11\xce\x34\xda\x21\x2a\xcf\x2d\x15\xe7\xaa\x2c\xfd\xa3\xcc\xd0\x29\xf9\xd8\x39\x48\xb9\xd7\x38\x2a\x9e\xad\x0e\x9d\xb7\xe2\x01\xba\xe5\xc8\x1f\x7d\x2d\x8b\x3e\x36\x5c\xa1\x7e\x49\xc9\x1d\x8e\x10\x80\x80\xcd\x08\xcd\x00\x9f\x90\x04\xb8\x43\x80\x2a\xf6\x52\xd8\x53\x13\x07\x7b\xed\xc4\x49\x60\x64\x9f\x08\xb1\xd0\xc9\x3d\xc3\x02\x1d\x72\x60\xc3\x7e\x7c\xd4\x3e\x5a\xc5\x46\x4f\xdd\x3c\xa4\xe3\x24\xea\xac\x74\x7e\x1f\x22\x9a\x66\x9b\x67\xa6\x2b\xce\x42\xda\x30\x72\x85\x7d\x86\xe2\x14\x90\x6c\x86\x28\x03\x8b\x24\x42\x34\x3f\x4c\xa3\x4d\xb0\xd7\xa3\x96\xf5\x60\xb4\x2c\x6f\x30\x2f\x95\x67\xdb\xa7\x23\xe5\x7e\x68\x5b\x83\x96\xaf\xea\xa5\xa6\xc3\x14\xaf\x9a\x3a\x33\xee\xb4\x84\x75\xb9\x7a\x8a\x6e\x0f\x6e\xce\xcd\x20\x09\x37\x98\xd7\x1a\x5a\xbb\xd1\xf8\xf6\x86\x0e\x7a\x34\x1d\xef\xb4\x33\x24\x13\xe3\xc8\x6f\xef\x8b\x2b\xf4\x76\x98\xb5\x2f\x5f\x47\x46\x19\xee\xa7\xe9\x1b\x0b\xf5\x9b\xab\xcf\x02\x67\xdd\xbe\xe8\xc2\xc9\x89\xf2\x53\x70\x8b\xb8\xbe\x28\x2b\xd8\x7d\x1a\x16\x96\x60\x8e\xaf\xeb\x4d\x84\xeb\xca\xbf\x33\x4d\x31\x68\xeb\xa0\x21\xf9\xc4\xae\x6f\x43\xa5\x3d\x88\xbc\x45\xae\x3e\x34\x1a\x2a\x26\x51\x4a\x24\xa2\x60\x70\x20\x7a\x9e\x1d\x94\xe4\x3a\x50\x27\x6d\x79\x07\xa1\x53\x31\xb1\x80\xff\x58\x2d\xf0\x7f\x2a\x92\x31\xf3\xd5\xfc\x76\x81\xe8\x2a\xf0\x48\xa5\x2b\xab\xfd\xf3\x59\x55\x2b\xfe\x3d\x24\x5b\xd3\xcc\xeb\xd0\x3c\xdd\xe7\x04\x6d\x03\x7b\xd8\x4d\x83\x4c\xef\xe6\x02\x36\xc4\x0e\xdd\xbe\xb7\x7b\x0a\xb6\xd9\x42\x04\xb1\x10\xa6\xe8\x16\xad\x46\x6b\x35\xa6\xf4\xd7\xc7\x3d\x5c\x9a\xf5\x27\x75\x76\xe2\xe6\x3c\xed\xf0\xe0\x1a\xde\xb4\x66\xc0\xb8\xab\xb2\x53\x57\x72\x94\x88\xd7\x94\x9d\x36\x40\x1b\x93\xcb\xc8\xe1\x7c\x72\xfa\x94\x0a\xb9\xd2\xd5\x5d\xdb\x22\x20\x06\x6e\x1d\xd2\xef\x65\xa3\x86\x64\xef\x35\x46\x0d\xb9\xc4\x98\x94\x2b\x16\x58\xba\x79\x4a\xff\x3b\x37\xb7\xb9\x61\x76\x83\xe9\xfc\x14\x4a\x33\x2a\x10\x9c\xa0\x16\x28\xdf\xae\xa2\xd5\x74\x11\x14\x51\x71\x92\x13\x4d\x81\x0a\xca\x65\x72\x2e\xb5\xea\x5b\x73\x26\x1d\x4f\x3e\xcb\xdf\x8e\x0c\x53\xf1\xc4\x75\xde\x8b\xe5\xb9\x56\xdf\x91\x5b\xd2\x6f\x9b\xfa\xc8\x50\x5a\xae\xa8\x6b\x1f\x87\xa2\xd5\xcb\x6a\xc7\x4a\xee\x37\xd3\x67\xe7\x27\x37\x27\xa9\x1f\x4e\x8b\x14\x4d\x31\x5c\x91\x45\x76\x10\x93\x29\x29\xe1\x66\xea\x0c\x2c\xfa\x28\x14\x98\x54\x41\xd9\xdb\x26\x18\x05\x27\x8c\xe1\x69\x02\x48\x82\x00\xa1\x60\x4e\x28\x02\x61\xf1\x7b\x69\xac\xd3\x29\x4c\xf0\xaf\xa5\x59\xde\xc4\x2a\x6c\x2f\x2b\x38\x55\x04\x36\x7b\x1b\x8c\x00\x1b\xc5\x08\x3d\x14\xf6\x8a\x98\x8e\x31\xcb\xc6\x29\x0e\x6f\xf5\x33\x16\x67\x68\xce\x64\x32\xc6\x4b\x8c\xe2\x5c\xb7\x60\x38\x99\xc6\x48\xa4\x5a\x68\x07\xbf\xfe\xe6\x51\x50\xf2\x86\x3c\x4b\x0d\xc3\xf7\x3d\x7e\x9e\xd6\x8f\x9f\x4e\x96\x43\x0d\x3b\x4d\x9d\x3e\xdd\x4c\x6b\x9f\x25\xf2\xe8\x5d\x20\x2d\x74\xab\xf1\x6d\x83\x5a\xf3\x68\x26\xda\x14\x5a\xba\x22\xc2\x89\x32\x9e\xe6\xd3\x1a\x7f\x76\x78\x18\xd4\x73\xd4\xf2\x15\x00\x33\xc8\x40\x42\x74\x6e\x5e\x21\x9f\x33\x64\x68\xf1\x55\x13\x33\x03\x4b\xaf\x29\x4a\x10\x85\xf1\x8e\x85\xd7\xdd\x0f\x8b\x09\xfd\xf1\xf6\x6c\x0b\xc2\x4b\x0a\xa0\x02\x96\x84\x23\x94\x00\xd1\xb5\x4b\xf7\x33\xc2\x24\x02\x45\xc3\x6d\xc0\x32\x6e\x4c\xfa\xa2\x9c\x18\x65\x94\x0e\xd5\xab\x31\xe3\x1d\x46\xcb\x71\x6b\x38\xa8\xaf\x77\xbb\xe1\xd1\x2e\x21\x77\x15\x2a\xa6\x2f\xe2\xae\x26\x63\x6e\x48\xb8\x60\x63\x4b\xc4\xa3\xde\x99\xa7\xea\xb1\x86\x8b\x8c\xe4\xdc\xa8\x2a\x9a\x6b\x63\x51\x91\x8d\x02\x83\xef\xad\x8e\xcb\xa8\xc9\xf7\x19\x64\xf9\x4f\xe7\x94\xe6\x46\xd7\xc7\x36\x37\x36\xc0\xf9\x58\xef\x60\xcc\x47\xd8\xe2\xea\x2e\xdc\xe1\xd7\x92\x63\xc8\xcd\x8d\x19\xc4\xb7\x41\x9c\x0d\xaf\x0f\x52\x4e\x76\xef\xe0\x82\x77\x40\xa1\xef\x32\xa9\x21\x8d\x82\x67\xda\x32\x95\xd1\x00\x5b\x40\xa1\xb8\xb5\x95\xc0\xeb\x85\x0a\xde\x71\xba\xc0\xb8\xb2\x8b\x91\x68\xb4\x84\x93\x29\xd0\x42\xa6\x0e\x00\xb3\x3d\x3a\x58\xed\xfd\x07\x87\x3e\x58\x37\x09\xc6\x5b\x3f\x71\x06\x3e\xc7\x32\xb8\x6b\xa0\xc4\x93\xd7\x3f\x64\xcf\xb3\x93\x16\x28\xde\x7c\x7c\x83\x1e\x64\xd7\x30\x3f\xbc\x6a\xa1\xbf\xab\x14\x85\xf8\x66\x05\x16\x69\xae\x7a\x37\x1d\x89\x73\x78\xcf\xef\xe3\x25\xba\x19\x9c\x32\xf0\x8f\xff\xfe\x1f\x10\x93\xa5\xc0\xd8\x1d\x81\x70\x06\x29\x0c\x73\x5d\x66\x04\x04\x18\x21\x1b\x81\xd9\x2a\x9d\xa1\x84\x01\x92\xc4\xab\x42\x5e\xae\xab\xae\x57\xfc\xbf\x19\x9c\xfe\xda\x31\x17\x44\xaf\x17\xcf\xcf\x23\xa7\xa8\xb5\xdf\x38\x4e\x29\x4a\x51\x12\xb5\xf8\xa7\x82\x76\xb0\x45\xfd\x21\xfc\xfc\x72\xf9\x88\x7b\x56\x57\x5f\xc3\xa9\x1e\x6b\x5e\x23\xd0\xe4\x93\x36\xc8\x4f\x0b\x47\xdc\xb9\x38\xae\x2b\x3c\x08\xa3\x28\xdf\x8d\xe3\x9b\xdc\x50\x1a\x97\xfe\x6a\x05\x7c\x59\x06\xa0\x5b\x4e\xed\xfc\x66\x39\xa8\x7c\xd2\x45\x22\x83\x78\x8c\x7c\xbb\xd9\x3d\x65\x16\xee\x5d\x23\x32\x4d\xad\xbe\x8e\x5d\x9b\xf4\xb4\xd8\xf6\xe4\x54\x11\xac\xb4\x1d\x4b\x6d\x03\x27\x48\x06\x5b\x22\x95\xff\xd2\xf5\xf4\xc0\x11\x9a\x40\xba\x3f\x91\xca\xaf\x6f\x3f\xbc\xbc\xfb\xe4\xbb\x17\xfd\x22\x95\x55\xd0\xbe\x19\x64\x27\x7a\x0c\xae\x58\xef\x1a\x76\xdd\xc6\x22\x9a\x66\x99\x5b\x81\xa5\x3d\x54\x71\x8d\x22\x4e\xe8\x8b\x24\x5b\xa8\xa4\x86\x35\x6c\x3f\x03\x9a\xe1\x4a\x19\x79\xdc\x72\x80\x32\x08\xba\x42\x2c\xf5\x0c\x4b\x3e\xb4\xe0\x64\xff\x10\xa5\x67\xa0\xb2\x37\x72\x63\x97\x68\xa5\x23\xa0\xd5\x53\x01\x38\xa5\x84\x6d\x1b\x46\x75\x03\xf1\xc1\x41\x43\x84\x5b\x8d\x12\x6e\x24\x50\xf8\xcf\x17\x2b\xec\x1f\xc1\xb3\x3f\x65\xf8\x37\x0d\x11\x31\x5c\x4f\xfc\x34\xc4\x3e\x16\x4d\x51\x72\x81\x5a\x38\x0d\xc7\x86\x43\x6c\x50\xc9\x53\xc7\x0c\xf7\xcb\x96\xf4\xa2\xb5\xd3\x1d\xd3\x43\x84\x37\x51\xcb\x1a\xba\x90\x67\x22\x50\xd7\xad\x3e\x68\xeb\x8a\x01\x35\xe7\x86\x8e\x34\x90\xf7\x45\x3e\x37\x23\xe1\x8e\x15\xe7\xcf\x17\xb3\xaf\x96\xe1\xed\xca\xac\x38\x4b\x40\x39\xaf\x5e\x15\x22\x5d\x3d\x44\x49\x35\x7b\x37\xe3\x59\xc5\xe4\x46\xb9\x11\xeb\xca\x6a\x6f\x4d\xa3\x83\x8a\x9b\x91\xd0\xc3\xbf\x51\xdf\xdd\xd2\xc0\x66\x0a\x92\x4d\x1b\x62\x2b\x00\xe8\x28\x08\x17\x94\xf2\xae\xdd\xb5\x5a\x23\xbf\x62\x15\x11\x12\xd0\x31\x0c\x8d\x43\x83\x94\x92\xa5\x65\x5c\x15\x38\x46\x9e\xf6\x2c\x3f\x38\x21\xe3\xd6\x93\x77\x65\x77\x25\x0e\x97\xe8\xf4\xb9\x74\xc2\x5b\xf4\x21\x9b\x06\x67\xd8\x8b\x70\x35\x74\xc6\x9d\x90\xae\x68\x4c\xd5\x9f\x78\x26\xf0\x45\x1f\xf2\x55\xd1\x46\x7b\x51\xb0\x09\xa1\xba\x13\x22\xca\x7e\x65\xeb\x10\xb1\x05\x20\xd5\x87\x8e\x15\xac\xdb\x5e\x64\x6c\xc0\xf7\xee\x84\x8a\xef\xb9\xfe\xbc\x1e\x19\xcd\xf8\xbc\xde\x4a\x4c\xa7\x9c\x85\x21\xd4\x8e\x7a\xa6\x76\xdf\x03\xa6\xd5\x73\xc2\x2b\x25\x45\x0f\x44\xa7\xfb\x24\x27\xa0\xa7\xfb\xc4\x2b\x17\x5b\x21\xc4\xfa\xe5\x62\x97\x1d\x35\xc4\x98\x83\x7a\xff\xff\xb2\x8a\xab\xc1\x65\x31\x4e\x6e\x81\xda\x0b\xf7\x63\x0e\x41\xde\xb8\x3f\x23\xa1\x60\x8f\x53\xc6\x2a\xf0\xa7\x16\x47\x90\x7a\x6d\x0d\x8b\xbb\xf0\x11\x15\x5e\x72\x05\x7e\x54\xd9\x2f\xf9\x38\x65\x64\xa8\x3e\x16\x55\xe5\xe7\xb6\x06\x4c\xd1\x0c\xad\x03\x55\xd9\x39\xaa\xf2\x02\x57\x8f\xaa\xa0\xa5\x91\x88\x78\xc8\x82\x21\xfa\x15\x64\xa7\x33\x98\x4c\xd1\x25\x4a\x22\xf9\x20\x59\x94\x20\x7e\x7d\x8b\x96\xb9\x22\x52\xfe\xdc\x03\x90\xdc\x32\x47\x91\xfe\x43\x51\x34\xfe\xb4\x92\xfc\xf3\xd3\xff\xef\xe3\xdf\xff\xe6\x34\x2a\x83\x41\xa0\x68\xe5\xdc\x40\xc8\x09\xc1\x7c\x0a\x2e\x3c\x21\xdf\x35\x17\xb0\xb9\xf8\xfa\x24\x4d\x69\xa5\x0b\x0b\x25\x31\x32\x5f\x60\xa7\x7b\xf9\x5a\xb1\xb6\x62\x2e\x27\x4b\x88\x33\x9c\x4c\xdf\xa3\x3b\x8c\x96\xbd\x1d\x6d\xed\x0b\x67\xca\xdb\xf2\x5b\xba\xc1\x56\x4f\xcd\x11\x40\x4e\x2a\xd1\x89\x61\xa8\x46\x89\x4e\x8f\x44\xdb\x96\x77\x14\x70\xb4\x42\x18\xbf\x22\x19\xb9\x94\xf9\x4d\x26\xb9\xe8\x15\x6c\x74\x07\xcd\x4c\x96\xfd\x06\xf3\x0d\xca\x33\x6d\x18\x63\x97\xe7\x69\x15\x60\x5f\x3b\xb5\x76\xbf\x25\x6f\x4f\x96\x3f\xfe\xd0\x12\x26\x32\x5b\xbb\xcf\xea\x19\x54\x97\xc5\x99\xdc\xb6\xb9\xd7\x3e\xc2\xcd\xba\xcc\x4f\x47\x4f\xcd\x38\x0e\x70\x8a\xe4\x55\x6d\x47\x74\x91\xa4\xee\xf6\xb7\x6a\x4e\xd5\x66\x43\x68\xf1\x50\xb5\xe9\x05\x10\xf9\x95\x3c\x81\x95\x34\x14\x13\x1e\x49\x74\xbc\xe2\x0f\xee\x23\x20\xdc\xb2\x1f\x89\x62\x68\x75\x31\x0f\x05\xf0\x90\x48\x91\xcd\x37\x0a\x52\x79\x86\x8d\x6a\xc2\x58\x0f\x7b\x15\xd6\xf6\xa5\x38\xfc\x47\x01\x45\x37\x14\x31\x8e\x20\xa7\x00\xc6\x79\x89\x40\x71\xd3\x07\xee\x01\xac\x7d\xa9\xbc\xb3\x5a\xfd\x6a\x50\x81\x14\xad\x20\x7b\xd5\xf0\x44\x4c\x55\xaf\xf9\x77\xf9\xe7\x0b\x74\x87\x62\x71\x64\x17\xdf\x5d\xa1\x5f\x16\x28\x09\x91\xf6\x75\xb3\x15\xdf\xc7\x2a\xf0\xbb\x20\x71\xed\xdc\xa9\xd4\xeb\x69\x1f\x25\xdd\x6b\x9f\xb5\x0b\xe4\x2a\x14\x9f\xe5\x62\x68\x5d\x6f\x65\x0b\xc0\xe2\x33\x5f\x1e\xbd\xc9\xaf\xcc\xb9\xd4\xee\xa8\x6b\x24\xfa\xaa\x15\x5f\x42\x63\x5c\xb5\xb2\x86\x16\x3f\xba\x9c\xbc\x5c\xe2\x52\xd3\xb3\x5f\xaf\x21\xcd\xfb\xde\xd0\x60\x97\x3e\xb7\xd6\x30\xd4\xbc\xaa\xa6\x03\x8f\x6b\xeb\x38\xb7\x5d\xd0\xe8\xba\x41\xe4\xf4\xa8\xf3\x76\xd2\xa7\xbe\x2b\xfc\x29\x6b\xd8\x3b\x7e\xb4\x35\x6c\x2e\xef\x0c\xf9\x23\x4f\x5d\x63\x13\x6e\x4c\x96\x41\x9a\xa9\xfe\xa4\x16\xff\xe5\x40\xb1\x09\x83\x96\x32\x78\x1b\xd3\x19\xa2\xde\x2d\x24\xac\x9a\x97\x61\x51\xfb\xc3\x02\xb4\xaf\x61\x3e\xcb\x0b\x7c\xeb\x57\x0e\x63\x5e\xc5\x3b\x92\xa1\xf1\x84\xdc\x57\x1a\xeb\xda\x9a\xdc\xe6\x37\x5c\xcf\x60\x72\xdb\x21\xdc\xd2\xe2\x91\x97\x4f\xd1\x8a\x34\xf2\x2f\x0a\x48\x99\x1b\x84\xa2\x09\x0c\x6f\xff\xb5\xbf\xd3\xc5\x35\x84\x94\x92\x79\x99\x89\x7d\x54\x3d\xa1\x46\x41\x2c\x69\xeb\x6c\xa7\xdc\x23\x93\xc6\x35\x34\xe1\x9c\xb3\x44\xff\x9c\xd1\xe5\xb5\x60\x37\x7e\x40\x71\x4c\x96\x45\xae\x58\xf0\x03\x62\x23\x20\x56\xec\x5f\x03\x9b\x3c\xfb\x8e\xe4\xaa\xca\x91\x3f\xb0\x46\x0f\xd0\x91\xed\x4e\xfd\x2d\xc9\x00\x45\x30\x8e\x57\x1e\x13\x3f\x76\x4f\xdc\x83\x9d\xdb\x4d\xab\x8d\x0a\xfa\xba\x5e\xad\x35\xa0\x2e\x69\xab\xf4\xe7\x42\x47\x2e\xb6\x4b\xa1\x3e\x97\x1a\xb5\x02\x52\xac\x2b\xcf\xba\xca\x2c\x2b\x65\x27\xe8\x86\xd0\x52\x67\x15\xa2\x59\x83\x14\x35\x2a\x93\xba\x6e\x68\x52\x2e\xeb\xba\x64\x43\xd9\x2c\x06\xd8\xa2\x3e\xb6\xea\x8a\xf9\xa8\x2b\x63\x2c\x3b\x37\xf2\xdf\x13\xa4\x4e\x80\x0b\x12\x4a\x58\x76\xb7\x16\x51\x9b\x75\x7b\x1e\xc6\x96\xaa\x6c\x75\xe3\x78\x40\x73\x9b\xa2\x3b\xcc\x04\x0d\x76\x69\x6f\x7f\x76\x7e\xfa\xf3\xe9\xc9\xe7\x13\xbf\xf2\xb4\x66\xfa\x81\x9a\x86\xef\xf9\xab\xe7\x32\xbd\x25\xa0\xb8\x1d\xcc\x61\xd4\xa5\x15\xa4\x2b\x00\x50\xa5\xb1\xe3\x40\x9f\x41\x76\x86\x65\xe9\x8e\xfd\x34\x97\x2f\x9c\x1d\xd5\x0f\xcc\x72\x39\x9b\x3e\x2b\x63\x50\x25\x7f\xca\xb1\x36\x30\xa1\x30\x47\x60\xb2\x02\x81\xf9\xb9\x37\x98\xb2\xcc\x90\x2d\xd8\x76\x7d\x0c\x9b\x97\x1b\x87\xd2\xef\xe8\xb6\x04\x5f\xf0\xcd\xcd\xf8\x57\x92\x20\xb0\x5c\x31\xbc\x5c\x19\xa1\x25\xab\x67\x5f\xc4\xc9\x2f\x70\xba\xac\x01\x28\x1b\x4f\xb8\xda\x8a\x85\x30\x79\x4f\xe2\x38\x57\xa8\x06\x41\x3b\x7a\xd6\x1f\xed\x48\x25\xc1\xaf\x01\xba\xda\x9e\x02\x8f\xe7\xe8\x85\x98\xa3\x0b\x31\xec\x3d\x62\x19\xa1\xce\xee\x07\xbc\xb3\xb1\x00\x13\xed\x2c\x8b\xdb\xb7\x2a\x8f\xc5\x16\x7e\x2b\x2a\x57\x66\x5c\x81\x2d\x1d\x0a\xcb\xb4\x9d\x59\x7b\x02\x99\xba\x1e\x68\x47\x31\x75\xdd\xdd\x80\x30\x95\x0b\xe5\xc2\x17\x77\x3d\xd7\x0e\x58\x6a\x10\xd1\xad\xe9\xa6\x54\x0e\x88\xe7\x9b\x2a\xa1\xd3\x9a\x73\xda\x77\xbc\x2e\xa4\xc1\xde\x5a\xf0\xae\x60\x06\x37\xab\xb6\xfb\xc1\x31\xfb\x6d\xfa\x52\x52\x76\xd5\xe6\x3b\x64\x3f\x6e\x2e\x46\x52\x39\xff\xd7\x52\xdb\x44\xfe\xb8\x48\x1b\x97\xfd\xb1\x71\x32\x1d\xa7\x90\xd6\xa2\x25\xa3\x40\xbf\xb4\xcf\xc3\x74\xfd\x6f\x94\xf5\xd0\x00\x5b\x6f\x90\xd3\x0e\x46\xff\x85\x92\xc5\x1c\x51\x38\x89\xf3\x5b\x46\x53\x94\x7d\x51\xbc\xf3\x0f\xff\x45\x51\xb6\xa0\x09\xc8\x14\x99\xfe\xfa\xd7\x3f\xf4\xa2\xd3\x3a\x64\x79\xd8\x54\x10\xd6\x55\x19\x8e\xd1\x50\x53\x76\xab\xe8\x3f\x5b\xbc\xfb\xf9\xc5\x57\xcf\x3e\x37\x07\xd6\x42\x98\xb9\xe2\x6a\x3e\xc8\x33\xf5\xc8\x9a\xe7\x3d\x7a\xa8\x7d\x4d\x8f\x5a\x01\x4b\xb3\xa1\xcc\xab\x5a\x09\xb0\x47\xc7\x61\xc3\x20\x75\x78\x8a\xa3\xb2\xe2\xc0\xe9\x63\x5b\x2f\x61\x7f\x93\xd6\x72\x3b\xdb\xaf\x25\x7b\xeb\x8f\xcd\x44\x65\xf8\x2e\xf7\xd1\x87\xcb\xd3\x9f\x8f\xee\x67\xb7\x2d\xb5\xf0\x86\x52\xf8\x6e\x15\xe1\xcf\x46\x3c\x31\x6b\x9c\x91\x66\xa1\xd3\x2f\xbc\xce\x2c\xd7\x4f\x17\x12\xbe\x62\x06\xd9\x4c\xe0\x03\xe4\x27\x79\xfe\xa9\xbc\xeb\x06\xc7\x19\x77\x4a\xcd\x61\x16\xce\xae\xf3\xab\xc4\x9f\xa7\x45\x5b\x2f\xfe\xf1\x25\xe6\xda\x2e\xff\x5b\x74\xd6\x2a\xf7\xa2\xd0\x25\x0c\x60\x92\x3c\x7b\x0b\xd2\x70\xe6\x8c\x92\x6f\xae\x2c\x7c\x90\x0d\xd6\x6f\x23\x0d\xbe\x61\x72\xce\x1e\x72\xab\x30\x91\xbe\xb8\xe3\x64\x8e\x14\xde\xbf\x7c\x9f\x7d\x62\xde\x2b\x9a\x37\x54\x55\xe7\xf9\x56\x32\x70\xed\x8e\xa9\x66\x83\xba\x9c\x77\x54\xe8\xa2\xfb\x6c\x4c\x45\xca\xec\x7e\x60\xb0\xd6\x4f\xb5\x8a\x71\xe0\x81\xcb\x3a\x0a\x8a\xc0\x5f\x99\x4e\xe9\x30\x17\xe4\xf6\x7a\x51\x73\x1c\xdb\x4c\xa0\xe0\x54\x81\xe6\x8c\xf4\x9c\x4f\x1e\x0d\xc3\x68\x79\x86\x12\x86\x33\x71\xe5\x91\x57\x70\x7a\x89\xb3\x70\xf6\x1d\x46\xcb\x40\xbb\xa3\x0d\x44\x6e\x27\xe4\x39\x89\x63\x7f\xda\xdc\x10\x9a\xb9\x49\x73\xdc\x99\x34\xc7\x6b\x92\x46\x9a\x8f\x45\xb5\x65\xad\xca\xd2\x45\x9c\xe0\x1f\xff\xfd\x3f\x36\x5c\xce\x0a\x7b\xc0\xd0\x83\x04\x4f\x3b\x93\xe0\xa9\x95\x04\xa6\x9d\xeb\xc7\x10\xb6\xb5\xbf\xca\x97\xd3\x6f\xf1\xd5\xa5\x83\xe2\x1a\x4b\x5c\x12\xe5\x7c\x6a\xad\x61\x96\xd5\xca\x95\xaa\xe5\x5c\x1e\x65\x19\x99\x8f\x39\xe4\x8b\x4f\x09\xf3\x9a\x1a\xb1\xac\xdd\x1e\x05\x20\x8c\x09\x93\x38\x28\x5c\xb8\x9a\x93\x03\xf2\xbf\x8e\x73\xdd\x05\x0b\x50\x6d\x6b\x6a\xab\x45\xd3\x27\x49\x06\x71\xe2\x68\x44\xd1\xbb\xb0\xb9\x1d\x6b\xa0\xed\x5c\x69\x14\xd6\xd9\x12\x75\x8d\x75\x07\x0b\x3c\x16\x6d\x55\x25\x4c\x27\xa8\x7f\x31\x9e\x11\x8a\x7f\xf5\x78\x45\xa3\xc2\xa0\xbe\xac\xe2\xb1\xa6\xf2\x16\x42\xb3\x17\xab\x42\x87\x6a\xcb\xd2\xf7\xaa\x62\xb7\x13\x2c\xe8\xd8\x98\xc8\x27\xe9\x04\x65\x7c\x3f\x96\xa3\xf7\x7d\xe4\x3a\x94\x0a\x29\x82\x99\x2c\x01\xda\x02\xb1\x4e\xc5\xeb\x40\x04\xb3\x81\x89\xa6\x4d\x64\x1b\x74\x5b\xa4\xd1\x36\xe9\x76\x01\x59\x06\x8a\x77\x0e\x49\x37\x6d\x22\x5d\xab\xf6\x3d\x2e\x78\x14\x69\x43\x31\x1c\x64\xe1\xb6\x98\xed\x84\x85\x2a\xdf\x76\x48\x4e\x93\x33\xd8\xc6\xee\xe4\xa8\x7c\x5b\xa2\xd6\x19\xda\x0c\xb9\xd4\x1c\xf6\x68\x57\x1a\xb1\xae\x4d\x2f\xf3\x41\x4d\xa9\x37\xcf\xd1\x54\xf7\x96\x20\x50\x33\xc3\xcb\x02\x95\x56\x68\xc1\xed\x9a\xba\xe4\x16\xa9\xd3\xf9\xa3\xa6\x38\xdd\x99\xc7\xeb\xb6\x55\x30\xae\x98\xd7\x12\x35\xd2\x1d\xac\xc5\xa2\x85\xc7\xc5\xe8\x52\xa8\x78\xfe\xb4\x4b\xd7\xab\x17\x6d\x28\xe9\xf2\xc1\xb5\xfd\x2c\x12\xff\xcb\xfd\x6b\x2b\xb9\x2c\x2b\x49\x0b\x9f\x54\x0d\xf3\xca\x0c\xce\xd4\xea\xac\x14\x4e\x4a\x1e\xc9\x45\x31\x13\xd3\x4c\x6e\x88\x46\xb1\x27\x32\x8a\x2f\xf8\x8b\xe6\x16\x55\x21\x85\x04\x70\x7e\xb5\x8e\x54\x7e\xc7\xe2\xc5\x54\x2f\x6c\x50\xd7\xc8\xd9\x8a\x5f\x5d\x4d\x1f\xfc\xc4\x94\xd1\x8f\x18\x58\x92\x6a\x82\x7a\xc9\x62\x42\xb2\xb1\x8f\x39\xdc\xa3\xfe\xd3\x94\x79\xc3\xe5\x5d\x7d\xbc\xa8\x04\x31\xee\xe4\x00\x1d\x19\x01\xdf\xac\x3e\x9f\x61\xa6\x21\x8a\x59\x7c\x95\x0e\xc3\x03\x0a\x74\xf3\x4e\x7a\x45\x0b\xcc\x88\xad\xdc\x59\x7b\x91\x51\x92\x16\x3f\x8f\x82\x33\x0a\x6f\x32\xbd\xfa\x39\x12\x5f\xa8\x8f\xb6\xf1\x59\x4b\xae\x3b\x8c\xe1\x02\xeb\xb5\xaf\x39\x9d\x4a\x90\xcb\xed\x8c\xe0\x84\x86\x33\x7c\x87\x2a\x65\xe0\xb0\xf8\xae\x8f\x82\x51\xf2\x79\x31\x8c\xa2\x1f\x9c\x1f\x70\x97\x8f\xce\xe1\x7d\x8d\x42\x93\x6f\x0f\x03\x17\x82\x52\x0b\x8e\x6a\x95\xc6\x76\x8c\xe1\x6e\xaf\x15\xf1\xb2\xc2\x8f\xad\x5a\x54\x73\x9c\xe4\xf2\x95\x19\x6c\x45\xf7\x77\x90\xa1\x77\xe5\x6f\x4b\x12\xa6\xaa\xd2\x2e\x12\x92\x07\xe8\xb8\xc6\x1b\xe4\x4f\xc8\xbd\xf1\x78\x6e\x3b\x28\xfb\x15\x76\xf7\xf5\xa0\xc9\x11\xf2\xff\xa2\xa8\x25\xe6\xd5\xb9\xe6\x63\xf8\x01\x76\x18\x59\x6b\x89\x77\x8b\xd6\x2e\x68\x7f\x56\x84\x84\x6a\x9a\x87\xe5\x90\x5d\x6b\xed\xda\xd9\x06\x2a\x1e\xdc\x64\x9c\x88\x2b\xe9\x5a\x88\x55\x24\x90\x75\x41\x9d\x5c\x37\x28\xe2\x13\x09\x39\xe7\x11\x44\x4f\x7f\xb8\xb8\x18\x94\xd5\xe4\xed\xc6\x83\x7a\x6e\x7b\x52\xa9\x5f\xcb\xfd\x37\x3a\xa2\x43\x8f\x96\x7e\xdb\xa1\xdf\xb1\x27\x01\xf3\xd9\x80\x8c\x00\x98\xf0\x3e\xd0\x65\x0f\x29\x47\x7e\xee\x1d\x3a\xd3\x2c\x91\x1e\x79\xba\x3e\xa4\xae\x95\xcc\xee\x21\xb1\x3b\xa0\x81\x6a\x8d\xe7\xac\xb4\x15\x97\xad\x45\xdd\x8e\x20\xa0\x83\x1d\xb3\xfe\x4f\xec\x08\x69\xb1\xf9\x16\x81\x25\xbd\xfb\x75\x08\x14\x8b\xe6\xdf\x27\xd0\xb0\xbe\xc3\x35\x0c\x0c\xb4\x12\x0d\x75\x54\xe9\x13\x8c\x51\x32\xcd\x66\x6d\x85\x1d\x4f\x4b\xbb\x5d\x11\xb2\x72\xa1\x7f\xff\x41\xe3\x41\x36\xe0\xda\x71\xe1\xa5\x4f\x8c\xcb\x66\xab\xd8\xab\x20\xfa\x33\x25\xca\x7c\xd6\xad\x45\xe6\xf9\xaf\x9a\x68\x71\x27\x9b\xa2\xdd\x10\xba\xc9\x65\x32\xe4\x42\x0f\xd8\x9c\x6f\x4e\xee\x90\xe8\x12\x24\x42\xb1\xa2\xb1\x84\x39\x1f\xbd\x6f\x99\xf5\x49\xe4\xd4\xae\xaa\xd3\x42\xf3\x34\x5b\x8d\x25\xfc\x57\x4d\xb8\xcf\x11\x63\x02\xc8\xc0\x92\x81\x41\x29\x59\x0a\x94\xc9\xe0\x24\x8a\x40\xe1\x3e\x03\x77\x18\x82\x4f\xc0\xe9\xbb\xb7\xd7\xe7\x6f\xaf\x0d\x1d\x97\x7a\x57\x92\x13\x81\x03\xbe\xd5\x69\x5e\x52\x05\x27\x35\x0a\xae\x38\x2b\x6a\x67\x2f\x80\x14\x81\x94\xa2\x3b\x94\x70\x54\xa6\x5c\xb6\xdc\x50\x32\x07\xf9\x2d\x1c\xa6\x29\x89\x00\x8f\xdb\xe5\x1f\xaa\x0e\xc6\x6d\x96\x4b\x1a\xd3\xcf\x86\x48\x68\x2b\x5a\x63\xa8\x62\xdb\xdd\x66\x7f\xfe\xfc\xf2\xfa\x79\x72\xbe\x30\x67\xb4\x4d\x24\xd0\xc6\x06\x9a\xfa\xbd\x50\xa5\xc6\xea\x0b\x41\x0e\x90\x52\x72\x87\x23\x04\x28\x1a\x2f\x38\xf8\x64\xd1\x87\x34\x9b\xc1\x0c\x84\x30\x01\x13\x04\x30\xaf\xa9\x45\x11\xc0\x09\xd7\x2c\x57\x20\xd2\x2c\x2d\x57\x7e\x98\xad\xed\x9f\x09\x15\x23\xe7\xe1\x31\x8c\xe6\xb8\x89\x89\xd1\x7e\x97\x2a\x63\x76\xf9\xd0\x8b\x72\xe7\xb5\xd2\xc4\xd5\x4a\xd9\x73\xc4\xbd\x3d\xc2\xee\x92\x4f\xd7\x73\xfb\x79\x6e\xf7\xc4\x1a\xdd\x8a\x11\x55\x29\x62\xb7\x9b\xa0\x11\x96\xfb\xc3\x6e\x7e\xf2\x4a\xfd\xaa\xa3\xa1\x4b\xf4\x6a\xef\x0c\x19\x8f\x39\x5f\xd5\x35\x63\xcf\xf9\x3b\x0f\xd4\x8d\x9b\x19\xda\x49\x8d\x19\x3f\x26\x4f\x84\x84\xb1\x08\x82\xbf\xff\x4d\xfc\xff\x86\x2d\x95\x8a\x8c\xde\x92\xb5\x52\xc1\x74\x32\x6f\x52\x35\x7b\x9d\x0a\x7d\xba\x89\x34\x8f\x16\xce\x67\x75\xa3\xa3\x7c\xcd\x2e\x1a\x02\x98\xb5\x85\x41\x15\x90\x3d\xe9\x86\x7e\xf7\xf3\xf5\xc9\x8f\xa7\xe7\x2d\x08\x89\xa5\xea\x28\x8a\xa1\x06\xd6\x46\x0c\xfd\xd1\xab\x3d\xd1\x4b\x1d\x3d\x57\x4c\x23\x14\xe6\xca\xc9\x72\x46\xb8\x26\x92\xeb\xac\x20\x9b\xa1\xf9\x9a\x2d\xd1\x87\xd4\x3b\xaa\x51\x98\x96\x32\x6f\x53\x73\xe3\xe2\xbb\xe3\x7c\x57\xb2\xc5\x64\x8e\xed\xee\x4e\x6e\x3f\x29\x8e\xef\x56\x15\x6e\x6f\xb8\x6b\x08\x03\x39\x7a\x19\xbb\xba\x1f\x26\x68\x59\xb0\x7b\xb5\x81\x71\x7b\x17\x5c\xb5\x70\x45\x53\x43\x09\x01\xe3\x58\x50\x47\x7c\xad\x71\xd2\xfa\x16\x4c\xcb\xb3\xb7\x5b\x5b\x41\x47\xe5\xb4\xb0\x80\x7d\x7b\xc5\x7b\x31\x82\xa5\x59\x70\x97\xea\x69\xdf\xbe\x8d\x0d\xc8\x8a\xad\xed\x27\x93\x2e\xaf\xc7\x3a\xb7\x52\xf4\x69\x6c\x94\x7a\x43\xac\x59\x02\x5d\x6c\x81\xe3\xea\xa4\x5c\xe6\x80\xb7\x45\xd0\x16\x8e\x15\x22\x18\x45\xbc\x25\x6e\x65\x14\xba\x27\xc0\xe8\xac\x32\x47\xf3\x1b\xb7\x1e\x95\xe9\x0a\x65\xb9\x56\x54\x77\xba\x39\xe3\xc6\xf9\x61\x90\x4b\x7f\xae\x46\x68\x10\x37\xe2\x8d\x0b\x26\x01\xa9\xf4\x81\xf2\x2f\x0f\xb8\xd0\x63\x1e\xf9\x63\xa3\x1a\x38\x91\x78\x32\x0c\x43\xc4\x3a\x05\x92\x6b\x9e\xc2\x56\x70\x75\x30\x21\x71\x34\x7e\x5e\x81\xea\xfe\x81\x2c\xc0\x0c\xde\x21\x90\x10\x71\xd6\x95\xa7\xb1\x84\xf4\xc3\x0c\xe8\xcc\xda\xaf\x7d\x57\x9b\xac\x7c\xd8\xf1\xcc\x6d\xd8\x54\x17\x44\x06\xd8\xbd\x2a\x7b\x50\x56\x5f\x45\xe6\x34\xae\x4e\x38\xc3\x5d\x4a\x47\xae\x62\xc3\x4e\xc6\xe5\x9e\x1a\xd4\x9a\xfa\x6b\x27\x41\x69\x57\xef\xeb\xd4\x7b\x98\xd6\xde\xb3\xd7\xfb\x08\xba\xe7\x3f\xc0\xae\x77\xca\x91\xe3\x5e\x26\xb7\x01\xab\xa9\xd0\x08\x51\x84\xb3\x47\x9c\x26\x13\x4e\x13\xdf\x29\xa7\x66\x09\xef\xfd\x54\x2f\x94\xa6\x9e\x56\xc2\xc0\x86\x02\xe7\x84\x41\x2c\x85\xfc\x49\xa2\x0c\xcc\x07\x31\xf5\x9f\x0e\x63\x2a\x26\x0c\x75\x83\x98\xda\x2f\x44\x59\x5f\x13\x4b\xb5\x67\xef\xdd\x99\xdd\xce\x0f\x3d\xed\x2a\x9b\x30\x14\xae\xb2\x47\x71\x68\x12\x87\xca\x41\xba\x0d\x81\xd8\xd9\xaf\xa9\x56\xf0\x9f\x14\xb5\xee\xa1\x4b\x14\x3f\xb0\x3b\x5d\xd5\x73\xf5\x7e\xde\xae\x4c\xd9\x44\x40\x22\x37\x59\x8a\xd3\x55\x98\x22\x4a\xa6\x76\xcb\xc1\x51\x0f\x39\x51\xf6\xb3\x8d\x7c\xaf\x28\x4c\x32\x75\x65\xef\x2c\x9c\x8a\x93\xb8\x74\x23\x2f\x71\x36\xc3\x49\x9b\xd5\x6c\xdd\x8d\x4b\x1c\x4d\x51\x56\x49\xad\x69\x17\x89\xcd\xc2\x2e\x92\xb6\x5b\xcc\x46\x37\xd6\x65\x05\x24\xbb\x4f\x17\x6c\xaf\x2a\x4d\xdf\xaa\x2e\xa7\x02\x68\xae\x66\x32\xe5\xc7\xd4\x0b\x3e\x96\x33\xf2\x5a\x8f\x60\x21\x15\x71\x58\x30\xae\x20\x56\x8c\x9e\xee\x9e\x17\x36\x87\x71\x63\x39\xb8\x3a\x99\xab\x96\x80\x97\x26\xcf\x17\xbc\x06\x7e\x8c\x93\x18\x27\x68\x5c\x0f\xe8\xff\x7e\x45\x16\x7f\xe8\xe0\x62\x19\x36\x9f\xbc\x2f\xe0\x15\x16\xc8\xc4\xbe\xd9\xff\xed\x86\x62\x6b\x6d\xec\x35\x99\x4e\xe3\x4a\x9b\xfb\xce\x11\x5b\x3f\x91\xb7\xcd\x60\x9f\xda\x80\x83\x86\xfb\x22\x65\xc8\xef\x32\xd8\x77\xb0\x22\xf4\xdd\x77\xaf\x98\x1f\x3c\xfb\x3a\xa1\x3d\xa9\xaa\x5d\xc9\x22\xcb\x4b\x4a\x42\x84\x22\x2e\x7e\x41\x08\x17\x5c\x0e\x41\x06\xb2\x19\xa2\x08\x60\x06\x12\x02\x16\x49\x44\x2c\xdc\x5c\xe6\x8a\x5b\xe2\x78\x2a\x8a\xe6\xa9\xf6\xda\x4d\x5c\x25\x4c\x45\xf9\x57\xf1\xfb\x65\x8c\x20\x43\x20\x37\x69\x65\xae\x67\x2e\xf3\x72\x75\x50\x1e\xb1\xed\xc7\xba\xa7\x99\x2c\x0c\xe2\x36\x73\x19\x2e\x32\x12\x2a\xfc\xac\x9c\xd6\xd2\x64\x10\x01\x96\x8a\xd1\x2c\xeb\x84\xf9\xef\x7c\x29\xde\x2a\x14\x96\x56\x6b\xfa\xaa\x98\x51\x7e\x66\x49\x14\xfb\xb6\x98\x52\x17\xe1\x1a\xe8\x6d\x69\x70\x7e\x12\xc7\xb1\x52\xa0\x61\xfe\x67\x25\xd4\x5b\xec\x29\x75\x62\x73\x1d\x9b\x4f\xb1\xde\xbd\xc6\x57\x43\xea\x84\xa4\x2e\xf5\x3d\xa5\x4a\x0e\x82\xa4\x6e\xf3\x13\x36\x15\x4c\xa9\x89\xf6\xd6\x32\x87\x41\x40\x36\x8b\xb1\x41\x25\xe3\x14\x25\x88\xc2\x78\xc7\xa2\xf1\xe5\x9b\x5f\xa6\xcb\xf0\xe7\xaf\xcc\x79\x10\x95\x30\xf0\xa0\x82\x52\xec\xb7\x37\xa2\x1d\x62\xae\x70\x0b\x91\x72\x87\x19\x9e\xe0\x18\x67\xab\x11\xe0\xe7\x7c\xbe\x29\xe4\x28\xda\x71\xc6\x24\x49\xf7\x40\x48\xb6\x42\x30\x6d\x50\x0e\xb6\x0a\x40\xa6\x8b\xbe\x3a\x42\xc9\x0c\xb2\xfc\xa7\x73\x4a\x09\x6d\x8a\x46\x9c\x0f\xf0\x0e\xc6\x7c\x58\xfa\x2f\x65\x9d\xb3\x9f\xc4\x6c\xca\xa4\xe1\x89\x7e\x86\x58\x48\x71\xda\x0a\xe9\xbf\x71\xda\x4b\xe6\x6e\xd0\xfe\x4c\x81\xbf\x54\x28\xa8\x48\x17\x69\xc3\xde\x31\x05\xbf\x2b\xb6\x9d\x8b\x80\x32\x31\x42\x14\x4e\x54\x29\x58\x14\x2b\x4a\x83\xeb\xbb\x9c\x94\x97\x30\x9b\x15\xdf\x70\x69\x2f\xbf\x11\x8f\x10\x73\x87\xa5\xed\xcd\xe9\x96\xaf\x05\x1b\x47\x94\xa4\x11\xc7\xf1\xd3\x48\x7a\xbd\x4a\x2b\x25\x1a\x38\x2a\x8f\xad\xda\x65\x2e\x07\x28\xca\xae\xca\x4b\x2d\x4e\x8b\x6d\x2c\xc0\xeb\xd0\xc2\xbb\xe6\xf7\x2c\x30\x0f\xe6\x59\x6c\x72\x9b\x59\xee\xd7\x96\x3f\x7f\xc1\x05\xbf\xb2\x73\x0d\x79\x8b\x2d\x5e\xf4\xc7\x37\x65\x4e\x14\xcb\x27\xc8\xf1\xb1\x01\x88\xd3\x03\x46\xa9\xc1\xbb\x9c\x68\xa2\x0f\x6f\x25\x0c\xfa\xb1\xc8\x77\xf0\x28\xe2\xb7\x5a\x87\x57\x28\x13\x27\x93\xf6\xbc\xae\xd1\xc5\x75\x3c\x65\x1b\xe1\xd0\x0b\xf5\xb9\x8d\x45\x9b\x3c\x26\x84\x23\x7f\x90\x17\x97\xb6\xb0\x0c\x7f\x00\x48\x48\x82\xdc\x8c\x53\x60\x56\x04\x81\x17\xcb\xbc\x25\x09\x72\xad\xa5\xd2\x51\xeb\x10\x58\xa6\x0d\xc3\xc7\x3a\x94\xdf\x4a\x4c\xdc\x7f\xce\xa6\x24\x74\x0b\x56\x11\xcb\x56\x9a\x0f\x23\x98\x4c\x85\x42\x5f\xfc\x2e\x55\xb7\x9a\x87\x6b\x5d\x97\x58\x97\x5d\x74\xa1\xe4\xba\x0d\xc5\x60\x10\x4f\xcb\x46\xb6\xcc\x79\xc2\x13\xb5\x5e\xca\xf6\xa3\xae\xa3\xf5\x7e\x9c\x49\xb7\x92\x92\x4b\x4a\x19\xe1\x89\x87\xa3\x20\x9b\x21\xa1\x6c\x29\xff\x53\x61\x96\xc1\x38\x2e\x1b\xb8\x8e\x82\x39\x8a\xf0\x62\x5e\xda\x71\xed\xcd\x02\x3f\x1f\x05\xf3\x5c\x15\x32\x3d\xa7\xe2\x79\xf4\x3d\x1a\x83\x46\x9d\x81\xe1\x99\x4e\xa8\xfb\x3e\x61\xf9\x96\x45\x50\xd4\x07\x97\x45\x8b\x56\x4b\xd6\x97\xca\xe9\xab\x2a\x88\x52\x37\x14\x5a\x8e\x23\x96\x2f\xc3\xf6\x52\xf6\xe5\xd3\x1e\xcb\xe6\xb0\x0d\x35\xf0\x3c\xc9\x10\x05\xe2\x57\x00\xd9\x2d\x4e\xa6\x3c\xc1\x6d\xc1\x10\x2d\x9a\xd6\x2a\xb5\x46\xb5\x90\x75\x07\x99\x7a\x7a\x27\xae\x52\x14\xe2\x9b\x15\xef\x98\x2b\xc6\x34\x02\xe8\xc9\xf4\x09\x38\xc3\x91\x70\x43\xcc\x50\x9c\x82\x15\x59\xfc\x19\x7c\xcf\x7d\x58\xf2\xab\x9b\x45\xfc\x67\x7e\x11\xaf\xaa\xc4\x49\x04\x96\x33\x98\xf1\x4f\x09\x42\x11\x8a\xcc\xa1\xc1\x0e\x6e\xe5\x1d\x38\x35\x6a\xd1\x1c\xbb\xd5\xe9\x11\x89\x77\xb9\x35\xec\xe1\xf8\xcd\x38\x35\xa4\x07\x62\x50\xaf\x46\x35\xcb\x6f\x97\x9e\x8d\xec\xab\xa3\xb7\xe8\xc3\x8b\xd4\xec\xd9\x90\x21\x16\xad\xd0\x63\x03\xee\x8d\xcb\x0a\xfa\x87\xac\xf4\xd0\xcb\x92\x33\x22\x12\x74\x01\xa1\x40\xe4\xe8\x72\x87\x07\x4e\xee\x70\x86\x40\x82\x96\xf2\xe7\x8c\x68\x8e\x40\x8b\x27\xa4\xc8\xcc\xec\x58\xf4\x21\xba\xb3\x2e\x58\x46\xe6\x32\xc7\xdd\xd3\x49\x82\xee\xd3\x18\xe2\x64\x9c\x0f\x93\xaf\xbd\xad\xfe\xc3\x84\x60\x2a\x4a\x3e\x8d\x02\xbd\x41\x43\x70\x2e\xde\x86\xa2\xd6\xd2\x73\x7e\x4f\x7e\x8b\xbc\xd4\x7a\xe4\x80\xda\xff\x05\x6b\x85\x9d\x78\x9d\xfd\x55\x2e\x78\x79\xb1\xfd\x50\xe0\x53\x43\x0d\xea\x2c\xb7\xa4\xfb\x21\x4f\x59\xd4\x34\xa1\xb1\x14\x54\x67\x66\x98\xd8\xf6\xf5\xe7\x2c\x23\xd8\xba\x9d\x7d\x9c\x4f\x18\xeb\x35\x04\xdc\x9d\x81\x96\x6d\x07\xbd\xe3\x49\xb5\x7a\x81\x2b\x54\xd6\xeb\x35\x3c\xf2\x3d\x5f\x51\x1b\xec\x1b\x98\x48\x6c\x83\xf5\x87\x2b\x9e\xc5\xe3\x0a\x90\xa5\x28\xcc\x18\x20\x37\xd2\xb5\x8a\xee\x43\x94\x66\x22\xf4\xd0\xab\xf9\xa5\x69\xf0\xef\x96\xb2\x75\xc0\x70\x63\xe7\x05\x6f\x3c\x3c\xd2\x4e\x64\xa3\xf6\x2e\xbf\xef\x07\x4c\xdb\x5b\x4a\x29\x60\x93\x8e\x82\x4a\xdd\xe6\x2b\xab\x36\x21\x12\xfe\xe9\xe4\x94\x4e\xf4\x9e\xa2\xaa\x00\x85\x1c\x4e\x5a\x89\x4e\x04\xc3\x6c\xa2\x53\x98\x08\x1c\x13\xa1\x3d\x94\xc1\x45\x9c\x0c\x29\xb3\x44\xd5\xc3\x60\x03\xe6\x4d\xbb\x8b\xc1\x2a\x81\xcb\x86\x19\x6b\x11\x30\x1c\x68\xb4\x14\xcd\xc9\x1d\xd2\x48\xcb\x81\x64\x86\x3c\x10\x38\x10\xdf\x50\xc3\x35\x0d\xb6\x3c\xc2\x9a\x10\x79\x83\x4c\xe1\x94\xa4\x3d\xd2\x54\xdb\xa6\x10\x2d\xd2\x18\x87\x39\x4f\x57\x50\xc2\xd7\x1f\xe6\xb5\xb2\x68\x06\xdf\x7c\xf9\x29\x96\x2e\x26\x31\x66\xb3\x92\xaf\xb3\x35\x5f\x57\x1b\xfd\x49\x9a\x52\x72\x07\xcd\x4e\xd9\x5e\x83\xff\xfd\xd1\x1f\x00\xe4\x4f\x45\xb9\x45\x42\x51\x6e\xa6\x69\xfb\x92\xef\x53\xf6\x27\xf0\xfb\xe3\x3f\x18\xf9\x8a\x63\x31\xe7\x2c\x25\x11\x91\x87\xd8\xbd\xf9\x23\x07\x5c\x1f\x9e\x17\x99\xaf\xce\x92\xd0\x5b\x40\x12\x6d\x0a\x73\x48\x6f\x51\x04\x20\x03\x0a\x53\x7a\x80\xf1\x7f\x87\x28\x53\xf9\x8f\x83\x72\x58\xb1\x2a\x77\xe2\x0d\x22\x52\x8e\x93\x5b\x0e\x0d\x00\x32\x32\x45\xd9\xac\x45\x37\x6b\x7e\x19\xf8\x64\x92\xf4\xe8\xca\x60\xd1\xa9\x2c\x9d\x51\x02\x5f\x0f\x8f\x72\xe9\xd4\x3c\x3d\x9e\x1e\x1e\x6b\x86\xb7\x82\x15\x43\x94\x89\x58\x14\x07\x4f\x3b\xbf\xc7\x8c\x63\x84\x7d\x60\xa2\x32\xd1\x5e\xc6\x18\x45\xce\x8e\xff\x4d\x58\x96\x93\x45\x36\xbb\x14\x80\x54\xf4\x4c\x3a\x5f\xbc\xec\x58\x45\x36\x9f\x0c\xf3\xfa\x3d\xfb\x40\xea\x78\x21\xdc\xd7\xaf\x85\xfb\xe3\x2d\x5a\xfa\x91\x59\x5c\xef\xa4\x74\x17\xff\xe2\xa0\xac\xae\x41\x00\x80\x0c\x4e\x62\x34\xa6\x88\xa5\x24\x61\x52\x4a\x9a\x7c\x2d\xfc\xba\xc6\x9e\xe1\xf1\x04\xf1\x88\x19\xb9\x43\x54\x73\x26\x8d\x8b\x3b\x5a\xbc\x2f\xd9\x0c\xc1\xc8\xae\xb0\x66\x8e\x72\x0b\xfe\x94\xa0\xa9\x98\xb7\x5e\xc7\x07\x4f\x62\x96\xc2\x44\xf6\x20\x6c\xca\x80\x25\xa4\x89\x6c\x59\x53\x78\xa2\x61\xd8\x7e\x48\xda\xdf\xf1\xb9\xf1\x1d\x35\x78\x82\x33\x1f\x35\xc2\x22\xad\x37\x43\x27\x3b\x51\x6c\x3e\x8d\x1e\x8f\xb3\x7b\x1d\x7a\x3c\xd0\xea\x09\x70\x3e\xaf\xb6\x40\x76\x93\xa8\xeb\xd3\x6c\xd6\x4a\xd7\x67\xd9\xad\x89\xae\x4f\xb3\xa9\xfa\x9d\x69\x66\xd1\xb9\xbb\x3e\xcb\xa9\x18\x77\x7d\xa0\x4b\x57\xed\xbc\x0c\x56\xb5\xb0\xeb\xd3\x7c\x94\x34\x0f\x25\x4a\x7b\x6d\xb3\xd6\x2e\x30\x64\x0b\x30\xe5\x37\xed\x59\xef\x62\x93\x43\xda\x55\x51\x9d\x06\x09\x19\x2f\x29\x4c\x41\xfe\x5f\x1c\x95\xa2\xca\x96\x43\xb3\x46\x3d\x06\xc5\x90\xa3\xed\x6a\xee\x9d\x51\x00\xc2\x05\x65\x84\x8e\x53\x82\x85\x0e\x68\x74\xf8\x8c\xd6\xeb\x00\xeb\xec\xfa\x0a\xf8\xbf\x64\x91\xd5\xda\xbf\x76\x68\x1f\xd0\x7e\xee\xcf\x51\xb2\x70\x91\xb6\xf2\x0c\x58\x7f\x02\xce\x50\x81\x98\x35\xa3\xe8\x26\x18\x05\xff\xa6\x3d\x91\x97\x8c\x01\x19\xea\x6d\x4d\xa4\x78\xb1\x88\x6f\x2f\x35\x40\xb3\x22\x2b\x49\x01\x8b\x58\x80\x75\xd6\x1d\xe1\x7b\x74\x47\x6e\xd1\x1a\x43\x54\xab\xe1\x1c\x63\xc3\x82\xe9\xd6\x8f\x49\xc0\x4c\x2c\x67\x84\xdf\xc8\x6b\x80\x7b\x54\x5e\xad\xbd\x57\x2e\x11\x49\x63\x64\xed\xd7\x6f\x7e\x1f\x57\x7f\x3e\x9a\x90\x76\xa6\x14\xae\xc6\x9f\x55\x10\x76\x04\x8a\x61\x89\x1c\x64\xc8\xd4\x01\xbf\xaf\x5e\x32\xe7\xdb\xa8\x0e\x2f\xe4\x55\x1b\x66\xe8\xe9\xdc\x4e\xfe\xd7\x2d\xb5\x04\xe7\x77\x88\xae\x48\x82\x72\x83\xe0\x75\xcf\xba\xb8\x21\x16\xe8\x7b\x42\xe3\xb6\xde\x32\x8e\x37\xda\x96\x08\xa1\xa4\xe3\x1a\xad\xe9\xae\x1f\x92\x65\xa5\x85\xbc\x06\x49\xfc\xf9\xd2\x5a\x54\x69\xe0\xa1\xc1\x8a\x2a\xf5\xff\xfd\xfd\x6f\xbc\x30\xb2\x5b\x41\x61\x47\x61\xd5\xa5\x1b\x90\x13\x18\x2d\x2b\x0c\x3f\x67\xae\x59\x35\xb9\x4c\xd0\x94\xeb\x29\xdf\x49\x74\x75\xaf\x64\xb2\xe6\x7d\xed\xd9\x64\x5b\x19\xbd\xb2\x77\xba\x8f\xbf\xb8\x73\xcb\x33\xe0\x40\x05\xb9\x4d\x1f\x35\x26\x23\x6d\xad\xee\x73\x51\x37\x56\xa7\x32\x52\x9e\xa7\xb7\x44\x24\x5d\x14\x97\x6d\x71\x95\x94\x3f\xb3\x40\x87\xf4\x9e\x59\xf5\xce\xdd\xf1\x99\x1a\x47\x09\x09\xd6\x79\x0a\xf2\xd6\xdd\xcf\xc1\x0d\xf8\x60\x99\x45\xad\xbd\xd1\x2e\xe7\x21\x9b\x5a\xf5\x99\x45\xa5\x1f\xd6\x2e\xe7\x20\x0c\xfb\x5e\x73\x90\xb7\xee\x7e\x0e\xca\xa1\xd0\x73\x1e\xda\xed\xbb\x9f\x8b\xf0\x65\xf4\x9d\x4a\x79\xf7\xee\x67\x72\x51\xed\x38\xda\x79\x2e\xfa\xfd\xbb\x9f\x8d\xf4\xe2\xf4\x9c\x4b\x79\x77\xe7\x99\x38\xb5\x39\x53\x75\x4f\x53\x6f\x6b\x3c\xa6\x57\x60\xa2\x99\xdd\x14\x6c\x27\xc4\x63\x47\x26\xf3\x80\x0e\x1d\x10\xbc\xac\x0d\x6e\x4c\x45\x62\x22\x91\xb0\xba\x43\xb4\x31\x20\x3e\xc4\x7b\x0c\x3b\x76\x12\x45\xc6\xf4\xe3\xce\x91\x6c\x5f\xf8\x31\x73\xf1\x85\x2f\x90\xe2\x28\xb8\x45\xab\xb1\x28\x0f\xe1\xc6\xde\x98\x21\x48\xc3\x99\x07\x94\xe2\x15\xbf\xb0\xa8\xbd\x60\x60\xb2\x02\x37\x98\xb2\x2c\x37\x40\x47\x20\x86\xea\x2f\x34\x87\xb8\x2c\x34\xe5\x77\x5d\xe7\xcf\x76\x55\x9a\xf2\x71\x78\xc1\xb7\xf6\xdb\xe3\x0d\x91\xda\x11\x88\xdc\xef\x09\x6a\xdf\x78\x80\x39\xdd\xe0\x38\x43\x14\x45\x1f\x24\x26\x75\x3f\x27\x9a\x09\x68\x5c\xfa\x1b\x1b\xaf\xdf\x0b\xf4\x65\x13\x3b\x6f\x0c\x7f\xf7\x24\xe2\xe4\x75\xa1\x0f\x4b\xb9\x1c\xbc\x17\x79\x6b\xc2\x91\xe7\x6c\xb1\xa0\x41\x1b\xf9\xa3\x0e\xbb\xa7\x2f\xcf\x94\xc6\xc9\xd3\x27\x9b\x40\x95\x05\xde\x2c\xe2\x38\xd1\x51\x0e\xd6\x9a\x55\x1f\x8f\x8e\x53\x01\x30\xd5\x24\xfa\x78\x70\x6c\xb2\x76\x40\x4c\x45\xd0\xbe\x70\xfb\x0c\xaa\x68\xa4\x42\x4f\xbd\xaa\x55\x59\x10\xb5\x38\x8f\xfa\x82\x5b\x5f\x90\x69\x3b\x5b\x55\x19\x6a\x20\x88\xe7\xf9\xf9\xac\xca\xa7\x62\x04\x23\x3e\x10\x08\xd8\x9c\x90\x6c\x06\x48\x32\x21\x90\x46\x38\x99\x82\x94\x12\x89\xb4\xe8\x88\x20\x77\x6e\x50\xc3\x3d\x68\x82\x16\xf6\x46\x35\x2e\x1a\x78\x02\x51\x1b\x4a\x5f\xf3\xa7\xdc\x08\x78\x4b\x9d\x87\x85\xf6\x52\xa3\x96\x85\x02\x43\x69\x66\x25\x50\x4a\x65\x20\xa3\x40\xfd\xb7\x55\x31\x13\x15\xb2\x15\xad\x4b\x3c\x42\x0e\xdd\x1b\x0b\xbf\x67\x4d\xec\x29\x99\xcf\x21\x60\x28\x17\xe6\x19\x02\xf3\x45\x7e\x3c\xc7\x48\x8c\x08\xc0\x28\xa2\x88\x31\x6b\x96\x84\xaf\x87\x7e\x1b\xeb\x3f\x67\x95\x0c\xa0\xb2\xa9\xaa\xef\xfa\xe7\x34\x82\x14\xc1\x1a\x0b\xd4\x31\x73\x28\x59\xb2\xe6\xa2\xe7\x6f\xaf\xac\x61\x31\x80\x26\x40\xce\xf3\x56\xf8\xb5\x3d\x3a\x35\x1f\xe6\xa1\xa9\x8d\x77\xbf\x90\x88\x7d\xb1\xcd\x95\x68\xb5\x9b\x5c\x06\x21\xbc\x61\x45\x62\x33\x35\xda\x5a\xb5\xf0\x20\x75\xda\x7c\x47\x32\x1c\x21\x6e\x25\xed\xb4\x40\x7b\x12\xa3\xab\x4f\xbe\x4e\xde\x98\x0b\xb4\x8d\x5d\xf7\x5a\x2c\x5b\x31\x9d\x56\x7d\xc6\x62\x13\xa3\x02\x79\xaa\x7f\xcd\xb2\xb0\x75\x5b\x79\xc8\xfc\x90\x26\xfe\x52\x9b\x38\xea\x8e\xa0\x24\x01\x5f\x5e\xca\x71\x7d\x94\xc7\x80\x1f\x22\x8e\x59\x0b\x6a\xe4\x06\xe4\xef\x0c\x49\x92\xaf\x92\x4f\x92\x40\x31\x96\xaa\x46\x64\x57\xbd\x1c\xcd\xc2\x0e\x47\xc1\x49\x1c\x97\x89\x2a\xcf\x2b\x5d\xb7\x5a\xda\xcc\xd7\x33\x56\x2a\xef\x6c\xcd\x4f\x52\x09\xc3\x72\x1a\x8a\xa0\x3a\xe2\x58\x91\x5a\x60\x4c\x61\xab\x02\xef\x69\x0d\x20\x5b\x5d\x23\x95\x0c\x87\x69\x09\xd1\x42\x09\xc9\xce\x48\x78\x4a\x16\x09\xf7\x3b\x1d\x76\xcd\x65\xd8\x00\x7b\x2d\x12\xd5\xaf\xee\xd7\x92\xa9\x7a\x62\x75\x6d\x9d\xd9\x3a\xb2\xdc\x07\x7d\xae\x25\xf3\x3d\x1d\xd5\x56\xc6\x8b\xe9\xfa\xb0\x5e\x95\xd8\x5e\x2c\xd8\xb5\x95\x6c\x9d\x65\x2b\xa0\x1e\xed\x41\x39\xcf\xac\xd5\x21\x39\x2f\x2b\xc6\xd0\x8f\xe9\x76\xc5\x71\xde\xec\x56\x64\x62\x57\xe5\x5c\x59\x4a\xd8\x55\xce\x75\xe6\xb7\x82\xc4\x6b\xb1\x9a\x1f\x4b\x35\x03\x8a\x3b\xe0\x29\x55\xfd\xf7\xdb\x64\x28\x91\x39\xdf\x72\x6a\xf2\x1f\x37\xcf\x52\x82\xc2\x1e\xfc\xb4\xe1\x95\x96\x65\xaa\xbf\xcd\x85\xbe\xc0\x77\xa8\x65\x99\xf3\x9f\x36\xbf\xca\x9c\xba\x6b\x0a\x0d\x7d\xb7\x6f\x80\x01\x60\xd4\x4f\x5d\xd9\x73\xad\x38\x8a\x50\x04\x28\x0a\x51\x92\xc5\xab\x2a\x0f\x88\x6f\x79\x2c\x64\xa3\x0a\x32\x8c\xbc\x74\x93\x8d\x6a\xa5\x69\xd4\x57\x33\xd8\xef\xf5\xfd\xc0\x27\x66\x5f\x61\x71\xcd\x86\x17\x59\x52\xd8\x7b\x9d\x9d\x2e\x95\xf2\xcb\x7e\x28\x3e\x1b\xb6\xf4\xdb\xdb\x27\x75\xb4\xf5\x9b\x56\x61\xe8\x67\x12\x9a\x3a\x26\x59\xef\x19\xc2\xfe\x5b\xbb\x55\xd2\x70\x3b\xea\xb4\xde\xeb\x7c\x40\xe3\xae\x44\xae\x35\x35\x1f\xaf\xd5\xc4\x1c\x89\xf3\xb4\x30\xc3\x37\x65\xed\xe9\x1d\x73\x7b\xa1\xe0\xba\x4b\x43\xdc\xa0\x4a\xbb\x73\x83\xea\xee\xca\xe1\xfc\x9f\x45\x96\xc8\x4e\xfd\x9f\xdf\x4e\x97\xf0\xf5\xed\x39\x6a\xf7\x7f\x0a\xf7\xe7\x42\xcb\x7b\x69\x4a\x84\xc1\xf2\x5e\x5a\xfe\x35\xa4\xbe\x54\x5c\x53\x84\xea\x9e\xad\x33\xbd\xeb\xbd\xb4\xf4\x70\x72\x95\x89\xb3\x08\xb3\x4b\x9c\x24\xc8\x58\x9e\x03\x17\xd9\x0c\x25\x19\xc7\xf9\x71\x97\xe8\xd4\x27\xae\x35\x0b\x50\x14\x50\xc1\x07\x48\x29\xe1\x95\xf3\xc1\xa9\x6a\x50\xd0\x92\xd2\xb3\xaf\xa5\xa6\x96\xf8\x54\xa3\xc2\xb4\x79\xb2\x98\xe9\xdf\xa3\x1d\x9b\x44\x29\x6f\x4f\xc6\x92\x19\x46\x13\x42\x6e\xe7\x39\xfb\xd9\x04\xdd\x87\x24\xc5\x49\x13\x51\xbd\x53\xf9\xa0\x0f\x03\x0d\x3b\xc3\x17\x3e\x53\xbb\x6c\x4e\xac\xf1\x3a\x7f\x8f\x9c\xc9\x7f\xac\xef\xb2\x4d\x4c\xf3\x8c\x2c\x93\x98\x08\xb4\x90\x76\x7c\xf6\x19\x59\x9e\x73\xe9\xe9\xb5\x8c\xe6\xf4\x27\xd3\xe1\xd1\xc9\x55\xe9\x78\x93\x69\x3f\x18\x3d\x4f\x7a\xf1\xd0\x30\xd2\xe6\x2d\x5a\xfe\xa6\x25\x4d\xdf\x2d\x14\xc3\xe4\x16\x84\x30\xb9\x83\xcc\xcd\x5f\xf3\x34\x5b\x9d\x91\x50\x62\xfb\x78\x84\x56\x34\xe4\x8a\x8d\x6c\x8d\x97\x1c\x3f\xaf\xf4\x3a\xdb\xc7\xaf\x46\xd3\x3e\x85\x2e\xc9\x86\xbe\x63\x7c\x3d\xcf\x77\x25\xb8\xc1\x31\x72\x93\x58\x5c\xdc\x36\xc0\x1d\xee\xd5\xaa\x6e\x51\xdd\xb5\xf5\x2a\xc8\x96\x2b\xcc\xa5\x9b\xf6\xee\x03\xeb\x64\xed\xc6\x38\xb9\xbd\xe6\xc0\x22\x3d\x51\xe3\x9b\x59\xbb\x02\x04\x5b\xa5\x03\xf0\xac\xa0\x5c\x91\x7d\xc2\xb4\x9e\x67\xde\x19\xac\x3e\x0b\x60\x48\x84\x44\xf9\x2e\x1c\x47\x24\x7c\x6c\xcf\x6e\xca\x7b\x14\x12\xed\xb4\x90\x68\x1b\xcb\x74\xec\x9c\x8a\x78\x12\x45\x4a\x82\xee\x3e\x15\xb1\xe4\xa2\x7a\x44\x42\x21\x19\xb6\x36\xcf\x6b\x48\x21\x67\x3a\xa2\x4a\x49\xab\xa6\x23\x16\x85\x0c\xf5\x36\x6e\xb5\xb1\x55\x5b\xb9\x21\x49\xc2\xa2\x89\xa8\xc8\x4a\x14\x57\xd6\xdb\xea\xe9\x17\xb7\xf4\xd6\x2b\x12\x1c\xdb\xbb\xec\x69\x49\x90\x85\xfb\xd2\xd6\x94\xb4\x4d\x46\xfb\xfc\xd4\x97\x65\x1f\x46\x56\x1c\x4c\x42\xd1\x1c\xe9\xb7\x9e\x16\xe7\xa8\x9b\x6f\x91\x06\x1b\xcf\x89\x33\x1e\x28\x4a\x7f\x7a\x3c\x53\xda\xce\x14\xae\x66\x5e\x6b\x6a\xe6\x5e\x1d\x2a\x9a\x5a\xbb\xfb\x73\xa5\xc2\x4c\xfb\x77\xb4\x34\x87\x57\x3d\x5d\xb2\x92\x96\x5e\x07\x4c\xed\xfa\xfd\x3a\x63\xac\x8b\xbd\xc4\xd1\x14\x65\xe3\x18\xb3\xcc\xde\x0e\xb0\xfe\xac\x66\x67\x41\xa2\x3a\x80\xba\xea\x10\xb3\x9e\xe6\xa0\xc9\xe0\xaa\x47\x4a\xc4\x20\x1a\xb1\x92\xa7\x6b\xc7\x4a\x3c\x68\x59\x96\x2c\x64\x54\x24\x84\xb9\x68\x69\x62\x74\x31\xd8\x3a\xca\xd2\x67\xa3\x60\x52\x2c\x0d\x5f\xe8\xf2\x5a\x74\x1f\x22\x9a\xd6\x23\x1e\x1e\xc5\x80\x6d\x66\x7b\x83\x5e\x7d\x31\x99\x82\xf5\x30\x0a\xf9\x39\xec\xdf\x0c\xc3\x51\x10\xe8\x0a\xf3\x5c\xf1\xf9\x5e\x6b\x99\x55\x9c\x0e\x1e\x71\x9d\xa7\x8e\x97\xbb\x37\xe7\xa3\x7a\xf8\xa8\x1e\x76\x38\xd7\x77\xa3\x21\x62\xee\x95\x7a\xd4\x0f\x5b\x6b\x2d\x85\x8b\xef\xa5\x72\xf1\x6d\x4c\x3d\x34\x95\xe0\x8b\xb5\xf9\x55\xb6\xce\x75\xa9\x7d\x92\xdd\xcd\xab\x2b\x7a\xe9\x54\x2f\x51\xef\x89\xe6\xbf\xaa\x3d\xb6\x42\x71\x4c\x96\x63\xbe\x43\x40\xad\x73\x00\xe7\x00\xa1\x9a\x95\xcf\xf1\xd0\x2a\x6a\x67\x5c\xdb\xd5\x7c\x0f\x82\x8c\x00\x71\x46\x09\xaf\x2a\x20\x14\x44\x14\x4e\x79\x20\x40\x7c\xd5\xe1\x55\xfe\x2f\x7f\x12\x91\x70\x04\xf2\x7f\xef\x47\xe0\xc9\x3c\xca\xff\x81\xf4\x36\x22\xcb\x64\xf8\xf7\xf5\xd5\xeb\xe4\x6a\xca\x50\xb5\x53\x25\x13\x97\x5f\xc9\xab\x7b\x22\x43\x14\xf6\xc2\x51\x03\x2b\xb6\x07\x16\xcf\xe3\xf9\xb8\xee\xf9\x38\xc8\x59\xe0\x2a\xc5\x17\xb9\x1a\x8f\x07\x82\xe9\x40\x10\x91\x58\x00\x19\xf8\xea\xfa\xcd\xc5\x70\x47\x42\xd0\xb7\x7e\xa9\x35\x7c\x95\x1a\x46\x1d\xc7\xb2\x1d\x95\xea\xb5\x28\xe7\x91\xcb\x59\x29\x77\xcb\x64\xb7\x27\x66\x83\x62\x80\xd4\x38\x39\xc8\x22\xdc\x1b\xce\x50\x78\x3b\x21\xf7\xe5\xa6\xd3\x6c\xb9\x22\x31\x4e\xb0\xe5\x95\x66\xc2\x34\xe3\xac\xb6\xdc\x32\x77\x54\x66\x8d\xe4\x2e\xbf\x75\x38\x69\x2c\xc0\x12\xc7\x31\x98\x20\x20\x26\x27\xda\x22\x41\xc0\x70\x32\x8d\x51\xbe\x24\x37\x63\x94\x84\x31\x61\x28\x12\x0b\x95\x9f\x81\xcd\x85\x71\x62\xd8\x3e\x4a\xcf\xdf\x84\x75\xa1\xe5\x81\xb4\x1b\x18\xea\xa2\x87\x58\x8e\xad\xa7\x0d\xae\x95\x87\x28\xbb\x49\xe7\xdb\x0c\xe2\x04\xed\x3a\x07\x91\x42\x72\x9c\x3e\x4b\xbe\x37\xe7\x20\xfe\x4e\x3e\xd0\xd0\x1b\xfb\xf9\xe8\xa8\x7a\x6e\x0f\x41\xed\x3a\x71\x86\xa0\xf4\x94\xe2\x68\x6f\xc8\x7d\x31\x39\xfa\x04\xbd\xba\x78\xbd\x57\xe4\xae\x52\x68\x50\x9a\xf3\x6c\xcb\x9d\x52\xfc\xea\xc3\xf4\x3f\xc3\xe5\xf1\x8f\x6b\x51\x7c\x33\xe4\x46\x49\x36\x18\xb1\x0b\x08\x04\xde\xc3\x7d\x5c\x08\xe0\x5d\x92\xfe\x69\xf2\xf9\x2f\x07\x57\xdf\x1e\xee\x19\xe9\x8d\xa4\x1a\x7c\x21\xa6\x64\x9c\x91\x74\xc7\x2b\x30\x4b\xde\x9d\x7d\x7a\xfa\xfe\x53\xe3\x0a\x98\xc0\x35\x7a\x7a\xcf\x5f\x91\x6b\x52\xe9\x25\x2d\xd6\x4e\xf5\x17\x2c\xb3\x1d\x8b\x54\xa9\x42\x9f\x9e\x91\xe5\x19\x8a\x21\xb7\x3a\x3e\x7b\x7e\x68\x4e\x51\x7c\x45\x40\xc6\x5f\xe0\x91\xbf\xd4\xea\x73\x97\xea\xce\x26\xb4\x84\x76\x06\x18\x9a\xaf\x76\xcc\x50\x69\x1c\xde\x5d\x9c\xdf\xd1\xfd\xdc\xd2\x43\x10\x3b\x26\x53\xc2\xad\x6b\x9c\x4c\x77\x4c\x6c\x44\xce\xe7\x5f\xff\xfc\xf2\xa9\xf7\xee\x35\x95\x9e\xe9\xd3\x71\x18\xf6\x3c\xad\xd1\x6d\x2d\x5b\x1c\x81\x61\xab\xf3\xd5\x33\x3a\xf7\x74\x54\x8c\xa2\xcd\x5d\xe9\x61\x63\x3a\x4a\x06\x72\x4e\x5b\x6b\x9e\xf9\x03\xc6\x8e\xc9\x56\x6c\xb2\xfc\xda\x31\x7f\x6d\x35\x87\xf4\x63\x7d\x48\x2d\x36\xd1\xfa\x73\xce\xf9\x60\xfd\x39\x8b\xa7\x58\x17\x78\x3e\x55\x4b\xcc\x68\x28\x17\x58\x0c\x01\xa6\xe9\x1b\x4e\x82\x00\x25\x11\xef\xfa\xc6\xe7\x71\xc0\xdb\x64\x87\x7c\xe3\xfd\x39\x9c\x7c\x29\xd9\x20\x84\xe1\x0c\xbd\x58\x30\x59\x3f\x2b\x47\xc3\xb2\x15\x77\xbc\xcd\xe1\xbd\xe8\x5c\xf7\x05\x38\x3e\x3c\x4c\xef\xff\x04\xf2\x6f\x66\x28\xb7\x71\xbf\x00\x47\xfc\xab\x56\x87\xb7\xc9\x92\xec\x50\x8f\x61\xf1\x69\xb4\x93\x8f\x67\x7c\xb4\x78\x09\x25\xab\x48\x01\x94\xc2\x29\x2a\x05\x90\x62\x97\xa2\x12\x55\xa6\x35\x88\x8f\x76\x86\x69\x3e\x96\x77\x93\x2e\x4b\xc4\x64\x6f\x69\x09\x0e\xc0\x3f\x99\x9f\xe8\xb2\xb4\xbb\x97\xeb\x0e\x7a\x06\xe8\x42\x6e\x88\x33\x60\x0e\x73\xb6\x1b\x27\xf0\x0e\x4f\xe1\x1e\x28\xd2\x9f\xc0\x17\xe1\xcf\x17\x8b\x7b\xf3\xa9\x9b\xe2\x5c\x05\xe3\xd5\x54\x7e\x67\x42\x02\xef\x72\x4d\xc2\xdf\x03\x5e\x5a\xcf\x46\xe0\xed\x24\x46\x5c\x96\x4b\xf7\x30\x8e\xd0\xdb\x92\x72\x5e\xde\xd7\xf6\x57\xdb\x12\x7d\x62\x9c\xdc\x8e\x33\xd2\x2c\x9d\xa1\x64\x91\xc9\xcd\xe2\x82\x0b\x78\xcd\x2b\x27\x14\x42\x1a\xd3\x32\xa1\x44\x72\x4f\xe1\xef\x55\xdf\x94\x57\x08\xd7\x10\x4f\xe4\xf7\xf6\xb9\xae\x5b\xfe\xfc\x8a\x56\xdb\x97\x39\xe3\x9c\xbe\xaa\xf7\xd1\xe1\x61\x8b\xee\xad\x9a\x31\xbb\x74\x6f\x7b\x24\xad\x6b\x3b\xc6\xda\x81\x11\xe1\xac\xe8\xec\x51\x27\xcd\x25\x25\xd1\x22\xcc\x14\x5a\x6c\x4a\x31\x43\xe7\xc5\x0d\xce\x32\x52\x63\x2d\xe1\x1d\x46\xcb\x33\xc8\x66\x1c\x2e\xd8\x5a\x17\x36\x28\x13\x0a\xc3\xa5\x13\x17\x4a\x5b\xa7\x7b\xbf\xd2\x75\x59\xf1\x02\xb3\xec\xc5\x22\x8e\x51\xe6\xcd\x90\x43\xb2\xe5\x89\x22\x55\x47\xbe\xec\xc3\x9d\x83\xaf\xf1\x1d\xce\x56\x5d\x17\x59\xdc\xb3\xf5\x65\xbe\x5c\xc4\x0c\xed\x6c\x85\xd5\xa4\x37\xb9\xc4\xbe\x88\x65\x55\xe9\x70\x92\xc0\x78\x95\xe1\xd0\x0e\xd7\x31\x2c\xe7\x94\xaf\xec\xc0\x3a\xda\x38\xb7\xcd\x3b\x2f\x20\x3d\x9d\x41\xba\x1b\x01\xf1\x1e\x49\x7d\x6d\x37\xdc\xb3\x3d\x81\xc2\x2a\xdd\x65\x7c\x78\x42\xdd\xb1\x45\xc5\x45\xb5\xc0\xd9\xae\xea\x52\xcc\x73\x53\xaa\x8b\x35\x94\xed\x13\xcd\xb6\xe9\xb7\x46\xd9\x83\xd9\x89\xe8\xe0\x63\xab\x55\xaf\x6a\xe4\xa5\x1e\x25\xca\x00\x7a\x15\x46\xb7\x8e\x1d\xc8\xea\x82\x71\x1a\x43\x67\xea\xdd\x70\x0c\x75\x92\x24\x64\x91\x84\xcd\xa3\xc9\x9a\x4f\xe7\x60\xad\x36\xaa\xbc\xc1\x8c\xe1\x64\x0a\xf8\x39\xcc\xed\x1a\x70\x8b\x7a\x1d\x4c\x56\x0f\xf5\x0b\x1c\xc7\xdc\x4f\xd7\x49\x3b\x69\x5d\xed\x90\x24\x37\x78\xba\xa0\x7d\xd1\x30\x1e\x97\x3c\x99\x02\xde\xe8\x81\x21\x7a\x87\x28\xd0\x6a\xae\x87\x5d\xf8\x53\x7d\xa5\x36\xa6\xb6\x78\x02\xa4\x34\xb2\xbd\x2e\x71\xd2\x13\x4d\xa1\x95\x83\x02\x3d\xb9\x8f\xb7\xd6\x49\x71\xc2\xc6\x7e\xf9\xbb\x03\x2a\x28\x12\xce\xe5\x8a\xc4\x06\xbb\xba\x99\x62\xb6\x41\xcc\x0e\xb2\xc8\x80\xc4\xea\xe8\x88\xd9\xe1\x47\x77\x1f\xa4\xa0\x19\x64\xdc\xda\xef\xb1\xe0\x86\x41\x98\x61\x2a\x40\x23\x73\x51\x39\x18\x9c\x39\x7d\x6c\x80\xb1\x95\xc3\x83\xa6\xd1\xa9\xef\x66\x14\xdd\x04\xa3\xe0\xdf\x14\x7f\x45\x30\x83\x63\x2c\xfb\x87\x1d\x17\x20\x6c\xe2\x47\xfe\x3d\x0f\x64\xa4\x38\x19\xd7\xaf\xf9\x58\x4f\x54\x0e\x24\xf0\x91\xf2\xb2\xb6\x48\x85\x9f\x17\xf3\xf4\x9a\x5c\xe2\x24\x28\x33\x9c\x9d\xc2\xe1\xb8\xab\x74\xd0\xc0\x84\xb6\xbb\xea\xa7\x65\xfa\xab\x63\xd9\xa3\x61\xc6\x37\xc4\xca\x1f\x79\xac\xfc\x51\xcb\xca\x1f\xf5\x5d\xf9\x23\xaf\x95\xb7\xa5\x84\xfa\x15\xab\xad\x53\xf2\xb6\xd6\xfd\xed\x42\x8b\x9f\x0c\x53\x0a\xef\x60\x26\xdb\x7b\x18\xdc\xd0\x5d\xa4\x60\xe5\x81\x95\x43\x28\xa5\xe4\x06\xc7\xa8\xdb\x11\x74\xd4\x40\xb1\xcb\x5f\x90\x73\x54\x82\x33\x0c\x63\xd6\xac\x93\x34\x4a\xdd\xef\x67\x30\x63\x6f\xd1\x72\x9d\x22\x55\x53\xc1\x6d\xfe\xd8\x71\x82\x96\xe3\x88\x64\x86\x70\x98\x3f\x5a\xbb\x6e\x7f\xbc\x8a\xc9\x04\xc6\x6e\x2b\x44\xbb\xbd\xd4\x49\x05\x62\xec\xc9\x1d\xc4\x31\x9c\x74\x80\x79\xf7\x5f\x61\xfe\x82\x31\x54\x6f\xe8\x3c\x75\x2b\x49\x7e\x53\x0a\x80\x83\xbe\x5e\x7e\x0a\x21\x3b\x8b\xed\xd3\xe2\x53\xb8\x2c\x7f\xed\x8a\xd6\xd6\xc1\xf2\xf5\x3d\xa2\x0c\xc4\x89\xf0\x1d\xd6\xce\x27\x97\x41\xd1\x9f\x4e\x22\xe9\x0c\xff\x8a\x9e\x4c\x51\x82\xa8\x00\xdc\x32\xba\x2e\x7c\x4d\x0d\x73\x14\x6e\x3d\x9b\x7f\xad\x59\x82\x09\x89\x23\x40\xb9\xe7\xa9\x9c\xee\xa4\xb4\x6d\x0d\x43\x10\x68\xd5\x40\x33\x80\xbb\x96\x44\xf4\x37\x8b\xf6\x43\xa2\xf5\xa7\xb4\xa8\x8d\xac\x10\x3b\x95\x21\x31\x2b\xb1\xa1\x36\xe4\x0d\x90\xbb\xaf\x00\xef\xb5\x15\x2b\x9a\x5d\xcd\x1e\x6c\x3d\x6a\x47\x0d\x76\x95\x8a\xa0\x32\x02\xeb\xfa\xa0\x14\x9d\xf9\x23\xfe\xf2\xbf\x19\xe0\x4f\xb1\x58\xf5\xf2\x2d\x7d\xa6\x50\xbe\x78\x96\x65\x29\xfb\xe2\xe0\x20\x22\x21\x7b\xa2\xb2\x17\x9e\x84\xa4\x50\x58\x33\x48\xa7\x28\x0b\x46\xc1\xff\x9d\xc4\x30\xb9\x6d\xd3\x6d\xe5\xd8\xbf\x42\x71\x6a\xd6\xb9\x75\x0c\xab\x24\x67\x8b\x0b\x32\x25\x8b\xec\x61\x8b\x5b\xb8\xc8\x66\x4f\x62\x35\x11\xd3\x14\x8a\x59\xf6\xde\x02\xdb\x54\xac\x7b\x3c\xbd\x57\x54\x4a\xb9\x69\x4a\x0a\x62\xff\x18\xb3\xae\x19\x9b\x8a\x85\x2e\xd4\xd3\xfa\xc3\x16\xda\x5d\xef\x6e\x2a\x1b\xb6\x40\xbd\x0e\x75\xc0\xfc\xa4\x46\x3e\xd1\x80\x49\x4a\xfb\x01\x65\x7e\xff\xdd\xbb\xc5\xd5\x6a\x92\x74\xcd\x0b\x6e\x49\x96\x93\x73\x5a\x3b\x43\x49\xe3\x8e\x6a\x01\xcd\x56\x6a\xc7\x8c\x0b\x35\xc4\xd2\x6b\xb9\x7c\xbb\x2d\xf0\x38\xfd\xfa\xf6\x5d\x48\x9e\xf9\x25\x28\xcb\xea\x46\x99\x75\x58\x94\xbe\x0e\x45\xe6\x82\x28\x83\x51\x78\x3f\xb2\xc0\xcf\xae\x66\xc7\x8b\x9f\xc3\xcf\x3b\x11\x59\xa5\x8b\x6e\x86\xca\x43\xa4\x5a\xca\x56\xec\x07\x6c\x06\x29\x1a\xdf\x48\x18\xb5\xdd\xd6\x42\xde\x2f\xf0\x0f\x2f\xb2\x5f\xd7\xc9\xb7\x2f\x3b\xcc\x5b\xdc\x55\xed\x72\x8c\x65\x39\x7d\x8f\xda\xa4\x58\x4f\x10\xbd\xa0\xbd\x3d\xb8\x78\xdf\xf8\x06\x53\x96\xd5\xb0\xf3\x5e\xe6\xdf\x81\xc4\x02\x9c\xa7\xa2\x30\x1c\x2b\x4f\x77\xa6\x19\x1f\x9b\xff\xaa\xb0\xf3\x8c\x53\x50\xb8\x74\xfa\x87\x71\x5c\x60\x2e\x48\x8c\x17\x3d\x93\xda\x23\xb5\x7b\xd3\x94\x8b\x61\x83\x70\x17\x70\x5d\xba\xe9\x0f\xdd\x29\xd9\x9c\x69\xdd\x4f\xeb\x5d\x98\x32\x9f\x9a\x74\x3e\xd9\x7a\x61\xba\x44\xd5\x2e\x68\x5d\x50\x23\xd1\xd0\x12\xfb\x14\xa9\xab\xf0\x31\xa5\x64\xf9\x9e\xbf\xcc\x98\x47\xaa\xd4\xd3\xb7\x9c\x52\x5e\x89\xf0\x7e\xdb\xf9\x78\xcb\xdb\xf9\x78\x9c\x42\xc6\x96\x84\x46\x7a\xbc\x65\x46\x08\x43\xe0\x52\xfb\xa5\x07\x6b\x56\x1f\x3d\x10\x6b\xd6\x47\x6b\x19\x17\x9b\xc3\xb8\x01\xfd\xc2\x9f\x5e\x02\x22\xce\x17\x12\x9f\x43\xc1\x73\xa3\x6c\x89\x50\x02\x3e\x05\x30\x89\xc0\xf3\x43\x10\xce\x20\x85\x21\xb7\x0c\x5a\x52\x76\xb6\x2d\x46\x4a\xb2\x8e\x79\xd2\x06\xd5\x4d\xf6\x53\xf1\xcd\x70\x4b\xa7\xbf\xe3\x61\x2c\xe1\x7b\x34\xce\x5f\x04\x56\x64\x41\x41\x38\x23\x0c\x25\x20\xb5\x91\x63\x9f\x05\xda\xf1\xb6\x05\xda\x15\x9e\x26\xaf\x93\x41\x45\xda\x53\x8b\x48\x4b\xeb\xb7\x2c\x21\xd6\x6b\x9f\x2e\x63\x04\x19\x02\xf9\xb7\x4f\x9e\xd4\x21\x63\xb6\x67\x9b\x9b\x14\xd0\xb5\x34\x5a\x91\x55\x29\xff\x33\xa6\x88\x2d\xe2\x7c\x19\x76\xaa\xd2\xfe\xf0\xec\x9b\xaf\x2f\x10\xbc\x36\xdb\xe5\x62\x8c\x81\x0a\x6b\x71\x4d\xd5\x4b\xcb\xbd\xc3\x68\x39\x2e\xf2\x4e\x2b\x8c\x60\x70\x27\x46\x1d\xba\x15\xb5\x33\x1e\x17\x0c\x54\x70\xbb\xa9\x0a\x69\x27\x6d\xd0\x7a\x74\x09\xb1\x36\x07\x29\x40\x74\x5c\xc8\x43\xc5\xa5\x83\x76\x16\x92\xa0\xd6\x0a\xd2\xcc\x1e\xb0\xac\xc5\x29\x73\x5a\x66\x19\x99\x8f\x51\x12\x75\x72\x15\xf6\x87\x1d\x38\xa5\x84\x89\x08\x19\xe0\x50\x54\xa2\xd3\x2a\xe7\x0d\xb3\x53\x5e\x65\xe0\xe4\x14\xb0\x37\x9b\x76\x71\xa3\x77\x2e\x82\xef\xb9\x73\x64\x6a\x67\xda\x65\x44\x35\x54\x4c\xbf\x34\x7b\x23\xb8\xf6\x02\x8f\x85\xfb\x57\xa2\x74\x83\xfa\x17\xe3\x19\xa1\xf8\x57\xbf\xb7\x34\x32\x83\xbc\x50\xb4\x79\x84\x8e\xd0\xec\xc5\xaa\xe8\xd1\xb9\x16\x90\x76\x97\xda\x5c\x2f\xa8\xf8\xca\x63\x2d\x30\xcf\x19\xdf\xa7\xe5\x1c\xba\x05\x83\x7a\x93\x2c\xa4\x08\xae\x0f\x3f\xde\x85\x6a\xa7\xe2\x8d\x20\xb2\xf4\x2b\xe8\x4d\x3d\x6d\x3a\x5b\x22\xa0\x88\xea\x6e\x93\x80\xdc\x6b\x50\xbc\x76\x60\x02\x6a\xd3\xf1\x79\xb0\xcf\xfb\xdb\x6c\xa7\x47\xe1\x37\x28\x23\x42\x5e\x95\xbf\x2d\x26\x3c\x61\x21\x4a\x14\x56\xc8\xa0\x1c\x28\xe7\xb1\xa5\xed\x2b\xc1\x0c\xb6\x45\xb6\x33\xb4\x31\xba\xa9\x99\xec\xe3\xb6\x6d\xd8\xca\xf6\x4c\xc9\x56\xeb\x59\x69\xe7\x85\x01\xdd\x84\xa8\x6c\xb1\x84\x95\x5a\xfc\x83\xc8\x81\xb1\x9b\xc1\x6e\x84\xca\x2b\xc9\x3f\x65\xc2\xb5\x13\xab\xb2\x8d\xb0\x3d\x72\xb3\x3d\x52\x03\x6c\x0e\xab\x5e\x10\x1c\xae\x2a\x96\xf6\x2d\x20\x8c\xc7\x31\x5b\xcc\xe7\x90\x16\xa0\xc1\x32\xfe\x24\x7e\xbc\x9c\x51\xc8\x50\x60\x04\xe6\xb6\xc9\x60\xcd\x60\x74\x81\x89\x57\x6d\xcb\x9f\x7e\x0a\x78\x5d\x96\x4a\xc1\xf6\x01\x9d\x68\x26\xac\x9b\x51\x9d\x03\x47\xee\xc9\x2f\x0b\x44\x57\x45\x0e\x05\xc7\xa9\x45\x31\x9f\x01\xbf\x47\x0a\xab\x19\x64\x33\xed\xde\x05\xa5\x28\xc9\x2e\xe1\x14\xbd\xe6\x9e\x3a\xb2\xa0\xa1\xac\xff\x94\x99\xe4\x19\x9a\xbf\xae\xf4\xcb\xce\x8d\xee\x6f\xf9\xbb\x84\x43\xa7\x18\xee\x13\x09\x79\x2d\xf8\x9b\xe6\x86\xa2\xd6\xbc\x3f\xe7\x09\xf5\x20\xed\xab\xab\x78\x31\xd5\xbf\x54\x0f\xab\x5e\xaa\xbe\x95\x57\x17\xbb\xc2\xbf\x7e\xd4\x24\x43\x15\xa4\x8d\x2b\x95\xfb\xa8\x31\x0e\x57\x5a\xf5\xe7\xa3\x60\x9a\x69\xb3\xbf\x43\x94\x61\x92\x70\x1a\xc7\x28\x99\x66\xbc\x28\xf4\xd0\xb3\x2b\xa8\x79\x46\x2c\x85\x8d\x8e\x05\xf2\x3d\xda\xa4\xfe\xfe\xb7\xbf\xff\xad\x3a\x87\x72\x2c\xbe\x88\xf5\x3d\x01\xeb\xed\x6e\xbc\x7c\xf1\x83\x46\x81\x82\xfc\xba\x6d\xc7\x7a\x3e\x3b\xc1\x69\x8a\xb2\xe6\xd3\x0d\xcd\x83\x2c\x7d\x81\x8e\xb4\xf6\x4d\x83\x95\x9f\xe9\x9d\x7b\xe5\x12\xb5\x74\x59\xeb\xb1\x0e\x62\xeb\x49\xc8\xe0\xa2\xb9\x45\x06\xa7\x4c\x73\x48\xc9\xaf\xaf\xf3\x6f\xb5\x8d\xce\xaf\x32\xb9\x68\x7b\x96\x1f\x5b\x2a\x44\x5a\x92\xa0\x36\x95\x06\x63\xf4\x8b\x0e\xe8\x69\xbd\xc3\x68\xb9\x63\x37\xeb\xb3\xbb\xcb\xcf\xe3\xef\x93\x78\x9d\xcc\x01\x8b\x4f\x55\xf1\x73\xe7\x56\x7d\x57\x15\x68\x00\x53\xcc\x05\x27\x31\x36\xb7\x71\x69\xdf\x43\x5e\xe1\xae\x62\x33\x84\x0b\x36\xae\x75\xd3\xab\x35\xd2\x53\xcf\xd5\x1b\xea\x89\xce\x79\x65\x98\xe4\x16\xad\x96\x84\x46\xc2\xdb\x57\xed\x62\x47\xc7\x4f\x81\x64\x05\x0e\xd5\x5f\x5c\x3b\x02\x6a\x53\xf9\x80\xea\x0d\x39\xeb\x1d\x22\xb1\x97\x98\x07\xfe\x7c\xe1\x4d\xa0\x86\x7c\xa8\xbb\xfa\x79\xb1\x41\x0d\xeb\xc1\xab\xdd\x76\x4b\xf0\x44\x91\xae\xf8\x42\x63\x04\xf5\x4e\xf5\x5b\xa1\x23\x69\xbc\xe2\x29\x4e\xad\x23\xec\x1f\x32\x34\x05\xc3\x38\x13\x8c\x29\x8a\xc6\x9f\xe5\xb7\x15\x9c\xf4\x03\x59\x50\xc9\xc6\x80\xab\x92\x00\x33\x90\x11\x02\xd8\x4c\x80\xe6\x7b\x34\x56\xd8\xb0\xe8\xce\x25\x94\x59\x6e\xff\x8b\xaf\xdc\xe6\xdc\x78\x00\x31\xcd\xe0\x24\x46\x07\xb9\x20\x18\xa3\x08\x67\x64\xd7\xb9\x5f\xc7\xaf\xaf\xd3\xc5\x5b\xf6\xdc\x3f\xcb\xae\x84\x56\xac\x42\xc6\x26\x15\xc4\x46\x69\xc0\x97\xd8\xa8\xc1\x89\x9c\x7c\x30\x0a\x2e\x21\xcd\x00\x4b\x29\x82\x11\x9b\x21\x94\x8d\x40\x9a\x7f\x13\xc1\x0c\x4e\x20\x43\x23\x9e\xb0\x80\x92\x0c\x53\x14\xaf\xc0\x4d\x8c\xee\xf1\x24\x46\xe0\xf7\xaa\x26\x40\xd1\xf1\x49\x48\xe6\x7f\xb0\xc4\x49\x5e\x27\x19\x9a\x52\xa8\x00\xb3\x4c\xfb\x5d\xed\x65\xb5\x44\xf9\xfb\x8b\x95\xa9\xeb\x2e\x45\x17\x7a\x1e\xf9\xe7\x71\x34\xcc\xce\x30\xcd\x56\x42\x9a\x89\xb6\x17\xbc\xa7\x5c\xa8\xaa\xfd\xab\xe6\x5a\xb9\x59\xe5\x83\xca\x2e\xfe\xa2\x61\x7f\xbb\xf4\x52\x6f\x52\x68\x36\x16\x31\xa7\xfa\x6f\xb8\xaf\x2c\xc6\x69\x37\x6c\xfa\x9e\x0e\x41\x6b\xfe\x87\x5a\xc2\x31\x9a\x4f\x50\x34\x0e\x49\xa4\x1f\xc6\x8a\x57\x00\xff\x15\xa8\x5f\xcd\xe9\x0e\x62\x7e\xf9\xa1\x09\x29\xd2\x90\x66\xd5\x31\x4b\xc9\x92\x17\x84\x44\x2d\x47\x6e\xad\x77\xad\xfa\x48\x29\xe2\xe0\x7a\xfc\x13\x4c\x71\x06\xe3\x5c\xf0\xe5\x26\x04\x8a\x63\xde\x21\x47\x5b\x5f\xc8\x71\x6c\x47\xc1\xd3\x96\xb9\xb5\xb6\xa0\x55\x4d\x6f\xe5\x55\xe4\xe6\xa6\xf6\x2f\xe7\x58\xeb\x61\xde\x33\xb9\xe4\x12\xb2\x0c\x81\x6c\x86\x80\x81\xdc\x40\x33\x66\x1c\x67\xa1\xc5\xad\x33\x80\x20\x6e\x97\x9c\x6b\xaa\xd2\xa6\x07\x53\x94\x44\x88\xee\x3c\x21\xf7\x98\xdd\x9f\x5c\xfe\xfc\xcd\x7c\x1d\xb5\x3a\x21\xc9\x38\xa5\x38\x11\x32\xd7\xa4\x58\x1f\xe9\x92\x67\x14\x88\x16\x58\xb2\x65\xcf\x46\xeb\x03\xec\xb4\x1f\x64\x59\x35\x31\xae\x54\xfd\xdd\x2e\xe9\xdd\x57\x0c\xbe\x7d\xff\xe3\xbb\x35\x0a\x45\x2a\xb8\x0b\x72\xa2\x6a\x8e\x12\x3c\x3a\x15\x0e\x35\x83\xb7\xbf\x5d\x82\x4f\x29\x8e\xca\x9c\xed\xf1\x1f\xbb\xa6\x6d\x8a\xfb\x51\x1c\x8f\x8f\x40\xf9\x37\x07\xa9\x1e\x1f\x55\x54\x3d\x3f\x64\xb0\xea\xcc\xda\xfd\x64\x35\xdb\xd0\x86\xef\xc2\x49\xfe\x86\x44\xc3\xb9\x53\xfc\xfb\xb7\x7b\x98\x85\xfc\x64\xb2\x75\x57\xff\x28\x77\xe9\x18\x47\xe3\xff\xfa\x2f\xb1\xc8\x7f\xfd\x6b\xa0\xed\xdf\x6b\x89\x8b\x6d\x6f\xa1\x3e\x83\xcc\xab\x75\x7a\x2d\xe7\xd1\xd2\x4a\xbd\x7e\x65\xa3\xb5\x7a\x8f\x08\xc2\x36\xd6\xa1\xa9\x2d\x54\x16\x41\xaa\x0c\x6d\x06\x3a\x5f\x0b\xe9\xd4\x6b\x59\x90\x60\xa4\x7b\xfd\x82\x63\xe3\x62\x9c\x21\x16\x6e\x73\x31\x14\x77\xe4\xaa\x39\xc5\x69\x81\x14\xbc\x76\x88\xc7\xab\xfd\xde\xf6\x36\x94\xf4\xb3\x54\x96\xd4\xc7\xd9\x52\x88\x4f\xd3\xce\xda\x83\xcd\x54\xd9\xdd\x03\x2d\x5c\xd3\xab\xdb\xb6\x1d\xdb\x35\x70\x7f\x67\x52\x79\x40\x1c\x6b\x87\x45\x7b\x76\xa3\x2e\xc4\x17\x6c\xe5\x2d\xbf\x83\x6a\x57\x86\x23\xd9\x95\x21\x38\x80\x8c\xa1\x8c\x1d\xe0\xf9\xf4\x20\x7f\xe0\x78\x4a\xe1\xea\xc9\x14\xdf\xd4\x07\xca\x7f\xc4\x49\x84\x43\xa8\x9d\x42\x1d\xc0\x09\x87\x4a\xcb\xe4\x6e\xaf\xea\x3f\xe6\xec\x47\x8d\x54\xb2\xc9\xd6\x05\x4e\x6e\x11\x7d\x21\x81\x7d\xba\xf5\x2b\xad\x38\xf4\x3a\xe5\x79\x3a\xfc\x7a\x05\x8a\x76\x72\xeb\x99\xf1\xf9\x3a\x61\x88\x66\xe0\xa2\x0c\x26\xb6\x38\xf7\x66\x64\x99\x5f\xf4\x46\x76\xc4\x6d\x39\x7f\xfc\xc1\x7f\x52\x8a\xee\x30\x5a\xee\x27\x01\x2f\xc5\xe0\x3c\x69\x28\xaf\x06\xe1\x0c\x26\x53\xc4\xac\x74\x2c\x9e\xdc\x87\x82\x26\x59\xb2\x61\x4a\x5c\xab\xf6\x56\x6e\x1f\x72\x70\x05\xef\x90\x17\x11\xea\x8e\x91\x4e\xad\x48\x37\x30\xc9\x22\xe5\xb7\x7d\x96\xef\x65\xda\x9e\xf0\xfe\x00\xde\x3b\x80\x57\xf1\xfa\x3a\x8a\x7a\xae\xb4\xd3\x45\xb0\xa6\xba\xdf\x7e\x6f\x08\x93\x3b\xc8\x6c\x61\x89\x5a\xf5\xbb\xaf\x73\xdf\xda\x9b\x5b\xd9\x61\x75\xcc\x4d\x16\x42\x1a\x89\x26\xdd\xe3\x9a\x2a\x58\x03\xd9\x7c\xec\xdf\xad\xa5\x90\x09\xba\x81\x53\xb9\x29\x2d\xca\x47\xb7\x06\xde\x06\x75\x20\xad\xc6\x1d\xc0\x2c\x97\x06\x73\x18\x15\x22\x01\x64\x84\x3b\xc4\x24\x53\x82\x31\x6f\x0b\x8d\x93\x05\x52\xdb\x09\x10\x0a\xe4\x52\xab\x9b\xfe\xdc\x49\x61\xf2\x98\xcb\x1e\xf5\x78\xe6\x70\x95\xfa\xfc\x83\x0e\x2d\x9d\x37\x13\x10\x94\x62\x4e\x0c\xef\xac\xba\x14\x56\x61\x27\xaf\xdd\x56\x1f\x66\xf5\x8d\x18\x92\xda\x71\xaa\x01\xea\x38\xe6\xca\x99\x57\x8c\x81\xcd\xc8\x52\x28\x35\xf9\x34\x84\x3a\x24\xf4\xa7\x3e\xe1\x05\x9e\x4d\x55\x55\x95\xac\x21\x82\xca\xfb\x6c\xe7\xc4\x60\x7e\xc1\xa6\xf3\x6e\x68\x9f\xe0\xae\x7b\xf3\x3e\x7f\xf7\xea\x70\x76\xf2\xcd\x30\xa8\x31\x35\x07\xde\xa7\xe3\x67\x1d\x0e\x89\x1e\xde\xbb\x35\x5d\x77\xeb\xf9\x00\x86\x37\xfd\x85\x37\x47\x46\x2d\x2b\xa7\x76\xf6\x00\x4d\x7f\x83\x4c\x6a\xa0\xae\x9e\x17\x8e\xa9\x76\x8b\x06\xd4\xfe\xaf\xfb\xaa\xd5\x9f\xa0\x9e\x32\xb8\x07\xee\x37\xe2\x76\x33\xd2\xca\x3b\x2d\xaf\xe5\x2e\xc3\x57\xbb\xf7\xcf\xec\xd6\x39\x63\xca\xc2\xd9\x48\xde\x92\xa6\x46\xc9\xcb\xb8\xb5\x25\x12\x96\xec\x67\xae\xcb\x2e\xab\x4e\xe0\x69\x75\x02\xe3\x29\x67\x3d\x47\x7b\xcc\x2d\xa5\x6a\x89\xf9\xf9\xcc\xd9\xc3\xe2\xee\x6a\xa9\xf9\x1f\x4d\x7d\x6c\x4c\x93\x81\xb9\x01\x5b\xb2\x25\x8b\xf1\xd1\x6e\xdc\x27\xbb\xf1\xd1\x50\x7c\x34\x14\xbb\x1a\x8a\x1b\x32\x99\x86\xb3\x95\xf6\x24\x1b\x26\x3d\x79\x7a\x8b\xc3\x67\x66\x6b\xc9\x3b\x61\x42\xc0\x24\xc2\x0c\x9a\x7d\x73\x75\xf1\xba\x5c\x31\xbc\x5c\x99\xc5\xe6\x91\x92\xd7\x92\x6c\xaa\xf4\xa6\x14\xe0\x8a\x8c\xb5\x57\x49\x11\x78\x9d\xdb\x28\xf9\xf2\xd7\x92\x8e\x4a\x41\xaf\xec\xf5\x22\x12\x21\xac\x77\x93\xe1\xbd\xc1\xfc\x9c\x0a\x13\x0c\xc2\x56\x21\x89\xf6\x29\xf9\xf5\x9b\xcf\xe6\xe9\x57\x1f\x7e\x5c\xfa\x71\x96\x39\x4b\xb4\x48\x2f\xf2\x70\xe4\x08\x77\xff\xe0\x29\xa3\xb9\xec\x0d\x31\x43\xdc\x38\x04\xd9\x0c\x66\xd2\xd4\x98\x20\x56\x4d\xe6\x7b\x68\xd9\xa5\x4a\x6b\xcb\x27\xd1\x2b\x42\xc0\x56\x49\x06\xef\xc7\xa2\x1a\xda\xea\x92\xa8\x9c\x43\xe2\xfa\x06\xcc\x95\x50\x60\xca\xd9\xca\x82\xec\xef\x72\x2e\xbc\x84\xd9\xac\xf8\x86\xeb\xbb\xf2\x1b\xf1\xac\xca\xd2\x8a\x51\x55\xca\x1b\xf9\x37\xef\xd2\xa2\xb7\xaf\x2d\xce\xc9\xaf\x15\x7a\x4f\x69\x62\xce\x45\xfe\xa8\x4a\xfc\x11\x87\x62\x84\xc4\xc5\xae\x8e\xf9\x2d\x01\x7c\x96\xad\x5a\x2b\x15\x9f\x9c\x92\x08\xbd\xc1\xb9\x19\x0d\xfe\xab\x76\xae\xcf\x50\x7e\x5e\x7f\x01\xe0\x22\x23\xe0\x5f\xf1\x3c\xdf\xe0\x30\xc9\xfe\x54\xbb\xec\x86\x24\xd9\x98\xe1\x5f\xd1\x17\xe0\xe8\xb3\xf4\xbe\xf2\xf3\x5f\xdd\x03\xac\xb8\x81\xda\xd3\x7f\xb5\xbc\xdf\x8a\x3c\x7d\x21\xf3\x1d\x25\xf4\x3b\x67\x2e\xb1\x24\x81\x66\xc1\x7b\x99\x21\xdb\xc8\x80\xad\x8b\xce\x81\xe5\xf1\x9e\x9c\xf5\x3f\x7f\xff\x2e\x5b\x7c\xfa\xc9\x7b\xef\xb3\xde\xc0\xa2\x15\xce\x04\x6d\xbc\x08\xe6\x90\x4e\x71\x32\x16\xe0\x4d\x5f\x80\xe3\xc3\xf4\xfe\x4f\xe0\xaf\xa6\x33\x95\xef\x85\x82\xc1\xcc\x9a\x85\x49\xa9\x18\x05\x32\xaf\x5d\xb5\xcd\x92\x2c\xc9\x2d\xf6\xfc\x97\x82\x05\x75\xf7\xc5\xb0\x67\x78\x73\x85\x07\x61\x9c\x9b\x98\x2c\xc3\x19\xa4\xd9\x1e\x9d\xe6\x3f\x66\xbf\xd0\xec\xab\xeb\x4f\x37\x5f\xca\x72\x46\xe1\xf2\x09\x26\xc1\x28\x78\x49\x28\x98\xc3\xdb\xdc\xde\x2b\x48\xc2\x46\x20\xa5\x24\x44\x8c\x81\x08\xc3\x29\x85\x73\x36\x02\x84\x4e\x81\xfa\xf5\xc3\x9b\x8b\x11\x38\x7f\xaf\xfd\x9a\xa0\x6c\x49\xe8\x6d\xf1\x0d\x2f\x80\x99\x2f\xc2\x19\x98\x13\xaa\x17\xbe\x4c\xc8\x22\x7b\x12\x89\xd7\xef\xb8\xf2\x85\xfb\xfb\x36\x52\x00\x93\x7f\x5a\x42\x61\x45\x3e\xbc\x8a\x18\xa5\xb3\x14\xfc\x30\x96\xab\x6a\xd1\x5c\xf0\x0d\x55\xe0\x5b\x85\x47\xe8\xe9\xa8\x72\x28\x69\x7e\x52\xc5\x0d\xcb\xe5\x52\xf1\xc2\xc1\x9f\x79\xe9\xc6\x97\x47\xbf\x5b\xe0\x2f\xbf\x41\x49\x82\xa2\xd5\xef\x58\x8a\x93\x2f\x0f\x7f\x97\x52\x92\x91\x2f\x7f\x66\x24\xf9\x1d\x4b\x63\xc8\x66\x5f\x1e\x16\x7e\x57\x2e\x3d\x47\x01\x7f\xbd\xc8\x3d\xfb\xe2\xf0\x4f\x40\xfe\x05\x0e\xff\x04\x78\x24\xe8\x0b\x70\x74\x78\xf8\xbf\xfe\x54\xc8\xd2\xa3\xc3\xc3\x5c\x5a\xb6\x3a\xc5\x76\x5f\x2f\x62\x94\x4f\x9b\x90\x7c\x7b\x72\x6e\x46\x17\xa7\x2f\xe7\xdf\xbf\xfd\x61\x9d\x8a\x11\x1b\x96\x54\xcd\x65\x7f\x2c\x59\xd1\x54\x40\x62\x6e\x22\xbb\x31\x23\xb5\x65\x3d\x06\x59\xeb\x29\x9a\xe3\x04\xef\xd1\x11\x77\x7c\xcc\x5e\xad\xfe\xf3\xca\xdc\x13\x21\x90\x4e\xab\x01\x0f\xba\x57\x9c\x00\xc1\x48\xfe\x01\x38\x73\xa4\x34\xb7\x35\x31\x63\x0b\xc4\xcf\xa9\x0c\x87\xb7\x88\xbb\x3c\x19\xb9\xc9\x96\x50\x3f\xb0\x72\x11\x15\x92\x45\x7e\x5b\xfe\xe3\x1e\x14\x6c\x3e\x1e\x5b\x5e\x59\x04\xcf\xc7\xcf\xbb\x59\xda\x5a\x22\xc1\xc6\x02\xff\xe6\x52\x52\xb1\x4b\xc7\x0b\x1a\x6b\x77\x4b\x86\xfd\xf0\xfe\xa2\xcd\xb9\xee\x5b\x98\x63\x04\x6d\xc8\x37\x87\xf6\xde\x51\xa5\x8c\x40\xf4\x9f\x0f\x46\x01\x1f\x52\x2d\xc4\xec\xc8\xdb\x0f\xfa\xd7\x73\xa2\x27\xd3\x27\x20\xdf\x78\x5f\x1c\x1c\xcc\x50\x9c\x46\x88\xdd\xd6\x37\xdf\x70\x11\x88\x3e\x6b\x26\xaf\xfa\xc0\x10\xb5\xb5\x89\xa8\xae\x4c\xaf\x35\x51\x6f\x68\x5b\x98\x62\x04\x5b\x5b\x1d\xc5\x90\x8e\xb9\x6f\x67\x21\x1a\x9b\x07\xa6\x58\x02\x88\xa9\x0a\xec\xcb\xd7\xe0\x1b\xf1\xcd\x66\x96\x48\xbe\x51\x83\xd0\xaf\x2f\xd2\xc9\xe5\x6b\x3e\x82\x6d\x2f\x51\xce\x1c\x20\x9f\xff\x2d\x5a\x81\xdf\xdf\x50\x32\x17\x5f\xc9\x56\xaf\x7f\xe8\xb3\x74\xbb\xc7\x47\x39\x59\x64\x33\x94\x64\x38\x14\xa8\x52\xed\x67\x09\x5c\x64\x3d\x10\x52\x7c\xb3\x4a\x02\x47\x16\x09\xd4\x86\xe9\xdf\xbd\x75\xbd\xdd\xd1\x2e\xa9\xae\xb8\xef\x16\x48\xc6\xc8\x4d\xf4\x02\x3f\xcc\x09\x10\xd6\x84\xf7\x53\x96\xa1\xdc\x01\xc5\xe3\x3c\xe0\xfe\xf4\x6b\x7b\xe2\xb6\x35\xf1\xfe\xda\xc6\xd3\x74\x71\xd5\xaf\xd0\x5a\xbe\xbf\xae\xb4\x7c\x6f\x2b\x44\x2b\x47\x52\xe2\xb4\x17\x05\x10\x6a\x1f\xb0\x19\x59\x9e\xa1\x18\x4a\xa9\x73\x78\x68\x50\x63\x4a\x50\xb5\xa2\x30\xaf\xe8\xf5\xe5\xc2\x74\xb4\x51\xc7\x62\xc8\xcb\xc9\x4b\xed\x5a\x18\x3f\xc2\x6e\x16\xc4\x99\xc0\xf0\x36\xe7\xb0\x24\xd7\x9f\x62\x42\xbf\x28\x89\x23\x36\x69\x3e\xb6\x3f\x05\x86\xb6\xf8\x52\xbc\x39\xda\xe2\x93\xe4\x7b\x45\x77\xe9\xf4\xaf\x13\xdf\x09\x27\x57\xa2\xc1\x0e\xdd\x76\xbc\x46\x24\xf5\xa2\x82\x5a\x92\x29\xfe\xf1\xff\xfc\xff\xbd\xfd\x00\x8d\x22\xa2\x36\x09\xeb\x01\xf5\x66\xb9\xbb\xd3\x83\xfb\x94\xbd\x6c\xc7\xd3\xd1\xb4\x51\x07\x37\x7d\xf7\xc4\xc7\x31\x99\x7c\x16\x7d\x7b\x73\xf7\xda\xdf\xbf\xdb\x86\x6e\xb1\x29\xfa\x0f\xeb\x7c\xc0\xd9\x6c\x31\xd9\x23\xe7\xc3\xf2\x9b\xcf\x7e\xb8\x7a\xf3\xd9\xc1\x3a\xd1\xf2\x2e\x26\xfa\x86\xa2\xe5\x95\x6c\xd5\x51\xf0\x0a\x67\x5f\x2d\x26\x00\x33\x30\x23\x4b\x90\x22\x92\xc6\x08\x4c\x16\x38\x8e\x0a\x77\xc6\x93\xd2\x9f\x21\x16\xa5\x70\x63\x3c\x28\x0b\xbf\x10\xd5\x7c\x0e\xc6\x70\xfa\x20\xfa\xd8\x46\x6c\x46\xa9\x89\xbd\xa3\x53\x98\xe0\x5f\xa1\x5a\x7c\xb7\x6d\xb2\xe1\x80\x7e\x40\x96\x09\xa2\x6c\x1c\x51\x92\x46\xbc\x95\x8c\xa0\x9b\xf8\xda\x11\xc9\x7f\x97\x5f\x54\x0f\xe4\xf3\xa1\x55\xc3\xf8\xd2\x20\xe2\xcf\xb4\x84\xf2\xd7\x36\x80\x24\x91\x89\x46\x64\x40\xa8\xb0\x7e\x96\x33\xc2\x10\xa0\x28\x25\x2c\xe7\x9b\x15\x58\x91\x05\x58\xc2\x24\x03\x19\xc7\xea\x5b\xee\x85\x6b\xe1\x2a\xdf\xc4\x38\x43\x73\x06\x18\x4e\xac\x9a\xba\xc3\x7e\x55\x86\xab\xb4\x63\x4b\xfb\x75\x42\x61\x12\xce\xc6\xe2\xf1\xf5\x25\x12\x3f\x5e\x89\x57\x7f\x54\xde\x87\x2d\xd9\xaf\x52\xa4\xe7\xb2\xec\x33\x10\xc1\x15\x03\x70\x4a\xf6\x62\x59\xa4\x90\xfd\x0e\xa3\x65\x6b\xa6\xae\xdd\x82\x14\x32\x4b\xd6\xa5\xdb\xed\x38\xcb\xa2\x72\xd4\x36\x54\xb8\x27\x3e\xca\x52\xb8\xf1\x1c\xc7\x88\x65\x24\x69\x2e\x28\xaf\xbd\x53\xbf\x0a\x14\x56\xfe\x90\x09\xb9\x77\x23\x70\xd8\x98\x54\x7f\xa8\x87\x35\x39\x31\x95\x39\x0c\x33\x79\xee\xc9\x67\xc6\x99\xbf\x16\x3f\x0d\x37\x6b\xf5\xc0\xdd\xce\x38\x24\xf3\x39\xce\xcc\x53\x3e\x95\xbf\x0d\x37\xe7\xe2\x89\xbe\xe6\xc7\xb0\xd2\x3c\x9b\x21\x90\xef\x1b\xb6\x41\x89\xcd\x89\x3f\x6e\x42\x71\xf9\x6d\xee\x41\x7c\x34\xef\x8b\x93\xc9\xcd\x5d\x15\xd5\x20\xc6\x2c\x93\x2d\x6e\x34\xf6\xc9\x8f\x10\x79\x0e\xbf\xc4\x28\xe6\x4d\x0a\x70\x32\x8d\x91\x78\x5d\xc5\x27\x27\x98\x27\x7f\x8e\x60\x9b\xfc\x90\xf4\x4e\x7f\x77\xd3\xbf\x33\xdc\x52\x3b\xa5\x75\x07\x6f\xc5\x1f\xd8\xea\x7c\x10\xde\x40\xf7\x80\x0a\xcb\x78\x37\x46\x70\xc3\x56\x1a\xdc\x04\xdb\x13\x23\xf8\xc5\xc9\x0f\xe4\xe4\xe6\xa5\xa7\x11\xe6\x07\xf1\xb8\xa9\x95\x18\xd4\x1c\xfe\x19\x53\xb8\x47\xc6\xf0\xcb\xe7\x3f\xd2\xb7\xef\x26\xc7\x9b\x4f\x36\xfb\x1a\x53\x08\xae\xa4\x29\x1a\x8c\xc4\xe7\x94\x92\x3b\x1c\x21\x26\xc3\xf0\x19\x85\x21\x4f\x42\x83\x49\x04\xe0\x14\xc7\xa8\x30\x5e\x1f\xa3\xed\xbb\xb0\xc5\xab\x46\x34\x43\x8c\x09\xfb\x12\xb3\x93\x68\x8e\x2d\x60\x52\xa6\x4e\x3b\xa2\xb3\x4e\xce\x0b\xe1\x82\x65\x24\xdf\x2b\x4f\x70\x75\xed\x9c\xe7\x41\x8f\x00\x54\x87\xb0\x93\xe8\xd5\x3d\x5d\x50\x04\x38\x7b\x9e\x92\x24\x91\x09\xf7\xfd\x31\x85\xba\xe2\xcf\x7b\x9d\x93\xcf\x46\xc1\x22\x89\x11\xef\xa9\xb6\xae\x87\xa3\x05\xe3\x7e\x9a\x93\x66\xfc\x69\x13\xe5\xfe\x4c\x0a\x3a\x00\x73\x1e\xc0\x2c\xa3\x30\x23\x14\x24\x08\x45\x1c\x79\x46\x6e\x6a\x41\xc2\x50\x90\x30\x37\xc1\x23\x94\x41\x1c\x33\x30\x41\x37\x84\x22\xb0\x60\x70\x8a\xea\xfd\xa3\xad\xe7\x6c\xf3\xac\x5e\xcf\xc9\x13\xb4\x41\xaf\x6e\xc8\x8a\x2c\xc3\xd5\xf9\x29\x30\xfe\xf9\x17\x5d\xff\xe3\xd4\xe2\x8d\xa1\xc0\x05\x4c\xa6\x0b\x59\x38\x35\x78\xca\x47\x13\x84\xa0\x18\x4c\x4b\x96\x01\x1f\x67\x3d\x7a\x2d\xf3\x34\x7e\x9f\x93\x76\xc1\xc0\x97\x80\x22\x46\xe2\x3b\x14\x81\x93\xb7\x67\x39\x0b\xe4\x87\x17\xf8\x12\x5c\xad\x84\xa8\xf8\x03\x78\xf7\x1e\x40\xc6\xf0\x34\x41\x08\x7c\x09\x26\x64\xc2\xe6\x38\x9b\x75\x00\x81\x58\x57\x10\x8c\x02\xd5\x72\xc5\x2f\x24\x5d\x36\xa5\x73\xc4\xa4\x35\x0c\x3b\x79\x65\x7f\x50\xba\x72\x86\xad\x61\x34\x1d\x32\xaf\x77\x33\x39\x5d\xe8\xfc\xbb\xa9\x14\x5f\x98\xd3\xaf\x28\xce\x6d\xb1\xa6\xa6\xb5\xf3\x16\x1c\x53\x0a\x57\xb5\x1e\x1c\xba\xc0\xc9\x05\x12\xc9\x40\x4d\x24\xb8\xf5\xff\x6d\xa8\xf9\x75\x1d\x70\x60\xc5\x72\x4f\x54\xfc\xaf\xcf\x3f\xf9\xf9\xf9\xf1\x8b\x6f\xf7\x2b\xce\xd5\x24\xd3\x20\xd4\x9f\x43\x7a\x1b\x91\x65\xb2\x47\xaa\xfd\x77\x6f\xdf\x3c\xcf\x9e\x7f\x77\xbe\xad\xaa\xd0\x12\x9d\x7c\x64\x44\x6e\xad\x81\x70\x8d\x6a\xb8\xa4\xba\x64\xdb\x5c\xb8\x4c\x43\x50\x77\xca\xea\x26\x62\x58\x57\xf1\xbe\x6f\xea\x7c\x3d\x0f\xbe\xb5\x30\xb2\xb5\x2a\xd2\xa7\x24\x92\xd7\x43\xde\xc0\x39\x8e\x57\x5f\x80\xaf\x50\x7c\x87\x72\xf9\xdb\xbc\xc4\x54\x32\xf9\x57\xfd\x20\xd3\x47\x91\x52\x54\x1d\x49\x0a\xa3\xdc\xf0\xfc\x02\x1c\xd6\xef\x6e\xea\x0d\x76\xa0\x10\x15\x50\x54\x7b\xd8\x33\xa4\x98\x5f\xe5\x0f\xc6\xaf\xe9\x2c\x2d\x90\x51\x45\x23\x39\xae\xae\x7d\xd4\x5f\x63\xa8\xe8\x1c\x35\x2a\x40\xd7\xed\x95\xe5\x00\xea\x50\x80\x52\x12\x51\x00\x34\xa8\x96\x16\xbc\xef\x80\xf1\x90\x0d\x1e\xca\xbd\x52\xd1\x2e\xba\xb8\x0f\x77\xeb\xad\x33\xc9\xfc\x0d\x1c\x26\x7b\x72\x9c\x3f\x7f\x7f\x76\xfa\x72\x3e\xeb\xd0\x61\x6b\xbb\x1e\x3b\x33\xd1\x06\x59\x8f\x14\xe6\x14\xa5\x10\xc7\x7b\x74\xbc\x4f\xbe\xbd\xbc\x3e\x9f\x9e\x3e\xdd\xbc\xe7\xee\xb2\x98\x7e\xc0\x01\x68\xd2\x18\xf2\xb0\x39\x05\x61\x4c\x16\xd1\x38\xd7\x17\x22\x10\x93\x29\x2b\x13\x4c\x4a\x92\xc1\x34\x7d\x2c\x97\xd9\x9b\x13\x7f\x97\x15\x33\xbb\x89\xab\x95\xdc\x0b\xdc\xc5\x00\x6b\x17\xd3\x94\x7c\x3f\x86\x29\xce\xc8\x2d\x4a\x1c\xb5\x01\xd7\xfc\x9a\x8e\xd5\x01\xeb\x45\x54\x73\x3a\xf0\xd7\xca\xb2\x00\xbe\x97\x5d\x65\x01\x1e\x99\xa7\xbf\xad\xe2\x00\xbb\x1b\x46\x3e\xe1\xa7\x9f\x02\x29\x25\xa5\x6f\xa9\x9e\xc6\x6c\xa1\x9c\xcf\x96\xda\x6c\xa1\x81\x7d\x47\x0e\xb1\x29\xad\x5e\x50\x6d\xb3\x88\xee\xfb\x7a\x34\xbc\xec\xa4\x6a\xdf\xaf\xde\x25\x3c\x0d\xfd\xba\xf9\x7e\x63\xa2\x13\x68\x28\xdd\xc5\xf6\xfd\x45\xeb\xe3\xef\xd3\xc3\xa6\xe7\x7e\x3d\xcb\xb5\xd8\x39\x4e\x10\x58\xce\x70\x38\xcb\x8f\x5a\x80\x92\x8c\x62\x54\x4d\x86\x88\xe4\xd9\xcc\x3d\xb3\x13\x32\x01\xef\xde\x83\xdf\xff\xe5\x2f\x01\x23\x73\x04\xd2\x19\x85\x0c\xfd\xe5\x2f\x01\x77\xd0\x32\x18\xc7\x2b\xdb\x5e\xb7\x6f\xf7\x6d\xb2\xc6\x1c\xde\x6b\xcf\x79\x03\xef\xf1\x7c\x31\x07\x45\xd7\xe0\xcd\xf3\x46\x3e\x80\x51\x90\x2c\x72\x6d\xcc\x9f\x37\xe6\x56\xb8\xa2\x81\x38\xe3\x2b\xb2\x04\x73\x98\xac\x2a\x2c\x11\x91\x82\x2b\x5a\xa1\x1a\x77\xbf\xc2\xfc\xf6\x32\xdf\x54\x4b\xb2\x53\xcf\xf5\x5d\x57\x4b\x6a\x6c\x4a\xc9\x3c\xcd\x86\xca\x91\xad\x0d\x79\x14\xfc\x1f\xfe\xcd\xbf\x17\xc9\xb2\x12\xf7\x4a\x4e\xce\x95\x36\xcb\x27\xca\xfc\xf3\x66\x25\xc1\x37\xcd\x53\x02\xbd\x0b\xc6\x40\xd3\x9c\xa6\xee\x35\x71\x28\x07\xad\xd1\x0c\x4d\xf7\x76\x1c\xa5\x43\x75\x71\xd9\x92\x7b\xc0\x6c\x35\x6e\xc4\x20\xdd\x13\x17\x41\x1c\xde\xbd\xf8\x0c\x5f\xd3\xfd\xf2\xf8\xb7\x11\x6b\x98\x95\x88\x6e\xf6\xc8\x27\x70\x7d\xfb\xc3\xe2\xfe\x97\xb3\x17\x0f\x1d\x08\x52\xe6\x42\x5e\x9e\xbd\xcc\xd5\x1a\xb1\x60\xfb\x59\xa7\x92\xac\xd7\x54\xa0\xfd\x78\x4c\xd0\x52\x44\x4b\xc7\xaa\xcc\x5e\xd9\xb3\x67\x2f\x6b\x12\xcd\xd0\x95\xc0\xdc\x4d\xc2\xdc\x35\xbc\x68\x55\x80\x60\x44\x92\x98\xab\xdb\x2e\x3d\x38\x08\x73\xa3\x0d\x2c\xd2\x98\xc0\x08\x08\x5b\x0f\x4c\x50\x4c\x96\x85\x63\x3a\xba\x79\x2b\x91\x09\xcc\x19\xa4\x35\x12\xf4\x39\xa9\x5e\x62\xca\x04\x97\x88\x81\xa0\x08\x2c\x71\x1c\x83\x09\x02\x0b\xd6\x08\xf7\x1a\x7b\x08\xec\x60\xfd\x64\x0b\xbb\xaf\x90\xea\x46\x30\xf4\x52\xe6\xeb\xe7\xd4\x56\x45\xfa\xc6\x67\x87\x87\xda\x82\x89\x93\x3f\x18\x05\x33\x39\x36\x83\xaa\x31\xc0\xb2\xe5\x4a\x6b\x06\xe3\x18\x60\xc6\xb3\xba\xf3\x05\x94\xc1\x83\xba\xbe\xba\x27\x6b\x76\x95\x41\x9a\x81\xcb\x66\x4a\xce\xb6\xd7\xeb\xc8\xb4\x5a\x2c\x1f\xdd\x65\x1b\xb4\xf2\x00\x0b\x76\x3d\x43\xe0\x86\xef\xb5\x5c\x42\x6b\x96\xe6\x9e\xae\x16\x8e\xd0\x04\x52\xcb\x52\x7d\xa6\x34\xfb\x40\x16\xc2\x93\x24\x2c\x4a\xd2\xdb\x01\x6b\x51\xa6\x3d\xfa\x27\x6d\xf5\x32\x48\xa7\x28\x7b\x22\xbf\x68\x80\x70\x57\x1d\x7b\x6d\xcd\x65\xe4\xc0\x48\x5a\x14\x05\x1e\x95\xc2\x39\x21\x49\x81\x67\x50\x54\xc1\x4b\x86\x63\x63\xf4\xcb\x02\xc6\x65\xbf\x4f\x9d\x37\xd4\x80\x3f\x16\xcf\x50\xe0\xdc\xed\x2d\x6e\xde\x92\x04\x19\x06\x67\x20\xa6\x73\xdc\x13\x42\x6e\xe7\x90\xde\xb2\x75\x07\xaf\x3f\xc8\x3d\x83\x17\xea\xea\x81\xa6\x91\xcd\x16\xf3\xc9\xda\x73\x28\x9e\xe2\x9e\xc0\x75\x7e\x69\x02\x71\xec\x39\x03\x07\xb3\xaf\x61\x06\xc6\xab\x11\x60\x28\x03\x72\x22\x40\xeb\x7f\xe1\xdc\xfa\x5b\x32\xb4\xaa\x3a\xf8\xb0\x7a\xfd\x9e\x98\x56\x3f\xc0\x9f\x9f\x5d\xcf\xff\xf8\xcb\x3a\xc0\x88\x09\x49\xc6\x29\xc5\x49\x06\x27\xf5\xac\x0f\x8d\x57\x34\x0c\xcf\xa3\x0a\xa2\x66\x30\x0a\x0a\xc0\x4d\x92\xf0\xa3\x69\x39\x43\x5c\xd9\x57\x5f\x73\x94\xcd\x60\x14\x1c\x1d\x1e\xfe\x2f\xb5\x59\xa4\x2e\x61\xd5\x32\x74\x28\x46\x8e\x45\x92\xd3\xff\x67\x76\xb0\x44\x93\x83\x5c\x2d\xc8\x8d\xb5\x6c\x1e\xff\xf9\x06\xc7\xe8\x4b\x09\x2a\x9a\x46\x37\x1f\x38\x54\x5a\xf0\x6f\xbf\x12\x32\xff\x92\xc3\x17\xf3\x01\xfc\x2e\xff\xf3\x4b\xd7\x49\x39\x0a\xf8\x75\x73\x12\xb5\x5c\x5b\x6c\xdc\x8f\xcd\xad\x1a\xd4\x3d\x13\x1b\x44\x86\x6c\xb0\xe2\x30\x0c\x1e\xc3\x24\x5b\xcc\xf7\x29\xa2\xfd\xcd\xf3\x5f\x9e\x1d\x24\xdf\x7e\xd8\x42\x44\x3b\x9f\xfc\x87\x37\x17\xbc\x21\x31\x82\x19\x02\x1f\xde\x5c\x94\xa8\xc5\x3c\x28\x06\x41\x1a\x43\x9c\x70\xe1\x08\x62\x99\x91\x2d\x02\xdc\x5f\x1c\x14\xe4\x7b\x0c\x6d\xef\x73\x68\x5b\xe5\x28\xa9\xd5\xf2\x80\x30\xee\xe3\xed\xae\xeb\xa8\x9f\x8b\xcf\x50\x3d\x68\x46\xd1\x8d\xc4\x3b\xae\xb1\xce\x81\xba\x44\x68\x90\xc1\x28\xf8\xbf\x93\x18\x8a\x96\xa8\xca\x5e\x94\xbc\x0a\xce\xca\xb1\x73\x59\xd3\x96\x19\xef\x4c\xb6\x3e\x36\x25\x5b\x37\x28\xe0\xdd\x49\x4a\xf6\xb5\x67\x70\x9e\xc6\xa8\xd8\x44\x5f\x38\xfc\xc1\xb5\x87\x78\x14\xb8\x6e\xae\xad\x5d\x70\x85\x7e\x59\x20\x89\x83\xe0\x48\x07\x2d\x2e\xf5\x6a\xa9\xbe\xe5\x79\x7c\x60\x08\x9c\x42\xe6\x33\x8f\x0f\x0c\xf1\x2b\xf7\x71\x1a\xa7\x62\xe3\x39\xe7\x70\x2a\xd3\x2e\xf6\x6f\x06\xb9\xf0\xba\xc3\xb9\x34\x76\x4e\xa2\xb8\x74\x9f\xe7\x01\x7e\x9f\xa0\x25\x10\xdd\x5d\x6c\x88\x41\xf5\x49\xbd\x75\x97\xba\xec\x86\xc3\xb4\x9e\x57\x4e\x2e\x2b\xae\xdd\xc7\x99\x5c\xe5\x67\xa2\x8f\xdc\xca\x44\x81\xbc\xc7\x0c\xda\x24\xb7\xf5\x7b\xbf\x26\x36\xb2\x1d\xae\xa9\x97\x8d\x3c\x38\xae\xd1\x3d\xd7\x4d\x72\x33\xa0\x99\xff\x2c\x2f\x92\xea\x11\x68\x71\x96\xf9\xc3\x7d\x36\x4d\xd6\xde\x87\x68\xb2\xf1\x85\x37\xd6\xa3\x55\x8a\x28\x4e\xa1\xea\xca\xbb\x66\x0d\xda\xfa\x64\x30\x35\x07\x7d\x5a\xd4\x7c\x68\xbd\x20\x7c\x60\xfb\xcb\x67\x36\x91\xfb\x9f\x16\x5c\xa1\xd7\xc5\x35\xf1\x56\x86\x5c\xea\x2d\xf9\x35\x0c\x26\xda\x06\x6c\xbf\x3d\xf1\x70\x5c\x1e\x1f\x1f\xa5\xbf\x9e\x7c\xbd\x91\xd6\x0f\xba\x7f\x63\xff\x7a\x3f\x98\xd7\x63\x90\xa5\xe6\xbe\x9e\x3d\xb2\xf1\xb3\x6f\xb2\xaf\xdf\xcd\x72\xc5\x68\x3b\x11\xea\x0d\x58\xc5\xfb\x67\x04\x5b\x6c\x57\xbe\xfe\x8a\x6e\x4b\x0a\xd3\x14\x51\xd0\xd6\x14\xd4\x55\xa6\xf4\x1b\x6b\x45\xd7\xd8\x1b\x43\xef\xb8\x3d\x91\xac\xdf\x7c\xf8\xea\xf5\xe1\xd9\xfd\xaf\xfb\x5a\xb9\x63\xa0\xd8\x50\x2b\xb1\x88\x21\xdd\x23\xe9\x77\x7c\x74\x37\x7d\x77\xf5\xec\x72\x6f\x4b\x72\xf7\xb4\xec\x76\x1f\x85\xae\xdd\xf3\xc8\x35\x11\xaa\x32\x3c\x2c\x52\x76\xf3\x76\x42\xf0\xfa\xcd\xe5\xbb\xf7\xd7\xe0\xf4\xea\x3b\x7b\x78\x7b\x46\x96\xaf\x79\x41\xef\x9b\x4a\xbf\x7e\x0f\x79\xdd\x41\x99\x6e\x20\x3d\x38\x0c\x86\x46\xef\xb8\xf6\x8a\x54\xf9\x5f\x47\x83\x5d\xad\x02\x55\x9c\x57\x8d\xf2\xd3\xd6\xc9\xb5\x0c\x91\x37\xb1\x37\x8e\x50\x90\x51\x3a\x78\x27\x38\x89\xd0\x7d\x30\x0a\x44\x9d\x54\xfe\x25\x25\x22\x3c\x81\x61\x4c\x5a\x8f\x63\x5b\xe7\xfc\xf2\x4e\xfd\x71\xc5\xee\xec\x88\x69\x23\x9e\xa9\x05\x78\xbb\x56\x6a\x89\x07\xcc\x10\x8c\x2a\x0a\xf8\xe9\xd5\x77\xe0\x9a\x80\x6b\x15\x77\xec\x0c\x9b\x2a\x9e\x2b\x8e\x22\x77\xb5\x4a\x0b\x60\xc8\x8a\x6f\x8b\x1a\x64\xc8\x5b\x92\xa1\x2f\x00\xba\xc7\x8c\x77\xfe\xe2\x47\x11\x88\x60\x06\x8b\x4c\x32\x8a\x78\xce\x4e\x3d\x9b\x6c\xab\xb9\xf2\x21\xbb\xe3\x3d\xdf\xf5\xb0\x00\x64\x19\xca\xf7\x34\x38\x93\x3f\xf8\xa6\xcb\xb7\x94\x9f\xd7\x51\x82\xb8\xab\x86\x83\x75\xa9\x97\x4b\x61\x2e\x8a\xfe\xc5\x5b\x9b\xa8\x40\x47\x87\xee\xd2\xb5\xf5\xf2\xd3\x4f\xc9\x7c\xce\xd1\xa4\x62\x3c\xc7\xb9\x7a\x08\x20\x45\x80\x2d\xd2\x7c\x58\x3e\xeb\xb4\xdd\x55\xac\xe4\x2a\xbe\x27\x4b\xf0\x55\xb1\x3d\x7c\x57\xec\x7e\x9c\x91\xe9\x34\x46\x4d\x4d\x9c\x8b\xd5\x51\x90\xcd\x10\x6f\x12\x45\x92\x6b\x71\x61\x71\x3e\x88\xc5\xd2\x42\xee\xf9\xbb\x05\xbc\xe7\x1c\x45\x78\x31\x2f\x0f\x99\xb6\xa3\x81\x7f\x3f\x5f\x64\x81\xf3\x99\x45\x62\x8b\x9f\x9b\x74\x3d\x36\x38\x4f\xf8\x5e\xc5\x37\x32\x35\x8d\x92\x25\x90\x55\xac\x0c\x14\x63\x5a\xa3\x62\xa1\xa7\x94\xba\x21\xa4\xc5\x85\xb5\xbe\x7f\x38\xc2\x6c\x8e\x75\xab\xcb\xe9\x1f\x6e\xaf\x95\x54\xfa\x50\x5b\x7e\x6e\xcb\x98\x9f\x56\xc7\x3c\x9e\xe6\x26\xdd\x6e\xdd\xe1\x7e\xb5\xa1\x42\xb5\x71\xb8\x46\xd5\x45\x83\xbb\xc9\x7d\x5c\xcf\x5b\xb3\x7a\xeb\x56\xd1\xf0\xd6\xd6\x9e\x58\xbe\x3f\x5e\xc5\x93\xef\x2f\x3f\x3d\xdc\x63\xcb\xb7\x49\xb3\x61\x56\x83\xe6\xda\xce\x1e\x99\xbe\x4f\xf1\x27\x87\xe9\xec\xf8\x3b\x73\xcb\xd7\x18\xb3\x6c\xd8\x96\xaf\xd7\x9c\x00\xc1\x48\xfe\xa1\x72\xcd\xef\x30\x5b\xc0\x18\x2c\xe1\x0a\x64\x04\xcc\x61\x02\xa7\xa8\xa8\x7f\xcf\xc9\x20\x7a\x96\xcb\xd6\x11\x08\xc0\x64\x95\xcd\x72\xcd\xb0\x40\xb6\x10\x94\xfd\xcd\xe7\xfd\xa8\xc6\x32\x7b\x69\x7a\x07\x8d\x32\x78\xb1\x2a\x05\x7c\xab\xa5\x12\xbe\x57\xf9\x7c\xf5\xa6\x84\xbc\x20\x90\x46\xfe\x3d\xec\x82\x66\xc2\xcb\x0f\x64\x01\x66\xf0\x0e\x81\x84\x80\x0c\xc1\x39\x98\xf0\x47\x0a\x4c\xfb\x5c\xa1\x1d\x83\x14\x51\xc6\x0b\x31\xe5\x4f\xf9\xb7\x09\xba\x43\x94\xa3\xde\x1b\x43\x12\x5d\xc0\x9e\x36\x8f\x65\xcf\xa9\xe4\xa1\x83\x6d\xa7\xc3\x8d\xa0\x62\xa3\xc3\xcd\x44\x2d\xa5\x8d\x2f\xf9\x4c\xfc\x2b\x75\x27\x62\xe2\x3d\x15\x88\x4d\x2c\x4c\x69\x4b\x42\x4c\x65\x50\x60\x3e\x41\xd1\x38\x24\x86\x5e\x0b\x17\xa2\x07\x40\x3f\x53\x49\x25\xdd\x89\x2d\x39\x9e\x10\x43\xc3\xc1\x5c\x8d\xe4\x3f\x5c\x09\x04\x3a\x3f\x9b\xca\xf3\x65\x63\x71\x26\x68\x6d\x0a\x0d\x8b\x23\x57\x4e\x5b\xa0\x66\xef\xc1\x4a\xeb\xca\x46\x83\x84\x7e\xed\x2b\xdd\x73\x90\x67\x61\x2b\xea\x87\x68\x85\x88\x93\x30\x5e\x44\x6b\xb7\x42\xc4\x6a\x65\xe4\x60\x44\xfa\xb5\x61\x44\x63\xd5\x44\x04\x44\xf9\x19\x0b\x2c\x67\xdf\xa9\xbc\xf2\x54\xb6\x2d\xd1\x32\xa8\xd7\x94\x57\xdb\x9f\x43\x87\xc1\xab\x1f\xad\x63\x65\x29\x4c\x1a\xbe\x62\x6d\x84\x0d\xd6\x15\xab\x6d\xe1\xd5\xd6\xb7\xb5\x56\xdc\xe7\xbb\xbb\x98\x5f\xf1\x0a\x6c\xec\xc1\xd9\xa9\x33\xa5\x95\xcb\xc3\x18\x41\x7a\x83\x0b\x2c\x8f\x21\xec\x72\x5f\x04\xdf\x0d\xa0\xca\xef\x27\x72\x51\x5f\x82\xb4\xe3\xfc\xbf\x8a\xc9\x04\xc6\x3b\x40\xfb\xef\xbf\x34\x9d\x82\x23\x25\xe2\xbf\x34\x14\x6c\x98\xff\x1d\x01\xea\xbd\xc1\xf7\xbb\xa0\xeb\x87\xf5\x01\x77\x85\xd3\xb7\x88\xae\x6d\xb9\x20\x1a\xc6\xe9\xe0\x36\xef\x9e\x38\x20\x3e\xfc\xf0\xf9\xec\x93\x83\xf4\xb3\x0d\x95\x6d\x69\x7b\xc4\xed\xb8\xd8\x60\x02\x93\x89\xf2\x83\x2c\xa9\x0c\xe9\xed\x91\x1f\x23\x7b\x76\xf1\x9f\xef\x7e\x7e\xf3\xe3\x63\x08\xff\xe1\x87\xf0\xf7\x3b\xee\xbc\x1d\x59\x6c\xd8\x61\xe6\x9d\xfb\x2f\x6b\xec\xdc\x3d\x91\xc6\x9f\x1c\x7e\x17\xfd\xf1\xe4\x79\xea\x2d\x8d\x59\x48\x71\x9a\x29\x81\xcc\xd3\x45\x83\x83\x94\x62\x36\x17\xff\x3e\xf9\x99\x19\xd4\x59\x7f\x91\xbc\xb1\x85\x1c\x48\x08\x67\x8b\xf4\x40\x5d\x33\xe6\x1f\x77\xbc\x82\x5f\xcd\x0f\x3f\xbd\x3b\xfa\x7a\xad\x24\x61\x9c\x2b\x85\x71\x6c\x88\xd1\x05\xd5\x0c\xe1\x72\xc9\x21\x63\x28\x63\x07\x78\x3e\x95\x44\xe1\xbe\xe8\x74\x41\xd3\x18\x3d\x49\x13\xfd\x72\xc6\xab\xf8\xac\x77\xfc\xc7\xf1\xbd\x7e\x13\x8c\xf3\x3b\x0a\xb5\xef\x8a\x93\x59\x3d\x50\xf8\x4b\x44\x61\xf5\x17\xe0\xf8\xf9\x61\x7a\xff\x27\xa0\x40\xf8\x3f\xfb\x34\xbd\xff\x93\xd9\x9e\x0a\xfa\x75\x5d\x91\x14\x98\x1d\x99\x53\x28\x78\x9c\xb9\x96\x41\x51\x8e\xb7\x31\x00\x47\xf3\x96\x3f\x56\x9e\x53\x08\xcb\xf7\x02\x1f\x27\x9b\x21\x95\xb2\x6d\x2a\xa4\x64\x5f\x1c\xe4\xac\xc9\x9e\x28\xfe\xe4\xe5\x94\xec\xe0\xbb\x5f\xdf\x7d\xfe\xe3\x2f\x6f\xde\x9d\x4e\x4f\x5e\xbc\x5a\xdd\x7c\x7f\x20\x97\x9b\x1b\x1d\xe3\xe9\x02\x47\x88\x1d\x44\x07\xdf\x1d\x7d\x7a\x71\xf8\xc7\x45\x78\xbf\x3c\x79\x31\xfb\xf1\xe5\xa7\x86\xcb\xb4\xb1\xe9\x3f\x82\xfc\x03\x5d\x84\xd2\x88\x31\x98\xaa\x30\x89\x00\x45\x21\x99\xcf\xf3\x5d\x18\x6d\x72\x16\xc7\xdf\x2c\xde\xfc\xf1\xf5\x69\xf8\xed\xc9\x0b\x38\x7d\xf3\xfc\x60\xbe\x62\xbf\xc4\x63\x96\xa2\x10\xdf\xe0\x90\xa7\x6d\x70\xbd\x23\x5b\x24\x38\xd1\x33\x8c\xd4\x2f\x40\xfc\x02\x8a\x19\x3b\x82\x94\xeb\x27\x79\xb5\x61\xce\xae\xe1\xf2\x6c\xf3\x42\xe3\x0c\x01\x85\x0d\xe3\x55\xb8\xd4\x09\xea\x99\xef\xeb\xb1\x8a\x3f\xe9\x9d\xb3\xe6\x24\xe2\x5a\x97\x74\xe6\x48\x4d\x45\x33\xb0\x67\x90\x5d\xe7\xbf\x9d\x53\x4a\x68\x23\x8b\x06\xe0\x7c\x24\x77\x30\xe6\xef\xaf\x81\xc7\xf8\x40\x16\xf7\xcc\xa8\xf8\xc0\x16\x30\x8e\x15\xb4\x3b\x99\xa7\x30\x59\x01\x42\x45\x78\xa2\x95\x8e\xad\x5f\x0e\xb4\x98\xa5\xe7\x5a\x10\x9c\x67\x7b\xd4\x10\x7f\x5e\xea\xdf\x39\x56\xba\xc7\x1a\x97\xaf\x34\xaf\xb3\x36\x24\xe3\x5a\x17\xc3\x1b\x7a\xbd\xb7\x4d\xfb\x18\x36\x48\x7f\x01\x37\x49\xf9\xe2\x85\x66\xc2\x97\xe3\x31\xd2\x5d\x8d\xed\xa1\x93\x1d\xcd\x21\xd6\x05\xdb\xb9\xfa\x3c\x3c\xc1\xc5\xab\x46\x81\xfc\x6f\x95\xdc\x72\x1c\x46\x5a\xf3\x31\x3d\x5c\x42\x27\x68\x39\x2e\x50\xfa\x2b\x59\x96\xc5\x57\x43\x12\xbb\xf2\xba\x66\x7f\x00\x45\xf0\x72\x44\x46\x9a\xab\xd1\xed\xd7\x31\x72\x89\xc3\x5b\xc0\xc8\x1c\x89\xc4\x09\x96\x51\x22\x3b\xfa\x2e\x12\xfc\xcb\x02\x81\x6c\x06\x33\x8e\x50\x1d\x91\xe4\x2f\xff\x3b\x03\x0b\xc6\xf3\x2c\x96\x33\x44\x11\x40\x31\xf3\x3a\x67\xaa\x31\xb1\xcf\x47\x01\xfa\xa5\x20\x4d\xc1\xaf\x11\x2e\xcb\x61\xeb\x0e\xe1\x4b\x4a\xa2\x45\x98\xab\xde\xe7\x49\x86\x68\x6e\xcf\xa1\xf3\xe2\x86\x4a\x2a\x63\xcf\x9e\x49\xeb\xb5\x08\x85\x61\x86\xef\x84\xbe\x77\x8b\xf4\xbc\xe7\x93\xe2\x07\x47\x33\x8b\xc0\x3b\xe7\x57\x96\x65\x97\xfc\x59\x7b\x79\x8d\x2d\xcb\x5f\xf9\x00\x3e\x8e\x82\xe7\x81\x89\x3f\xbf\x41\xab\x0d\xb0\xe6\x7a\xdc\xf9\x03\x59\x80\x10\x26\x60\x8a\x32\x80\x33\x01\xf5\xe3\x50\xd0\x97\xcb\x65\x55\x3f\x8f\xc8\x32\x89\x09\x8c\x58\xf0\xd1\x85\xde\xe2\xf9\x0c\x1b\x9e\x4b\x2f\x04\x6c\x5b\xd4\xa4\xe8\x82\xea\x11\xd9\x6a\x09\x5b\xd9\xc2\x5b\xe2\x75\x22\xb0\x65\x8b\x64\x31\x78\x67\x07\x24\x08\xda\x83\x98\xf2\x5e\x8f\xee\x1b\x7d\x6d\x96\x0d\xf9\xcb\x9b\x1e\x95\x01\x5c\x34\x5c\xff\x1c\xd3\x45\xb2\x63\xef\xcc\xbb\xdb\xef\x5e\x1e\x1c\xe3\xa3\x3e\xde\x19\x21\x09\xd4\x44\xc6\x95\xda\x99\x41\x0a\x6a\xec\x30\xa4\x9d\xcb\x69\x6a\x08\x8b\xdd\xaa\x69\x0c\xb8\x93\xfe\xd5\x34\xaf\x50\xc6\x6b\x55\x38\x28\xad\x11\xe5\xd8\xf7\xd1\xcd\x82\x9a\x3a\x0c\x65\xd0\x0c\x52\x46\x37\xf9\xff\x3b\xde\xda\x73\x40\xa6\xdc\x79\xd3\x90\x36\x97\x3c\x5f\x0f\x0f\xbf\x22\xf9\x31\xf1\xaf\x81\x03\xc4\xba\x1b\x32\xa7\x41\x95\xd9\x90\xa8\x29\x36\xd4\x7a\x52\x26\x17\x99\xf2\x3f\x63\x49\xce\x9d\x0a\x9a\x5f\xb2\x1f\x0e\xce\x4f\xa3\x0e\xbd\xef\xf2\xf5\x56\x8c\x50\x4d\xa6\x19\x84\xd8\x0d\x02\x0d\x48\x6f\xcc\xb2\x5d\x47\xb1\xaf\x27\xef\xb2\xa7\x57\x66\x72\x07\x7c\x98\xcd\xe4\x6d\xf3\x3e\xbf\xc3\x0a\xb5\x99\xd5\x95\xe2\x7e\x05\xb5\xd2\x0e\x10\xa2\x20\x23\x24\x9e\x40\x3d\x7d\x1a\xd2\x5b\x4d\x14\x50\x88\x19\x8a\xb8\x4c\xa0\x32\x2e\x43\x23\x44\x85\x10\xe5\x8b\x3f\x6a\xf9\xd7\x91\xac\xd2\x10\x4a\x72\x24\x63\x9e\x8f\x5e\x2a\xdd\x22\xb9\x4c\x49\xa8\xfc\x22\xd1\x42\xa1\x44\x14\xb6\xa7\x15\xc9\xec\xb4\x17\xf9\x32\x30\xb3\x5d\x53\x2f\x03\xe2\x58\x57\x31\x2a\x40\xa2\x34\x3b\x29\x5f\x8c\x33\x94\x30\x8e\x3e\xf6\x71\x14\x1c\xf9\x84\x56\xaf\x96\x38\x0b\x67\xdf\x89\x36\xcd\x47\x9e\xa6\xe4\x16\x69\x73\x12\xc7\xfe\x84\xb9\x21\x34\x73\xd3\xe5\xb8\x33\x5d\x8e\xd7\xa1\x8b\x94\x53\x8a\x30\x4a\x6c\xf9\x52\x26\xf8\xc7\x7f\xff\x8f\x29\xb3\xd1\xc8\x18\x30\xf4\x98\xff\xd3\xce\xf3\x7f\xda\x2d\x45\xad\x6a\xc3\x34\x4c\xda\x41\xd0\xa8\x16\x0d\x75\xb2\x35\xd1\xb6\x92\xf7\xab\x84\x55\xf7\xdc\xb7\x91\x30\x98\x85\x45\x2d\xb2\x2b\x9e\x48\x95\x55\xd0\x91\xe6\x2b\xa1\xa5\xf4\x4a\x3f\x8f\xf8\xc4\xe2\xc5\x54\x73\x44\x78\x25\xcb\x7d\x96\x8f\xa5\x3e\x4d\x9c\xa1\xbe\x4d\xfe\x70\x72\x43\xac\xb7\x5a\xef\xae\x79\x8a\xdb\x12\x99\x43\x62\xc9\x2c\x74\x67\xd4\x9a\x86\x2d\x8b\x80\x6c\xc3\x6e\xdf\x86\xf9\xdd\xe3\x5c\x03\xa8\xc9\xa6\x8f\xcd\x31\x7b\x54\xb8\xf6\xb7\xe3\x5b\xc6\x69\x4e\x08\xb6\xad\x8e\xcd\x6b\x96\x90\x6c\xec\xb3\xf3\x07\x4b\x76\xe7\x75\x5a\x8d\xfc\x66\xf1\x6d\x65\x3a\x7f\xff\x5b\x07\xa2\xb5\x79\x02\x5b\x4f\xb8\xc1\xe6\xc3\x19\xc5\xc9\xe4\x5c\x86\xbf\x5e\x2b\x59\x5f\xf2\xa8\x49\x17\xaf\x9c\x14\x4c\x99\x3c\xaf\xa3\xf2\x9c\x94\xbf\x68\xe2\x45\x1b\x51\x0f\x11\x3d\x30\x87\x77\xf0\xed\x0e\xb2\xa2\xed\xcb\x99\xdf\xdc\xd0\x4c\x3b\x31\x44\xfe\x04\x3f\xe1\x63\x91\x9c\xa2\x1b\x4c\x63\x9b\x84\x64\x91\x64\xa7\xca\xa3\xe0\x5f\x0e\x60\x7d\x59\x3d\x6c\x9e\x9f\x17\xee\xbe\x9a\x4e\x2c\x85\xdd\xd3\x09\x66\x68\x4a\x78\x7f\xd6\xcd\x10\x2a\x14\x2f\xc0\x68\x18\x6a\xf5\xdf\x41\xde\x77\x3a\xab\x39\x9a\xaa\xd7\x66\x9c\x13\x75\x03\x77\x2d\x73\x79\x81\x0f\xd0\x3c\xcd\x56\x63\x26\xb1\x70\x77\x69\x2b\x1f\xdc\xc1\xe3\xf7\xd7\x57\xd9\x3a\x19\x6a\xfa\x6c\xda\x72\xd4\x82\x8f\x86\x9a\xa7\xb2\xac\xe9\xe9\x28\x98\xc6\xab\x34\x9b\x05\xc6\xfa\x25\x43\xfd\x81\xcc\x4f\x9d\x23\xc6\x44\x9f\xab\x96\xba\xb8\xc1\x99\xa1\xba\x7c\xeb\x72\x02\xdf\xa4\x63\x91\x65\x96\xe2\xf0\x76\xe7\x49\xa7\x57\x78\xf5\x22\x0c\x27\x7f\x34\x3b\x4f\x84\x51\xe7\xc9\x17\x86\xb9\x39\xcd\x17\x7e\xb5\x4f\xb9\x62\xd0\xc8\x85\xae\xb0\x16\x7f\x0e\xa8\x86\xf9\xa4\xa1\xa2\xac\x50\x1e\x98\x29\x3e\x94\xf6\x5f\xb5\xf2\xf3\x73\x9e\xc7\x1e\x42\xee\xd4\x9a\xc0\xf0\x76\x4a\xc9\x22\x89\xc4\xb4\xbe\x00\x81\x26\xc4\x45\xb2\x79\xf0\x27\x63\xc7\xa4\x72\xd4\xad\x85\x6e\x57\xb2\x96\xb8\xf6\xc4\x2e\x45\x6e\x47\x87\x43\xf1\x78\x73\xf1\xd6\x65\x75\x91\x8d\xb9\x17\x4c\xfe\xec\xc3\xe9\x07\xf8\x2c\xfe\xff\xd8\xfb\xfa\xae\xb6\x71\xa5\xf1\xff\xf9\x14\xc6\xbf\xdf\xc9\x4a\x6b\xc5\x71\x02\xa5\x85\x60\xba\x2c\xa5\xbb\xdc\x6d\x69\x2f\xd0\xdd\x6d\x93\x6c\x8f\xb1\x95\x44\xad\x23\xa5\xb6\x02\xa5\x24\xdf\xfd\x39\x92\xec\xc4\x6f\x09\x0e\xa4\xa4\xcf\x73\xb6\xe7\xde\x25\xd6\xcb\x68\x34\x33\x1a\x8d\xde\x66\x8a\x6f\x56\x47\xee\x89\xca\xfa\xf0\x4d\xf6\xea\x4e\xf1\x96\xa5\x57\x20\xde\x12\xce\xa3\x8a\xf7\x30\x20\x03\x47\x45\x8f\x9f\x2b\xdd\x4b\x2d\xfb\x96\x1a\x0a\x11\xa0\xf5\x0c\x85\x24\x8b\x1f\x3a\x08\x46\xa4\xea\x5c\x39\xdc\x59\xf7\x08\xf8\xf4\xe2\xef\xcf\xc3\x06\xfb\xeb\x21\xf3\x7e\xd4\x91\x4e\xe2\x29\x8a\x14\x4e\x95\x5e\x8d\xe6\xf5\x00\x77\x4f\x3c\x3d\x1b\x95\x2a\xb3\x93\x11\xe2\xa0\x4a\x28\xe1\xc4\x11\x0b\xc2\x68\xb0\x64\xee\x29\xaa\x85\xe1\x34\x25\xde\xe3\x2b\x3c\x87\xdf\x46\xba\xc3\xb9\xe3\xf6\xab\xd3\xed\xc7\xe9\x75\x82\x3e\xbb\x7e\x81\xa7\xd1\x20\x2d\xab\x60\xaf\x2a\x32\x2e\x92\x77\x37\xa7\xe6\x85\xca\x4a\x5c\x2d\x9c\x9e\xcb\x2c\xb2\x7e\xbf\x9b\x2d\x32\x15\xa8\x15\x48\x66\xc2\x47\xd6\x9a\xc3\xc7\x19\x3b\x6f\x4e\xce\x5e\x5c\x96\x92\xce\xd5\x11\x72\xd6\xff\x95\x11\x73\xdd\xd6\xdc\xcd\xe1\x97\xf0\xc9\xcd\x9c\xa3\xb0\x4a\x04\x30\x3f\xd7\x6d\x67\xef\x46\x9d\x94\xd8\xf6\x2c\x6f\xeb\x8b\xdf\x51\x34\x9c\xd2\xbe\x16\xa2\xd1\x74\xc7\x5a\x57\xb4\x1b\xdd\x71\x8f\xc6\x69\x7c\xaf\x67\x37\x39\x78\x55\xe9\x79\x4b\x86\x27\xa8\xbe\xc2\xe1\xa9\x04\x61\x05\x12\xe5\xce\x9c\x20\xac\xf5\x59\x9a\xf1\x8e\x78\x6f\x08\x5b\x56\xa6\x16\x98\x33\x89\xce\x69\xf9\xab\x79\x29\x93\x26\x51\xb4\x5a\x68\xde\xcc\xdb\xd9\xcc\x40\x2a\x69\x80\xdd\x25\xcc\xa5\x7d\x8a\x20\x5d\x4b\xb5\xfe\x30\xff\x22\xab\xc1\xee\x3e\xde\x42\x16\x1f\x79\x4f\x57\xe7\x62\x08\xe5\x06\xd6\x5c\x73\x4f\x22\xa4\x17\x59\x77\x2b\x1a\x83\xb1\xc8\xac\x60\x14\x46\x97\xae\xd6\x3b\x06\xe9\xfb\xd7\xee\xdb\x0f\xa3\xc3\x87\x8d\xc1\xe9\xeb\xe1\xe8\xd6\xd7\x77\x70\x0a\x7d\xc7\x3a\x26\x79\x8f\x2d\x9e\x1c\xd4\xf1\xe8\x34\x2a\x75\x09\x2f\xd1\x0b\x8e\x3b\x4a\xb8\x88\xbe\xab\x76\xfa\x46\x5b\x34\x85\xc4\x8e\x6f\x16\xed\xd4\xde\x05\x78\xb1\x83\x68\x3d\xfd\xfe\x4c\x85\xfd\x8e\xef\xc2\x96\x7f\x4b\xbe\x60\xc7\x5a\xd3\x67\x23\x75\xce\x75\xec\x25\xc3\x6a\x3d\xc4\xd1\x6c\xee\x60\x73\xd9\x8b\x72\xf7\x89\x47\x16\x15\x93\x0f\xf5\x13\xd1\xa8\xee\x72\x18\x90\x7e\xd9\x5f\xc2\x6d\xda\x3d\x3c\xd1\xde\x9b\x1e\x39\x2a\xa8\x8a\xaa\xff\x39\xd7\x3e\x5d\x12\x0c\xca\xc5\xe1\xca\x3a\x29\x58\x7c\x53\x64\x69\x8f\xb2\xdf\x71\x81\xa4\xf4\xcb\x0a\x74\x7f\xe2\xac\x7d\xad\xea\xff\xcf\xee\xf6\xdf\x1f\x7e\xf7\xcf\x1f\x79\x7d\x34\xed\xfe\x0a\x48\x29\xdd\x87\xfd\x10\x9b\x81\xee\xa7\xe1\xb3\xa3\x0f\x5b\xc5\x5b\x21\xf1\x75\x94\x52\x1b\x22\xd7\xc4\xeb\x61\x9e\xea\xda\x9c\xf9\x30\x7f\xbb\x47\xb9\x83\x54\x47\x73\xbb\x69\xcf\x83\xf2\xf7\x51\x18\xea\x85\xe6\x6d\x6a\x7f\x31\x3a\x0c\x5d\xe2\x21\x90\x5f\x6c\x43\x2a\x74\xee\xb9\xc3\xb8\x6c\x1c\x86\xd9\xf3\x17\x1e\x8c\xa8\x9b\x38\x47\x8a\x14\xa0\x7c\xad\x12\x23\x30\xdd\x0c\xa2\xce\x00\xbf\x24\xd8\xf7\x0a\x76\x83\xe6\x1e\xcf\xe7\xfa\x50\xfa\x20\xfe\x61\x36\xf7\x85\x54\xc9\x4b\x2f\x77\xb3\x1c\x9b\x6b\x42\x47\x9e\xf4\xd1\x94\x48\xcb\xfb\xc6\x7b\x3c\x85\x9c\x18\x21\x2b\x50\x25\x91\x35\x25\x67\xb9\x70\xdd\x6f\x4a\xbe\x3e\x25\xc1\x67\xb6\xb4\x61\xbe\xe2\x3d\x87\x14\x49\x56\x45\xe2\x75\xc7\x05\xeb\x5e\x5e\xbf\xbc\x0e\x8b\xe3\x82\xfd\xbb\xe6\xf9\xbf\xb2\xe6\x29\x5e\x90\x7c\x97\x55\xc7\x0f\x67\xa8\x4a\x9c\x57\x30\x5c\x87\x01\xeb\x05\x38\x5c\xb7\x32\x7c\xf2\xe2\xd3\xcd\xe8\xaf\xda\xa0\xbc\x03\xab\xab\xe9\x6b\xb6\xaf\x03\x5f\x28\x73\xf9\x22\x35\x7a\x90\x7a\xbd\x65\xb2\xa0\x57\x6b\x58\x96\x55\x13\x25\xe7\x66\xca\xba\xb5\x18\x92\x74\x46\xa4\x23\x7d\xab\x11\xa7\x28\x87\x44\xa9\x24\x19\x94\x98\x89\x51\x6e\x69\x96\xb6\xd5\xd0\x54\x56\xd1\xb8\x9e\xb9\x4f\xe2\x01\xfb\x8c\xab\x3e\xa1\xd8\x75\x86\xf2\x5d\xf2\x88\x7a\x05\xb9\x9f\x18\xa1\x73\xb2\x63\xe4\xa6\x88\x74\x89\x2f\x16\x71\xff\xaf\x2e\xff\xa5\x4b\xa7\xd3\xe7\x68\x84\x5e\x76\x20\x50\xb7\xea\x33\x36\xfc\xe8\x31\x1e\x56\xad\x27\xd5\x82\x9e\xa5\x00\xb8\x24\x70\xa3\xc0\x57\x75\xe5\x79\xa7\x1a\x2f\x35\xd5\x75\x80\x2c\xae\x94\x51\x9c\xe9\x96\x8c\x74\x24\x03\x1e\x45\x31\x96\x22\x94\x04\x81\xeb\x3b\xd3\xcf\x9b\xd4\x67\x10\xdd\xc4\x57\x7a\x37\x70\x68\x28\x37\x3f\xa2\xdf\x52\xac\x2c\x6d\xcb\xdc\xda\xd9\xb6\xa2\x7f\xf5\xad\xdd\xa7\x50\x5f\xe0\xa1\xb7\xb0\x4b\x73\xd1\x9e\x47\xf7\x85\xdd\xd9\x7e\x48\x6f\x9e\xfc\x68\xbd\x69\x3c\x7b\x48\x77\xea\xe5\xbb\x33\x57\xf7\xa6\xfc\xd8\x45\x52\xba\x19\xab\x2e\x0d\x40\xed\x56\x9b\x7e\x71\xc0\xc5\x37\xef\x93\xd0\xc4\xbe\x54\x25\x9a\xad\x71\xa4\x52\x84\xc0\x6b\xb6\xd6\x4a\x66\x9b\x3d\xcc\x8f\xd5\xcf\xf0\xd7\x9b\x0b\xa7\x27\x94\x33\x68\xb7\x23\xa2\xb6\xdb\x3a\x6c\xd5\x3b\x48\x5b\xb6\x8e\x75\x8f\x3a\x8d\x4e\x5c\xc9\xa1\x64\x20\x1d\x14\x9c\x78\x51\x4a\xc8\x9d\x40\xf4\x45\xae\x4d\x54\x12\xa1\x84\x03\xa8\x4d\x34\xd2\xd5\xc0\xe6\x35\xa1\x1e\xbb\x36\x03\xfc\x65\x84\x43\x7e\x18\x03\x78\x29\x0c\x7c\x41\x13\xa1\x9e\x49\x04\xa0\xa9\x2d\x2a\xad\xd9\x33\x82\x02\x8e\x34\x1a\x57\x17\x39\x80\xe2\x6b\xed\x85\xc3\x31\x14\x3d\xba\x20\x03\x0c\x60\x53\x23\xda\x78\xac\x01\x01\x1e\xc3\xa6\x2c\xeb\x68\xb6\xf6\xda\xe1\x7d\x73\xe0\x7c\x05\x16\xd2\xea\x3b\x5a\x55\x03\x58\xab\x6a\x04\x42\xa4\x31\xcd\x8e\x71\x08\x15\x18\x36\xe2\x20\xcd\x55\x0e\xb0\x66\x68\x0e\xd4\x26\x48\x73\x60\x53\x0b\x30\x1f\x05\x54\x76\x42\x66\x08\x28\x13\x6d\xa2\x71\x73\x18\x30\xce\xf8\xcd\x10\x4b\x9a\xa4\xf0\x8f\x71\x97\x72\xd0\x27\x61\x33\x47\xe0\x19\x26\x85\xd4\x00\xdc\xe4\x01\xe9\xf5\x70\x30\x4d\x37\x85\x05\x08\x38\x94\x98\x25\x5b\x0f\x70\x88\xef\x6a\x3e\x6a\x4b\x6d\x31\xe6\x9a\x4a\xe0\x95\x83\x9e\x45\x23\xcd\xa7\x24\x8f\x13\x1d\x55\x72\x23\xb8\x93\x12\x23\x1e\xb1\x49\x00\xe1\x5a\x35\x51\x16\x49\x36\x2b\xd6\x11\x0a\xa8\x56\xd3\xb6\x2d\xa4\x35\xb6\x60\x53\xdb\xdd\xb2\xb4\x03\x8d\x16\x80\x9b\x7d\x18\xa2\x14\x6c\x6a\x5d\x16\x68\x20\x96\x84\x56\x47\xb1\xdc\x6a\x6a\x5b\xda\x81\xc6\x9a\x1a\x33\x0c\x81\xb1\xd3\x62\x9d\xa4\xa4\x08\x01\x69\x68\x3f\x6b\x0c\x69\x02\x88\x90\x6c\x59\xe4\x40\x7b\x06\xa3\x9f\xb6\x92\x25\xf1\x1b\x36\x73\x00\xc4\xb7\xa8\x9b\x18\xf2\x2d\xd6\x11\x42\x76\xc8\x79\x40\x2e\x47\x5c\x8e\xba\xa9\xc2\x6a\xb7\x75\xa4\xc5\x09\x91\xd6\x6a\xb7\x75\x21\x5f\x02\xb2\x21\x3e\xa0\xf8\x7f\x33\x1a\x68\xb1\x0d\x6e\xc6\x3f\xa2\x51\x6d\xc6\xc1\xdb\x40\x72\xd8\x43\xb8\x58\xb8\xc8\x1c\xe1\x22\x42\xb8\x66\x2c\x9a\x36\x9a\xd2\x22\xf2\xc4\x3c\xd6\x23\xf9\x59\x5d\x60\xad\xb8\xd9\xea\x28\x52\x52\x98\x66\x8b\xd5\xd4\xa8\xe9\x63\xda\xe3\x7d\xed\x40\x73\x9a\x9a\x63\x18\x30\xa1\x5b\x89\x60\x11\x36\x87\xa3\xb0\x2f\xc7\x3d\x07\xb4\x45\x3a\x02\x35\x20\x06\xe4\x14\x2b\xc7\xf3\x8e\xaf\xa4\x67\xdf\x90\x63\x8a\x03\x81\xcf\x15\x09\xc9\x25\xf1\x09\xbf\x71\x65\xdc\x11\x49\xe8\xf4\xc0\x68\xb7\xf5\x3e\xf1\x3c\x4c\x05\xc1\xed\x44\x2f\x67\x75\xcf\x85\x45\xa8\x3d\xd7\xb0\xd9\x65\xc1\xb1\xe3\xf6\x41\x46\xe4\xb9\x1a\x74\x42\x0f\x42\x6d\x6f\x51\xb9\x58\x5d\xaa\xff\x01\xd8\x5c\xa7\x61\x1f\x1b\xe4\x2b\xb0\xed\xe3\x88\x33\x6b\xb5\xec\xbf\x3e\x3b\x6d\xbc\xfa\xe3\xea\xeb\x92\x7b\xa6\x11\xee\x45\xab\xe2\x94\xbf\x9d\x78\x89\x1e\x86\xc9\x5b\x22\xa2\x4e\x80\x1d\x8f\x51\xff\x66\x7a\xb9\x2c\xfa\xbc\xeb\xe4\x7f\x18\xb0\xc1\x90\x2f\xdc\xee\xcb\x78\x7d\x60\xc3\xd8\x03\xb5\x34\x83\x49\xe8\x5c\xfa\xf2\xed\x6a\x8c\xfe\xec\x39\xab\xda\x23\x0d\xab\x94\xf1\xcc\x55\x83\x8c\x77\xa6\x05\x3e\x35\x62\x7f\xcb\x11\x9e\x73\x1c\x37\x14\x89\xe8\xfc\x37\x66\xd9\x80\x30\xd1\x3b\x1c\xf9\x0a\x35\x72\xd2\xa4\xff\x42\x3c\x4c\x79\xf4\x3c\x69\x29\xaa\x34\xa6\x0e\x99\x64\xff\x05\x2b\xaa\x43\x19\xc9\x28\xb7\x53\x9b\x8d\x7e\x94\x24\x49\x31\x29\xf1\x97\x91\xdc\x70\xca\x42\xba\x0f\x59\x4b\x21\x37\x0b\xc4\x34\xef\x6a\xe1\x3c\xcf\x19\x0b\x77\x56\xe7\xec\xd7\xba\x71\x6c\xa6\x99\x4b\xa0\x38\xe9\x3b\xde\x82\x50\xc4\x5b\x85\x0e\x8a\x1f\x34\xaf\xd5\xb5\xfd\xd3\x17\xce\xd9\xcb\x27\x67\x8f\x7c\x08\xa6\xfa\xbe\x02\x22\xc6\xef\xe7\x7f\x88\x8b\x82\x87\x7f\x5d\x9e\x9f\xdd\xbc\x2f\x8e\x13\xf0\xef\x45\xc1\x47\xb9\x28\x98\x16\x88\x15\x4a\x98\x47\xae\x88\xb7\xf6\xf1\xfa\xed\xf7\xee\x7f\x78\xed\x28\x78\xe4\xf1\x9a\x21\xc2\x2a\xc9\x3a\x0b\xcd\xb7\x4e\xba\xbe\xfe\xfc\xed\xe9\x9b\xc1\xc0\x7d\xc0\xb9\xc8\xf7\x1a\x20\xc9\x63\x57\xf9\x32\x20\x08\xa4\xb7\xaa\xf5\x6b\x87\xd4\x29\xc3\x2a\xe7\xd8\xac\x70\xac\x50\xde\x94\xcb\x99\xb5\xca\xda\x90\x1d\xfe\xb6\xfb\x7b\x6f\xf4\xb0\x69\x22\x7e\x93\x51\x42\x10\xca\x3e\xe4\x78\xfa\x64\xc1\x3b\x8e\x69\x7b\xa5\xdf\x6a\xdc\x21\x38\xab\x17\x17\xc1\xdb\x15\x8a\xca\x8f\xe0\xf5\xcc\x3a\xad\x0d\x3e\x1c\x1f\x91\xf2\x5e\xcf\x0a\x14\xca\xbc\xf5\xdc\xff\x5e\x11\x5a\xbd\xec\x3c\xdc\x83\x5b\xc6\x1d\xd9\x7a\x9f\x17\x5c\x7e\x7e\x75\xf9\x47\x6d\x69\x15\x93\xd1\xe8\xff\x0a\xcc\x5c\x06\xaf\x48\x54\x24\x61\xd6\xeb\xbc\x80\x7c\x7d\x77\xf4\xdf\xed\x72\xcf\xc4\xfe\x95\x87\x79\x5c\x7c\x98\x3c\x84\x38\xa8\x75\x59\xd0\x63\x3c\xe1\x22\x7e\xbd\x6b\xd9\xdd\xe3\xb3\xda\x97\xcb\xf2\x7e\x7d\xf3\x31\x5e\xf2\xfa\x23\x74\x6e\x2e\xfa\x0e\xfd\xbc\xf8\x76\x65\x91\x23\xda\xa2\x70\x42\x18\xd3\xea\x53\xcb\xd2\x06\x4e\xd0\x23\xb4\x7a\xc9\x38\x67\x83\xea\x56\x32\xc0\x90\x6a\xcd\xd4\xe4\xdb\x18\x15\xe4\x44\x06\x34\x90\x5b\xfa\xc9\xa0\x3e\x65\x82\x68\x96\xc0\x75\x09\x8f\xf0\x05\x3e\x72\x0b\x3c\xc2\x97\x09\x03\x31\x67\xbb\xae\x30\xbc\x4d\x26\x3a\x81\x8a\xb4\x3e\x75\x01\x9f\x8a\x00\x31\x8d\xfc\x30\x4b\x2e\x88\x00\x31\xe4\x37\x2b\x0e\x03\x51\x28\x36\x31\xf8\xbb\xa5\xa6\x9c\xf4\x04\xd8\x4b\xca\x0e\x67\xc3\x6a\xdd\xca\xd2\x59\xa3\x8c\x6b\xdd\xe9\x85\x93\xd2\x97\x4d\xe7\xec\x71\xae\xfa\x49\x42\x09\x5f\xc6\xf3\x83\x0f\x9f\xe1\x10\xf3\x85\x8f\x15\x94\x3e\x5a\x32\xee\x70\xe6\x60\xe8\x4e\xef\x8d\xdb\x85\xe1\xc8\x16\xc7\x16\x76\x46\xbc\x6f\xfa\xac\x27\xa3\x13\x17\x89\x82\xa4\x93\x26\x43\x4b\x70\xa6\x85\xa4\x47\x35\x72\xf7\x05\xe1\x45\xaf\xeb\xa6\xb4\xb8\xd3\xfb\xfc\x8a\x96\xc1\x05\x13\xc2\xc3\x67\x98\x18\x52\x55\x1e\xff\xad\x79\x82\xe9\x6e\xb3\x97\xaf\xb7\x8d\x07\x85\xc9\x95\x42\x50\xcd\xcf\x3c\x89\xf1\x5f\x9c\xb9\x7a\x95\x1d\x95\x3a\xc5\xd7\xda\x9c\x00\x32\x0f\x55\xd3\xce\x88\x33\x77\xea\xd7\x37\xa1\xb5\xb3\x91\x64\x92\x11\x64\x74\x8a\xaf\xdf\xce\x82\xce\xa4\x63\xd0\x3c\x4a\x78\x99\x02\xa2\xdd\x27\x86\xc7\x51\x9f\xb1\x10\x6b\x4e\x1c\x5b\x66\xb8\x98\xc8\x0b\x92\x57\xce\xf3\x23\xf5\x00\x6c\x49\xbe\x7f\x0f\x8e\x47\x98\x44\xaa\x2e\x9d\x56\x82\xf9\x51\xd1\x1f\x8e\xf7\x6f\x7d\x2c\xc3\x16\xde\x0c\xb1\xb2\xe1\x28\xbe\x9e\x0a\x80\xe6\xf4\x1c\x92\xbd\x76\x70\x6f\x31\x48\xd9\x03\x19\xcb\xb2\x51\x18\xba\xf2\xbb\x4f\xe9\x45\xf1\x56\xee\x37\xa3\x2b\xb5\xbf\x14\xb7\x86\x0e\x2d\xda\x42\x56\x7d\xa5\xbe\xba\x1e\x1d\x45\x0a\x1a\x85\xfc\xb5\xc3\xdd\xbe\x14\x1d\xaf\x1a\x5d\xa6\x54\x53\xac\xae\xcd\xec\xae\x9d\x99\xdd\xe5\xe3\x2e\x97\x74\xed\xe4\xe3\x6f\x85\x9a\x80\xa8\x0d\x14\xc8\x65\xe2\x2c\xcc\x99\xc4\xe3\xee\x97\x98\xc3\xbf\xd7\x94\x9e\x9e\x81\x1f\x3e\xa3\x4b\x9f\x3f\xc3\x80\x75\x89\xbf\x6e\x27\x88\xbf\xff\x7e\xf5\x5b\xf0\xdb\xcd\xbb\x87\xcc\xe7\x32\x52\x40\xdc\x9d\x25\x22\xb9\xdc\xa5\xbc\xe7\xaf\xaf\x96\x89\x2c\x59\x76\xf2\x5e\x1c\x06\xee\x07\x0c\x2c\xb9\x60\x28\xad\x9a\xde\xe5\xa3\x49\xde\x3d\x65\x2e\xa6\xf3\x8f\x16\x46\xf2\x11\x89\xbc\xcc\xa6\xc1\x7d\xc9\xfb\xa3\x04\x8d\x2c\x20\x6b\x7e\x03\x81\x84\x87\x23\xde\x7f\x1b\x30\x79\x7a\x1d\x87\xdd\x5e\x66\x13\x6a\xe5\x1b\x3b\xe5\x03\x4f\x96\xb3\x1f\x17\x73\x6b\x41\xdc\xc9\xa2\xac\xc7\x0a\x3d\xf9\xa8\xd6\xfa\x8c\xf6\x91\xc7\x86\xb7\x79\x16\xac\xc4\x94\x5f\xcc\x8a\x6c\xe3\x0b\x39\x12\x15\x76\x52\x9e\x25\x0a\x8d\xf6\x47\x63\x4e\xc9\x58\x1e\x6b\x37\x87\xcf\x65\xb8\xc0\x7b\xc7\x22\xfc\x7e\x36\x60\xd2\x66\x2b\xb6\x00\x37\x72\x16\xe0\x88\x13\x3f\xac\x79\x0b\x5d\x5d\x27\x1e\xf4\x60\xc4\xe1\x6d\xf4\xf4\x63\xc0\x84\x5a\x03\x18\x9a\x82\xed\x0e\x07\x1c\x4e\x56\x63\x10\x52\xfb\x96\xb3\xf3\x3e\x0b\xf8\x0b\x87\xe3\xbd\x24\x2e\xe9\xb6\xe3\xe7\x2f\x00\xc3\x29\x16\xfa\xfb\xf7\xef\xdf\xd7\x5e\xbf\xae\xbd\x78\xa1\xc3\x09\xe2\xec\x24\x64\x12\x0c\x47\xaa\x44\x06\x26\xa2\x59\xa8\x5c\x26\x8a\xba\x64\x80\x0f\x7b\xac\x2c\x02\x3e\x73\x1d\x1f\x40\xb3\x1b\xb0\xc1\x29\xbb\x06\x33\x08\xef\x2e\x8e\xe6\x03\x31\x47\xdc\xbd\x0b\xd0\x24\xc1\x47\x5a\x64\xc9\x2b\x3e\x62\xea\x32\x8f\xd0\x47\xf0\x7f\x75\xfb\xf1\x33\xbe\x39\xe7\xc1\x9e\x7e\xf8\xeb\xd1\x8b\xe3\x97\xbf\xfd\x7e\xf2\x9f\x3f\x5e\xbd\x3e\x7d\xf3\xf6\xbf\x67\xe7\x17\xef\xfe\xfc\xeb\xef\xf7\x1f\x9c\x4b\xd7\xc3\xdd\x5e\x9f\x7c\xfa\xec\x0f\x28\x1b\x7e\x09\x42\x3e\xba\xba\xfe\x7a\xf3\xcd\xaa\x37\xb6\xb6\x9f\xec\x3c\x7d\xb6\x6b\xd4\x6c\x1d\x49\xb4\xd3\x7c\x96\x62\x80\x18\x0a\x11\x41\x0e\xf2\x51\x80\x5c\x5b\xd7\x91\x67\x5b\x1b\x5d\x16\x00\x6c\x73\xf3\xe3\x88\x77\x9f\x7d\x54\x75\x01\x86\x4d\x6f\x1f\x47\xcf\x27\x9a\x90\xd8\x80\xda\xd8\x74\xfb\x4e\x70\xc4\x3c\x7c\xc8\x81\x67\x18\x10\x1e\x1c\x34\x90\x63\x83\xad\x0a\x85\xfb\xfb\xdb\x63\xc0\x0a\xcb\x6c\x23\xdf\x06\xf5\x27\x15\x06\xf7\xf7\x1b\x63\x10\x16\x16\xda\x41\x81\xbd\xb3\x55\x09\x11\x09\x4f\x9d\x53\xc0\xe0\x73\xdf\x0e\xec\x9d\xed\x3d\xf5\x1d\xc2\x4a\x05\x88\x6f\x88\x5c\xdb\x35\xe4\x2b\x94\x88\x64\x12\xd8\x21\x07\x04\x16\x26\x3b\xc5\xc9\x7e\x71\x72\x00\x37\x22\x61\x72\x27\xc8\xc3\x77\xd3\x51\x50\xd1\x9d\x52\x11\x9b\x01\x1e\xfa\x8e\x8b\x41\xad\xf5\xcf\x61\xf5\x83\x53\xfd\x66\x55\x77\x8d\x76\xcd\xee\xd4\x7a\x48\xd7\x61\xd3\x4d\x50\x95\xda\x29\x14\xe4\xcb\xfb\x37\x5d\x80\x63\x64\x5c\x41\x1a\x49\x33\x52\xa6\xa4\x24\x35\x93\xa4\x26\x8a\x1f\x4e\xc9\x6a\x0d\x14\x0a\x2e\x3a\x70\x7f\x7f\x67\x0c\xfc\x52\xb5\x50\x60\xd8\xe7\x3c\x20\xb4\x27\xc7\xd5\x51\xc4\x51\x40\x21\xda\xd9\xde\xb4\x6d\x47\x30\xac\xb8\x08\x83\x51\x19\x7f\x7e\x99\x10\x4e\x39\x11\x4c\x85\x53\x31\x04\x04\x70\x82\x92\xd2\x9a\xe2\x50\x8a\x09\xed\xa0\x4d\x05\xe1\xdb\x54\x87\x92\x45\x6a\xb4\xe9\x3a\xa2\xb6\xd5\xa4\x33\x5e\x50\xc3\x50\xcc\xcd\x88\x30\x85\x1b\x6c\xbf\xde\x78\xf6\x9c\xcf\xeb\xca\x1e\x3b\xa8\x37\x9e\x56\x2a\x6c\xbf\x61\x6d\x3f\x7b\x0e\xe6\x15\x3c\x38\xd8\x19\xd7\x77\x1b\x10\xcd\x29\xb0\xb3\x55\x61\xe3\x7a\xe3\x19\x84\x7b\x0b\x60\xd4\x1b\xe3\x46\x63\x7b\x2e\x10\xd1\x4a\x65\x67\x4b\xc2\xb9\xbb\xa1\x49\x44\x60\x1e\x93\x73\x8e\xc0\xc7\x04\xdb\xf0\x31\xd7\x98\x6d\xa1\x30\x12\xf8\x24\x05\x21\xe9\x82\xac\x02\xa0\x10\x0a\xe2\xc1\xb9\xc4\x43\xd4\x30\x36\xb0\x1f\x62\x8d\x74\x01\x3b\xa8\xef\xd6\x25\x21\x1b\xdb\x30\xa3\x25\xa8\x51\x9f\xdb\x21\xb0\x55\x97\xba\x65\x67\x2c\x14\x88\x80\x69\x37\x24\xd0\xdb\x02\x20\xb2\x0f\x24\x9b\xde\x80\x1b\xf3\x80\x47\x8a\xab\xde\x18\x03\x09\x3e\x6a\x87\xc8\x76\xb6\x66\x24\x9c\x20\x6a\xdf\xfe\xea\x84\x78\x67\x7b\x8f\x97\x9c\x5f\xa4\x61\x5c\xbd\xbc\xf9\x2e\xf3\x4b\x01\x17\xa3\x57\x31\xe6\x2f\xd8\x71\xfb\xa6\x6e\xe0\x78\x88\xa9\x0d\x23\x61\x00\x8d\x38\xf6\x00\x9f\xe1\x10\xd7\x6d\x75\xe2\xb2\x52\x39\xf4\x30\x07\xd3\x47\x36\x30\xf7\x2e\x0d\xd0\x78\x34\x6d\x6e\x72\xb3\x4b\xa8\xf7\xeb\x0d\xd0\xd5\x3a\x00\xa9\xc6\x04\x04\x8a\x30\x84\x1b\x6c\x3c\xe6\xf2\x19\x9e\xea\x2c\x50\xf9\x51\xcf\xdd\x00\xcb\x9d\x2b\x59\x77\x2f\x5d\x15\x45\x08\x08\xcb\x16\x42\x74\x57\x43\x59\xa4\x13\x4d\x52\x38\x81\x88\x4f\xe0\x64\x3e\xaf\x06\x24\x74\x1f\xc1\x0e\x20\x94\xe3\xe0\xca\xf1\x93\x16\x15\x47\x31\x39\xc5\xbc\x63\x03\x66\x73\x14\xda\x34\xc9\x24\xd2\x05\x0a\x8e\x6d\xdb\xe1\x78\x1c\x56\xab\xda\x81\x05\x6f\x13\xcf\x8f\x09\x62\x70\x83\x07\x37\xb7\xd8\x74\x1d\xdf\x07\xc2\x9c\x86\x13\xd7\xe1\x6e\x1f\x70\x78\xcb\xfb\x01\xbb\xd6\x42\xdb\x42\xdc\xe4\x4c\x8d\x04\x61\x28\x4d\xe0\x46\x0a\x08\x87\x13\x74\x1d\x38\xc3\x97\x51\xdb\x39\x3c\x23\x29\x49\xe0\x86\x4d\x67\x38\xf4\x6f\x80\xc8\x9e\x4c\x10\xa1\x21\x0e\xf8\x21\x3f\x1a\x05\x21\x0b\x52\xf5\x65\x3f\xa6\x0f\x25\xa7\xaf\x9f\x20\x36\xe5\xfe\x1d\x80\x28\x9f\x19\x49\xc8\x99\x43\x7b\x18\x40\x93\xe3\xaf\xdc\xe6\x53\x9d\x82\x67\x05\x65\x48\xe6\xf1\x58\xb7\x74\xdb\xb6\xb3\xe9\xd1\xcc\x9e\x4b\x47\x2c\x99\x74\x4c\xbd\x0d\x6c\x4a\x2e\xda\xd1\x5f\x33\x1c\x5d\x86\x8a\x5a\x16\xa2\xd0\xe0\x46\x3e\x83\xa1\x38\x4d\xe9\x4a\xc1\xfd\x74\x33\x36\x35\x78\x94\x89\xd2\xed\x25\x72\x26\xb2\x53\x11\x28\xc3\xe6\x13\x61\x2b\xe1\xeb\x3f\x71\x10\x16\x31\x42\xf4\x3e\x31\x17\xea\x57\xba\x30\x40\x10\xb7\x79\x2e\x4d\x94\xe3\x01\x19\x08\xfa\xb1\x57\xec\x1a\x07\x47\x4e\x88\x81\x2a\x5c\x98\xa1\x4b\x22\x56\x2a\xba\xbe\x69\xdb\x1c\x2a\xa6\x6f\xc6\x33\x04\x36\xc3\xa1\x4f\x38\xd0\x4d\x1d\xa2\xd0\xe6\x89\xcf\x48\x8b\x6c\x02\x16\xf5\x6a\x7f\x6b\x3c\x0e\x13\xbf\x37\x41\xd8\xb2\x3a\x07\xac\x65\x75\xc6\x63\xf1\xd3\xb6\x6d\xf1\x51\xa9\x84\xad\xba\x48\xaf\x77\x60\xa5\xb2\x09\xa8\x48\xc8\xe4\xca\x8f\xba\xfc\x68\x88\xa2\x8d\x0e\x4c\xdb\xfa\x85\xbb\xf6\x6a\x7c\xd3\x45\x07\xed\xc9\x25\x5b\x2c\xe2\xb5\x7f\x40\xe3\x49\xcb\xaa\x3e\xe9\x8c\x1b\x2d\xab\xba\xdd\x69\x59\xd5\xdd\xce\xb8\x65\xd5\x3b\xcf\xe5\x4f\xf9\x9f\xe7\xb0\x6d\xae\xa7\xdc\xff\xaf\x99\x1c\x87\x02\xe1\xd5\x2d\x23\x7b\x98\x9f\x8f\x2e\x3d\x36\x70\x48\x42\xe0\xa4\xac\x71\x10\xbd\x05\x17\xab\x2d\x39\x30\xfb\x2c\xe4\x30\x12\x0d\x5d\x97\xa2\x81\x95\x25\x51\x54\x32\x2f\x23\xd3\xe7\xdb\x07\xf5\x4a\x05\x60\x9b\xb6\xac\x4e\x5a\x0c\x21\xc2\x13\xd4\xc3\xfc\x70\x38\x7c\x17\xf8\x29\xbb\x45\xb4\xc6\xef\x6c\x48\x0c\x85\x01\xbb\x12\x46\x80\xa5\x4c\x03\x6a\x73\xf3\x13\x23\x34\x85\xc8\x47\x93\xa8\x1b\x54\x00\xc3\xe7\xa2\x0f\x7b\xd8\xb0\x75\x53\x47\x59\xf8\xd2\x9f\x81\xcb\x7c\x43\xaf\xd5\x74\x03\x1b\x54\x8c\xd1\xc3\x4f\xce\xd7\x43\xd7\xc5\x61\x28\xf7\x7c\x8a\x56\xae\x8a\xca\x9b\x72\x48\x01\x5d\x54\xd0\x9c\x11\xef\xb3\x80\x7c\x53\xde\x10\xba\x0e\xf1\xb1\xa7\x34\x57\x14\x05\x6a\x3c\x9e\xd5\x32\xb1\x80\x1c\x56\x2a\xf1\xaf\x98\x72\x96\x80\xb7\x6d\xd5\x55\x4d\x95\x27\xc8\x18\x72\x87\x8f\xc2\xf1\x58\xdf\xb6\xb6\x8a\xf3\xc4\x82\x5d\xe1\x7e\xca\xf8\x4b\x36\xa2\x5e\x29\xec\xcb\xe1\xa4\x6f\x5b\xdb\xc5\xcd\x8a\x46\x4f\xd4\x06\xd8\x2b\xe2\x62\x1a\xe2\xd5\x36\xdb\x58\xd0\xec\xdb\xab\xf2\xa6\x9b\x52\xed\x65\x35\x46\x66\xe9\xf1\xc0\x45\xbe\x8e\x98\x6d\x35\xd9\x3e\x6e\x32\xc3\x10\xc6\x35\x8d\x97\x66\xd2\x53\x44\xd7\x67\x2c\x50\x3f\x03\x87\x7a\x6c\x00\xe0\xcf\xf1\x50\x9a\xad\xaa\xf8\xea\xb4\xc2\xc0\xf9\x8c\xcf\xfd\x51\xaf\x60\x00\x86\xfe\xa8\x07\x30\xba\x1d\x88\x75\x85\x1e\x74\xdd\xad\xdd\x67\x3b\x3a\xf2\xc5\x18\x96\x40\x37\x62\xfd\x60\xdb\x36\xaf\x54\x00\xb7\xb1\xb0\xc4\x90\x80\x79\xe2\xed\x71\x84\xa9\x17\xfe\x45\x78\x3f\x63\x28\xa8\x6a\xd5\xba\x64\x79\xbc\x44\xe5\x28\x9e\x62\xab\xf1\xa4\x09\x27\xc8\xa1\x8c\xbe\x0b\x71\x70\xe2\x25\x55\x56\xd4\xae\xc8\xfc\xa8\x1b\x1c\xd4\xeb\x52\xe0\xe5\xa9\x47\x81\xb4\xd5\xfe\x01\xa0\xf5\xcf\xfe\x01\x80\xad\x76\xa7\xdd\x36\x51\x73\xaf\x1d\xfe\xd2\xd6\x3b\x06\x68\x9b\xc5\x19\xf0\x67\x38\x06\x6d\xdd\x34\xda\x3a\x84\xbf\x00\xd0\x6e\x49\xcd\x7c\x5b\x47\x5b\x93\xb6\x59\xe2\x77\x07\x8e\x01\x68\x39\xd5\x6f\x87\xd5\x0f\xed\xaa\x48\x37\xda\x26\x34\xa2\x94\xce\x6d\x03\x4d\x60\x52\xcd\x97\x14\x5d\xce\x1e\xc3\x90\x15\x53\x05\xcf\x6c\x0d\x72\x25\x16\x72\x3f\xd2\xbd\x60\xcc\x0f\xf7\x6e\x47\xc3\x0b\x27\xe8\x61\xbe\xa7\xeb\xc8\x63\xd7\x74\xf6\x25\xb8\x4a\xf9\x09\x75\x03\x79\xe0\xb3\x67\x21\xc7\xf7\xd9\xf5\x89\x4c\xde\xdb\xac\xab\xcf\x37\x23\x1e\x7d\x4f\x90\xda\x3d\x76\x2e\x7d\xfc\xd6\xe9\x61\x51\x64\x34\x7c\x11\xf9\x32\xd8\xdb\xb4\x24\xfc\xe4\xb7\x6a\x21\x99\xc2\x14\xb4\x64\xd2\xd0\xe9\x09\x49\xd4\xf5\xc9\x06\xe9\x02\x31\x15\xbc\xa3\x8a\x3c\xd2\x4d\x4e\x3c\x57\x6d\x50\x53\x95\xb4\xb9\x5a\x68\x10\x4f\x87\x1b\x6a\x11\xf4\x51\xae\x4c\x04\xe2\x5f\x01\x46\x05\xaa\x0c\xab\x2a\x02\x80\x29\xea\x89\xc1\x30\x83\x32\x81\xa2\xe5\x6a\x5d\x98\x37\xb3\xf6\x04\xe8\xd0\x4e\xe3\x83\x5b\xac\x5a\xef\xc0\xe7\xea\xef\x9e\xfa\x33\x83\xad\x43\x44\xf2\x35\x8c\xa8\x86\xa1\x6a\x18\xe9\x1a\xf9\x4e\xcb\xbd\x38\x6a\xc6\x2c\x34\x63\x0e\xda\xc2\x94\x4c\x17\x25\x99\xa2\x33\x06\xcb\xc2\x9b\x59\xc0\xca\x0c\x77\xee\x45\xb0\x30\x4f\xb0\x4d\xdb\x76\x66\xca\xd7\xb7\x9d\xa6\x7f\x60\x5b\xc2\x7a\x8c\xa8\xeb\xe3\x2b\xec\xeb\xf0\x00\xb7\xfc\x44\xa7\xcd\x28\x19\x36\xfd\x6a\x15\x0a\xdb\x26\x55\x5a\x4c\x20\xc5\xe5\x6f\x8b\xa8\x92\x29\x2b\xc5\xe2\x32\xc0\xce\xe7\x49\xa2\x74\x42\xb2\xe3\x8e\xc4\xb8\xd9\xe9\xd6\x51\xa2\x56\x66\x84\x64\x6a\x56\x33\x15\xc5\xda\x70\x7e\xe5\x34\xa3\xb2\x90\xeb\x70\x32\x21\x5d\xb0\x99\x65\xaf\x62\x58\x70\x2f\x86\x91\x42\x86\x05\x30\xe6\x97\x6b\x07\x89\xed\x52\xc1\x35\xdc\x72\x0b\xc8\xbe\x9f\xee\x27\x6c\xba\x86\x31\x87\x6b\x45\xd5\x53\x5c\x4b\x08\x68\xa6\x74\x82\x6f\x19\xe1\x21\xa9\xcf\x45\x02\x3f\x99\x1a\xb6\x69\xc6\x47\x3a\x2c\xc3\xe9\x83\x3a\xa2\xe6\x4c\x81\xd9\x72\x8e\x2c\x90\x30\x44\xcd\xa4\x62\xcb\x95\x9b\xe1\x80\xa8\x99\x56\x79\xf6\x66\xb1\x0c\x22\x6a\x66\x34\x61\xbe\x64\x84\x34\xa2\x66\x5a\xed\xda\x9b\x33\x73\xb9\x00\x5b\x38\x1e\x17\x17\x98\xa1\x09\xc7\xe3\x62\xb4\xf2\xe9\x53\x24\x26\x48\xd8\xf1\xef\x86\xc5\xfb\x26\x91\x7c\x26\x37\xb6\x66\x07\x6f\x3c\x2f\x9a\x38\x8f\xf7\x44\xac\x64\xe5\xc1\x28\xb1\x5b\x9d\xbc\x56\x64\x70\x3c\x06\xcc\x66\x49\xdd\x99\x55\x87\x14\x8e\xc7\xd9\x5a\xb1\x42\x27\x1b\x79\xd5\xc7\x4b\x8e\x24\x96\x1c\x49\x4d\xa5\xf7\x2a\x95\xec\x5c\xd5\x72\xc4\xdc\x30\x1e\x83\xd0\x56\xbf\x53\xa8\xaa\xb9\xca\x8f\x61\x85\xf8\xcb\x08\x53\x57\x4c\x19\x81\x9c\x32\x4e\x47\xbe\x0f\xc2\x5c\x07\x42\xf8\xdc\xda\x0b\x73\x75\xdc\x7b\xf5\x83\x16\x6a\x04\x57\x31\xd1\xb3\x81\x6f\x04\xb0\xd6\xd8\x20\xca\x69\xd7\x6d\x34\x33\x27\x6a\xa1\x18\x85\x3d\x6f\x32\xdb\xf0\x1f\xd9\xae\x51\x6f\x8e\xf6\x79\x42\x95\xf0\xd6\xa8\x48\x95\xc4\x28\x4c\x75\xc9\xc8\x30\xa0\x67\x03\xcf\xc8\xd1\x05\xd6\x1a\x28\x83\x49\x06\x68\x0e\xa3\x78\xfc\x13\x25\xad\x2f\xd8\x75\x7e\xdb\x26\x6f\x31\xdc\x8b\x7a\x28\x7c\x80\xcc\xcf\x86\xe2\x04\x6e\x64\xf9\x2d\x05\x28\x4c\xc9\x8e\x14\x1d\x72\x2f\xa4\x53\xb3\x36\x72\xa2\xa1\xa5\x6c\x9d\xf1\x58\xfe\x25\xf1\x10\x71\x22\x11\xb5\x50\x60\x5b\x52\xc4\xbc\x80\x0d\x01\x47\x04\x22\xcf\xfe\x68\x06\x58\x6e\xe6\xba\x77\x35\x1d\x31\x77\xd3\xce\x70\x7b\x3c\x5e\x4c\xd5\xc2\xfc\x9c\xd9\xe1\x4d\x17\x9c\x8a\x99\x23\xdb\x13\xeb\xcc\xa4\x11\x36\xb0\x79\xeb\x3e\xc4\x1a\x25\xdb\xaa\xd6\xa7\x5a\x48\x8e\xcd\x81\xe0\xcc\xc0\x1e\xa4\x15\xd0\x66\x22\xbf\x52\x19\xa4\x27\x98\x8c\xb0\xfb\x36\x18\x65\xa5\xdc\x18\x14\xc9\x7d\x60\xe7\x0a\xaa\x13\x17\xd1\xe1\xa1\xcd\x5b\x24\x6b\x45\xfa\x36\x18\xe6\x60\xe7\xf4\x86\x82\x9d\x2b\x38\x51\x5b\x9f\x81\xdd\xf8\x19\xf8\x76\xe3\x67\xb7\xe5\xc6\xeb\xbc\x64\x33\x66\x02\xd0\x86\x53\x42\x49\xf8\x09\x25\xd1\x8f\xd5\x0b\xea\xda\xcc\xa8\x37\xbb\x19\x75\xd1\x2d\xa5\x2e\xba\xf1\x39\x62\xcf\x06\x7d\xa5\xad\x9c\xac\x8e\xe8\xce\xd7\x11\xbd\x99\x8e\x70\x26\xd1\xf2\xe4\x3b\x6a\x88\x56\x67\x23\x9c\x4f\x26\xd9\xa9\xbd\x74\x0f\x0d\x3c\xd7\x46\x4c\xd0\x92\x48\x0a\x92\x0c\x05\x49\x29\x0a\x12\xc3\x80\x61\x96\x64\x24\x47\x32\x85\x5c\x31\xd0\xc5\x48\x46\xe4\x09\x27\xf1\x62\xef\x87\x22\x70\xb5\xfe\xe3\xd0\x51\xe2\x32\x25\xd7\x9d\xfb\xe8\xf2\x0e\x5c\xaf\x86\xe9\x15\x09\x18\x95\xae\xfc\x51\xab\x93\x3c\xa5\xe2\xc1\x8d\x24\x2e\xb6\x17\xd7\xe2\xf6\xf4\x9c\xe7\xcb\x08\x07\x37\x2a\x40\x32\x0b\xc0\x4f\x03\xcc\x9d\x16\x75\x06\xd8\xd6\x7f\x32\xb0\xf1\x93\xde\xf9\x49\x9e\xeb\xcd\xfc\x9f\xce\x0e\xf8\x10\xb5\x6f\x23\x84\xf7\xfe\x73\xfe\xe6\xd4\x1c\x3a\x41\x88\x81\x3a\xe4\x7e\x77\x76\x72\x14\xdf\xf7\x12\xcb\xf8\x49\xdc\xd1\xe2\x0d\x10\x3a\x7f\x03\x84\x46\x87\x68\x2c\x3e\x44\xa3\xf8\x5a\x93\x9b\x96\xe0\xa7\x23\x36\xf2\x3d\xf9\x3a\x35\xc0\x8e\xa7\xa9\xbe\x6a\xdd\x80\x0d\x34\xd1\x13\x8d\x3b\x3d\xed\x9a\xf0\xbe\x26\xba\xa4\x45\x5d\x32\x7f\x92\xe7\x90\xc1\x88\x52\x42\x7b\x17\x38\xe4\xe1\x78\x1c\xe0\x2f\x23\x12\x24\xc9\xed\x0c\x87\x3a\x8c\x39\x32\x3d\x27\x7d\xf5\xe6\xb7\x8f\x67\xc7\xe7\x6f\x5e\xfd\x79\x7c\xb6\xb7\x59\x47\xe2\xfb\xf0\xe8\xe2\xe4\xcf\xe3\x8f\xbf\x1d\x9f\x1e\x9f\x1d\x5e\x9c\xbc\x39\x8d\x33\xfe\x3c\x39\xfe\xeb\xe3\xab\x37\x6f\xfe\x78\xf7\xf6\x3c\x4e\xbb\x38\x3b\x3c\x3d\x3f\x11\xa5\x8a\x92\x3e\x9e\x9c\x5e\x1c\x9f\x9d\x1e\xbe\x12\x79\x34\x75\x93\x4e\x47\x57\xd1\x49\x94\xbe\x65\xd6\xcd\x86\xb1\xeb\xed\x5c\xee\x74\xb1\xab\x4f\xe0\xc6\xff\x04\x00\x00\xff\xff\x7e\x0f\x4b\x99\xd8\x27\x0e\x00") +var _bindataPublicAssetsDocumizeBdc2602422339ee7de6884898daccc3bJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x6b\x73\x1b\x37\x9a\x30\x80\x7e\xd7\xaf\xa0\x90\x53\x1a\xf6\xba\x45\x4b\xce\xcc\xec\x2e\x33\x1d\x97\x63\x7b\x66\xb4\x6b\x27\x5e\x4b\x9e\x79\xab\x7c\x5c\x29\x88\x0d\x91\x88\x9b\x00\xa7\x01\x4a\x56\x24\xfe\xf7\x53\xc0\x03\xa0\x01\x34\xba\xd9\x94\x94\xd8\x99\x93\x7c\x88\xc5\xc6\xfd\xf6\xdc\x2f\x68\x2d\xc8\x48\xc8\x9a\xce\x24\xda\x2b\xc9\x05\x65\x64\x8c\x4a\x3e\x5b\x2f\xe9\xcf\xe4\x31\x5e\xad\x50\xfe\x1e\x91\x4f\x2b\x5e\x4b\x81\xf2\xa6\xa4\x26\x82\x57\x97\xa4\x46\x39\x22\xcb\x73\x52\x1f\x56\x1c\x97\x87\x94\x51\x49\x71\x45\x7f\x26\x75\x50\x7b\xc6\xd9\x05\x9d\x3f\x26\xec\x92\xd6\x9c\x2d\x09\x93\xe8\x43\x7e\xb1\x66\x33\x49\x39\x1b\x93\x5c\xe6\x2c\xe7\xd9\x4d\x45\xe4\x48\xec\xfd\x70\xfe\x13\x99\xc9\x09\x4c\xe6\x4d\xcd\x57\xa4\x96\xd7\x63\x92\xa3\x1f\x7f\x24\xe2\x35\x2f\xd7\x15\x41\xf9\xcd\x25\xae\xd6\x64\xba\x7f\xb4\xc9\x72\xa2\xea\xe2\x75\x25\x8b\x4b\x4e\xcb\xd1\x51\x2e\x8a\x97\x6a\x4e\x93\x67\xab\x55\x45\x67\x58\x0d\x32\x21\x9f\x24\x61\xe5\xf8\x66\xa9\x3b\x78\x53\x93\x0b\xfa\x69\xca\x6d\xcb\x89\xff\x39\x5f\xf1\xf2\x75\xba\x5a\x54\x92\xbf\x35\xdb\x30\x95\xb6\xca\x26\xcb\xc7\x47\x39\xb3\x3f\xb3\xb1\xc8\xd3\xa3\x64\x7b\x97\xb8\x1e\xd1\x42\xec\x35\xf3\xa7\x9b\x2c\x6f\x1f\xc2\x5a\x2e\x08\x93\x6a\x21\xbc\x16\x8f\x31\xe3\xec\x7a\xc9\xd7\x22\x3c\x19\x38\x05\x41\x97\xab\x8a\x1c\xaa\x26\x71\xbb\x73\x2c\x48\xb4\xeb\xd9\xcd\xbd\xf7\x5a\x2f\x82\x15\x6e\xf9\x6e\x9f\x6b\x22\x24\xaf\xc9\x94\x14\xdf\xc2\x61\xbc\x3d\xfd\xc7\x9b\x89\xb9\x36\x63\x92\xe5\xde\xf4\xba\x6b\x6d\x32\x6f\x77\xd8\x80\xdd\x99\xe1\x3b\xed\x8b\x77\x57\xd7\x92\x56\xe2\x31\x23\xed\x2b\xfa\x50\xdb\xc5\x13\xdb\x85\x7f\xc2\x9f\xa6\xb0\x05\x94\xe9\x41\x04\xa9\x2f\xe9\x8c\x8c\xb3\x1c\xaf\x56\xaf\x89\xc4\x5d\xc5\x15\x9f\xe1\xea\x54\xf2\x1a\xcf\x49\x57\x1d\xef\x34\xc8\xd3\xe4\x4e\x4f\x83\xaf\xaa\xf9\x38\x3c\xa3\x31\xc9\x6e\x6a\x22\xd7\x35\x1b\x91\x49\xc9\x97\x98\xb2\xc2\x5d\xf3\xc9\x9c\xc8\xd3\xf5\x39\x7c\x1e\x67\xb9\x99\x86\x78\x53\x13\x41\x98\x1c\x93\x89\xa4\xb3\x8f\x44\x66\x4f\xe5\x82\x0a\x55\x7b\x8c\xd4\x92\x51\x36\x59\x71\x21\xc7\x68\xb5\x3e\xaf\xe8\xcc\x3f\x1b\x02\x67\x79\x53\x62\x89\xa7\xff\x73\xfa\xc3\xf7\x13\x05\xa6\xd8\x9c\x5e\x5c\xab\xeb\x33\xe3\x4c\x12\x26\xcf\xae\x57\x64\x8a\x7e\x12\x9c\xa1\x4d\x6a\x0d\x48\x35\x37\x83\x8f\xa8\x18\x91\xe5\x4a\x5e\xa3\x6c\x93\x53\x76\x89\x2b\x5a\xaa\x85\xb9\x75\x35\x73\xf3\xf7\x14\x65\x93\x59\x45\x70\xfd\xac\xaa\xdc\xca\x82\xcd\xcb\x36\xc1\x35\xe5\x03\xae\xa9\xfd\xde\x01\x5d\xe1\x0e\x12\x36\xe3\x25\x65\xf3\xf4\xed\xbc\xdb\x93\x07\x40\xfb\x30\xf7\x58\x14\xfc\x37\x7a\x8f\x15\xa2\xe1\xb9\xe8\xbc\xbf\x7b\xf4\x62\x8c\xb8\xde\x24\x54\x14\xf2\x7a\x45\xf8\xc5\x08\xda\xdd\xac\xb0\x10\x57\xbc\x2e\xa7\x2c\x27\x4b\x4c\xab\x29\xdd\x14\x44\x35\xd8\x8f\x2f\x3d\xcb\x6e\x6f\x5b\x1f\x69\x96\x99\xdb\x96\xb8\xac\xe6\x52\xa2\x6c\xcf\x87\x11\xdf\x61\x41\xfe\xfc\xc7\x89\xbe\x0e\x64\x8c\xd0\x64\xc6\xd9\x0c\xcb\xb1\xc8\xd1\x54\x5d\x4e\xf8\x45\x83\x5f\x2c\xcb\x36\xa4\x12\xe4\x46\xad\x04\x1e\x0e\xda\x6f\x56\x32\x6c\x0a\x64\xa3\x36\x8a\x16\x37\xcf\xd6\x72\xc1\x6b\xfa\xb3\x46\xa5\x53\xf4\x1d\x16\x74\x36\x42\x8f\xf8\x66\xaf\xf5\x72\xb6\xbd\x6a\x94\xdf\x2c\x08\x2e\x49\x2d\xa6\x74\xf3\x8b\xbe\x43\x31\xe0\x1d\x7e\x24\xd7\xb3\x8a\xe3\x8f\xbd\xef\xf0\x3e\xaf\xed\xe1\x70\x06\x7b\xc8\xb7\xf6\x71\xa6\x8e\xf4\x0b\x78\x89\x31\x46\x91\x3b\x60\x14\xfe\x91\xb0\xec\x69\xbb\x40\x3f\xcb\x9d\x30\x4d\x73\x0d\x1e\x04\xdd\xe8\x09\x78\xd8\xa6\x1b\x2f\xa9\x25\x3c\x08\x5a\x6a\xea\xc0\xd1\xa2\x6c\x52\xf1\x39\x5f\xcb\xbb\x60\xa7\xaa\xc4\x5d\x74\xff\xef\x98\xe9\x37\x81\x99\xd6\x82\xd4\x0c\x2f\xc9\xef\xc8\x69\x27\xe4\x64\x6e\xfe\x67\xc5\x50\x33\xbe\x5c\x71\x46\x98\x14\x8f\xb1\x94\x78\xb6\x38\x5c\xf1\x15\xd7\xac\x76\x9b\xaf\x81\x1a\xa4\xee\x69\x75\x6f\x96\xaf\xb3\x81\x59\x06\xca\x6f\x08\x5b\x2f\x49\x8d\xcf\x2b\xd5\x24\x9f\x13\x39\x75\x63\x36\x5b\xe6\x38\xe4\x4d\x36\x6c\xdd\x92\xf3\x4a\xd2\xd5\x8e\xeb\xb6\xad\x7e\x83\xeb\x9e\xad\x85\xe4\x0e\x20\x1f\x0a\x22\x25\x65\xf3\x88\xa1\xfd\xe9\x5f\x6b\x52\x5f\xfb\x90\x77\x49\x3f\x51\x26\x1e\x33\x2e\xe9\x05\xd5\x22\x99\xb8\x68\xc9\x4b\x5c\xf5\x80\xf1\x36\x24\xce\xc5\x43\xc1\x62\x6a\x84\x31\xcf\xed\x3a\x2d\x44\x76\x20\xba\x91\x96\xe4\x37\x5b\x20\xf1\xbc\xe2\xe7\xb8\x3a\xbd\x9c\xa5\x2b\x20\x28\x47\x59\x4e\xc5\x0b\xb3\xd6\x37\x35\xbf\xa4\x25\xa9\x4d\x0b\xb5\xdd\x6b\x49\xca\x31\x52\x7b\x6c\x0b\x51\x9e\x38\xb8\x06\x6c\xf8\x35\xb3\xa2\x28\x9a\xa2\x19\x67\x42\x62\x26\x05\xca\x26\xcf\xbc\x6a\x13\x3b\xfc\x46\xcd\xe5\x7f\x0d\x7d\xf1\x99\xe6\x62\x87\xd7\x73\x79\xf5\xe2\xd9\x9b\xcf\x34\x0f\x35\xb4\x9e\xc3\xf3\x67\xa7\x9f\x69\x0a\xcf\x9f\x9d\x6e\xb2\xdc\x6e\xc8\xbb\xba\x7a\x59\xd7\x3c\x9e\xc4\x44\x93\x63\x63\x64\xc9\xc2\xe7\x5a\x7c\x39\x59\xd7\xea\x66\xd9\xb6\x6f\x09\xae\x96\x3b\xb4\xae\x55\x7d\xaf\xfd\xf3\x8a\x12\x26\x4f\xca\x1d\xba\x98\x99\x26\x5e\x2f\x6f\x34\x12\xfb\x5f\x72\xbd\x43\x37\x2b\xdb\xc6\xeb\xe7\x59\xb9\xa4\xec\x9d\x20\xf5\x0e\xfd\x60\xdb\x26\xee\xe7\x8d\x21\x44\x76\xed\xcb\xb6\x43\x59\x6e\x8b\xff\x8a\x69\xb5\xae\xc9\x14\xa1\x5c\xe1\x66\xdd\xe3\x29\xa9\x2f\x49\xfd\x77\x2e\x64\x47\xdf\xaa\xa6\xe9\x57\xb8\xba\x28\x8b\x7b\x78\xc3\xeb\xb8\x87\x44\x5b\x55\x2b\x75\x0f\x7f\x9c\x50\xf1\x52\x8f\xe7\x11\x03\xc9\xc6\x99\x22\xb5\x54\xf5\xef\xd7\x6a\xb0\xf1\x0a\xd7\x82\x9c\x30\x39\xa0\xa1\xc2\x18\x6e\xd6\xdf\x51\x56\xbe\xf8\x7e\xfb\x9a\xcf\x75\x3d\x14\xb5\xb4\x9b\x3b\xac\xbd\x77\x14\xae\x97\xef\xf9\x5f\x69\x25\x13\x4f\xd6\x6b\x7b\xa3\x28\x4f\xa8\x96\xcf\x6b\xbe\x5e\xc1\xdf\x9b\x3b\xec\x60\xd3\x13\xca\xb2\x83\x83\x2d\xb5\xbd\xc1\x50\xb8\x6d\xcf\xa4\xac\xe9\xf9\x5a\x12\x75\x55\xdf\x0e\xd9\x40\x1c\xb5\x40\x5d\xbd\xfd\x95\xd6\x42\x6a\x3a\x7b\xb7\x3e\x5d\xbb\xce\x9e\x5f\xe1\x3b\x75\x6c\x9b\x75\xf6\xfb\x52\x8b\xac\x76\xeb\x54\xb7\x49\xf6\xf8\x37\xb5\xe9\xaf\x35\x49\xd6\x7b\x29\xbc\xc3\xc9\x71\xa2\x71\xea\x7a\xec\xef\x74\xe0\x5b\xef\x47\x6a\xd8\xe6\xa2\xbc\xa9\xc9\x25\x25\x57\x53\xb6\xae\xaa\xbc\x69\x05\xbf\x67\x58\xe8\x65\xbf\xab\xbb\x76\x6e\x86\x45\x80\x23\x6c\x8b\xb7\xa4\xa4\x35\x99\xc9\x21\x2d\xeb\xa6\x2e\xf4\xe0\x4f\x81\x32\x2a\xc7\xd9\x8d\x5e\xd9\x8f\x62\xbd\x22\xf5\x78\x32\x99\xe0\x7a\xbe\x5e\x2a\xca\xd1\xf0\xff\x21\x4c\x2d\x6e\xd6\x75\xa5\x00\xa7\xc6\x3c\xea\x0f\x8b\x3f\xd4\xdf\x0e\x09\xa8\x1f\x0e\x92\xbb\x1f\x0e\x5a\x20\x04\xef\x58\xfd\x51\x52\xa1\x68\xdd\x57\x5a\xb0\x30\xdd\x3f\xce\x0d\xd9\xf6\x86\xd4\x4b\x2a\x04\xe5\xec\x59\x59\x9e\xae\xf0\x8c\x4c\xf7\x8f\x37\x9b\xbc\xa4\xe5\x5b\x32\x23\xf4\x92\xa8\x1b\x23\xfa\x16\xb0\xa7\x98\x39\x52\x74\x21\xf7\x5c\xa6\x91\xfb\x9e\xb8\xa2\x72\xb6\x80\x23\x17\xf6\xc8\xcd\x69\xa2\xfc\x86\xc2\x39\x28\xea\x7c\x49\x84\x50\xfc\x3b\x7a\xc7\xd4\x22\x46\x92\x8f\x66\x9c\x31\xc5\x48\x2b\xd2\x35\xbb\x99\x61\x41\x46\x32\x4d\xc5\x4d\xcf\x6b\x82\x3f\xee\xa5\xaa\x58\xcc\x37\xbd\x49\x2d\x01\x8e\x02\x65\x7b\xea\x7a\xbe\x63\x40\x4b\x97\x63\x92\xdd\xde\x02\x46\xa8\x2a\xf7\x03\x6e\x2f\xc9\x9e\x92\xe2\x66\x33\x1d\x8f\x49\xa1\xe5\x50\x1a\x5d\x8c\x49\x96\x35\x88\xbb\x10\x31\xff\x5d\x12\xcd\x7f\x93\xa6\x8e\x47\x8e\xb7\xcf\xa7\xd8\xdf\x27\x93\x05\x16\x3f\x5c\x31\x47\xd8\xa3\xce\xda\x28\x3b\x38\xe8\xe9\x4c\x0d\xe4\xdf\x8c\x22\xd5\xb7\x5f\x01\x65\xb7\xb7\x51\x1b\x73\x83\xf5\x11\x86\xd7\x18\xe5\x24\xdb\xd3\xdb\xbf\x49\x6d\xbf\xa2\x29\x7f\x85\xad\xff\xed\xec\x64\x4e\x26\xb8\xaa\xf8\xd5\x5f\x79\xbd\x14\x6a\xab\x92\x33\x0c\xab\xc0\xb4\xc2\x6f\xfe\x89\x34\x10\x71\xcb\x69\x3c\x7f\x76\xfa\x2b\x1c\xc6\xba\xae\x8a\xf6\x92\x34\xe8\x7d\x4a\x26\x06\xea\x11\x1f\xa2\x26\xaa\x07\xf0\xf6\x69\x50\x7b\x8a\x90\xbf\x7a\x07\x8b\xbd\xc5\x6f\x36\x39\xd6\xf8\x4a\x4c\x6f\x38\xb3\x60\x62\x9c\xb5\x16\xef\x03\xab\xa6\xcb\x90\xc9\x21\x69\xa0\x93\x6d\x72\xce\x2c\x78\x79\x98\xae\x6d\x6f\xba\x6b\xf5\x74\x1e\xa6\x5b\xd5\x93\xee\xf2\xf9\xb3\xd3\x87\xe9\xf1\xf9\xb3\x53\x37\xc7\x97\x6c\x56\x5f\xaf\x40\x3a\x61\x50\x48\x74\x2b\x27\xc4\x55\x39\xbb\x5e\x11\x75\x4e\xb6\xb1\xc1\x05\x89\x59\x79\x97\x3a\xdb\x23\x1e\xdd\x5d\xec\x40\xa0\x7b\x82\x77\x27\x9b\x40\xd9\x64\x05\xa3\xea\x1d\x26\xd9\x44\x2e\x08\x1b\x93\xe2\xdb\x9b\x0e\x3c\x45\x4c\x3f\x5a\x4e\xf3\xc3\x8a\xb0\x31\xfa\x4a\x55\x38\x34\xfd\x1c\x1a\x01\xce\x8d\x58\xf0\x2b\x90\xb5\xe8\xfa\x5a\xe4\x73\x7d\xba\x9e\xcd\x88\x10\x63\x74\x8a\x2f\x49\x89\xb2\x8d\x5e\xbc\xfa\xd1\x7f\x16\x39\xeb\xc6\xb7\xbc\xeb\xfd\xb6\x10\x6e\xc4\xa9\xa1\x5c\x3d\x1e\x66\xd0\x69\xc7\xcd\x9e\xf2\xe2\x66\xb3\xe7\xe1\xd4\x8e\x6b\x3a\xa5\x17\xde\x19\xc4\x5c\x3b\x72\xd2\xea\x4b\x4e\xcb\xf1\x51\x2e\x1b\xab\x1b\xf4\x95\x9d\xd7\xa1\x86\x0b\x93\x0b\x3e\x5b\x0b\x90\x9f\xb7\x7b\x6c\x78\xf9\x81\x7d\x1a\x66\xbe\xbf\xd7\x80\xc3\x1f\xd8\x71\xc3\xe2\xf7\xf7\x1d\xf2\xfd\x03\x3b\xf7\x18\xff\xfe\xde\x43\x69\xc0\xc0\xde\x35\xdd\x78\xb8\xd6\xf2\x80\x01\xdd\x07\x42\x82\x9d\x86\x58\x39\xde\xd4\x0e\xf3\xcd\x98\x17\x96\xbe\x5e\xf9\x0c\x40\x44\x4a\x64\x06\x79\x70\xf5\xff\x89\xac\xe9\x72\x9c\xe5\x1c\x44\x33\x85\xf9\xb7\xf9\x6c\xcf\xa2\x68\xfe\x6c\x0a\x1b\x5a\xcc\xfb\xbb\x29\xd6\x34\x73\x11\x22\x3b\xf3\x35\x7b\x8a\xd0\xd4\xfc\xdd\x34\x70\x24\x78\xe1\xfd\x1d\x15\xdb\x2d\x2b\xa2\xdf\x4d\xb5\x1e\x32\x85\xef\x42\xa5\xdc\xde\xf6\xf4\xa5\xc6\x09\xa9\x94\x44\xdf\x31\x95\x12\xb5\xc9\x7f\x9c\x10\x56\x8a\x7f\x52\xb9\x18\xeb\xd3\xc8\xd1\x63\x45\x85\xc0\x0f\x73\x40\x62\x7d\x0e\xda\xa1\xf1\x51\x0e\x5f\x2a\xc2\xe6\x72\x71\x78\x9c\x59\xf5\x8a\x02\x41\x3c\x47\xcd\xcd\xce\x5b\xa4\xb1\x51\x4d\x75\x5d\x0a\x5f\x1c\x96\x65\x3d\x40\x49\x53\x9a\xc1\x7d\x4e\x48\xa4\xfa\x2f\xb2\x86\xe9\x0b\x5d\x2d\xfd\x42\x12\x12\xaa\x01\x3d\xae\x74\x35\xbf\xc7\xae\xf7\xe0\xe3\xbc\x2c\xf3\xa4\x63\x05\xf7\x7e\x34\xf7\xe9\x8e\x48\xd1\xe3\xdd\xb9\xcf\xa8\x07\x6c\x3a\x4f\xf2\xe4\xdb\x57\x9b\xe6\xe4\xdd\xea\xbb\x0f\x50\x11\xa7\xc1\x6e\x7b\x8c\x7d\xff\x2e\xcf\xb0\xe8\x43\x23\x09\x76\x7f\x7b\x7f\x96\xde\x0c\x3b\xee\x84\x64\x0d\x11\xda\x09\xc4\x1a\x6a\x37\xf8\x65\xaa\x58\x75\xa9\x8f\xe8\xa7\x2c\x6f\x90\x7b\x6c\xf5\xc0\xb3\xcd\x5e\x33\x3e\x10\x14\x28\x1b\x53\x43\xce\x8c\xb3\xe2\xdb\x1b\x3a\xf1\xbb\x2b\x8a\xa2\x03\x91\x1f\x1c\x04\x3d\x5d\xb3\x99\x2d\x41\xd9\xd8\x74\x28\x15\x7d\x34\x31\x1c\xfb\xd3\x3e\x0a\x43\x4e\x0c\x33\xaf\xed\x32\x04\xaf\xc8\xa4\xe2\xf3\xb1\xf7\x39\x9a\x57\x07\x19\x92\x6f\x5b\xde\x26\xcb\xa6\xad\x25\x7a\x84\x11\x28\xab\x26\x21\xed\xf4\x34\x3d\xa7\xa9\x3f\xd8\xf3\x05\x66\x73\x18\x6e\xd3\x9a\x6d\x6b\x17\x15\xe4\x69\xef\xa0\xfa\xfa\xfb\xee\x6d\xa3\x84\x43\x8d\x7b\xd2\xc0\x3a\xa9\x81\x3d\xc7\xb3\x8f\xeb\xd5\xa1\x31\xeb\x78\x28\x15\xec\x2f\x69\xf2\xd2\xa1\x66\x6d\x94\xab\x7c\xb0\x9a\xb5\xe6\xeb\x46\xce\xdf\x2a\x3d\xaf\xf9\x95\x20\x75\xb7\x16\xd6\x54\x40\x59\x0e\xbb\xf8\x0a\x9f\x93\x6a\x8a\xbe\xd3\x3f\x90\xf9\x78\x7a\x2d\x24\x59\x9a\x22\xf8\x31\x8a\x6a\xac\xc8\x0c\xc4\x9f\xf0\xfb\xaf\xb4\x22\x5a\x26\x8e\x6c\x0d\x23\xdc\x3b\xb6\x0d\xe0\xf8\x9b\x0f\x6f\xd7\x8c\x51\x36\x57\x1f\xcc\x41\x36\x7d\x9a\x0f\xdf\xad\xa5\xe4\xcc\x4c\xe3\xad\x3d\x6d\x53\xf8\x6e\x55\x71\x5c\xbe\x25\xb8\xbc\x56\x7d\x68\x37\x86\x7a\x69\x6a\x81\x44\x74\xb0\x84\xd3\x13\x28\x34\xcb\x43\xf9\x4d\x4d\x24\xa6\x6c\xba\x7f\x94\xf3\x7a\x3e\x6d\x3f\x0f\x5e\xcf\x4f\xf4\x55\xf6\x3a\xf0\x16\x83\xf2\x1b\x7e\x49\xea\xab\x9a\x4a\xf2\x43\x3d\x57\xfd\xd4\x64\x56\x13\x0c\xb2\x7b\xe1\x71\x8b\x7e\x53\xb5\x97\x28\x57\x1b\x11\x48\x3a\x82\x05\x02\x2b\x17\x4f\x1b\x18\xec\x9b\x33\xc2\x30\x93\x6a\x38\x38\xbb\xe9\xfe\xb1\xe2\x3b\x4b\x5a\x9e\x30\x41\x6a\xf9\xb2\x22\x6a\xdd\xbd\x3b\x12\xa3\x45\x33\xb7\xc3\x0b\x35\xb9\x6c\xc2\xd9\x18\xcd\xe0\xa9\xfb\xea\x01\x75\xdb\x49\xa1\xdf\x97\xba\xe6\x73\x62\xc7\xfa\xee\xfa\xa4\x74\x0b\xb4\x9d\xa8\x7f\xc4\xfb\xa3\x0f\x13\x75\x73\xbe\x09\x47\x54\x33\xcb\x26\x8c\x7c\x92\x63\x34\x81\xa7\xaf\x9b\x1d\x56\xea\x3a\xa0\x6c\xb2\x90\xcb\x4a\x7b\x21\x6c\xf2\x92\xc3\xe5\x1c\xfb\x12\x88\xf0\x5e\xa6\xf7\xcb\x5c\x4a\x94\xef\x1f\xb7\x0b\x15\x50\x26\x65\xba\xcc\x5c\x5e\x94\xef\x1f\xb5\xc5\xe3\xde\x15\xca\x02\x2c\x6d\x9e\x50\xd6\x16\x3b\x44\x20\x52\x01\x8a\x8a\x48\x05\x26\x5b\x43\xeb\xe7\x80\x72\x74\x2a\x71\x2d\xed\xab\xec\x5b\xda\x51\x62\x69\x6e\x57\x48\xdf\xda\x8e\xb3\x4d\xae\xb1\x85\x37\x47\xfd\xac\xc7\xc8\x6c\x4e\xf7\xf4\xde\xae\x59\xf7\xe4\xdc\xd6\x26\xe6\x16\x0c\x9f\x05\xa2\xbc\xce\x53\x56\x7b\xad\x1e\x23\xca\x3b\xdf\xa8\x19\xa8\xb9\x2a\x5a\x0e\xa3\x9f\xc7\x80\x6e\xd1\x7f\xa0\x74\x07\x0b\x7e\x65\x5e\xe4\x6b\x85\x44\x6c\x27\xbe\xb0\xc8\x3c\x5c\x8b\xae\x5a\xf2\xa2\xbc\x55\x05\xe9\xbe\x4d\xbf\x63\x92\xdd\x10\x2d\xb4\x22\x4c\xbe\x80\xe7\x31\x86\x4b\xc7\x42\xd9\x91\x0f\x1e\xc0\x18\xd1\xf6\xb7\x5f\x14\x63\x56\xb0\x89\xe4\xaf\xf8\x15\xa9\x9f\x63\x41\xc6\x59\x76\x7b\x8b\x50\x51\x14\xac\x97\x1a\x8e\x67\x36\xc1\x65\xf9\xbc\xc2\xea\x96\x52\x71\xe8\x8c\xfe\x1c\xf1\xdd\x0f\xb0\xb6\x77\x5f\x93\x25\xbf\x24\x89\x11\x3c\x29\xdc\xf3\x8a\x0b\xd2\xb9\xb3\xb0\x37\xbe\x90\xcc\x87\xab\x7a\x63\x9c\x58\x9b\x5b\x56\x60\xaf\x05\x85\x3d\xe4\x83\x72\xf4\xa6\x22\x8a\x6b\xb9\xc2\x54\xe6\x23\x53\x63\x54\xc3\x55\x9d\x4c\x26\x28\x85\x01\xd2\xc0\xc5\x4e\xa6\x81\x2e\x7a\xbe\xa2\x3d\xdf\x16\x04\x11\x44\xf3\xfa\x13\x2a\xfe\xa6\xe5\x99\x5a\x56\xa3\x39\x73\xa1\xae\x69\xd1\xdc\x52\x03\x70\xdc\x6d\x18\x8b\x9c\xfb\xe4\xdf\x5d\x81\x8e\xeb\xb0\x6f\xb9\x47\xfe\x24\x80\x5c\x41\xd9\x44\xd6\x98\x09\xaa\xc5\xc0\x1c\xe4\x96\xc6\x0a\x1a\xed\x04\x65\x60\xb4\xc1\xb3\xf2\x20\x8d\x02\x26\x6b\x4d\x34\x84\xa2\xea\x36\x3d\xd1\x75\x64\x0d\x5e\xde\xd3\xa2\xda\x91\x2c\xc8\x44\xe2\x7a\x4e\xa4\xc3\x65\xed\x8b\x04\xcd\x64\xa2\xc3\x70\xc8\xa3\x98\x20\xde\x66\x82\xda\x10\xc4\x80\x89\x0f\x2b\x3e\xdf\x95\x18\xfe\xe5\x7c\x22\xb6\x92\xbc\xc3\xec\x09\xbb\x4a\x61\xc9\x15\x9f\x2b\x52\x6f\x9b\x0a\xde\x43\xd1\x39\x2b\x1e\x31\x72\x35\x7a\x81\x25\xd9\x6b\x4c\xa5\xf1\x4f\xf8\xd3\x18\x94\xf2\x0b\x29\x57\x62\xfa\xd8\xf9\x81\x4d\xc4\xd7\x87\x64\x7d\x78\x45\x84\x3c\x3c\x9e\xe0\x25\xfe\x99\x33\x7c\x25\x26\x33\xbe\x7c\xcc\xc8\x95\x78\x2c\xd6\xcb\x25\xae\xaf\x35\x45\xf2\x74\x76\x5e\xa0\xc6\x96\x3a\x97\xda\x29\xe1\x6f\x2f\xcf\x50\x5e\x62\x89\xc1\x47\x41\x55\x44\xb9\x30\x14\xb1\x3b\x00\xa9\x00\x3d\x80\x4e\xbb\x38\x75\x6f\x36\x01\x16\x1c\xe0\x31\x90\xbc\x22\x73\xc2\x48\x8d\xab\x3b\x1b\xae\x7e\xc1\x17\xa5\x9f\x23\x5a\xe2\x4f\x67\x78\x2e\xa6\x5f\xe7\x60\xa7\xaf\xee\x8b\xa4\xb2\x22\x5a\xd2\xd5\x61\xfa\xb1\xe4\x25\xa9\x26\x66\xcf\x26\xba\x3a\xca\xac\x99\xc2\xf0\x86\xa6\x01\xd2\xdc\xfc\x25\xa9\x15\xf4\x7e\xc9\xca\x15\xa7\x4c\x0e\xef\xa5\xdd\x16\x65\xf9\x02\x8b\x33\x35\xad\x13\xb6\x5a\xcb\xa4\x31\x1f\x66\xe5\x18\x35\x2b\x45\xb9\xf9\x01\x32\x7d\xd5\xc1\x6b\x98\xde\x96\x2e\xfc\x55\xa3\xdc\xfd\x6c\xba\x79\xde\x9a\xdf\x96\x1e\x3b\x36\x03\xe5\xa9\x12\x33\xce\xdd\xb8\x39\x73\xf8\x3e\x5d\x18\x9d\x90\xa9\x90\xf9\xad\xe0\xa2\x74\x37\x32\xe5\xd9\x8e\x3c\x95\x0f\x85\x64\x42\xd8\x42\x9a\xd3\x65\x89\x62\x43\xc8\xe6\xbc\x68\x3c\x39\x64\x8e\x1e\xf3\x7a\x8e\x99\x71\xb1\x78\xec\x39\x72\xe4\xe8\xb1\x42\xb0\x28\xcb\x45\xf1\x1e\x7d\x05\xa8\xef\x50\x7f\xca\x83\x9f\xa3\x6f\x47\x25\xbd\x44\x1f\xf6\x2e\x78\x3d\x06\xb3\xf0\xa3\x6f\xe8\x5f\x9e\x7c\x43\x1f\x3d\x02\x25\xa5\x2c\x34\xc8\xac\xf9\xea\x67\xce\xc8\x58\xbc\xa7\x1f\x1a\x47\x8c\x96\x93\x07\xc1\x35\xa9\x47\xe8\x11\x09\xa9\x16\x85\xf2\xcf\xf8\x47\xc2\x14\xc2\x57\x90\x96\xe7\x4b\x22\x17\xbc\x9c\xa2\x15\x17\x12\xe5\x2b\x5c\xe3\xe5\xf7\x5a\x88\x00\xfe\x02\x3a\x18\x41\x3e\xab\xe8\xec\xa3\xb5\xe3\x5f\xe2\x4f\x0a\x9f\x0a\xfa\x33\x99\xfe\xe9\x48\x37\xa9\x2a\x52\x01\x26\x15\xd3\x63\x83\xe1\x5f\xaf\x2b\x49\x57\xaa\xc9\x71\x8e\xcb\xf2\xad\x26\x2a\x5f\x51\xf6\x51\x0b\x20\xf0\x5a\xf2\x37\x35\x57\xd0\xf7\xff\xd6\x44\x83\xa7\x1c\xd8\xf2\x93\x25\x9e\x93\xb3\xc5\x7a\x79\xce\x30\xad\x74\x65\x85\x5b\x7c\xd7\x01\x7d\x30\x8a\xfd\x15\x96\xe0\xf1\x0a\x2d\x3b\xaf\xca\xff\xa5\xba\x9e\x19\xa2\x2a\xa8\x45\x62\xd2\xeb\x95\x3a\x05\x98\x39\xf1\xe4\x09\xaa\x17\xa2\xef\x7f\xd3\x5a\x83\x5e\x12\x90\x49\x4c\x81\x56\xff\x83\xd4\xc2\xb5\x6c\x4f\x02\x9b\xde\x9e\x82\xa2\x7f\x0c\xa5\xad\x76\x13\xd8\x68\x0f\xc9\x00\xfe\x19\x67\x37\x40\xe6\x90\x22\xa6\xdb\xdd\xb3\x51\xdc\xbb\x20\x15\x99\x49\x52\xfe\xa0\x95\xfc\x9a\xa1\xd7\x50\x7f\x2f\xf1\x0e\x9d\xa6\x82\xa8\xd7\x23\x40\x0f\x4e\x2f\xc6\xd6\xdb\x29\xb6\x12\x4c\x02\xe2\xc8\x13\x4a\x8d\xa0\x1f\x95\x0f\xe0\x34\x19\x1a\x4f\x5b\x50\x49\xce\xa0\x0f\x5f\x5b\x30\x6c\x70\x07\xcc\x3b\x87\x0f\x40\x63\xe7\x04\x5e\xdb\x7e\x76\x9f\x42\x0a\x13\x74\xce\xa6\x0b\x96\x26\x27\x96\xea\xd9\xcd\x2f\x16\x70\x6c\x9f\xd4\x9e\xa7\x42\x24\x46\x7d\xe8\xdd\x86\x6d\xed\x73\x12\xe8\x17\x89\xaf\x5b\xec\xea\x26\x05\xea\x1d\x70\x6f\xb1\xcb\x69\x80\xbe\xef\xcb\xc0\xed\xc7\x90\x6b\xde\xeb\x1a\xbf\x8d\x34\xd2\x1d\x84\x1c\xda\xbb\x55\x89\x25\x69\x54\x05\xa0\xb9\x31\x0a\xac\xb4\xe0\x3c\xef\xbd\xf5\xc7\xed\xf2\xe8\x5a\x26\x6a\x74\x5f\x95\x63\x6d\x2f\x32\x98\x9d\x53\xcb\xdd\x80\x8d\xcb\xd9\x82\x2c\x09\x68\x03\x1c\xbf\xe5\xe3\x33\x94\xa9\x09\xe8\x5a\x63\xd2\x7d\xac\x52\x55\xb0\x46\x43\x46\xfc\xa1\xc0\xe5\xd8\xef\x32\x28\x41\xd9\x78\x9b\x14\x28\xda\xd8\x77\x82\xb2\xf9\xc8\xbc\x86\x11\x20\xcd\xcd\x5d\x09\x6d\xca\x24\x99\xd7\x1a\x17\x76\x10\xdb\x03\x69\xec\x87\x8b\x00\xd3\x41\x61\xcb\x86\xc2\xe6\xf5\xbc\x5b\x65\xe0\x13\x18\x68\xab\x43\xee\x7d\x0c\x8b\x7f\xa2\x35\x06\x09\xcd\xbe\x6f\x6c\x08\x9a\x69\xd8\x0d\x6d\x89\x38\x26\xce\x80\xda\x79\xd3\x22\x94\x0b\x32\xab\x89\x9c\x22\x14\x48\xd5\x55\xa7\xcf\x6b\x52\x8a\x46\xda\xd9\x27\x4d\x69\x9b\x65\xc9\x9a\x54\x15\x37\xf6\x91\xd1\x2c\xf0\x6a\x05\x76\xda\xc1\x90\xd0\xc2\x0d\x1a\x1a\x24\x76\x18\x7f\xc5\x64\x9e\x8c\xf6\x45\xf7\x06\x36\xec\x3e\x74\x95\x2d\xe8\x1a\x56\xce\x65\x00\x4a\x65\x0b\x94\xc2\x03\xd2\xe7\xaf\x9e\x24\xbe\x24\x3f\xd4\xf3\x53\xb8\xb8\xea\xae\xe9\x33\xc9\x13\x73\x41\x59\x4b\xa2\xd4\x2f\xa5\xea\x18\x0e\x6a\xd9\x11\xd1\xe9\xcb\xe7\x67\x27\x3f\x7c\x7f\x78\xf6\xf6\xe5\xab\x57\x3f\xf8\x23\xfb\xbb\xda\xf1\x92\xbb\x74\x8b\xc9\xf0\x44\xc9\xe7\x5b\xd1\x19\x61\x82\x1c\x7e\x24\xd7\x03\x5f\xed\x50\x7d\xe2\x2f\xce\x31\xcb\x3b\x3b\x6d\x76\x3a\xd7\xc3\x66\xf4\xf9\x8a\x99\x2a\x8a\xcb\x58\x9f\x8b\x59\x4d\x35\x11\x08\x6a\xbc\x55\x85\xd9\xf3\x8a\xaf\x4b\x45\x47\xab\x1f\xa7\xa4\xba\x58\x70\x21\x41\x61\xb7\x54\x50\x60\x8a\xbe\xe7\x72\xa1\xe0\x2f\x65\xa3\x15\xae\x25\x9d\xad\x2b\x5c\x8f\x0e\x0f\x47\x3f\xad\x85\x1c\xad\xb0\xd0\xd0\x59\x2e\x6a\xbe\x9e\x2f\x26\x23\x23\x89\x9d\x55\x5c\x90\xd1\xf2\x7a\x64\x55\xde\x23\x3c\x9b\xf1\x35\x93\x93\x3b\x68\xfe\x3c\x1b\x51\x94\x19\xaf\x7e\xb7\x96\x71\xd2\x46\xd4\x5f\xad\x06\x2c\xe8\x84\x09\xa9\x98\x91\x12\x69\x2b\x01\xb5\x5e\x5f\xd7\xef\x36\x23\x96\x2e\xfa\x1b\xa3\x89\xb3\x6c\xda\xd1\xec\xa8\xa7\xd9\x71\x16\x6a\x4b\xd4\xcb\x7a\x05\x67\x13\xa0\x4a\xb7\x4a\x41\xa4\x2d\x6f\x4a\xdd\x69\x6e\x13\x16\x5b\x5a\xe4\x8a\xb2\x92\x5f\x4d\x2a\x6e\x42\xb9\xd5\x44\x0b\x58\x8d\x9d\xeb\x5b\xf2\xaf\x35\x11\xf2\x79\xc5\xc5\xba\x26\x29\xe5\x48\x49\xd4\x8c\x2f\x01\x5d\xd6\x50\x3d\xa9\x21\x51\xc7\x7d\x68\xee\x0c\x32\xc4\x80\x69\x1a\x76\x6c\x95\x03\x3d\x3d\xb7\x11\x8f\xeb\x78\x2f\xb1\x53\x65\x33\x10\x19\xba\x2f\xfd\x0b\x35\x8a\x0b\xf8\xd1\xb2\x1f\x6e\x41\xaf\xe1\xc4\x87\x20\xb8\x9e\x2d\x0e\x29\x2b\xc9\xa7\x2f\x9e\xe8\xd8\x02\x9a\xce\x43\xed\xff\xf9\x9a\x56\x25\x6a\x2e\x78\x4d\xf4\x2a\x43\xb5\x5d\xa0\xb3\x79\xdb\x52\xcf\xc0\x61\x9d\xb0\x0b\x3e\x06\xfd\xa9\x82\x2c\xb0\x67\xa3\x9a\xc0\xb6\x8d\x56\x20\x19\x08\x54\x29\x66\x30\x94\xf5\x9c\x7c\xd8\x8d\xea\xd9\x71\xde\xf7\x41\x48\x62\x29\x57\xff\x8e\x52\xdb\xd3\xd7\x67\x6f\xfe\xce\x05\x88\xfe\xfa\x30\x0c\xf0\x03\x6a\x1b\x26\x60\x9e\xa9\x9b\xbe\xe1\xf5\x4e\x4d\xc1\x0e\x53\x37\x3d\x25\xac\x24\xf5\x2e\x8d\x85\x6e\xa1\x70\x9c\xfe\xe3\x7b\xbc\xec\xc5\x89\xad\x96\xdf\x83\xdb\x27\x5c\xcf\x33\xf2\x49\x4e\x35\xa0\x18\x1d\x8c\xce\x88\x82\xde\x92\x08\xa9\x66\x06\x68\x33\x80\xe1\xea\x73\x00\xc0\xdb\xfb\x86\xb2\xa7\x2d\x39\x83\xba\x34\xa1\x31\xeb\x34\xec\x22\xdc\xbf\xae\x2e\x42\xeb\xd5\xa8\x8b\x78\x1f\xbb\x3a\xb1\xbb\x97\xe8\x26\xda\xcf\xfe\x1e\x60\x17\x5d\x2f\x1e\x92\xb4\xfb\xa7\xa0\xa8\xb5\x33\xf2\xbc\x0a\x43\xe2\xbc\x39\x85\x50\xaf\xdb\x05\x27\x08\x2b\x35\x01\x42\x84\x1c\x41\xf4\x28\xc9\x47\xd7\x7c\x1d\x00\x08\x7b\x54\x0d\x27\x1f\x92\x0b\xc1\xa0\xfe\xd9\x07\x6c\x83\x5b\x46\xc0\x10\x5b\xce\x00\x22\xb5\xae\x6b\x6b\x39\x41\x26\x66\xb1\x4f\x13\xf0\x88\x44\xe6\x79\xbe\x7c\xb0\x29\xdb\x64\xf7\xc0\x35\x2b\x3c\x23\x60\xf6\xff\xef\x66\x82\xa7\x97\xd6\xcd\x10\x5f\xf0\x0a\xc0\xc1\x0e\xd6\x76\xd6\x26\xaa\xbb\xae\xad\xa1\xc0\x8c\x1a\x5f\x18\x8f\x67\x8d\x00\x63\x0f\x6e\x0d\x62\x02\xa1\xb2\xef\xfc\xd3\x88\xb8\x50\x66\x18\x3e\xe3\xf4\x73\x3c\x05\x69\x21\xd2\x43\xe8\xb0\xc2\x6a\xc9\xc1\x57\x81\x36\x9b\x6c\xa0\x5b\xb3\xa2\xf6\x5e\x60\x89\xc7\xd9\x4e\x2e\xc5\xc6\x96\x86\x28\xec\x08\x3e\x10\x37\x54\xfb\x33\x1b\x56\x7e\xb3\xc9\x9b\x9e\x7d\xde\xd2\x1c\x0c\xca\x26\x4b\xcc\xf0\x9c\x74\x10\xe7\xb0\x8c\x9c\xc4\x16\x44\xa7\x0b\x7e\x15\x6a\xff\xbd\x39\x4c\x68\x99\x76\xf7\x82\x9b\x0e\x35\x53\xc4\xa9\x29\x81\x6a\xe0\xe2\x0f\x04\xaa\xfa\x9c\x60\xf5\xbd\x31\xb5\xae\x47\x8d\x9c\xf3\x82\x68\x3b\xb8\xdc\xb7\x04\x31\x0b\xc9\x26\x17\x94\x95\xdf\x5d\x8f\x91\x9a\x22\xcb\xa0\x10\x46\xda\xe3\x45\x51\x88\x83\x03\x84\xf6\x8b\x82\x9b\x7f\xc5\xd3\x71\x0b\x90\xb6\x17\x91\xc1\x2a\xc7\x68\x41\x4b\x92\xb0\xce\xe9\x6b\x52\x52\xb1\xe2\x82\x84\x40\xb0\x39\x1d\x68\x34\x66\x2d\x7a\x39\xb9\xe9\xa1\x6d\x9e\x5f\x1a\xd9\xee\x35\x97\x22\xc9\xfe\xc3\x8e\x6b\x01\x40\x36\x8d\x57\x93\x38\xa5\x2d\xc6\x4c\xea\x10\x5f\x6a\xb0\xe6\x0e\x11\x40\x03\xb8\xe9\xeb\x70\x84\x3f\x4e\x96\x78\xe5\xbd\x3a\x80\x0d\x8a\x7a\x44\xda\x6a\xe9\x42\x3b\x57\x80\xde\x1f\xde\x9c\xb1\xdc\xf7\x71\x0c\x0c\x92\xb0\x27\x32\x72\x64\x07\x3a\x50\x36\x01\x38\xdb\x36\x21\x04\xd3\x43\x07\x90\xd4\x19\xf0\x2b\xa6\x36\x0c\x54\x3c\x0d\xcc\xd5\x86\x0a\x28\xbd\x83\x66\x26\xb3\xc6\x16\x08\x38\xb9\x1f\xae\x18\xa9\x43\x39\xae\x77\xda\xf3\x1a\x33\xa9\xab\x34\x1e\x49\xdb\x79\xa5\x67\x65\x49\xca\x11\x16\x23\xae\x5a\x26\x88\xe4\xe1\x06\x30\x70\xa8\x1a\x54\x0e\xa5\x91\x3f\x93\x90\xc6\x23\x90\xf5\x74\xbf\x37\xb2\x4b\xfd\xe3\x39\xaf\x78\x3d\x45\x5f\x3d\xf9\xf3\xd7\x4f\xbe\xfe\x2f\x94\x93\x92\x4a\x60\x80\x34\x2a\x80\x1b\xec\x7d\x50\x30\x08\xee\xfc\x0b\x8a\x2b\xae\x8d\xa9\x23\x68\xf7\xac\x2c\x03\xcb\x44\x70\x70\xb5\x23\xc7\x4f\xaf\x99\x85\x57\xe2\x83\x42\x5c\x96\xb0\xcd\x29\x38\xd8\x14\x36\x40\xf0\xd4\x4d\x11\xa6\x91\x00\xbe\x86\x5f\x0b\x68\x9e\x78\x65\x28\xdf\xf7\x6e\x5e\x5c\x98\xb9\xa1\x40\x9f\x92\x18\xca\x6d\x65\x34\x90\xb7\x15\xc4\x07\xab\x5d\xbb\x42\xac\xc0\xa0\xd2\x9e\x91\xed\x1d\x52\x03\x75\x6f\x91\x57\xea\xed\x11\x91\xba\xf7\xc8\x85\xda\x1f\x55\xd7\x7b\x56\x96\x0d\x20\xd2\x98\xd2\x93\xdc\xb8\x75\x64\xd6\xef\x48\xcf\x31\xae\x02\x1d\xda\x3a\x9b\x3d\x04\xd2\x2a\x5d\xf7\xe0\x60\x6c\xfe\x2a\xdc\x1d\xcc\x72\x4f\x12\xaf\xc1\x71\x9b\x46\x8f\xcf\x7d\x0b\x58\x9d\xb6\x70\x53\xab\x83\x5d\xac\x40\xe3\x2b\x19\x2a\xd8\x9e\x95\xa5\x36\xb8\xd6\x1b\x08\xb7\x23\xe5\x6f\xde\xde\x3d\x16\x17\x87\x3b\x17\x78\x61\x37\x97\x0b\x94\x04\x2e\x4a\x42\xbc\xd0\xd6\xf1\xef\xbc\x55\xed\x1e\x76\xd9\xab\xd6\xe5\x04\x47\x42\x7b\xeb\xd5\xd3\xe0\xd6\x7a\x57\x5f\x3c\xd6\xa1\xae\xe4\xfe\xfb\xf0\xde\x96\xb6\x8e\x1c\x42\xfd\xd8\xed\xf2\x23\xc7\x75\xbd\xfc\xe3\x70\x12\x50\xaa\x4e\x15\xbe\xd0\x32\x32\xdf\xf1\xa1\x0a\xb8\x51\xec\x1f\xdd\x99\xcd\x59\x0b\x52\xef\xc4\xe5\xe0\xb5\x5c\x0c\x89\xf3\xd8\xc3\x14\x41\x08\x48\x13\x7d\x35\x15\x00\x32\xa7\x0f\x85\xa8\xf0\x2e\x8c\x91\x68\x90\xd7\xf9\xba\xfa\x08\x4e\x2c\x8a\x6a\x27\x57\x3a\x42\xd1\x0e\xf1\x90\xe0\xd2\x41\x3b\x94\xdf\x5c\xb8\x68\x5d\x1a\x17\x36\x7f\x43\x1c\x77\x04\xb8\x10\xa2\x05\x5d\x52\x68\xa6\x99\x7c\x2d\x55\x85\x05\x06\x94\xbe\x82\xc6\xaa\x52\xa7\x59\xbe\x02\x1b\xfa\x6c\x13\x50\xda\xcc\xcb\x0b\x05\x66\xc0\xaf\xfa\x0a\x06\x2b\xa9\x90\x56\xa6\xd9\xe4\xa2\x69\xd7\xeb\x6a\xda\x1e\x66\x9b\x75\x3d\xbd\x68\x01\x84\x44\x27\xdd\x10\xa1\x6f\xd6\x15\xde\x65\xd2\x4d\x34\xb3\xbb\xcf\xd9\xeb\xe3\x6e\x53\x26\x10\xfd\x2c\xbb\xbd\xdd\xa7\xce\x94\x57\x55\xc7\xb4\xea\xa9\x3e\x60\x79\x26\xae\xda\x96\xb5\x7d\xb3\xa5\x75\xe7\xaa\x5a\x0a\x08\xfb\x12\x42\x87\x21\x73\xe3\x3c\x8f\xa1\x88\x91\xda\xe5\x01\x79\x2f\x25\x49\xfa\x03\x39\x0e\x31\x22\x36\x5d\x88\xd6\x7b\x31\xfe\x9b\x50\xcc\x7e\xea\xa0\x1c\x94\x40\x59\x1b\x19\x7a\x85\x3b\xa3\x41\xbf\xed\x16\x04\x18\xee\xa5\x08\xcc\x43\xfc\xf9\x25\x37\xb8\xa9\xd0\xd0\xc3\x9d\xfb\x26\x06\x6e\x5c\xcc\xe7\xe0\xdd\x90\x91\x76\xda\x1f\xca\xe6\xf4\x62\xa3\x2f\x45\xde\xa6\x57\xd4\x13\x39\x58\x15\xa3\x4c\xdb\x7a\x74\xd7\x82\x9b\xab\x70\x91\x0e\x3e\x60\x38\x24\xad\x95\x01\x91\x3b\x18\x8b\x18\xb1\xda\x52\xc7\x26\x30\x3f\xd4\xf7\x57\x74\x49\xe5\xf4\xc9\x9f\x76\x17\x63\x29\x1e\x5b\x0f\x29\xc6\x0d\x72\x33\x06\x49\x5a\x8a\xe0\x57\xf0\x55\xb1\x66\xd5\xa0\x72\xd6\x81\xc9\x53\xc2\x2c\x7b\xdc\x20\xcc\x0a\xba\x0e\x21\x81\x1e\x02\xe5\x37\xf6\xe5\xaf\xd6\xf5\x8a\x0b\x90\x7f\x7b\x93\xd0\x22\x87\x36\x59\x66\x36\x44\x57\x99\xd0\xd8\x02\xa5\xd9\xc7\x50\x47\x1a\x2c\xc1\x0b\xfa\x20\x3a\x42\x2b\x99\x51\x22\x53\x9c\xb5\x93\x59\x2c\xb1\x9c\x2d\x00\xa2\xc8\xa8\x82\x3e\x20\xf7\x4e\x65\xf1\xed\x0d\x18\xf5\x99\x7c\x62\xe3\xf7\x1f\xb2\x3d\x39\xb9\xe0\xf5\x4b\x3c\x5b\xb8\x72\x5e\x10\x27\x3c\x53\xbd\x9c\x94\x28\x97\x1e\xdd\x18\x05\x3d\xe3\xd9\xc1\x01\x9b\xac\xd6\x62\x61\x0c\x7d\x64\xe8\xdd\x0b\xcf\x3c\x67\xd9\x26\x25\x5a\x7c\x56\xc2\x16\xf7\x12\x1d\x7a\xcf\x3a\xa8\x0e\x53\x18\xd0\x1c\xba\xc7\x81\x5e\x80\xee\x16\xf8\x7c\x08\xeb\x60\xdb\xe2\xf1\xb6\x02\xe1\xe4\xb9\xe3\xb2\x4c\x88\xf9\xfc\x2b\xdf\x09\x13\xfd\x9d\x48\xbd\x9c\xa1\x02\x84\xf8\xe2\xd3\x72\x4a\x36\x49\x1d\xbc\x96\x00\x76\x1e\x40\x50\x1e\xcb\x71\x77\x39\x06\x7f\x5a\x21\xa7\x68\x1e\x73\x24\xd0\x9d\xd0\x32\x71\x60\xb7\xb7\xdc\x97\x48\xec\x17\x05\x14\xb4\x0e\x32\x31\xef\xbb\x9d\xa5\x95\xda\xaa\xf9\xec\x7c\xa2\x89\xdd\x6d\x73\x65\x89\xa3\x52\xe0\xc9\x9d\xf4\xcb\x92\xca\x0e\xe9\x8d\x69\xba\x65\x2f\x49\xa7\x4c\xa6\xf3\xd8\xbd\xd2\xe6\xd0\x5f\xda\x11\x07\x1e\x79\x33\xc3\xf0\x24\x7d\x91\x52\x5a\x1c\x70\xff\x63\x5b\x83\x58\xe3\x0e\xaf\xb0\xb5\x31\x31\x5b\x6f\x36\xbd\x61\xeb\xc1\xe3\x59\x11\x5c\x00\xe8\x13\x87\xe5\x63\x92\xbb\x9d\x17\xcc\x08\xe8\xba\x43\xe8\xae\x2b\xcc\x5e\x88\x55\xbc\xa0\x09\x11\xbe\xb3\x73\x7f\x56\x96\xbf\xf8\xc4\x15\x6c\xeb\x98\x75\xde\xae\x23\x0e\x01\xb9\xa2\x14\x9e\x89\x82\x40\x78\x68\x38\x54\x8a\xc4\x2b\xd5\xf5\xc6\xd9\x0d\x20\xc7\x7a\xad\xc8\xae\x73\xbe\x66\x33\xb0\xf6\xca\x63\x87\x96\x56\x1f\x7f\xfc\xd3\x11\xc4\x69\x24\xf8\xb2\x81\x7d\xe0\x0c\xd4\x43\x34\xa4\x69\x83\x4a\x75\x32\x96\x79\x9b\x8b\x89\xc6\x6d\x13\x54\xa0\x7e\xf8\x1f\x4e\xd9\x7d\x27\xf1\x13\xa7\xec\x3e\x73\xd0\xf4\x47\x78\x61\x1a\xb2\xc4\xd1\x33\xf1\x46\xde\x55\xa3\xa1\x29\xfd\x8a\x0a\xf9\xbb\xd4\x49\xec\xcc\x28\x28\xc8\xd5\x08\xa4\x00\xf3\x34\xbf\x41\x25\xa7\xb0\xcf\x02\x8b\x53\xe3\xbc\x64\x04\x4a\xc7\x49\x9d\x8a\xfa\xf6\x86\xd4\xcb\x97\x9f\x56\x95\x0e\x08\x73\x3c\x50\xca\x65\xc3\x21\x16\x37\x1b\xfb\x8a\xbd\xe1\x8a\xf7\x1f\xee\xa0\x35\xbf\x2b\xef\xd0\x92\x39\x18\x96\x75\x8f\x38\xa2\x59\x35\x26\x16\x16\x3a\x5d\x87\x7a\x52\x41\x74\x28\x6b\xe1\xed\x7b\xf6\xd9\x34\x4d\xa5\xce\x0d\x30\x01\x99\x2c\xb1\x50\x0b\x16\x6d\x62\x7a\xb4\xc1\x1c\xc9\x36\xe6\x54\xac\x30\xc1\xe7\xdc\x6d\x20\x79\x5f\xcb\xea\x92\x09\xf8\x24\x38\x54\x7c\x6e\x9d\xd7\xba\x60\x9f\xee\xc6\x1b\x2e\xff\x5a\xc3\x3a\xc9\xe7\xf3\x8a\xa8\x63\x0e\x39\xab\xe8\xf0\x5b\x9a\x28\xbf\xcc\xc9\xa1\xc3\xef\x31\xe2\x9f\xac\xd4\x28\x28\xd3\xf5\xc6\x2d\x55\xb5\x2b\x5e\xd0\x92\x8c\xdd\xd4\xe0\xaa\x02\x3d\x12\xef\xab\xf3\xb5\x34\x5f\x8c\xcb\x53\xc8\xc2\x79\x57\x4f\x1f\x7b\xd4\xe4\xa9\xd4\x8c\x4f\x20\x56\x9f\xca\xe2\x47\x9b\xe2\x4b\xe6\xbe\xab\xba\x15\xdc\x6b\xf5\x91\x6b\xb0\x09\xb1\x95\x3f\x62\x18\x02\x21\x7e\x7a\xc8\xb9\x26\x7c\xdb\x1c\xc6\x33\x2d\xb2\x8a\x60\xbe\xbe\x33\x11\x2a\xde\x93\xc6\x54\x4a\x37\x50\x47\x64\x9c\x2a\xe0\x77\xe4\x74\x65\x02\xa2\x49\x37\xce\x4b\x2d\x5b\xde\x61\x1c\x10\x46\x37\xe3\x98\xdf\xdb\xc6\xd1\xae\x10\xbb\x2c\x07\xd4\x0e\x6e\x35\xc6\x43\x65\xcb\x20\x0c\x57\xd7\x92\xce\xc4\x2e\x03\xd9\x36\xde\x60\xee\xd3\xb6\x01\xe1\xcd\x0e\x1f\xcc\xc9\xef\x9b\xc1\x9a\x4f\xdd\x83\x35\x0c\x82\x1d\x8b\x75\x8f\xa5\xda\x1b\xec\x44\x89\x80\xaf\x08\x7c\x7c\xd5\x5f\x35\xb9\xa4\x42\xff\xd5\xc8\xea\x73\xe4\x24\xe0\x39\x02\x51\x71\x8e\x4c\xd6\x74\x85\x7a\xed\xdd\x72\x87\x6f\x8f\xc7\x5f\x10\x32\x5e\x08\x61\x38\x6d\x8b\x8f\x1a\x7d\x1a\x98\xf0\xdb\x60\xb9\x79\x93\x1f\x10\xa1\xdc\xb7\x0e\x07\xe3\xc5\x24\xdf\xe0\x4b\x14\xc1\x21\x79\xc1\xaf\x26\xe7\x86\x20\x0d\xbd\x7d\x1b\x50\x28\x66\x0b\xa2\x90\xf4\x18\xe1\x0b\x49\xea\xb7\x60\x9b\x09\x01\x58\x92\xc3\x78\xca\x0c\x67\x17\x93\x0d\x9a\x53\xcb\x52\x68\x68\x13\xcf\x14\xbe\x4f\x69\xeb\x76\x35\x54\xd6\x36\x21\x88\xf7\x02\x3d\x0d\x69\xf4\x32\x59\xb6\x75\xa9\x5b\x94\x1a\xa4\x12\x64\x14\x75\x6f\xaf\x4f\x47\xef\xd5\x60\x8d\x89\xed\xdc\x77\x82\x33\x99\x53\x0f\x0e\xda\x8a\x0e\x5b\xa6\xf5\x52\x83\x8f\xa5\xc3\xe6\x6b\xc0\x31\x26\xde\x27\x09\xe2\xca\x32\x47\xf7\x64\x07\x07\xc1\x77\xff\x6a\x83\xa4\xcd\x12\x48\x45\x11\x95\x06\x24\x40\x93\xf2\x68\x4c\x72\xaf\xfb\x8d\xce\x55\x99\x5c\x03\x19\xa4\xc1\x09\x25\x4c\x29\xe1\x12\xbc\xdb\x4e\x40\xb3\xc5\x68\xe5\x28\xd4\x85\xef\xa2\xed\x4e\xa1\xd0\xf7\x1f\xfa\x71\x68\xa7\xaa\x3c\x96\x4d\xbd\x6b\x88\xb4\x94\x4e\xc3\x18\xd2\x19\x6d\x50\xae\x18\x57\x7f\x9f\xbe\x5b\x57\x1f\xd3\xe2\x4d\x1b\x66\xbc\xcb\x5a\x52\x6f\x87\x6a\xee\xb6\xa4\x93\x40\x09\xa8\xd2\xb4\xfe\xbf\x97\xdc\x18\xbc\x57\x1d\x6b\xb7\xdd\x59\xd5\x4e\x52\x88\x99\x5e\xaf\xbb\x56\xc0\x41\x3a\x51\x43\x4c\x92\xad\xed\x4a\x23\x3c\x99\x5c\x92\x22\xa0\xac\xd8\x29\x94\x4b\x24\x25\x8c\x7b\x3c\xd8\x40\x13\xc6\xc3\x0d\xa5\xab\x9d\x94\x01\x91\x0f\xa9\x16\xd4\x0f\x61\x42\x37\xc3\xab\x6e\xc4\xe3\x32\x0b\xb7\xdc\xf2\x17\xbc\x53\x16\xd2\x25\xbd\xd9\x2e\x5b\xf0\xd7\x9e\x64\xeb\xdb\x3b\xd7\x9a\xfd\x31\xe8\x8f\xdb\x49\x4d\xfc\x25\xdd\xde\xf6\x08\x2d\x48\x2e\x5b\x02\x83\x80\x55\x19\x20\xa0\x78\x88\x95\x1c\xdd\x63\x25\x5a\xf2\x31\x70\x21\x7e\xfc\xe7\x88\x0f\x8b\x43\x43\xdb\xea\x26\x57\x49\x5c\xd5\xc6\x40\x1e\x2e\x3b\x09\xa7\xb3\x9b\x8e\xd4\x1a\xc9\x3e\xc6\x65\x79\x28\xc8\x0c\xfc\x32\xff\xbd\xdc\x12\x9c\x21\x30\xc8\x3b\x06\xf8\x11\xc0\x3e\xf4\xd7\xb7\x9b\x95\xe5\x10\x3a\xb7\xc3\x5f\x8b\x91\xab\x53\xa8\x69\x4d\x56\xc3\x2f\xaf\xa9\x76\xd4\xed\x70\x89\x0a\xeb\xaa\xb1\x34\x20\x38\xce\xf5\x0e\x9f\x94\x53\xd0\x08\x99\xb9\x58\x70\x31\xc3\x5a\x0e\xdf\xf2\x7e\x58\x39\x2b\x63\xe7\xda\xa8\xf6\x6e\x55\x73\x69\x4f\xbe\x2f\x39\x69\xaa\x41\x18\xfb\xc3\xcf\x51\xfa\xc6\x55\x3a\xbb\x5e\x91\xc9\x2b\x3e\x0b\x42\xa6\x7b\x73\x99\xd8\x8e\xd5\xa4\x35\x2f\xbc\xc0\xe2\xbb\x8a\xcf\x3e\x8a\xd6\x12\xce\xf5\xe7\xfe\x79\x42\x1d\xc3\x16\xa3\xec\x5b\x75\x8d\x38\xd3\xd8\xe4\x4c\x73\x5e\xa6\x57\x7e\x0e\x21\xfe\x81\x9c\x08\xfa\x4c\x84\x6e\x51\xdb\x8d\xa2\x28\xf9\xba\x5d\xd6\xc2\xe8\xa4\xa5\x9f\xb4\x07\x64\x7c\x0f\x1a\x2e\x2c\x32\x85\x21\x8a\x25\x21\x9a\xca\x2c\x09\xeb\xe0\x4a\x58\x43\x03\xd9\x70\xaf\x9a\xf4\x8d\x11\x2d\x89\xc9\x54\xd2\x4f\xc5\x92\x36\xd1\xba\xc9\x72\x5c\x96\xe6\x0a\x3a\x40\xe4\x8d\x91\xd8\x22\x2b\x42\x39\xca\x59\x71\x1c\xe0\xd8\x73\x72\xc1\x6b\xf2\x06\x42\xbb\x89\x8e\x0c\x3e\x34\xe0\x49\xe6\x44\xc0\xa6\x53\x63\x52\xea\x0e\xd5\x1e\x92\x2d\xc0\x42\x02\x70\x51\x78\xa2\x78\xf2\x1f\xa4\xe9\x62\x22\xc8\xbf\xd6\x84\x39\xb7\x91\xa6\xa0\x22\x97\x44\xd1\x1d\x86\x25\x31\xca\x6b\x9e\x65\x37\xac\xe0\x76\x44\x5d\xc5\x88\x01\x7f\xd4\x08\xe7\x44\xbb\xd0\xb6\xe6\x19\x9c\x92\xb9\x96\xfe\x68\x46\x22\xc8\x7d\xb9\x8f\x5a\xdb\xe1\xf1\x7e\x51\x84\xcc\xb9\xdf\xed\x7b\x72\x78\xfc\x61\x4f\x46\xa9\x57\x58\xf6\x94\x5b\x3c\x69\x57\xf7\xf8\xc9\x74\xdc\xfa\xf8\x88\x25\x77\x22\x7b\xfc\x64\xb3\x71\x93\x34\x85\x7e\xc3\x5c\x2a\xe8\xdb\x14\xc0\x46\x84\xa6\xad\x49\x90\x50\x14\x85\x88\x9f\xff\x5b\x9d\xf4\xe9\xe0\x20\x18\x49\x62\xb9\xd6\x16\x42\xe0\xf9\xaf\x0a\x8c\xdb\x70\x85\x25\xbd\x24\xea\x36\x3d\x15\x13\x90\x4c\x9e\x4a\x2c\xc9\xe4\x0d\xb8\x15\x7e\x4f\xae\xa6\xc9\x82\x90\x8e\x87\x18\x73\xa7\x76\x62\x8a\xf2\xf5\x05\x9f\x41\xf1\x38\x71\x00\x31\xf8\x0d\x39\x63\xb6\xcd\x22\x2e\x7a\xf6\x41\x60\x28\xff\x5d\xd8\x20\xbe\x20\x68\x79\x4b\x66\xbc\x2e\xe1\xbc\x34\x3d\x2a\xfc\x9d\xd6\x86\x18\xed\xfd\x07\x9e\xc4\xd4\x85\x78\x5f\xea\xa4\x9c\x55\x32\x93\x84\x49\x93\x48\xcc\xbd\x39\xf7\xad\x69\xaa\x06\x0d\xaa\xb9\x0f\x99\x0d\xb8\x7b\xa3\x3e\x41\x14\x3a\x3c\xbd\x69\xe6\x35\xed\x98\x56\x5e\xe3\xab\xef\x78\x79\xed\x64\x34\x73\xed\xa9\xe6\x91\xeb\xd1\x36\x37\x2a\x3a\x0f\xf6\x88\xa4\xa0\x5e\x72\x8d\x33\x72\x87\x8d\xf5\xdd\xd3\x37\xc9\x4e\xfc\xa9\x42\xba\x86\x4a\x83\x03\xd7\xa8\xe5\xdf\xef\xb8\x9b\xf0\x86\xe6\xe8\x5c\xd8\x37\x5b\xf1\x9c\x97\xd7\xee\x60\xf5\x8f\xec\x81\xaf\x88\x1b\x49\x6d\x71\x8b\x4d\xba\xe7\xfd\xb1\xd0\x01\x7e\x42\x74\x50\x75\x9b\x9a\xd9\xea\x5c\x32\xb9\xa2\x05\x6b\x86\xab\x53\xbe\xae\x67\xc4\x16\x87\x5f\x51\x76\xaf\x1b\xb8\xb3\xcf\x95\xa3\xb3\xf5\xce\x1c\x5a\x59\x68\x43\x68\x7f\x08\x90\xc7\xc3\x90\xc9\xb2\x8b\x4c\xbe\xe9\x25\x59\xdb\xaa\xb5\x98\x1c\xea\xbb\xc1\xa1\xfd\x5b\x67\x45\x88\x65\xe6\x38\xe7\xe0\x9a\xeb\x3d\x0a\x75\x61\x10\xde\xa9\x55\xc7\xc5\x27\x23\xed\x67\x83\xca\xf5\x72\xa9\xae\x09\x49\xdc\xf0\xb8\xa3\xe8\xaa\x93\xf8\xaa\xc7\xf5\xfd\x3b\x4f\x82\x67\x18\xd7\xb4\xaf\xd0\x56\x83\x47\x18\xd7\xb2\xaf\xd1\x54\xb2\x77\xbc\x55\xcf\x5d\x7e\x57\x95\x7c\x9a\x91\x7a\x25\xdb\x55\x6d\x41\x96\xe5\xb2\x59\x4e\x6a\x17\x8d\x40\x6b\xd8\x4e\xcb\x9e\x9d\x96\xc3\x67\x2f\xdd\xa1\xe8\x2c\xa4\x89\xf3\x80\xc4\x50\xb6\x62\xf4\x7c\x13\xab\x0d\x9f\x77\xa8\x30\x98\xc7\x39\x1b\x14\xf0\x89\x54\x6b\xf0\x26\xe1\xb8\x2d\x3e\x79\x8c\x1e\xf5\xde\x94\x47\xe8\xb1\xbc\x5e\x11\xfb\x9e\x43\xf2\xe2\x39\x66\x33\x52\x45\x2c\x3e\x7c\xb4\x0c\xfe\x33\x2f\x82\x8c\x5f\xeb\x99\xa3\x58\x74\x24\xeb\x00\xd4\xc8\xa1\xa0\xc6\xcc\xf4\xb0\xa2\xec\x23\xa9\xb7\x71\xf5\x81\x19\xc3\x17\xc4\xd2\x7b\x8c\xbc\x5a\x48\x77\xcc\x2d\xf6\xf1\x7b\x17\xd0\xae\x82\xe3\x03\xc3\x05\x89\xcf\x8f\xad\x10\x73\xba\x7f\xa4\x7e\x3f\x69\x7e\x1f\xab\xdf\x5f\xfb\xbf\x15\x63\x65\x80\x7e\x9b\x01\xf5\x3b\xeb\x67\x43\x83\x9a\x8a\x93\x52\xfd\x3e\x73\x11\x7a\x93\x5d\x3f\x19\xdc\xf5\x93\x56\xd7\x60\xbc\x94\xea\xf5\xeb\xc1\xbd\x7e\xdd\xea\xf5\x7b\x22\xaf\x78\xfd\x31\xd5\xed\x1f\x07\x77\xfb\xc7\xa0\x5b\x06\x5d\xbe\x32\xc1\xaf\xd4\x89\x7d\x24\xd7\x57\xbc\x2e\x85\xb1\x2e\x79\x8d\xe5\x6c\x41\xda\x3b\xb4\x84\xef\xfd\xac\xba\xa9\xe3\x7c\xe4\x88\x93\x2f\x58\x99\xc0\xed\x2d\x90\x87\xfe\xef\x26\x74\xb2\xfd\xba\xc9\x9c\x94\xa5\x25\x48\xc1\x51\x02\x1f\x13\x07\xe2\xab\xf0\xc9\x81\x3c\xe6\xd0\x87\x21\x8e\x0f\x34\xdb\xab\xa5\x12\xc3\x0d\x63\xcc\xe2\x0a\x47\x36\x89\xe9\xfb\x0f\xb9\x5e\x8b\xfa\xc3\x5b\xc4\xf4\xfd\x87\x7b\xa6\xab\x0f\x64\x1e\x91\xf1\xc6\x6b\xe3\x91\xe1\x11\xc4\x09\xf1\x83\x67\x4b\x11\xa8\x1a\xc1\xd9\x1f\x88\x3b\x5e\x74\x91\x7d\xa2\x48\x6c\x9b\x27\x02\x56\x7b\x0c\x76\x3c\xcf\x31\x2b\x69\x89\x25\x11\x63\x6d\x70\x65\x08\xb5\x30\x6e\x33\xa0\x1b\x57\x13\xf0\x81\xa7\xe4\x80\xf7\x6e\x44\xf7\x90\xbc\x1b\x2e\x49\x66\xb9\x56\x7b\x31\xfc\x76\xde\x7b\x0e\x9b\x7a\x47\x01\x99\xc8\x5b\xf7\x2b\xb3\x06\xf5\xfe\xf0\xd9\xed\x6d\xf3\xd5\xef\x3c\xbb\xbd\x1d\x9b\x61\x43\x10\xa4\xf5\x31\xae\xe0\x49\x57\x81\x07\x03\x74\x40\x3c\x57\xf0\xc7\xa0\x45\xd6\x36\x00\x27\x2d\xe3\x51\x28\x63\x7f\xa7\x25\x19\x93\x3c\x72\xfd\x69\xae\x87\x4d\x45\xa4\x2f\x21\x2b\xb5\x0b\x60\xf7\xfd\x4e\x84\x56\xf6\x9f\x92\x01\x1a\x36\x62\x5e\x9f\xff\xd2\x26\xbf\xa2\x55\xf5\x82\x08\x59\xf3\xeb\x21\x49\xbb\xba\x26\xdf\x52\x5d\xa5\xa4\x5d\x9b\xfc\x82\x48\x6d\x34\x1a\x3f\x20\x0b\xd4\x1c\x4d\x1c\x3a\x39\x7b\xc4\x88\x05\x6b\xc3\x9e\xb5\x1f\x09\xca\x3c\x02\x30\x70\xf5\xde\x01\xe9\x7e\x03\x6e\xb4\x76\x98\x97\x6d\xe6\xaf\xa0\x6e\x50\xcb\xcd\xff\x53\x1b\x7f\x09\x22\x4f\x2d\xb2\x4d\xa9\x70\xbc\xf7\x16\x5a\x1b\x34\x50\x3a\xd6\xda\xd9\xc0\x90\xd2\xbc\x39\xdf\x33\xc5\x0b\xc0\x9c\x7b\x66\x5c\x0a\x60\x68\x11\x12\x2d\xf5\xfd\x0d\x1e\xdb\xee\xed\x99\x87\x30\xee\xd2\xfa\xae\xf3\x66\xf7\x9b\xb7\x4e\x56\x1f\x90\x9c\xa9\xf7\xe8\xa4\x20\xaf\x28\x4b\x65\xe0\x6f\x0e\x21\x92\x75\x87\x68\xbc\x7d\xd4\x11\x56\x4f\x7b\xfc\x7b\x90\x7f\x8f\x14\x37\xfa\x8d\x83\x8f\xd9\x00\x39\x80\x8d\x21\xc3\x73\x5a\x4e\x9d\xa6\x67\xb2\xc4\x1f\xc9\x49\x39\x3e\xfe\x33\x10\x81\x10\x33\xc6\xcc\x06\xe5\x90\x67\x08\x22\xcf\x58\x1e\x41\x8d\x01\xc9\x4c\xa6\x72\xb3\x69\x80\xb6\x79\x93\x89\xe5\x1e\x1c\xec\x0c\x9e\xb6\xb8\x24\xb4\xc5\x94\xaf\xf4\x53\x1e\x43\xcc\x8a\x33\x7c\xde\xd8\x2d\x7a\xf2\xae\x00\xf4\x1f\xab\xc3\x0f\x22\xa1\x05\x08\xe0\x49\xa2\xd8\x43\x03\x5f\x27\x8a\x3d\x64\xf0\x47\x5d\x7c\x57\x31\x87\xfd\xe3\xb3\x4b\x3a\x3a\x28\xa0\x61\x1c\x9f\x26\x3b\x7e\x3b\x0c\x9f\xdb\x74\xe0\x6e\xfb\xe2\x98\xa6\xd8\xb9\x5f\x33\x88\xe9\x4c\x3d\x0d\xc5\xaf\x89\xe9\x7b\x14\xcc\xfb\xf0\xaa\xc6\xab\x95\x56\x2b\x33\xce\x0e\x57\x35\x65\x12\x9f\x57\x04\x7d\xd8\x1a\x42\x7d\x77\x3d\xaf\x56\x40\x6e\xd3\xf3\xea\x4a\x28\xcb\x67\x58\x92\x39\xaf\xaf\xfb\xeb\xdb\x5a\x68\x5b\x86\x25\x0b\xc7\x9f\x43\x03\xea\xf8\x1d\xed\x93\x99\x4b\x3c\xff\x39\xf8\xb0\x16\xd6\x48\x3b\x66\x8c\x26\x8c\x43\x50\x4a\x10\x72\xe9\x54\xe2\xbc\x7e\x2d\xe6\x28\xcb\xd7\x0c\x0b\x41\xe7\x8c\xb4\xb9\x98\xf6\x04\x50\x8e\xd4\xb0\x29\x7e\xee\x28\x32\x65\x6f\x35\xb5\x11\xf3\x0e\x0e\xc2\xaa\xba\xc3\xac\xe1\xa9\xee\xe4\x27\x6c\xdd\x81\x83\xb7\x15\x9d\x07\xf0\x02\x2f\xcc\xf1\x36\x33\x1b\x77\xc9\xcf\x93\x21\xf0\x12\x7b\xe2\x79\x01\xbc\xff\xe0\xa2\xec\x7b\x06\x24\xed\xfe\x25\xe4\xcf\xf0\x15\xde\x51\x99\xb5\xda\x3e\x6e\x63\xd2\xb8\xa6\x58\x55\x54\x8e\xd1\x57\x10\xc1\x5e\xd3\x04\x81\x49\x79\x63\x01\xae\x39\x95\xd0\x09\x77\xe3\xc3\x77\x75\xb4\xf6\x4a\x91\xc8\x0b\x40\x5b\x08\xfb\xdb\xdb\xad\xa1\xf7\x97\xd5\x91\xd9\xc2\xad\xc1\x85\xe0\x75\xee\x81\x66\x6b\xaf\x7f\xc9\xc1\xf2\x1b\x2d\xdf\x7a\x83\x6b\xbc\x14\xd3\x1b\x89\xcf\xa7\xcd\xc3\x34\x99\x36\x00\xd5\xfd\x03\x12\x78\x24\xed\x8f\x20\xd2\xe0\xde\xe0\xf1\x03\x17\x69\xfb\xb7\xa8\xd6\x5a\x29\x31\x69\x28\x9c\x94\x46\x07\xaa\xed\x1a\xef\xb8\x0d\xfa\x41\x34\xf1\xd9\xb0\xed\x2f\x6c\x6a\x43\xc0\xcf\x55\x27\xa8\x52\x7f\xbf\xc1\x73\x02\x42\x3e\x5d\xa2\x90\x03\xfc\xfa\xb4\xc2\xac\x04\x71\x5f\x1b\xe0\x58\xba\x76\x8b\xb3\x10\x15\x86\x87\x54\x14\xa0\x6f\x23\xe6\x0a\x28\x9b\x3b\x21\x48\x4b\x7e\x92\x92\x59\x24\x5d\x7f\xdc\x1d\x57\x14\xe4\x45\xc5\xaf\xc6\xfe\x2c\x8c\x8a\x33\x53\xe4\xd8\x30\x03\x1a\x97\xd5\x82\x95\x8a\xb4\x80\x8f\xbe\xa0\xdb\x6c\x0e\x08\x2c\xd8\xac\x5a\x97\x01\x94\x84\x72\xad\x56\x57\x5b\xae\xe0\x44\x33\xb3\x88\x7c\xd2\xc6\x1c\x79\xb8\xe8\x50\xf8\x6e\x0f\x26\xc8\x30\xa4\x95\x3f\x59\x2b\xbf\x87\xea\x0d\x28\x91\x44\x9e\x5e\x6b\x21\xb2\xb7\xdd\xfc\x80\x75\x99\x1f\x44\x36\x1b\x13\x63\x82\x00\x6d\x02\x73\x82\xf5\x79\x45\xc5\x82\x94\x0a\xa4\x82\x52\xa3\x31\x4a\xc8\x13\x87\x9c\xc5\x1f\xbb\xbb\x76\x26\x0c\xc9\xbe\x51\x62\xfb\x78\x49\xda\x46\xca\x76\xc3\x2c\xd1\x98\x37\x9f\x9e\x09\xa7\xe3\x4e\xb5\x30\xc5\x8e\xd9\x78\xce\x57\xd7\xb0\xf5\x11\xe9\x6a\xbe\x07\x86\xd0\x6e\xc5\x26\xba\xde\x6b\x6e\xcf\x2d\x6c\x6c\xbf\xf7\x36\x06\xa3\x61\xdb\x3c\x06\xc0\x46\x25\x6e\xb4\xf0\x81\x39\xad\xf7\xe6\x98\x0e\x82\x1b\x40\x5e\x60\xed\x02\x2d\x78\x3e\x5b\xd0\xaa\xac\x09\x9b\x92\x4d\x10\x2c\xa8\x99\x02\xca\xc6\xcc\x61\xa9\x00\x3b\xb9\x43\xd0\x52\xb8\xf8\x69\x46\xc1\x20\xbd\x13\x3b\xca\x3c\xae\xdc\xef\xb5\x7d\xb4\xf7\xa6\xf9\x25\xe7\xd5\x39\xde\xaa\xe6\xb9\xa7\xdf\x6b\xca\xbf\xf5\xa1\xd0\x0a\xdd\xae\x02\x62\x29\xef\xd6\x5e\x65\xf6\xd0\x98\xd4\x06\x32\x77\x75\xb3\x85\xf5\x58\x51\xd6\x50\xd8\xed\x94\x0c\xbf\x54\xbc\x6b\x1d\x54\xe0\x92\x8a\xa4\xa6\xea\x2e\xd6\x9e\xfb\xfb\x03\x70\xd5\x38\x55\xcb\x73\x45\x0b\xc0\x6c\x17\x88\x4e\x82\xf6\x18\x6c\x7f\xcf\x19\xb9\xbd\xdd\xdf\xd6\xdd\x50\x1b\x54\xc0\x02\xb7\xb7\xfb\xfd\x58\xf4\xd9\x6a\x55\x73\xed\xfe\x98\x39\xb5\xdd\x4c\xd2\x4b\xda\x4a\x3c\x1b\x6d\x72\x9f\x16\xcc\x65\x2b\x2d\xe9\xf6\x3d\x28\xd7\x33\x39\x79\xc9\x24\xa9\x57\x35\x15\xda\xcf\x92\x72\xd6\xb1\xf3\x77\x38\x9f\xfd\x8e\x1d\xd0\x8f\xe5\x1f\x94\x5c\x21\x58\xfa\x02\x8b\x33\x00\x2b\x5b\x6e\x57\x70\x13\xcd\x6f\xbb\x67\xa9\x6b\x16\xeb\x93\x9a\xb6\x6a\x76\x61\x99\xeb\x27\x53\xd0\x37\x68\x9a\x3c\xbd\xb2\x8c\x3a\x49\xd5\xb2\xce\x30\xd0\x65\xcf\x31\xf5\xdd\xad\xf4\x31\x6d\xbd\x5f\x40\x90\x65\xb7\xb7\x00\xfb\xf4\x4e\x97\xeb\x55\xa5\x4f\xd0\xea\xb0\x07\x3a\xca\x53\xa6\x89\x8a\xe2\x86\x8a\x37\x00\x83\xf6\x8f\x15\x34\x02\x81\x27\x23\x57\xa6\x3f\xeb\x47\x8f\x2f\xc9\x19\x59\xae\x2a\xdd\xc6\x46\x93\x29\x49\x93\x81\x4a\x07\x91\xbf\x8f\xda\xb0\x81\x4f\x1e\x9a\x05\xf8\x88\xb2\x09\x15\x96\x41\x87\xe9\x06\x5e\xd3\x4d\x88\xaa\x06\x49\xda\x15\x4e\xf4\xa2\x22\x93\x0d\x57\x68\x57\xaf\x70\xb1\x3a\xb1\x64\x25\xb3\x1b\x71\xc4\xe2\xd0\x19\xca\xdb\x20\x13\x45\x3d\x01\x7c\xda\xb1\x8e\x83\x76\xde\x7e\x26\x9b\x37\x96\x39\xbb\xaa\xaa\x5a\xa1\xb3\xec\x98\x9d\xa1\xb3\x1a\xfa\xc0\xd4\xec\x0a\xa1\xe5\xca\xa3\x20\xd4\xf6\x62\x6e\x1f\xc1\xdd\xe1\x64\x90\x28\x57\xd8\x1d\xe4\xba\xb7\xf3\x1e\xc7\xb8\x17\xc1\xa3\x4e\xa7\xb5\x4a\xf6\x13\x79\xfd\x45\xb0\xa1\x71\x73\x7c\x53\x53\x26\xed\x1c\x53\x7c\x5e\x67\x3c\x08\x2d\xbe\x0c\x54\xaf\x9b\xd8\x32\x49\xa4\xb3\x27\x34\x1c\xbd\xea\x22\xbd\xf0\x37\x4d\xef\x5e\x50\x9a\xf4\xc2\xfd\x6e\x62\x66\x25\x76\x1b\x04\xb2\x3a\x36\x5d\xd7\xb9\x16\xe6\xed\x55\xb5\xe3\x79\xaa\x26\x87\x5e\x3e\x7f\x5f\x1b\x12\x0a\x75\xdb\x7a\x5f\xdd\x56\x23\xa2\x7a\x68\x17\xfc\xe0\xa0\xe5\xc0\xdb\x9e\x42\xa0\x2f\xbe\xf3\x2c\xfa\x7a\x51\x67\x6b\x32\xbb\xe9\xaf\x70\x81\xde\xb1\x15\x65\xa1\xb0\xcb\x42\xc3\xb5\x2a\x3a\x91\x64\x39\x0e\x0a\x7d\x80\xd7\x11\x60\x33\x01\xf9\xa2\xf4\x78\x11\xdc\x74\x3c\x8a\x0e\xc8\xf5\xdd\x5a\x4c\x56\xc0\xe2\xea\xaa\xc0\x9f\x5a\x33\xe9\x37\xb4\x31\xac\xb9\x59\x51\x36\x4d\xcc\xce\x02\xd3\x6c\x17\xcd\x5d\x24\x5b\x03\x43\x98\xbd\x16\xad\xe4\xf6\xc7\xee\x4e\x3a\x28\x62\x6a\x0f\x8e\xfa\xf6\xa0\x1d\xf8\x7a\xcb\x66\x58\x0f\x5e\x0f\xb8\xa7\x54\xa6\x2d\x9c\x11\xea\xba\x3b\x71\x43\xec\x69\xdf\xf6\x80\x4f\x00\xe6\x21\x5e\xf0\x37\xa1\x17\xbc\xb3\x5c\x1f\xd2\x7d\x77\x58\xd8\xde\xd6\x6a\x5d\xdb\x83\xca\x76\xe1\x58\xd4\x5d\x21\x40\xa6\x28\xe1\x47\x6f\x6b\x82\x93\x7b\x32\xc4\x5e\x07\x0e\x54\xe7\x9b\x8a\x45\xdc\x5a\xd5\x16\x67\x78\x8d\x83\x2c\x7e\x4b\x85\x6e\xf7\x89\xbb\x44\xa2\xde\x8e\xd3\x89\x51\xe6\xa0\xcd\x0d\xc7\x6a\x6d\x98\x9b\x26\x44\x1f\xe8\x43\x94\x11\x36\x4f\x6e\x56\x6b\x8a\x77\xcf\x0c\x93\x92\x89\x43\x91\x82\x31\x58\xe2\xe9\xfb\x0f\x41\x5a\x18\x47\x68\x6e\xf6\xc8\x44\x55\x80\x30\x3c\x5d\xda\x9e\x04\x21\x76\xcf\xcc\x30\x9d\x52\xfc\x47\x68\x7b\xae\x98\x64\xbe\x5d\xba\xab\xd4\x47\x24\x62\x9d\x25\x45\x3d\x9f\x4f\xd3\xdb\xaf\x04\xdd\x49\xde\x51\xf2\x99\x89\x3c\xac\x6f\x86\x09\x53\x76\xa7\x40\x60\xe1\x15\x80\x58\x60\xdf\x5d\xeb\xe4\x49\xe3\x14\x96\x4a\x22\x20\x35\x9f\x86\x78\x6b\x54\xda\xc5\x7b\x54\xd2\x59\x48\xfc\xfb\xac\xe3\xc9\x8c\xb3\xc9\xb3\xba\xe6\x57\xa7\x4b\x5c\x55\x2f\xf8\x15\xfb\x10\x9b\x62\xe9\x99\x98\xb5\xc0\x16\x46\x4a\x27\x6b\x4a\x03\x39\x4b\x61\x52\x66\xba\xfe\x2f\x75\x23\xef\xac\x55\xd2\x54\xd0\x82\xe0\x52\xdb\x84\x3f\x8c\x57\x78\xcb\xe4\x5c\xf2\xd9\xe7\x11\x2b\x3e\x94\xb3\x38\xae\x67\x8b\x6d\x0a\x2c\x13\xa9\xb2\xff\x31\x6c\xb3\x6f\xd0\x7c\xc9\x73\x2b\xc7\xde\x3f\xce\xb5\x47\xc2\x99\x96\x76\x23\x04\xbf\x5e\x02\x6f\xa9\x7e\x83\xe9\xd3\x69\xf3\x54\xe0\xc3\x0b\xf7\x8a\xdc\x6f\xf8\xc9\xd9\xff\x82\xc5\x22\x10\x40\x2d\x2f\xe9\x92\xcf\xc0\x42\xd0\x44\x96\xf3\xe5\x3a\xbd\x16\x83\xb0\x7c\x35\x2e\x98\x0d\x66\xb9\x76\x6f\xef\x30\x58\x77\xc3\xbc\x25\x62\x5d\xc9\xa4\x5c\x2d\x34\x31\x88\x5b\x38\xd7\xef\x4d\xb6\xa3\x2f\x3c\xca\x2d\x4b\xd6\x63\x61\xee\x7b\x2b\x07\xea\x0a\xaf\xcb\x88\x02\x4c\x8b\xea\x02\xd3\x38\xdf\xc2\x18\x65\xdf\x1e\xed\x59\x89\xec\x98\x1f\x1c\xb0\x83\x03\x19\x02\xae\xb6\x72\xbc\x4b\xd2\x4a\x52\x52\xd5\xec\xf6\xb6\xab\x67\x27\xfe\xbc\x53\xe7\x20\x63\xcd\x06\x67\x42\x14\x20\xbe\x02\xd0\xa7\xd8\x28\xad\xd2\xdd\x3f\xce\xd7\xab\x17\x54\xa8\x0f\xa0\xc4\xe5\x57\xcc\xff\xad\xc0\x1e\x93\xfe\x17\xbe\x96\xf1\x27\xf0\x77\xda\x59\xa4\xe5\x51\x45\x27\x6c\xb5\x96\x7f\xd5\xc4\x0b\xfa\xca\xf0\x08\x5a\xc5\xde\x67\xda\x9f\xa3\xaf\xc0\xcb\x4f\xab\x9e\xd2\x75\x1a\x92\x4d\x73\x28\x29\x15\x19\x58\x4e\x83\x6d\xe0\x00\xd1\x50\xb7\xfe\x39\xb8\xa4\x56\xc0\x89\x57\xab\xbf\xeb\x44\xb7\xde\xec\x9c\x79\xc3\x9c\x30\x52\xab\x69\x79\x34\x14\xe0\x99\xd0\xae\x62\xb6\xae\x6b\xc2\xb4\x12\xf8\xa4\x9c\x92\xcd\xc6\x5e\xfb\x9c\x17\x8c\x5c\x8d\x9e\x57\x74\x75\xce\x71\x5d\xfe\xcf\xa9\xe5\xa9\x67\x7c\x75\xad\x8d\x26\x0f\xd1\x23\x92\xdf\x68\xf3\xcf\xf6\xfb\x66\x31\xd1\xf4\x8a\xb2\x8f\xa3\x19\x5f\x51\x52\x8e\x24\x1f\xcd\x6c\xc7\x6a\x75\x0a\xb9\x35\x48\x59\x15\xa1\x9c\xef\x2c\x5a\x6b\x27\x37\x57\x1d\xc5\x81\xee\xd5\xc3\xd1\x3c\x89\xea\x75\x6c\x2c\xa0\x25\xe4\x38\x4f\xea\x2f\x01\x14\x40\xd8\x80\x8e\x50\x90\xd1\x71\xa9\x57\xb5\x51\xb0\xc1\xa9\xb8\x54\x05\x73\x4d\x72\x16\xe8\xd9\x3d\x11\xab\x01\x74\x5a\x45\xc9\x27\xe1\x7b\x2a\xf6\x8f\x73\x3e\x69\x5e\x54\xc1\x27\xfe\x83\x2a\xf8\x24\x7c\x4f\x05\x9f\x44\xcf\xa9\x08\x39\x6b\xfd\x6a\x61\x97\x23\x81\xa4\xf1\x64\xf8\x27\xfd\x19\xd7\x65\x4b\x01\x1d\x57\x70\x2a\x68\xa3\x1c\x4d\xdd\x61\x60\x98\x5a\xbe\xc6\x9d\x72\x79\x53\x63\x72\x86\xcf\xb3\xc4\xdd\xee\x34\x1d\xb2\xa6\xe7\x9e\x90\x00\x98\x69\x7f\x05\xb0\xc5\x96\xe7\x6b\xb4\xd7\x59\x22\xd4\x56\x4b\xfb\x1d\x22\xf0\x30\x0d\x5e\x14\x0e\x7e\x1b\x8c\x69\x44\x93\x00\x94\x3a\x05\xa8\x83\x81\x96\x2f\xac\xdd\x0e\xbe\x52\xd6\x06\x5d\xc7\x97\xb3\x22\xee\xd2\xdb\xe4\x30\x42\x88\x23\x68\x62\xe1\x08\xef\xf1\xbe\x67\x5d\x7c\xa7\xf1\x38\xb7\xa3\x2b\x6e\x3e\x1a\x9c\xc6\x83\xbf\xb4\xb2\xf9\x3d\x5a\xd0\x49\x4d\x56\x95\x22\xc4\x1f\xff\x7f\xd9\xe3\xb9\x66\xa6\x9b\x19\xd1\x38\x30\xbd\xe8\x9a\x46\x82\xb7\x0d\x6c\x16\xdf\x18\x7f\xe8\x2e\xde\x35\x6f\x2b\x49\xb0\x91\xd2\x56\x29\x06\xda\xf7\xaf\xf2\xac\x97\xa7\x29\xb7\xfe\xdc\xbe\xa8\x69\xeb\x85\x19\x3b\x0a\x9e\x9f\x7b\xde\xf7\xe0\xa8\x9c\x1b\x15\xc6\x94\x3a\xef\x7c\x6c\xde\x59\xec\x9d\x8f\xdd\xa0\x49\xef\x7c\x6c\x6d\x8e\x22\xef\xfc\xbd\x58\xcc\x13\x1a\xae\x04\xe1\xdd\xbd\x5b\x13\x49\x92\x82\x23\xd5\x65\xad\x9b\x33\x54\xde\x25\x76\x4b\x19\x38\xf4\xdd\xf9\x4c\x69\x4d\x2e\x6a\x22\x16\x1a\xbe\xb8\x07\xfe\x9c\xaf\xae\xa3\x54\xa4\x60\xd7\x05\xf2\x77\x48\x87\x9c\xc7\x87\x9f\xcc\xb1\xa9\x71\xef\x70\x40\xe0\xa6\xf0\x9a\x5f\x92\x07\x9a\x82\x4e\x4d\xb0\xe3\x14\x9c\x79\x52\x1b\xc0\x38\x0e\xc6\x20\x6a\xe3\xc7\x61\xad\x74\x82\x13\x19\xb4\xfa\x50\x5a\xe6\x19\x40\xb5\x65\xc7\xf1\x91\x85\xd6\x50\xf7\x9b\xeb\xa0\x6d\x0a\xe7\xea\xd9\x5b\x0d\x9c\xab\x77\x7a\xb1\x97\x89\x63\x1c\xa3\x8c\x43\x49\xf0\xe5\x89\x4e\xb6\x69\x73\x1b\x0e\xd4\x84\x17\x72\xd5\x03\x86\xce\x03\x60\x4f\x13\x8d\x53\x4a\x55\x1d\x74\xdb\x33\x84\x4e\x37\x7b\x7f\xf4\x21\xf3\xad\x7f\x5f\xf0\x59\x6a\xe9\xba\xb2\x22\x4c\xd4\x5e\xbf\x5b\x25\x23\x60\x68\x19\x2a\x50\x26\x0d\x61\xe5\x5b\x89\xde\xcb\x54\x45\xf3\x68\x9e\x91\xdb\xc3\x90\x95\x13\xe0\x88\x36\x31\x55\xcb\xd4\x2d\x64\x45\x44\x5b\x42\xdc\x9a\x86\x0a\x55\x97\xf2\xdd\xca\x24\x7c\x56\x2b\xe7\x4d\xe8\xf1\x28\xec\xec\x9c\x9c\x9a\x30\x52\x56\x99\x32\xb6\x83\x2b\xa2\x11\x36\xf6\x05\xbf\x62\x60\x8d\xbb\x9f\x20\x63\xbb\xcc\x6a\xcd\xce\xe7\x5f\xca\x8e\xe8\x55\x3c\xd8\x9e\x9c\x68\x3a\xfc\xb7\xbd\x2b\xc0\x4b\x0c\xdc\x93\x57\xe4\x92\x54\x3d\x1b\xf2\x03\xf0\x21\xbf\xed\x1d\x31\xcc\xd4\x03\x6c\x89\xd6\x9f\x60\x56\x86\x86\xa4\x8d\x41\x77\xd3\x97\xfb\x18\xe1\x09\x68\xdf\x61\x95\x9b\x6c\x6e\x71\xb0\xf1\x18\xf5\x58\x6d\x9f\xfd\x4f\x5b\x45\xb7\x15\x1c\x7b\x83\x24\xcf\x36\x94\x56\xe3\x11\x3b\xc4\x9f\x6d\x07\xc3\xd5\x5f\x3c\x63\xbd\x4c\x18\xad\xde\x6c\x91\xf0\x6e\x31\x42\xf5\xbd\x1f\xac\x2e\xea\xff\xd6\xa4\xd6\xa1\xd5\xd6\x2b\xf5\x73\x48\xb0\x8a\x0e\x26\xdb\xc4\xb0\xd0\x54\x07\x74\xe6\xdb\x3e\x58\x27\x65\x28\x81\x64\xfa\xe8\x9d\xfe\x31\x0a\x82\x20\xec\x6e\x3b\x86\x50\xc2\x43\x02\x82\x22\xac\x6b\x72\xc6\x3f\x2a\x5e\xf9\x29\x29\xd0\x53\xa1\xbf\x14\x3e\x35\xd4\x24\x55\xf1\x2a\x4f\xb7\x8a\x5e\x0f\x0e\xc6\xaa\x43\xa9\xea\x27\xfb\x53\xf5\x4d\x6f\x81\x7a\xd5\xdf\x76\xa0\x11\x06\x85\x37\x68\x96\x1a\x06\x10\xfd\x8d\xad\x36\x00\x30\xce\x28\xde\x82\xe0\x0b\x5e\x8f\xc1\x3f\xe8\xe8\x1b\xf9\x97\x27\xdf\xc8\x47\x8f\x12\xca\xf0\x9f\x39\x23\xe8\x91\x8c\x88\xe0\xb6\x98\x6d\xec\xc9\xd9\xfc\x39\x99\xf6\x36\xb9\x5a\xe3\x29\xb2\x6b\x2c\x91\x80\xf9\x77\x86\x9f\xac\x5c\x71\xaa\x35\x3b\xb8\x68\x42\xea\xd1\x1c\x35\x4a\xd7\xc7\x28\xb3\xdf\x79\x8e\x1e\x7b\x5e\xfb\x4f\x55\xe7\x45\x53\x2c\xb2\xbc\xf2\x03\x97\x9b\x37\x8a\xb2\xbc\x2e\xde\xa3\xaf\xd0\xa3\x2a\xd7\xff\x7f\x84\x46\xdf\x8e\x4a\x7a\x89\x3e\xb8\x4d\x9c\x15\x47\xdf\xcc\xfe\xf2\xe4\x9b\x59\xb3\x89\x8c\x5c\x8d\x5e\xd4\x7c\xa5\x76\x60\x5c\xbf\x9f\x7d\xc8\x6f\x16\x44\x3d\x53\x31\xbd\x79\xb6\x96\x0b\x5e\xd3\x9f\x4d\x48\x9d\xef\x08\xae\x49\x3d\x42\x36\xf8\x67\xe2\xa0\x37\xf9\xba\xae\xa6\x38\x5f\x12\xb9\xe0\xe5\x14\xad\xb8\x90\x28\x5f\xe1\x1a\x2f\xc1\x68\xd4\x87\xbd\xb3\x8a\xce\x3e\x2a\x12\x77\xba\x7f\x94\x2f\xf1\xa7\xbf\xd2\x8a\x08\xfa\x33\x99\x3e\xf9\xd3\x91\x6e\x53\x55\xa4\x02\x70\x20\xa6\x7f\x32\x50\xe2\xf5\xba\x92\x74\x55\x69\x78\x85\xcb\x12\xf2\xdf\x29\x2c\xa2\x33\x46\xe1\xb5\xe4\x6f\x6a\x3e\x23\x42\xfc\xdf\x9a\x68\x20\xab\x75\x06\xd3\x38\xc9\x9a\x4e\xd2\x01\x82\xe0\x00\x8e\x59\x4b\x3a\x55\xfe\x2f\xd5\x83\x82\x79\xda\x74\xcf\xaf\xd5\x12\x25\xc3\x2c\x49\x39\xba\xa0\xda\xf4\x8b\x59\xcc\xd8\x80\x31\xa8\x02\x7c\x78\x33\x06\x2e\x4b\x52\xea\x46\x5d\xb3\x20\x75\xcd\x7d\xbd\x98\x56\xb5\xdb\x09\xbc\x54\x85\x63\xa9\x06\xf4\x3f\xe8\x28\x1c\x1a\x49\xaa\x1e\x12\x4b\x90\xd9\x0d\x31\xa2\x07\x6d\x78\x10\xa5\x56\x35\xef\x61\xa6\x60\x51\x20\x8d\x8d\x72\x33\x44\xbb\xa0\xba\x1a\x81\xb0\xb1\x95\xf2\xd9\xed\x43\x93\x32\x40\x43\xff\x10\x97\xf3\xa1\x5a\x64\xeb\x95\x79\xe8\x3c\x30\x77\x54\x25\xff\xea\xb8\x7b\x38\xc6\xde\xc9\x7e\x61\x67\x07\xf2\x96\x0f\xf8\x2c\xed\x2b\xce\xc8\x95\xf5\xaa\xd5\xf1\xcf\x16\xdc\xfd\x76\x01\xa6\x16\x58\xb4\x3c\xcd\x1b\x22\x61\xe6\xf9\x3b\xf7\xb9\x31\xcc\xda\x0e\xdf\x3a\xbe\xf6\x0c\x1b\x8e\xda\xcd\xe3\x41\x47\x18\x1c\x39\x7c\x86\xd9\xb3\xb2\xbc\xf7\x24\x5a\x4e\x11\x3f\x5c\x31\x52\x87\x5e\xa0\xad\x3a\xaf\x31\xc3\xc6\x6e\xf0\xce\x4e\xee\xbb\x68\xfc\xf2\xbb\xa5\x27\xc2\x65\x79\x28\xf1\xfc\xf0\x82\x92\xaa\x3c\x3c\x6e\xac\xb3\x62\x03\xbf\x89\xaa\x45\xd9\x6a\x2d\x51\x36\xe1\x17\x17\x3a\xa2\x91\x22\x09\x4c\xe2\x24\xfb\x2b\x11\xf6\x7a\x7f\xbc\x4f\x26\x62\x41\x2f\xe4\xff\x92\xeb\xdb\xdb\xff\xde\x57\x2c\xd4\xd5\x82\xce\x16\xd9\xed\xad\x57\x74\x70\x30\xfe\xef\xc2\x95\xdd\xde\x1e\x7f\x1d\xfc\xfa\xb3\xff\xeb\xeb\xff\x0c\x7e\xfd\x57\xf0\x2b\xe8\xe5\x8f\x47\xc1\xaf\x3f\x05\x7d\xfe\x57\x50\x35\xe8\xe5\xf8\x49\x30\x84\xf9\xe3\xdb\xe2\xcf\x7f\x3a\x38\x30\x3f\xfe\x52\xfc\xf7\x91\x57\xf2\xdf\xff\xe9\x95\x1c\x3f\x79\xe2\x15\xfd\xf1\xbf\xbc\xa2\x3f\xfd\xa7\xc9\x7c\xbd\x63\x64\xaa\xe1\x27\x32\x34\x3e\xc2\x3b\x41\xea\x7f\x50\x41\xcf\xab\xad\x86\x4e\x20\x77\x6a\xe2\x05\xf8\x4a\x56\xef\x1d\x49\x1f\x7b\xfc\x7a\x31\x19\x72\x92\x30\x59\x97\x61\x3e\x10\x97\x20\x3a\x66\xd8\x5b\x89\x00\x03\xed\x66\xb8\x3a\x38\x39\x4b\xc1\x1f\xe7\xb2\x08\x40\x6f\x82\x86\x5c\xe2\x4f\x67\x3a\x74\xc3\x2f\x14\x2c\x22\x49\xe7\x76\x06\x8b\xe0\x39\x57\x50\x80\x17\xdc\x44\x64\xf2\xc1\x2a\xf9\x4b\xc1\x0e\x0e\xc6\xd2\x0f\x1b\x71\xc3\xd6\x6a\x81\x53\x92\x03\x02\x55\x88\x9e\x3c\x7a\xa4\x76\x41\x11\xa7\x26\x3d\xfc\x37\xfc\x2f\x05\xfb\x86\x3f\x7a\x94\x25\x1b\x73\xd3\x18\xa1\x40\x3b\x0f\x31\x28\x64\xdb\xf5\x3b\x65\x36\x1b\x90\xf0\x2c\x8e\xcc\xd0\x8e\x1f\x18\xa0\x0e\x30\x15\x55\x57\x21\x3c\x66\xb1\x53\x83\x63\xc5\x25\xbc\xff\x90\xe3\xe2\xfd\x07\x2f\x35\x50\x93\x26\xdf\xa9\xdf\x98\x6f\x08\x4f\x1c\xae\x3f\x09\x5c\x93\x37\x7b\x14\xac\x54\xb9\xf6\x2c\x7c\x80\xfe\xb0\xbf\xf9\xdc\x91\x86\x1d\x8f\x51\x10\x87\xa0\x21\x45\x8e\x58\xd0\xd5\x18\xe7\x68\xcd\x4c\x24\xb9\xc8\xd9\x60\xa7\x7e\x68\x8e\x5a\xbd\xb8\xa7\x53\xb5\x62\xc2\x28\x1e\xe8\x83\xbd\xa5\x55\xee\x3b\x9e\xe8\xbb\x33\x91\xfc\x15\xbf\x22\xf5\x73\x2c\xc8\xd8\x86\x13\xdb\x63\xde\xed\x1d\x7b\xf1\x0b\xea\x9c\x69\x36\x52\x48\x5c\x4b\xf1\x4f\x2a\x17\x63\x96\xa3\x43\xd4\x4e\x1f\x1e\x22\x40\xf4\x88\x4c\xe0\xce\x76\xaa\x6f\xc7\x35\x1c\x1a\x6b\xdb\xc0\x77\xf7\xd5\xa9\x2c\xcc\xec\x8e\xcc\x0a\xf4\x15\xb2\xeb\xaf\xf5\xfa\x67\x8f\x0a\x92\xcf\x1e\xa9\x02\x53\xa9\x4c\xbb\xd6\x95\xee\x39\x09\x94\xcf\xda\x46\xf1\x2f\x5c\xd5\xf1\x03\x10\xee\x60\x0f\x54\xf5\x8b\xe0\x3a\xc8\xf5\x5f\xd3\xd6\x78\x57\x6b\x62\xeb\x6c\x59\xf2\x99\x67\x37\xb9\xc0\xda\x8c\x57\xb3\x67\x1d\x79\x79\x4c\x5b\x74\x07\x4a\xcf\x5a\x0e\x7f\x3f\xdc\xb9\xb0\x99\xde\x56\x77\xc2\x36\x54\x0d\xe4\x4d\xfe\xd2\x1a\xb9\x4d\x28\x59\xef\x71\x59\x35\xf5\x83\x99\x79\x93\x0e\x27\x07\x1b\x64\x71\x4e\x9e\x68\x94\x08\x5d\xee\x2d\x35\x6a\x9a\xbe\xdc\x49\x45\xe0\x5d\xcd\x9d\xdd\x7d\x97\x78\x67\x73\xe7\xdf\x79\xd4\xdf\x79\xd4\xdf\x79\xd4\xdf\x79\xd4\x5f\x80\x47\x3d\xfe\xcf\xaf\x7f\x67\x59\x7f\x67\x59\x7f\x67\x59\x7f\x67\x59\x7f\x67\x59\x7f\x67\x59\x7f\x67\x59\xfb\x48\x78\x5a\x92\x73\x5c\xff\xbb\xd9\x8d\x74\x87\x4b\x46\x39\x1a\xc5\x71\x92\x77\xf6\x61\xdc\x21\x40\xd9\xfd\x2c\x58\xc2\xa4\x16\xdd\x61\x8c\x2f\x68\xa5\x0d\xb5\x06\x78\xef\x85\xf4\xf5\x17\x9d\xd6\x56\x67\xad\xd7\xf9\xea\x93\x16\x3c\x77\xf1\x64\xf6\x76\x73\x57\xd2\xfc\xdf\xd0\x24\xa5\x7b\xf7\xb7\x1a\xe6\x0e\x0d\x49\xa7\x0e\xbc\x6d\x98\x1b\xa0\xfa\x90\x08\xe0\xfd\x46\x26\xc2\x33\x32\xe1\x1d\x46\x26\x2c\x34\x32\xd1\x96\x2b\xef\xd1\x57\x60\x64\x71\xe8\xc0\x81\x7e\x34\x23\x94\x77\x95\x8c\xbe\x1d\x51\xcf\xc0\x04\x17\x47\xdf\xe0\xbf\x3c\xf9\x06\x77\x18\x98\xd0\xf7\x78\x88\x81\x89\xdc\x62\x60\x22\xfe\xdd\x0d\x4c\xe4\x36\x03\x13\xd9\x7e\xa8\xf7\xb4\x2a\x61\xcd\xa8\x60\x44\xc2\xd4\x28\xf7\xb6\x2a\xd9\x6c\xf2\x78\xa6\x37\xed\x6b\x1d\xda\xfe\x7b\x95\x77\x61\x90\x00\xc0\xb7\x53\xd0\x44\x46\x2b\x1d\x03\x83\xdd\x4a\x33\x76\x8f\xe3\x14\x2d\x5b\x04\xe2\x30\x4b\x98\xe8\xc0\xee\x4b\x90\x48\x3e\xeb\xa0\x44\xba\xa2\x20\xfc\xe2\x82\xf3\x90\xaa\xb0\x0e\x90\x77\x20\x1f\xc0\x9b\x5f\x62\x49\x92\xc6\xa7\x03\x3c\xf8\x43\xe7\xf7\xdf\xdd\xf6\x7f\x77\xdb\xdf\xdd\x6d\xbf\xed\xc0\x1d\x98\xa7\x37\x2c\x3d\xb8\x52\x07\xb9\xb8\x10\x9a\x92\x5d\x25\x9b\xba\xc4\x05\x10\x13\xeb\x73\x31\xab\xe9\xb9\xf7\x32\xb4\xc7\x62\xa9\xed\xf2\x35\x8d\xe0\x85\x18\x6c\x8a\xee\x98\xad\xcc\x8d\xbb\x66\xf7\x18\x39\xf1\x59\x81\xde\x61\x32\xdb\x70\x3b\x01\x92\xc7\xde\xf0\x89\x6c\xf6\x39\xb7\xce\x17\x6c\x07\x6f\x78\x51\xc8\xb6\x37\x3c\xcb\x43\x41\x15\xcf\x9e\xf2\x29\x0f\x5d\x31\x7c\x91\x40\xe3\x20\x2f\x12\x0e\xf2\xc2\x77\x90\x17\xa1\x83\xbc\x88\x1d\xe4\xc5\x30\x07\xf9\x20\x62\xe7\x17\xe3\x4c\xf6\x30\xa7\xd2\xe5\x12\xc3\x75\x04\x82\x82\xb7\x5d\x62\xfc\x43\x74\xce\x64\x2c\xe7\x7a\xe5\xe2\x4e\x8e\x53\xe2\x61\x9c\xc9\xbe\x94\x1d\x31\xce\x64\x0f\xb4\x27\xf7\x75\x26\xfb\x12\x76\xc5\x39\x93\x0d\xd9\x93\x0e\xcf\x29\xf1\x60\xce\x64\x5f\xc2\x8e\x34\xce\x64\xf7\xdd\x12\xce\xfe\xc6\x25\xb7\xd9\x17\xe8\xc5\x18\x21\x9d\xf4\x2d\x52\xf3\x5b\x88\x1e\x4a\xec\x16\xfc\xca\xba\x1b\xdf\x59\xe1\xae\x68\x8e\x43\x13\x8e\xe0\xb7\xa4\x70\xbf\x43\x90\xb0\x9d\xd2\xdc\xf4\x66\x34\xd8\x22\x81\xab\x28\xfb\xd8\x2d\xc8\x03\x61\x77\xbe\xc0\xe2\x0d\xee\x4d\x24\x66\x6f\xb7\x58\xf0\x2b\xa0\x89\x4c\xe0\x16\xa7\xac\x67\xc4\xc6\x72\xf1\x33\x39\x43\x4e\x0c\xf5\xd7\x6e\x24\xfc\x17\x28\xae\xbb\xe4\x92\x9c\x2d\xb0\x91\x26\xa8\x8d\x78\x45\x3f\x12\xf7\x03\x58\x55\x1d\x90\xc2\x13\xea\x35\x1f\x21\x04\xfb\xdd\xec\x83\xdc\x60\xed\xb0\x0a\x13\x5c\x55\xb6\x30\x4d\xeb\x53\xf1\x8a\xea\xf4\x05\x77\x21\x68\x7f\x5a\x2f\x57\x67\xdc\x1c\xec\xb8\x93\x98\x1e\x9c\xd6\x57\x97\x98\x27\xfe\x8a\xb2\x8f\x7f\xc7\xac\xac\x54\x9b\x4d\x9e\xfa\xda\xa2\x8d\xcc\x75\x8e\x60\xaf\xf7\xb4\x80\x19\x8b\x23\x93\xe2\xf7\x25\x96\xf8\xd0\x42\x8f\xe2\x0f\xb2\x5e\x93\x3f\x7c\xb0\x3a\x68\x2d\x6d\x32\x26\x02\xf0\x77\x73\xe7\x04\x4c\x82\x42\xb0\x6b\x35\x3b\xab\xaa\x6a\x66\x24\x8c\xa0\x40\x83\xdf\xe6\xe5\x16\x45\x41\x27\x36\x09\xe9\xed\x2d\x92\xf8\x3c\xfc\x96\x1d\x1c\x50\x2f\x11\x98\xce\x0d\xe4\x34\x63\x76\xf1\x3c\xc0\x2f\x81\x7a\x98\x4e\x6c\x3e\xd3\x76\x60\xaa\xa7\x74\xc2\xeb\xd5\x02\xb3\x62\xff\x68\x9a\x9e\xd2\xc1\x01\x8f\x0e\xd8\xeb\x70\x63\x9e\x9a\xed\xe6\x69\x14\x53\x5b\xaf\xd7\xd3\x37\x9d\xd7\xfc\x23\x61\x87\x06\xa2\x88\xc9\xaa\xd6\x4c\xc9\x0b\xa8\x3f\x56\x9f\x84\xe4\x2b\x05\x88\xf1\x1c\xc3\x73\xce\xf7\x8f\xb3\xe9\x78\x60\x5d\xa2\xe7\xfd\x5c\x1d\xcf\x98\xe5\x34\xb3\xf9\xa4\xc3\x15\x90\xec\xc6\x67\xe5\x52\x9e\x84\x81\xa3\x61\x73\x89\x9c\x52\x63\x22\x66\x35\xaf\xaa\x33\xde\x8a\x1b\x0e\x49\xf2\xca\xf2\xb4\x27\xc5\xb1\x97\x99\x6a\x18\xb0\x2a\x8a\x42\x76\x25\xa8\x02\x04\xdd\xf0\x10\x6b\x05\x23\x91\x23\x1a\xa0\x57\x2f\x5d\x54\xf6\x54\x76\x24\x97\x9a\x26\x0b\x42\x24\x1e\x00\x76\x13\x8b\x2b\x91\x92\x6b\x87\x74\x52\x49\x65\x6c\x2b\xae\x4d\x93\x70\x2a\xce\x83\xea\x47\x5c\x31\x49\xad\x9a\x04\x53\x71\x65\x3f\xe4\x89\xa9\x1c\x26\x94\xf2\x2b\x07\x31\xb9\x48\x10\xc0\x2a\x9d\x72\xac\x05\x63\xda\xe7\x2d\xae\xa8\x9c\x2d\xc6\xd6\xfb\xdf\x3b\xe3\xec\x66\x86\x05\x19\xf1\x14\x02\x9a\x9e\xd7\x04\x7f\xdc\x4b\x57\x80\x8b\x30\x75\xc4\x58\xfb\xc4\xd5\x25\x99\x7b\xf7\x43\xdd\x27\xde\x71\x09\x32\xcf\x8c\x21\x4e\x56\x15\x9d\xa2\xd9\x44\x1d\xf2\x6c\xa4\x87\xdf\xbf\xeb\xf0\x36\x77\x9a\x39\x00\xef\xfd\x68\x1e\x78\x4a\xf2\xa5\x22\x60\xe4\x26\x1d\xdb\xde\x9b\xe9\x26\xdb\xa8\xf9\xdc\x63\x2e\xb0\x15\x36\x25\xd1\x2e\x3b\x91\xed\xf5\x9d\x93\xe2\xa9\xa7\x3b\xf7\xb9\xb1\x21\x95\xd2\x61\xf2\x74\x57\x6d\xba\xaa\x09\xc2\xe3\x88\x83\x36\x49\x06\xc9\x25\x82\xac\x1a\xfa\x59\x42\xe0\xa6\x60\x84\x80\x48\x49\x74\xde\xa2\x6c\x5c\xdf\xff\xe0\xdb\x85\xf3\x8a\x6c\xea\x16\xc8\xfb\x63\x35\x04\x16\x0c\x70\x47\x11\xbb\xe6\x22\x6a\x93\x41\xe8\xcb\x4e\x7b\xbc\x33\xe3\x50\xd2\x8b\x0b\x45\x46\xda\xe5\x41\xa4\xde\x05\x16\x2f\x54\x41\x2b\x74\x2e\xbd\xb8\xd8\x42\x3d\xab\x1a\xb1\x55\xec\x5b\x5e\x55\xe7\x78\xf6\xf1\x21\xd5\xec\x3d\xd2\xf7\x81\x68\x72\x3f\x21\xa6\x06\xfa\x7d\x3c\x84\x80\xbf\xbb\x8c\x7d\x37\xdb\xd8\x96\xac\xc0\xdd\xc4\x28\xc2\x01\x31\x6a\x2b\x2b\xd7\xbb\x20\x72\xb6\x50\xc7\xd8\x70\xe5\xe0\x66\x9d\x7b\x25\x21\xca\xeb\x8c\x1e\x68\xf3\x67\xe9\x46\x9d\x6f\x2f\x97\xe9\x30\xe6\xfa\xd6\xb4\x54\x71\x10\xf9\x6d\x5b\x5e\x9e\xda\xdc\x9d\x74\x82\x1a\x7b\xb3\x12\x17\xc2\xdb\x26\x1f\x60\xda\x16\xbe\xb0\x42\x6f\x4b\x5f\xae\x82\x68\x12\xbb\xca\x23\xb4\x39\xd8\xe1\x8a\xaf\x56\xa4\x3e\x04\x7a\x98\xb2\xf9\xe1\x0a\xd7\x2d\xb9\x84\x5f\x75\x78\x17\xf7\x06\x38\x9d\x0d\xcc\x12\x51\x7e\x43\xd8\x7a\x49\x6a\xab\x41\x9f\x93\x54\x58\x5d\x07\x89\x36\x9b\x6c\x87\x3d\xd9\x7d\x0b\x7e\x8b\x2b\xd6\x16\xe6\xc6\x54\xf9\x57\x4a\xa0\x7c\x46\x3e\xc9\xbf\x52\x52\x95\x4d\x02\xe5\x9d\x19\xf6\xff\xcf\xd8\x4b\x44\xb2\x4b\x0a\x51\x58\xaf\x24\x9f\x24\xae\x09\xfe\x35\x97\xfc\xac\x26\xf8\xf3\xac\xb8\x2a\x49\xdd\xa4\x4c\xf5\x8d\xa6\x3f\x57\xc6\xec\x40\x07\xef\x4d\xe8\xc3\xbd\x56\x06\x46\x96\x5f\xc4\x9a\x16\x58\x2c\xf4\x74\x3e\x6c\x55\x2d\x07\x49\xf6\xdb\x58\xec\x6c\x68\xe2\xfc\xb3\x5f\x22\x6f\x7e\xc0\x1b\x5b\xc3\xeb\x33\x3c\x0f\xc9\x61\xaf\x20\x25\x19\xdf\xf1\x1c\xdb\xe9\x5d\x7e\xdd\x83\xac\xf8\x0c\x57\xa7\x92\xd7\x78\xde\x9d\x60\xd7\x31\x0c\x8d\x14\x54\x98\xa0\xb1\xde\x17\x63\x9f\x6e\xf5\xcd\xa1\x6f\x58\xe3\x2e\x61\x92\x50\x36\x86\x1d\x8a\xb8\x7f\x41\x98\xa0\xf2\x7a\x8a\x8e\xc1\x6f\xec\x59\x99\x88\x72\xd6\x91\x0a\xb4\xa1\x54\x87\x25\x92\x80\xaa\xce\xa0\x63\x9b\xb0\x58\x67\x1b\x35\xa6\x9d\x8a\x38\xe5\xeb\x61\xc6\xaa\x0f\x32\xb5\x21\x99\x50\x21\x8b\xab\xdd\xf6\x67\xe6\x02\xf7\x4d\xd1\x31\x29\x70\xaa\xce\x1c\x48\x1d\xe8\x66\xb8\x4b\x5a\xd8\x4b\xb7\x5b\x9a\xdf\xfd\xae\x7e\x69\x6d\x3d\x9d\x8e\x59\x9b\xe5\xb2\xf8\x71\x52\x13\x78\xcc\x61\xa1\x40\x59\x7e\x43\xcb\xa9\x17\x7a\x36\xf0\xf6\x58\xf2\x4b\xf2\x83\xbe\x85\x02\xe5\xf6\x8e\xca\x30\xd7\x67\x7c\x97\x9b\x8a\xef\x3f\x18\x85\x9d\x2f\x48\xf2\x5f\x11\x90\xec\xa7\x60\x58\xa4\x73\xdb\x19\xcf\x10\xc1\x6b\xf9\xdd\xb5\xcf\x33\xb0\x96\x2c\x93\xd9\x4d\x6c\xe2\x2f\xcb\x53\x5e\x4b\x94\x33\x1b\x73\xf2\x0e\xa3\xfe\x50\xeb\x60\xcd\xcd\xc0\xbc\x35\x30\xef\x1c\x98\x3b\xfd\xe4\x6e\x03\x97\xf0\xa4\xfd\x61\x45\x6b\x58\xd1\x0c\x2b\xc7\xc8\x83\x04\x91\x61\x85\x9b\x8f\x82\x89\x46\x26\x47\x40\x02\x07\x49\x5e\x3d\x41\x0d\xec\xb3\xf1\x57\x8e\x6c\x36\xa0\x68\x56\x13\x2c\xdb\x09\x15\x4d\xe9\x7a\x55\xba\x52\x4f\x40\x84\x6c\xab\xce\xa1\x52\x9d\x35\x43\xa5\x26\xd2\x35\x94\xfd\x7e\xc7\xa1\xfa\x57\x75\x14\x0c\x85\xc5\x2c\x31\x8c\xfa\x9a\x9e\xb2\xce\x97\x17\xcf\x57\x7f\xec\xea\x25\x35\x1b\xd3\xcb\x91\x11\x97\xe9\x8f\xb1\x38\x17\x72\x10\x91\x32\xe9\x03\x2e\x6c\x86\x02\x7d\x17\xfe\x41\xc9\x55\x28\x00\x0b\xae\x52\xa0\xd8\x8e\x2e\xaf\x56\xc4\xf6\x5c\xdf\x9c\x44\x22\x37\x07\x13\x82\x40\xa9\x31\x8e\x74\xf2\xb4\x76\xa3\x16\x44\x6b\x01\x9b\x50\x7e\x32\x04\x22\x25\xc5\x7b\x6e\x26\xc7\x51\x86\xc0\x60\x4a\x90\x26\xd0\xa4\xc1\xb4\x58\xbd\x73\x8d\x0d\xce\x77\x2b\x8c\x1b\x0c\x58\x5f\x60\x9d\xe9\x80\x36\x2b\x10\x72\x2b\x8f\x52\xed\x06\x3d\x69\xdf\x02\x97\xbd\x16\xa2\xd0\x66\x90\x17\x9a\x05\x72\xe0\xd6\x8c\x8f\x77\x80\xf2\xad\xd8\xeb\xfe\x8e\xe5\x2c\xb3\xeb\x8f\xd2\x1d\xfe\x12\x07\x6b\x26\x01\x23\xb5\x0f\x4e\xd8\x48\xe7\xfa\x7b\x4a\x85\xe5\x3d\x9b\xd0\x19\x35\x36\x87\x6d\xcf\x58\xb6\xdc\x52\x65\x7c\x1a\xc6\x00\xde\xff\xf4\x94\xf9\xe4\x36\xc9\xa6\xac\xf8\x71\x72\x45\xe5\x82\xaf\xe5\x98\x45\x02\xe9\x90\x36\x44\xb9\xf3\xa6\x3b\x7e\xea\xcd\x7c\xea\x4b\x4d\x07\x6d\x20\x6b\x05\x8a\x18\x48\x9d\xbb\x30\x11\x3a\xbb\x84\x18\x90\x7d\xf1\x4b\x32\x63\x49\xfa\x97\xf5\xe7\xa5\xd3\x6f\xb0\xdb\xa6\xc4\xa6\x7b\x70\x56\x2e\x9d\x35\x3d\x0b\x97\x04\xd7\xd0\xb2\x9d\xa0\x42\x67\x15\x78\x56\x2e\x29\xeb\x37\x23\xf9\xa2\xe2\x24\x00\xdc\xf1\xe6\x1e\xb2\x11\xcd\x2e\x19\xea\x48\xd5\xd3\xab\x16\xc3\x53\x4f\xda\xab\x97\x94\xda\xfa\x1b\x1b\x22\xbe\x24\x22\xca\x7b\x34\x43\x2e\x37\x53\x80\x7e\x3b\x92\x29\x19\x03\x15\x3d\x37\xdf\x70\xc5\xf3\x7d\x8e\x3f\x42\xc2\x54\x33\x90\xa7\x77\xda\x86\x3e\x8f\xdb\xb4\x7f\x38\xf7\x84\x96\x21\xd8\x78\xaf\x76\x42\x6d\x9d\xda\x0c\xd4\x91\xcf\xf5\x45\x22\x88\xea\xc3\x9f\xb1\x86\xe5\xbb\x29\xc8\x62\x70\xb5\x63\xf8\xd5\x9d\x5d\x63\x73\xfe\x50\xc0\x4b\xec\x94\xb2\x73\x28\x78\x9a\xd7\x7c\xbd\xea\xae\xa7\x8b\xfd\x08\x38\x9d\x35\xbd\xe8\x37\xdb\xdc\x61\xfb\x0c\xf9\x48\x49\x25\x00\x3a\xf5\x97\x8b\x45\xa5\xaf\x13\x7c\x8f\x62\xe6\x0c\x73\xcd\x58\x0b\x52\x8b\xe2\xfd\x87\x3b\xe4\x3c\xb4\x11\x5e\x76\xf3\x48\xe8\x8b\xe3\xe1\xa5\xd7\x1d\x7e\xf1\x9b\x8b\x4a\x92\xb1\x01\xdc\xab\x5a\x2f\x97\xb8\xbe\xee\xeb\x58\x6a\xfa\xb0\x1d\x75\xe3\x47\x13\x3b\x61\x2c\xf3\x1b\x2f\x4e\x81\x9f\x1a\x4c\x06\x59\xa6\x05\xd2\x39\xf9\x8e\xf6\x58\xd0\x1b\x7f\x54\x90\xc9\x8c\xaf\x99\xdc\x58\x4e\x78\x70\xd7\xfa\xa0\x54\xb7\xb4\x38\xda\x13\x41\xb7\xd4\xeb\x36\x27\x61\xd8\x2c\xa1\xb8\x6e\xfb\x11\xfa\xc8\x69\x47\x14\x05\xbb\x53\x03\x43\xa8\xe8\x64\x3d\xad\x08\x0f\x2e\x5b\x06\xd1\x92\x13\x19\x48\x4e\xda\x12\x0a\x13\xa9\x04\x1b\x7f\xca\xfd\xb8\x86\x09\x4e\xa2\xf0\x56\x83\x76\xdf\x92\x19\xaf\x4b\x4b\x02\x99\xb8\x12\x6a\xb0\x9c\xd7\xf3\x20\xb9\x19\x4c\x5a\x7f\xf5\x1e\x6b\x50\xc5\xd8\x2a\xda\xa7\x03\x98\xe7\x6a\xc1\x55\x25\xf5\xef\x94\xe4\x8a\x53\x9e\x32\xd7\x5c\xb1\x88\xd3\xfd\xe3\x4d\x10\x6a\x43\x3f\x5e\x94\x4d\x18\xaf\x97\xb8\xa2\x3f\x7b\x2f\xff\xb0\x99\xb9\x96\x81\xb4\x71\x8d\x69\xab\x83\x30\x08\xf0\x8c\x01\x3c\x9a\x32\x35\x6a\x00\x4a\x44\x7f\xdb\x8e\x3b\x77\xd9\x05\xe1\xcf\x65\x96\xb3\x80\x12\x78\x56\x6a\xc3\x12\xd2\x32\xb6\x6b\x09\xa8\x3c\x30\x03\x5e\x28\xda\xf4\x88\x75\x27\xdc\x83\x2c\xf9\x6e\x33\x06\xe5\x7e\x4f\x26\xda\x8f\xbb\xe8\x8c\x40\xe1\xe2\x3f\x05\x76\x32\x6e\xd6\x0a\x39\x1b\x09\x98\x7b\x73\x53\x96\xb7\x53\xe3\x35\x57\x7e\xb3\xd7\xf5\x5e\x70\x59\x8e\x79\x8b\x24\x00\x18\x97\xa4\x00\xec\x34\x46\xd8\x38\x56\x39\xa1\x80\x25\x9d\x5a\x46\x83\x9d\x07\xde\xac\x0f\xd0\x03\xca\xbd\xf7\xe6\x2f\xdf\xe2\x0c\x57\xa1\xe9\x33\x95\xfa\xcd\x6e\xb4\x6a\xd6\xd2\xd5\xe7\xe8\x2b\xfd\xdd\xd5\xa2\xc6\x3d\xac\xa1\x26\xef\xba\x0a\x8b\xce\x52\xeb\x48\x4e\xd0\x24\xc0\x4c\x9a\x13\x98\xa9\xf8\xf6\x08\x2e\xbb\x5b\xb2\x7d\x37\x50\x84\x6a\xad\xe4\x9c\x27\x0d\x30\x8c\x8f\x7e\xe3\x6c\x06\x13\xdc\xbc\x3b\x8d\xe6\xfd\x58\x3f\x8a\xf8\xde\x87\x3b\x3d\xe8\xed\xe4\xfb\xc7\xad\x47\xdb\xb1\xf9\xe1\x94\xf4\x72\xf6\x58\x17\x5a\x4d\xef\xa0\x77\x45\xda\xd1\x63\x92\xb3\xdf\x92\x18\x31\xb1\xfd\x42\x6d\x23\xeb\xdf\xe9\x05\xbf\x7a\xa6\x5f\xd8\x1b\x3a\xfb\x48\xea\x36\x27\x63\xdf\xdd\x33\x8b\x6a\x8e\xb2\xbd\x30\x02\x58\x1c\xee\x6a\xc8\x8d\x8d\xb0\x07\xca\x59\x22\xd0\xd6\xf5\x1b\x9f\xfd\x94\x2d\xc6\xc6\x61\x5e\xaf\xde\x36\x02\x28\x19\x1d\x4c\x35\x69\xa3\x49\xe8\xe5\x6a\xc1\x9b\xe4\xa0\x1a\xbf\x35\x3f\x4d\x14\xd1\xbd\x76\xdc\xb0\xe3\x2c\x0f\xc2\x5f\xb1\x2d\xb4\x83\xbf\x02\xdf\x5a\x7d\xcb\xc4\xdd\x06\xc3\xc4\xa2\x69\xf6\x10\x0e\x41\xec\xab\xcd\xf6\xbd\x37\xaa\x13\xd8\x8e\xdc\x2e\x7c\x63\x6e\xd1\x19\x9f\xcf\x2b\x02\x88\x30\xee\xbe\x25\x38\xd4\x2d\xfe\x56\x63\x26\xe1\x4a\xb5\xb8\xd0\xd6\x8d\x4b\xf0\xa1\x8d\x0e\xaa\x93\x22\x41\xe9\x5b\xe9\xaf\xab\x33\x1a\x58\x27\xda\x12\x44\x2a\x32\x86\xd4\x62\x1c\xd0\x9a\xde\xdf\x3d\x0f\x2e\x64\x2d\xc5\x8e\xac\x25\x00\xcf\x81\x8c\xe5\xae\x22\xb1\xcf\xc5\x57\x3e\x8c\x50\x6c\xbb\x0e\x3d\x52\x3a\x18\x0e\x50\x8b\x0c\x2c\x53\x98\x8c\x90\x31\x80\xb2\x33\x77\xd1\x07\x09\x61\x96\xa4\x70\x28\x94\xed\xf1\x42\x8b\xc9\xb5\xb8\x9c\x9b\x7f\x5b\xae\x20\x2e\x4d\xb5\xee\x7f\x17\x2c\xe0\x01\xc7\x16\x06\x6e\x01\x45\x13\x8d\xad\x5b\x3d\x33\xab\x08\xae\x03\xf5\x8c\xdb\xf6\x81\xc2\x2a\x81\xb2\x6c\x3a\x64\x71\xfd\x08\xfa\x9e\xcf\x67\x50\x7c\xed\xff\x7f\x92\x24\xd3\x59\x9f\x18\x59\x95\xde\xe9\x65\x7d\x19\x02\x65\xe1\xbf\xec\x01\xc1\xc6\x45\xf3\x3c\xa1\xed\xd9\xf5\xca\xda\x28\x84\x66\x34\xb6\x70\x7a\x94\x57\xda\x55\x51\x81\x0e\xe7\x2e\xa8\xed\x70\x54\x95\x57\xf4\x82\xcc\xae\x67\x55\x77\x27\xae\x06\xd8\x9b\xab\x0d\x7f\x45\x85\x6c\x57\x3c\x99\x81\xdb\xa7\xfe\xf1\x82\x88\x99\xfb\x61\x52\x04\x0e\x95\x5a\x69\x14\x6b\xc7\xf1\xc9\x58\x73\x15\x3c\x39\xea\x89\xa9\x35\x76\x5e\x88\x77\x0d\x10\xd2\x11\x11\xc6\x62\x70\xe6\xd3\x91\x7b\x81\xce\x0a\x4c\x48\x4e\xed\x86\x4f\xde\xd4\xf4\x12\x4b\x92\x57\xb0\x6a\xf3\x73\x74\x38\xba\xa4\xe4\x0a\x9f\x57\x64\xc4\x59\x75\x3d\x3a\xbf\x1e\x2d\x09\xda\x64\xf9\x96\xce\xb4\x51\x3a\x29\x9b\xee\xcc\x87\xd1\xe1\x08\xe4\x2a\x23\x2a\x46\x35\x11\xb2\xa6\xfa\xb3\xe4\x23\x4b\x24\x8c\x9c\x58\xa9\x7f\x8c\xf5\x79\x45\x67\x6e\x00\xfd\x6b\x74\x38\x9a\x61\x36\x3a\x27\x23\x41\x08\x53\x93\x25\x97\xa4\xbe\xe6\x4c\x4f\xd9\xa3\x84\xa2\x4b\x18\x91\xc8\xae\x18\xe5\x2c\xe4\x4d\xbc\xed\x85\x14\xf3\x01\x47\xeb\x39\xb6\xda\xaa\xbe\xaf\xab\x0f\xd3\xfd\xef\x5e\x86\xe8\x2a\x68\x5c\x99\x76\xd3\x56\x05\xf4\x82\x96\xfa\x41\x8f\x16\xa4\x5a\x8d\xae\xf9\xfa\x29\x6a\xad\x20\x0e\xd0\x0f\xe8\xa9\x1d\x9d\xdf\x5d\xfd\x76\x65\x6d\xc8\xd0\xae\xac\x9f\x46\xbb\xb6\x3e\x0b\x20\x8e\x63\x63\x1e\x83\x1a\x67\xce\xab\x00\xdc\x1d\x79\x76\x70\x30\xe6\x05\x99\xa8\x27\xa1\x23\xcb\x3d\x5b\xad\x44\x6b\x3c\x55\x8a\x72\xde\x36\x99\xb1\x07\x11\xb1\x56\xcd\xf9\x19\xf3\x06\x53\xd5\x41\x85\x44\x7d\x57\xe6\x35\x52\xe3\x26\xaa\xc2\x74\x5c\x2d\xbd\x1b\xa9\x1e\x61\x97\x88\xcf\x76\x87\x61\x1b\x42\x1d\x5b\x67\xec\x06\x78\xcd\x7b\xa4\xb5\xba\xa8\x8e\x7e\x17\xd4\xed\xbf\x0f\x11\xfc\xfb\x66\x3b\xb2\x97\xed\xa9\x47\x9e\x40\x8d\xa9\x95\x46\xb5\x48\xb1\x20\x27\xc2\xde\x91\xa2\xad\x8c\x36\xfb\xe0\x60\x6c\xfa\x05\x23\x1e\xe6\x44\xbc\xfa\xd4\xe3\xb9\xea\x3d\xcc\x1a\xd9\x70\xea\xfa\xbd\x30\xb7\xcf\xce\xd7\x5c\xaf\xb8\x1a\xec\x73\xd6\x41\xa5\x69\x46\xbd\xad\x20\x8b\x24\x60\xea\x78\xb4\xe0\x6b\x57\x27\xae\x98\x12\x0a\x90\xf0\x6e\x01\x21\x86\x6b\xb0\x62\x4a\x0a\x22\xb0\x29\x60\xca\xe6\x09\xee\x23\x17\x39\x7d\x28\x62\x0a\xef\xc2\x81\x88\x86\xac\x1a\xa8\xbb\x1a\x4a\x5f\xad\x7b\xa3\xbd\xae\x21\xd4\x6b\x3f\x29\x77\x1f\xcd\x97\x9e\xa6\xc7\xed\x02\x95\xa1\x11\x17\xfc\x29\x08\xae\x67\x8b\x33\xf2\x49\x02\x05\x71\x49\x25\x79\xb9\xc4\xb4\x6a\x7e\xbe\x26\x42\x28\xc2\xcf\xe4\x92\x38\xb5\x5d\xbe\xfc\xb4\xaa\x30\x65\x2e\x4a\x83\x0d\x70\x15\x16\x7d\x19\x94\x20\x15\xdf\x73\x00\xad\xba\xe1\x8e\x13\xe9\x30\xff\xf5\x27\x72\x17\xf3\x05\x23\x25\xb1\x07\x00\x8a\xef\xd0\x18\x39\x38\x01\x67\x92\x6f\x8c\x1c\x44\xbb\x86\x03\x2d\x86\x53\x3d\x51\xa5\xda\xb5\xd5\xd4\x70\x59\x5e\xac\x06\xd2\x68\x14\x01\x96\xfb\x54\x67\x97\xeb\x7d\xf3\xd5\x3e\x95\x46\xf1\x68\xa0\x17\x0b\x94\x8c\xba\x1a\x90\x2e\x8d\x4a\x8f\xb9\xa0\xe6\x69\xc1\x9b\x9c\xfc\x73\xc1\x35\x9e\xf8\x9b\x6a\x9e\x33\x5f\xb8\x12\x0a\xde\xb8\xb1\x27\x86\x58\xe3\xc8\x16\xdb\xdf\x1a\x2e\x47\x71\xd0\x0d\xda\xdf\x3f\xde\xdb\x4d\x9a\x68\xec\x2e\x3c\xce\x59\xad\x83\x5e\x8c\x9b\x85\x8d\x59\x2e\x14\xf0\x66\x9e\xe4\x50\xc7\x21\x08\xd6\xf3\x94\xa4\x0c\xeb\x8c\xc8\xce\xc5\xaa\x30\xbf\x0f\x0e\x34\x62\x31\xa0\x90\x12\xa1\x25\x89\xd3\x31\x8b\x5a\x15\x72\xf2\xd2\x90\x91\xef\x04\xa9\x4f\xca\x83\x03\x9b\xcd\x00\x50\x1d\x6a\xd2\x14\x5b\xea\x8a\xeb\x70\x6a\x24\x14\x53\x6a\x23\x08\x9e\xf5\x4a\x46\x9b\x05\xa9\xb1\xf2\x78\x68\x3d\x56\xf8\x51\xa1\x64\x85\xb1\x42\x89\x68\x44\x8b\x04\x12\x47\xd2\x27\x71\xdc\xae\xd2\xa4\x4d\xc4\x2f\xfc\x91\x9c\x94\xe3\xe3\x3f\x67\x2d\x2d\xa7\x39\x52\xab\xe6\x6c\x2b\xb2\xbc\x33\x4f\xab\x36\x75\x13\xa3\xd7\xcc\x3d\xc0\xe3\x7e\x02\xc8\xd1\x81\xa8\x9d\xbf\x80\xff\x53\x07\xef\xf1\x7e\x83\xe0\xc9\xff\xf2\x9a\x5f\x06\xbf\x9f\xf3\xd5\xb5\xff\xfb\x8c\x2c\x57\x15\x0e\xdb\x98\x30\x95\xfe\xa7\x86\xd9\xf4\x3e\xfe\x83\xd4\xda\xdf\x79\x80\x52\x16\xe4\x34\x3b\x6b\x64\x7b\xc1\x91\x01\xb1\xe8\xef\xe4\x7a\x24\x17\xa4\x26\xf9\xe8\x64\x84\x97\x23\xb1\xc0\x8a\x4a\x50\xdf\x46\x7e\xd4\x6a\x73\x1c\x70\x15\x1e\xa1\x91\x9e\xd3\x68\x4c\x59\x50\xcb\xc6\x7f\x96\x54\x56\xba\x5e\x36\xba\xa2\x72\xa1\x18\x90\x91\xe0\xa3\x2b\x02\xfc\x17\x97\x8b\xd1\x8c\x57\x15\x3e\xe7\xb5\xe2\x22\x39\x1b\x35\xee\x1f\x68\x93\x2f\xb1\x9c\x2d\xd4\xdd\x15\x29\xad\x5c\xeb\xc2\xc6\x8c\x6c\x53\xd5\x90\x01\x28\x9b\x04\x5d\xf6\x49\xf6\x79\xa7\x64\x9f\x26\xc4\xfa\x8a\x41\x89\x6c\x3d\x03\x4e\xf2\xc2\x58\x71\xbf\x03\x33\x06\x16\x5a\xb3\x49\x2d\xbb\x77\x98\xbd\x2d\x8e\x8f\x91\x3e\xf2\x83\x81\x27\x2b\x38\x66\x2c\x51\x18\x67\x5d\x98\x34\x17\x4b\xbb\x93\x2d\xf8\xd5\xb8\x25\x2c\x8c\x2a\x2d\x68\x49\x14\xfe\x82\xa9\xfb\xc4\x47\xc2\x22\xbc\x4d\x9a\xb4\x16\x90\xaa\xe3\xaf\x21\x51\xde\x5a\x86\xf3\x0a\xdc\xb2\x92\x56\x3d\xbb\x18\xd0\xc5\x9d\x00\x4a\xef\xf2\x08\x87\x7d\x00\xbc\x7f\xa8\x2e\x56\x4a\xcb\x1c\x54\x22\x8a\xa0\x6b\xf4\xcc\xcf\xca\x72\x4b\xe7\xb8\x2c\x3b\x7b\xd6\xdf\x81\x6a\x41\xf7\xe3\x18\xbb\x81\x42\x5b\x48\x14\x3f\xb3\x18\x20\x68\x71\xfb\x8d\x25\x55\x49\xee\xd3\xbc\x32\x04\x6c\xbe\x30\x8a\x5a\x8b\x1b\x99\x93\xe2\xdb\x18\x0d\x17\xa2\x8d\x50\x89\x37\x29\x05\xf4\x91\x0e\x38\x10\x58\x77\x6b\x77\xb0\xd6\x57\x1b\x12\x35\xfa\xdc\x78\x6d\x45\x05\xe0\xa6\xd5\xfa\xac\x40\x7f\xe2\xb3\xc5\x00\xa9\xe9\xd8\x78\xc5\xad\x92\x46\x94\xd0\x2e\x33\x68\x41\x4b\x8e\x70\x71\xb4\x97\xf4\x04\x30\x3b\xb5\xff\xfb\x4e\xe9\x9d\x3a\x38\x18\xe3\x47\xc5\xb1\x82\xbc\x21\x74\xa6\xd9\x53\xfc\xed\xf1\x53\x36\x59\xe2\xfa\xe3\x33\xf1\xd6\xc9\x13\xc7\xd9\xd4\x7e\x34\x92\x4c\xff\x8b\x96\x15\x8e\x7b\xe4\x05\x1d\x1a\xe3\xbc\x6d\x54\x93\x16\x23\x04\x6e\x0d\x6f\xe3\xe0\x51\xa7\xfa\x91\x8f\xfd\x30\xc5\x25\x39\xe7\x6b\x36\x03\x65\x52\x5f\x14\x12\x8f\xad\x09\xa4\x30\xc4\xb0\x30\x20\xcb\x09\x90\xe1\xb4\x13\x5b\xf9\x9e\x18\x9b\xfc\xc9\x9f\xc0\xe1\xc3\x98\x5d\x0d\xc2\xca\xe9\xd7\xbf\x3b\x8a\x0d\x93\x61\xa5\x29\x63\x16\x52\xc6\xbe\x8a\xd8\xfc\x7d\xb1\xae\x2a\x43\xcb\xb6\x44\x88\x49\x73\x87\xc6\x1b\x10\xc0\x2e\x1c\x8f\x26\x55\x35\x84\xef\x50\x52\x42\xb0\x9c\x98\x9b\x7c\x09\xd8\xc0\x9c\xca\xa4\x26\xab\x0a\xcf\xc8\xf8\xf1\xe8\xf1\x5c\x73\xa0\xbc\x87\xff\x34\x27\x49\x2f\xc6\x47\x3a\x02\x94\x13\xa9\xdd\x8b\x21\xe5\x03\x50\x42\x96\xfb\x42\xbc\xec\x06\xb4\xcc\x0e\xe2\xf3\xfc\x2d\x99\xd1\x15\xd5\x1e\xcf\xef\x3f\x6c\xf6\x98\x0e\x68\xfb\xe9\x87\x8b\x31\xca\x51\xf6\xed\xe1\xf1\xc1\xc1\x58\x4c\x9a\x4a\x05\xb3\x6e\xeb\xb9\xc2\xf3\x5e\xf5\x6f\x4c\xf5\x23\x8d\x00\x9a\x16\xcd\x62\xd3\xfd\x7c\xa3\xfa\xe9\x6c\xe4\xa7\xa6\x0a\x2a\xd8\xec\x51\xf1\x0e\xc2\x31\x45\x71\xae\xfc\xf7\xbf\xc0\x35\x49\xf3\xa6\xb9\xd8\xf6\xfe\xe1\xda\x88\x91\x00\x37\x9e\x58\x2f\x9b\xa2\x1e\xb6\x69\x9d\x03\x13\xa7\x2e\x1a\x25\x14\x3e\x40\xcc\xb1\x41\x83\x6f\xd1\x0a\xe7\x9c\x7d\xb7\xae\x3e\x36\x8f\x07\xcc\x3f\x7d\x49\xb4\x46\x41\xea\x45\xf9\x1f\x8d\x88\x28\xfe\x0c\x42\x1d\xef\x6b\xe0\x4d\xde\xfe\x0c\xa1\x9a\xda\xdf\x0d\xca\x4a\x94\x68\x9c\x95\xf8\xae\x91\x56\xe2\xbb\xc3\x5a\xa9\x49\x19\xb4\x95\x28\xf2\x94\x05\xed\x42\x8b\xb8\x74\xb8\xb4\x40\x98\x8c\x07\x0a\x93\xf5\x49\x99\xc4\x1b\x03\x74\xea\x9f\x2f\x1c\x98\xc4\x73\xd0\x03\x97\xf4\x12\xe5\x41\xd8\x8c\x25\x16\x52\x51\xb4\x66\x15\x1f\xb6\x48\x63\x77\x0e\x2c\x06\x7b\xd5\x5f\xfd\x1e\x36\x2c\x7d\x99\x7c\x27\xf3\x20\x8f\xa1\x0d\x68\x90\x1f\x35\xe6\xdc\xaf\x28\xfb\x08\x3b\x63\x9f\x02\x80\x18\xa3\x26\xf8\x8c\xba\x7b\xa3\x65\x05\xf7\xe3\x9d\xd4\xdb\xeb\xd5\x78\x37\x7d\x75\xd4\xd2\xfc\xd1\x8e\xac\xe6\x65\x84\xcc\x53\xe6\xb9\xc6\x4d\xc2\xfa\xd0\xa6\x78\x7a\xc7\x6e\xdc\xc4\x5e\x0f\x79\xda\x85\x41\xa7\x64\x68\x65\x5f\x38\x9a\x72\xf0\x5a\xd8\x6b\xde\xf4\x73\xf5\x1b\xe5\x22\xcb\x85\x42\x32\x60\x5a\x9e\xf2\xd0\x6d\xd9\xf9\xd9\xac\xa9\x6d\x03\x40\x7b\x3d\x14\x61\x64\xf1\xd7\x53\x7b\x55\xa6\x48\xd3\xef\x03\x33\x0f\x6b\x03\xa7\xf6\x9e\xc1\xf9\x36\xca\x65\x20\x74\x2c\xb7\x6d\x4a\x73\xcf\xa4\xb6\xbb\x0b\x47\x41\x76\xf4\x01\xfa\xc9\x76\x9c\x67\xb3\x2f\x61\x7a\xa4\xa0\x71\x7f\xdc\x52\xd1\x93\x6a\x34\x95\x52\xd4\xa6\xc5\x44\x7e\xfe\xd0\x28\x9a\x82\x5b\xef\x14\x17\x3f\x4e\x96\x78\x35\x76\xde\x2e\x22\xf0\x76\x91\x9b\xac\x09\x6f\x72\x02\xe2\x71\xff\xda\x79\x59\x30\x71\x40\xdd\x1e\x1c\xd0\x1e\x79\x51\xb4\xb7\xb9\x0c\x03\x23\x30\xbb\xc6\x9f\x49\xd9\x4c\x51\xdc\x6d\x26\xb7\xb7\xbb\xcc\x04\xa1\x60\x2a\x70\xa8\xd3\x70\xa8\x7b\xf4\x27\x2d\xa2\x9d\xfa\x9d\xf8\x4a\x00\x5b\x43\x84\x06\x07\x5b\xfa\x2d\x6b\x7c\x21\xd1\x94\xa6\xee\xcf\x0b\x5d\xb6\x43\x67\x15\xbd\x24\x1d\x7d\x41\x44\xf2\xe1\x5d\xe1\xb2\x0c\x7b\xaa\xc9\xcc\x72\xe6\xc3\x7b\x81\xb0\x16\xa9\x8e\xde\x41\xc9\x96\xbe\x36\x3c\x12\x2f\x44\x16\xc4\xde\x75\x29\x8a\x42\x86\x27\x1a\xa2\x8a\x34\x24\xd3\x20\x8e\x87\x0c\xaf\x17\xd9\x82\xee\x1a\xc9\x30\xa0\x80\x24\xe7\x55\x8b\x02\xda\xd9\xdd\x73\x77\x6b\xdd\x5c\x3c\x14\x0d\x45\xef\xa8\x2d\x37\xc4\xc2\x03\xd1\x36\x59\x6e\xdf\x56\x7f\x97\xee\x8d\xee\x94\x50\xd5\x51\x6e\x9d\x75\x83\x3c\x12\xbd\xe9\x55\xb7\xe8\xe4\x57\x94\x31\x52\xf6\x2a\xe5\xad\x59\xe2\x8c\xaf\xae\x1b\xf5\xcd\x91\xfe\xdd\xb0\x31\xf6\x8b\x45\x47\x4e\xa7\xf4\xf9\x09\xb4\x84\xf1\xf4\x02\x0b\xbb\x94\xf6\xc4\x1a\xb0\xd9\x3b\x2d\x57\xcd\x4b\xf5\xb6\xe9\x27\x73\xc3\x47\xde\xd7\x79\x9b\x16\x76\xbd\xc7\xf1\xd2\xbc\x58\xbf\x7d\xb1\xc3\x12\x10\x38\xec\x5a\x9b\x96\xbe\xe0\x33\xbb\x47\xfe\x6f\xb0\x45\xdd\x3f\x76\xd7\xde\xab\x17\x7d\x72\x55\x2d\xb0\x73\x77\x06\xa1\xbc\x34\x99\x44\x8d\x0d\xe9\x20\x3a\x99\x2e\x15\xa0\xf2\xe2\x75\x28\x4a\xc4\x2b\x39\xd5\x81\xbe\xdd\xc7\x59\xc5\x19\x29\xf5\x69\x6b\xdd\x2a\x42\x1b\x28\x58\x51\x76\x0a\x29\xea\xa8\x78\x03\xd7\x7e\xff\x58\x3d\x00\xe7\x58\x6d\x56\x74\xcf\x1c\x73\x0f\x13\x70\xac\xfc\xab\x86\x46\xce\x9c\x32\xf0\x27\x82\x57\x8b\xb2\x89\x51\x5e\xc0\x72\x7c\x1f\x0f\xdf\x7b\xd7\xf5\x6b\x77\x60\xa2\x17\xed\x0b\xed\xfc\x42\xbb\x3b\x08\x02\xe4\xa4\x2b\x99\xdd\x42\x91\x6f\x51\xca\x6d\xc8\xe4\xa5\x6f\x23\x4d\xc0\x40\xa7\xbe\x1b\xd2\xe6\x4e\x09\x4a\x34\x9e\x3a\x61\xab\xb5\xfc\xab\x96\xb2\x58\xc9\x4c\xe8\x37\x98\x34\xe2\xef\xef\xc0\x88\x76\x5c\x07\x69\x5d\xd5\x8e\xc9\xfa\x5c\x74\x33\xef\x45\x9a\x67\xa1\x49\xcc\xe4\xf7\x49\x09\x03\x04\xee\xae\xae\x38\x57\xcf\x29\xb3\x0c\xe1\xc9\xd2\xc4\x17\xfa\xe5\x46\xf2\x2e\x7d\x5b\x03\x06\x92\x3d\xd6\x9f\xe4\x98\x7b\x49\x8e\x59\x8e\x1e\xc3\x5b\xb6\xd4\x4a\x93\xe8\x58\x2a\xc6\x24\x48\x42\x8c\xbe\x82\xba\x4d\x2e\xe3\xf3\xb5\x94\x9c\xa1\x01\x99\x89\x9d\x7b\x97\x4d\x50\x0d\xff\x9a\xb4\x33\x61\x56\xcf\x89\xf4\x73\x16\xf3\x61\x39\x8b\xf1\x6c\x46\x56\x40\xe1\x11\x31\xd5\x0a\xd4\x5c\xfd\xef\x53\x3e\x59\x96\xb9\x56\x97\x94\xfc\x8a\xe5\x93\x85\x5c\xea\xff\x55\x3d\x79\x8e\x8f\xdb\x69\x8e\xbf\xfe\x35\xd2\x1c\x1b\x79\x64\xc8\x9c\x9e\x18\x30\x8c\x72\xa9\x6d\x1a\x72\x99\xf5\x66\x24\xce\x6e\x66\x9c\x09\x5e\x91\x49\xc5\xe7\x63\xf4\x9c\xb3\x4b\x90\xe2\x8d\x2e\x30\xad\x48\x39\xba\x50\xf5\xc1\x7a\x3a\x27\x5b\xf3\x1f\xf7\xcc\x89\xb2\xb9\x9d\x94\x49\x71\x2c\xba\x52\x1c\x93\xec\x46\xf8\x29\x8e\x23\x8e\xab\xb9\xe6\x51\x30\xc1\x77\x6c\x45\x59\x10\xce\xc2\x81\xe0\xb5\x2a\xd2\x9e\x46\x41\xa1\x0f\x68\xdb\xee\xc3\x5d\x10\x37\x8c\x37\x16\xc3\x6b\x27\x61\x77\xa9\x3e\x57\x90\x57\x43\x57\xb5\x19\xdd\x40\x25\xf6\x86\x36\xca\xae\x9b\x15\x65\xd3\xc4\xec\x2c\x10\x6f\x28\x4e\x40\x85\xfd\x3e\xf2\x6d\xfa\xcc\x6e\x85\xdd\x08\x92\x0c\xe1\x91\x5a\xee\x51\xdf\x72\x7d\x74\x36\x68\xdd\x5e\x50\xba\x97\x86\x78\xe9\x34\x1f\xd0\xd4\x8d\x02\x21\x49\xcf\x77\x57\x08\x58\xc2\x28\xf1\x6c\xa7\x03\x3d\xed\x7c\x02\x0a\x9c\xc0\x1b\x33\x7d\x66\x2d\x0d\xbc\xc8\x6e\x2d\x82\x0b\x36\x28\x15\x6b\x21\x9e\xa0\x55\x2f\xec\xf5\xf7\x16\xdc\xae\x60\x7a\xcd\xdd\x0a\xb4\x23\xf1\x2e\xf9\xe8\x3d\xe2\x80\x14\x35\x02\xf4\x18\xbe\x6c\x88\xbe\xa4\x2f\x5f\x8e\x8e\x90\x73\x3c\x25\x61\x5e\xa0\xb4\x67\x5e\x13\xfc\x37\xd9\x5f\xfc\xd1\x86\x90\x6a\x2b\x34\xa1\xc4\x73\x27\x3f\x6b\xa8\xd7\xe0\xae\xc4\x02\x94\x7e\xae\x5f\x93\x2e\xed\x08\x06\xb6\x7d\xd7\x3d\x0b\xca\x9b\xab\x06\x24\x91\xdb\x42\x72\x8f\x29\xb5\x3f\x1f\xa5\x04\x12\x8d\xd2\xc6\xe4\x9b\xd0\xf7\xdd\xdb\x9b\x81\x57\x3e\xe2\x05\x86\xdc\xfa\x14\xfb\xd0\x7d\xf1\x13\x3b\xe6\xee\x7e\xcb\x43\x26\x5e\x5c\xe8\x27\x13\x1b\x45\x7d\x75\x45\xcb\x39\x91\x3a\xbe\xf6\xe1\x4a\xc7\x17\xe8\x54\xe7\x4d\xc7\x5b\x17\x10\xbc\xb5\x78\x5f\x3a\x9e\x5b\xe2\xbe\x3c\xd0\x8b\xe3\x9f\xfb\xbd\x35\x36\x63\x4b\x13\x93\xb2\x13\x34\x37\xe4\x5d\x3b\xe4\x87\xa7\x00\xb1\x64\xae\xff\xec\xf4\x08\xe9\x3e\x3c\xd2\x67\x98\x1a\xc0\x86\x0b\x68\x11\x1b\x29\x5b\x0e\x9f\x15\x8d\x88\xdf\x16\xff\xaa\x63\x64\x7a\x62\x5f\x43\x1b\xa9\xae\x47\x4d\x9a\xb9\x1c\x4d\x26\x13\x50\xf8\x6b\xc5\x7b\x20\x2b\x0c\x86\x0b\xf9\xb8\xf6\x70\x39\x4b\xac\x83\x24\x4d\x52\x76\x5c\x06\xbd\x08\xcd\x4c\x90\x51\xdb\x5f\xac\xab\xea\x7a\x34\x83\x65\x91\x72\xe4\x27\xcf\x53\xeb\xe1\xab\xfb\x2d\x47\x1b\x2f\x34\x16\x16\xed\x87\xd4\x3a\xfe\x6e\x03\x22\x47\x31\xd8\xa8\xac\xad\xfb\x08\x5c\x1f\x70\xab\xe9\x20\x34\x51\x44\xd7\x9b\x3e\x02\x2a\x2f\xb1\xc4\xd3\xf7\x1f\x72\x50\x92\x68\xdf\x5c\x84\x12\xa1\x87\x42\xbe\x19\xe2\x70\xcd\x13\x7c\xb3\xb6\xba\x57\x9d\xc2\x3d\x91\xa1\x0a\xcd\x14\x39\x95\x18\x99\x34\xe3\x16\x9e\xf2\x66\x1c\x16\x18\x0d\x54\xd0\x71\x62\x31\x81\x8b\x98\x27\xb6\x44\xd9\x04\x66\xd9\xa6\x05\x75\xd5\x46\x18\xaa\x18\x4e\x7e\xc5\x14\x4f\x03\x14\x79\x07\x70\x79\x84\x80\x5b\x4a\x87\x5b\x82\x03\x00\x7f\xb3\x4e\x23\x8f\xe0\x04\x63\x31\x3a\xdd\x22\x46\xaf\xf0\x35\x5f\xcb\xc7\x8a\x53\xc4\x94\x85\x09\x70\x7e\xdd\x0c\x0c\xdb\x2d\x04\x9a\x49\xee\x96\x32\xc4\xac\x71\x5e\xd3\xf2\xb7\xb1\x50\x35\xd3\x07\x5b\x6d\x94\xd8\xe9\x4b\x5b\xab\x9d\xe2\xdd\x17\x69\x0c\x47\x0e\x67\x6b\x21\xf9\xf2\x10\x9b\x0c\x6d\x5f\xe0\x92\xc3\x19\xde\x7f\xc5\x73\x7e\x28\xf9\xea\x8b\x5c\xea\x9c\x4b\x98\xdc\x07\x5f\xde\x00\x19\x6e\xb3\x36\xc4\x0c\x32\xd3\x02\x40\xdc\x31\x62\x75\x62\x7f\xbe\xc8\x8d\x89\xac\x9d\x72\xc4\x38\x3b\x5c\xd5\x94\x49\x7c\x5e\x91\xbb\x5d\x8a\x8a\xcf\xf9\xe1\x82\xe0\x52\x8b\x8c\x3e\xd7\xa2\xb7\xa8\xe4\xe8\xcc\xe6\x74\xd4\x29\x51\xf5\x5f\x6a\xe2\xda\x15\xaa\xa5\x97\xb0\x69\x91\xb6\xc4\x9e\x56\x1d\x34\xe9\xa4\x1f\x69\x81\x2a\x96\xc4\x8f\x71\x86\x67\x0b\xf2\xdd\x5a\x18\xc5\xf4\xdd\x6e\x95\x39\x34\x86\x2f\xe9\x1c\xc7\xe0\x65\xab\xa6\xf9\x73\xe6\xef\xdf\x7e\x13\xfd\x45\xc5\x97\xd1\x29\xbb\x4e\x24\x59\x4e\x11\xda\xcd\x96\x6e\x9b\xdf\x74\xbf\x86\xb7\xd7\xad\xba\x5f\xbf\x4b\x98\x9a\xfe\x2b\x3e\xe7\x6b\x39\xdd\x3f\xca\x17\x58\xbc\xa1\xad\x5c\x40\x8a\xd8\x02\xa6\x19\xad\xa8\x36\x53\x5f\x60\xa7\x77\xea\xa9\x2c\x6c\x15\x14\xe8\x2d\xfb\x1b\x95\x5e\x2d\x68\xf7\xcf\x05\x96\xe2\x7b\x70\x5a\x64\xe4\x4a\x3c\x07\x44\xa8\xd5\xb8\xb4\x24\xdf\xbb\x63\xd1\x4e\xdc\xc3\xf2\x89\x79\xc4\xb6\xe7\x30\x6c\xdf\x92\x5a\xa5\xd3\x27\x06\x0a\x0c\xbc\x96\x8b\x37\x35\xbf\xa4\xfa\xe0\xb4\x97\xc0\x33\xef\xd3\xe4\x85\xb9\xd7\x6d\x93\x3c\xbf\x87\xe7\x9c\x5d\xd0\x39\xca\xf6\x48\xf1\x3f\xa7\x3f\x7c\x3f\x59\xe1\x5a\x90\x90\x23\xf2\x4f\x46\x87\xa5\x2b\xa9\x68\xbe\x18\x67\x54\x5f\x97\x81\xb2\x89\xb7\x57\xe3\xa4\x04\xd6\xab\x00\x21\xc4\x5b\xf2\x1b\x3b\xcb\x4b\xeb\x29\x12\x98\x8b\x39\x35\x4e\x49\x21\x66\xff\x44\xf2\x57\xfc\x8a\xd4\xcf\xb1\xd0\x37\x11\x14\x42\xd4\x87\x2f\xce\xb3\x15\xff\x84\x3f\x8d\x6f\xd6\x75\x35\x45\x0b\x29\x57\x62\xfa\xf8\xb1\x85\x02\x13\xf1\xf5\x21\x59\x1f\x5e\x11\x21\x0f\x8f\x27\x78\x89\x7f\xe6\x0c\x5f\x09\x75\x3d\x1e\xab\x13\x7f\xec\xf8\x47\x9e\x23\x4f\x37\xc4\x72\x60\x0a\x9e\xce\xce\x8b\xe6\x2b\xb5\xc1\x94\xff\xf6\xf2\x0c\x69\x6e\x0b\x78\x2c\x50\xb6\x18\x6d\xc7\x34\x54\x09\x18\x4f\x30\xa3\xc5\x23\xda\xd7\x27\xfe\xaa\x70\x86\xfe\x6c\x43\xcd\xda\x9b\x08\xe0\xf2\x4e\x9a\xcb\x40\x1b\x15\x68\x9f\x74\xca\x92\x50\xe8\x2d\xd6\xe7\x62\x56\xd3\x73\xe2\x8b\xbd\x75\x3f\x39\xd2\x12\x11\xf3\x66\x1a\x11\x89\xfa\x30\x6e\x09\xcf\xbd\x7e\x80\x8d\x7a\x27\xb4\xe1\x9c\xee\x68\x05\x6a\xa3\xef\xb5\x2d\x8f\xc9\x35\xbd\xbb\x8e\x33\x1c\x70\xcd\x76\x1f\xb2\xaf\x8b\xde\xd5\xd3\x9f\xe9\x19\xc7\x42\x36\x7a\x4c\xa3\x16\x85\xcd\xf0\x48\xaa\xe8\xbc\x13\x05\xe6\xc8\x13\xaa\x0e\x13\x40\x1b\xfa\x4c\x71\xb8\x83\x3b\x1f\x07\x0a\x90\xd8\xbc\xb5\x81\xa1\x39\xf1\xc2\x3f\x1a\xbd\xbf\x96\x93\x06\x0a\x2c\x1f\x7a\x46\x2d\x5c\x1a\x18\xdd\x08\x3c\xd3\xdb\x3b\x0f\x06\xa4\xb1\x8b\xa4\xb7\x96\x20\xc7\x5c\xb8\x98\xcc\x08\x7b\x1b\x03\x60\x99\x65\xdf\xe8\xec\xf1\xc6\x68\x54\x1a\xa3\x51\xca\x2e\x38\x9a\xba\xa3\x52\x3f\xc7\x37\xda\x05\x5a\x81\xf5\xa5\x75\x8e\xdc\x84\x06\x94\x46\x51\xd9\xb4\x33\x5f\xb6\x37\xbd\xc2\x35\xf3\xda\xa9\x9f\x94\xcd\xb7\xb7\x03\xad\x66\xd3\x50\xff\x4e\x37\xdb\x78\x0a\xc3\x9f\xd6\xcb\xd5\x19\x7f\x43\x59\x23\x63\xf3\x7d\x0c\xc1\xe4\xb4\x88\xbc\xf3\x74\x86\x8a\x58\x5c\xde\x76\x57\xb3\x3e\xeb\x84\x7c\x34\x6e\x5c\x96\x90\xc8\xa5\xef\xc8\xdd\x1b\xe3\x10\xe5\x32\x96\xd0\xaa\x63\x7a\xf0\xd1\x3c\x39\x72\x38\x5e\xce\x72\xcf\x88\x4d\x0b\xe1\x34\xda\xf2\x5e\x90\x07\x61\x3d\x43\xa5\x20\xd5\x77\x83\xfb\x04\x21\xaa\x03\xe3\x28\x12\xd8\x2e\x04\x58\x2f\x4c\x6d\xd5\x31\x6b\xb0\x11\xb5\x19\xc3\xbe\xa3\x55\xa5\x2e\x8b\x3f\x37\x0b\xb2\xa9\x48\x64\x73\xe9\xe8\x15\x98\x5a\x85\xee\xce\xa1\x47\x50\xf6\x00\x31\xb0\xae\x49\xf9\x80\x23\x88\xa5\x5c\xb5\x38\x43\xbe\xc9\xf6\x86\xd3\xf0\x49\x53\xd1\x21\x74\xfb\x97\xe5\x2d\xd3\x47\xb5\xef\x64\x47\x6b\x76\x67\x85\xe7\xe4\x10\x62\x6b\x7d\x76\xa6\x79\x95\x5e\x72\x33\xc5\x3b\x31\xc9\xba\xf9\x67\x67\x92\xdd\x22\x17\xc7\x3d\xab\xb4\xd3\xdc\x6d\xa1\x9c\x9d\x73\x5c\x97\x8f\xb5\x63\xe2\xa1\x85\x67\x09\x46\xf5\x57\xbe\xd8\x37\x3b\x71\x8d\x82\xd4\x14\x57\x0d\xb3\x69\x6c\x37\xaa\xf5\x5c\xfd\x6b\x50\x3b\x65\x73\x27\x37\x60\x25\xa9\x03\x67\xa1\x56\xfe\x05\x21\xd5\xa6\x1e\x1f\x5e\xd0\x5a\xc8\x50\xbb\xda\xf6\xbc\x8c\xeb\xe6\x23\xf7\xad\xc2\xae\xf9\x47\x72\xbd\x5e\x8d\x3d\xe5\xdb\x90\x31\x2f\x71\x35\x56\xf4\x6f\x47\x55\xaf\x7b\x5d\xb3\x15\xde\x42\x15\x1e\x0a\xa3\xc5\x9a\x60\x29\xeb\x31\x12\xf5\x0c\xe5\xe8\x31\x16\x82\x48\xf1\x98\x2e\xe7\xee\x1a\xac\x48\x2d\x38\x3b\x9c\xd7\x84\xb0\xc9\x4a\xc1\xe5\x56\x1c\x8c\x3b\x75\x58\x93\x12\xba\xdb\x74\xef\x1e\x03\xbf\x73\x7e\x71\x31\x46\xda\x0e\x4c\xfd\x60\xf6\xef\xb6\x19\xef\xe0\xdd\x6b\xc7\x67\x4e\x55\xed\xf6\x94\x1d\xbe\xf7\x03\x6a\x76\x0f\x63\xec\x13\x9a\xdb\x0a\x28\x3a\xa1\xfa\x9f\x98\x7e\xd5\x95\xc4\x25\xf9\x61\xad\x69\x09\x7e\x15\x6c\x92\xa1\x31\xbc\xee\x14\x85\x9d\x1a\xe4\xa8\xb5\x44\x33\xc0\x13\x33\xc0\x09\xeb\xbc\xf4\x4f\x0e\x57\x58\x88\x2b\x5e\x97\x5b\xdf\x47\x53\xf5\x70\xa6\x10\x7d\xbd\x1c\xfe\x26\x82\x61\xf4\x66\x1b\x3a\xe8\x2f\x7f\xbe\xbd\xdd\xb1\xc9\xb7\x7f\x3a\xba\xbd\xed\x38\xaa\x76\xa3\x5d\x16\xa3\x1b\x68\x05\x7f\x96\x4d\x87\x5c\x86\x6d\x00\xc5\xab\x9a\x36\xbe\x48\xde\x8e\xfb\xbd\xd0\xbe\xa9\xdf\x09\x18\xfe\xaa\x93\xef\x84\x2f\x4f\x76\x86\x2f\xfb\x43\xaf\xc8\xce\x37\xf0\x6e\x97\xb6\x0b\xbc\x24\x9f\x60\xca\x60\x28\x51\x3d\x7d\x30\x9d\x37\x20\x68\xbb\x2b\xc0\xec\x7e\x32\x2d\xf3\xa3\x6d\x0d\xf6\x8b\x62\xe8\xfe\x0d\xda\xb5\xe1\xf7\xb3\x6f\x6a\x9f\x7d\x33\x1f\x10\xb7\x3c\xe9\xc5\x2d\xf4\x62\xbc\x9f\xc0\x2f\x2e\x76\xc3\x30\xf4\xf2\xb5\x87\x5e\x0c\x35\xf8\x87\x9b\x11\x72\xbb\x32\x1d\xa1\x3f\x3c\x1a\x7a\xce\x8f\xfe\x80\xf2\x11\x02\x42\x10\x5a\xaa\xb9\xa8\x5f\x50\xd2\x80\xa3\x9e\x6e\x13\xc4\x03\xb4\x76\x80\xb8\xb7\x71\x4c\x10\x3c\xfa\x03\x1a\x6d\xfe\x90\xf3\xc1\x97\x75\x8f\xf8\x3e\xce\x8d\x6d\x9b\x01\x77\x63\x32\xb1\xf4\xad\xb3\x61\xf3\xad\xc2\x41\x84\x7d\x63\x7b\x9d\xf2\x5c\x3b\x66\x4c\xe5\x44\xff\xbb\xd9\x23\xb1\xac\xc0\x97\xb3\x8e\x91\xf7\x8b\xd7\x53\xcb\x2e\xa0\x30\x31\xca\x15\x65\x25\xbf\x9a\x54\x1c\x84\x64\x93\x45\x4d\x2e\x0a\xf4\xf8\x31\x7a\xd4\x2a\xe1\x42\x3e\x42\x8f\xc5\x63\xf4\xa8\x99\xf8\x23\xa4\x7f\x2a\xda\x7c\x93\x6d\xfc\x4b\xd5\xd1\x31\xd2\x76\xec\x03\x5e\x91\xf7\x10\x76\x81\x82\xdb\x1f\xb0\xb1\xa4\x1f\xce\x1f\x43\x1c\x25\xf3\xcf\x61\x4d\xc4\xba\x92\xe2\xf3\xf1\x8f\xbb\xc7\xa7\x80\x29\xbf\x59\xd4\x58\x40\x08\x61\xbd\x92\xff\x53\x8c\x60\xcb\xd3\xee\x23\xb9\x56\xdb\x98\x74\xb4\x23\x6c\xc6\x4b\xf2\xee\xed\x89\x9b\x94\x27\xb1\x72\x0d\x35\xd6\x86\xa0\xa1\xd3\x1b\x1d\x9f\x73\xff\x28\x37\x19\xf9\x15\xc7\x66\xd2\xef\x6b\x6f\x0e\x31\x53\x85\x8a\xa3\xd7\xb1\x2f\xef\xe3\x9c\x66\xcf\x25\xcb\x65\xf1\xfe\x43\xce\x0a\xf4\x3d\x97\x0b\xca\xe6\xa3\x0b\xbe\x66\x25\xda\xa3\x17\xe3\x26\x80\x42\x76\x23\x8b\x1f\x27\x6b\x46\xff\xf5\x9d\x3a\x1b\xff\xfc\xec\x62\xdb\x32\x4c\x17\xb4\xf6\xb8\xf0\xa2\x68\xa1\x9a\x5c\x90\x9a\xb0\x19\x41\xd3\xe6\x6f\x81\x72\xa1\xeb\x49\x57\xcf\x49\x05\x83\x90\x13\xd4\xf5\x94\x63\x57\x79\x8f\x79\x4e\x44\x34\x47\xa3\x46\x09\xc4\x73\x34\xa2\xcc\xfb\x80\x83\x62\xe1\x87\x73\xf5\x0f\x5e\xbd\xfb\x96\x21\x71\x94\x62\x66\x4e\x64\x98\xff\x5f\x5f\x14\x13\x01\xd6\x18\x19\x6b\xb7\x2b\x9e\xdd\xde\xc6\x01\x31\x8c\x2a\xa0\x89\x93\x25\x4f\x79\x2d\x75\x7c\x52\xc8\x15\x7a\x97\x61\x7f\xa8\xb5\x48\xa0\x19\x59\xb4\x46\x16\x9d\x23\xbb\xa8\x22\xbc\x96\x6f\xe1\x7a\x8c\x65\xb6\xc9\xfd\xdf\x09\x53\xd1\xe8\xf5\x04\x71\xed\x5b\x3b\x41\x14\xbd\xc8\x34\x9d\x7b\x70\x30\x26\x45\x13\x2f\xd7\x4f\xd1\x3e\xd1\xe2\xe6\x9e\xbd\x75\x81\x75\x73\x36\x31\x6f\x25\xea\xce\x7c\x1d\xd8\x9b\xab\xad\x3a\x34\x2f\x2e\xea\xb0\x26\x97\x54\x0c\xee\xd0\xf4\x01\x1d\xaa\x07\xfb\x54\x77\x56\x93\x4b\x52\x0b\x62\x23\x34\x6c\xed\x0b\xce\x33\x47\x26\x59\xc4\x74\x60\x75\xac\x6a\x27\xb4\x41\x5a\xa9\xd4\x4e\xf5\x00\xe6\x99\x37\x51\x3c\x0f\xc0\xf8\x9e\x06\x4a\xaf\x0d\xc2\xd8\xc6\xde\x03\x50\x64\x77\x31\xb2\x79\x37\xa5\x76\x4b\x74\x62\x34\x4f\xb5\x62\x5b\x75\x0e\x95\xea\xac\x19\x2a\x35\x91\xae\xa1\xec\xf7\x3b\x0e\xd5\xbf\xaa\xa3\x30\x48\x85\x98\x25\x86\x51\x5f\xd3\x53\x06\x49\x72\x34\x5f\xfd\xb1\xab\x97\xd4\x6c\x4c\x2f\x47\xc6\x9a\x19\xae\xae\x4b\x9f\xe1\xbf\xeb\x96\xb1\xae\xc6\x44\xbb\xd9\xfa\x84\x98\xfe\x52\x47\x2b\xfb\x5c\x68\x1e\x26\xd1\x1d\x28\xc1\x86\x7f\x35\xd8\x3d\xcc\x6b\xa4\x69\x1d\x88\x54\xa8\x10\xac\xc5\xcd\x5a\xb1\x87\xe5\x6c\x61\x22\x3a\x69\x0b\xac\xbb\xc5\xcc\x6f\xe8\x84\x66\xe7\x2f\x6c\x10\x20\xaf\x9e\x37\x9c\x5f\xd5\xff\x6c\xeb\x5f\x10\xf5\x5a\x15\x15\x09\x7f\x58\x9b\x73\x37\xfb\x14\xb1\x91\x97\x7c\x36\x4d\xf6\x0b\x91\x2d\x5f\x70\x05\x39\x1a\x47\xd6\xbe\xba\x7f\xa5\x95\x76\x9c\xc6\xf3\xbe\x5a\x67\x78\x8e\xb2\xdc\x18\xad\xf6\x55\xb4\x46\x14\x59\x2e\x2a\xde\xd5\xa5\x2a\x42\x99\xa2\xe5\xed\x9a\x8a\xe6\x4f\x13\xeb\x31\x3f\xda\xf7\x3f\x7a\x39\x54\x4a\x3e\xbb\xbd\x25\x13\x89\xe7\xea\x1f\x33\x27\xf5\x67\xb3\xe0\xec\xa9\xaf\x7a\x33\x77\xca\xa4\x04\xed\xf0\x67\x74\x24\x2e\xc9\x36\x7e\x48\x50\xf7\x3d\x0c\x06\x1a\x00\x5f\x13\xae\x34\x75\x54\x36\xda\xa5\x91\x9a\x7c\xed\xe5\x32\xf2\xee\xab\x06\x04\xbe\x17\x52\x58\x76\x14\x5e\x96\xdd\x5f\xb8\x9e\xec\x63\x4c\x6b\xad\x2a\x7b\x2c\xaf\x57\x44\x27\x81\xe5\x9f\xd1\x58\x54\x3b\x4e\x20\xd4\xf5\x14\x01\xe5\x61\x89\x83\x17\x44\x24\x9e\xd4\xf8\xea\x3b\x5e\x5e\xa3\xe0\x18\xa8\x78\x41\xd5\xfc\x12\x01\x32\xc2\x46\x41\x30\x30\xdd\x3f\xe8\x6d\x31\x9b\x91\xd0\x5d\xd0\x7e\xd4\x7e\x25\x39\x67\xcf\xdc\xd6\xc4\xc4\xd3\xaa\x4d\x34\xa9\x41\xb5\x67\x10\x38\x8c\xe9\x70\xf0\x39\x51\x74\x04\xdc\x2a\x33\x9d\x3c\x9e\x4b\xe8\xd9\x02\x43\xa2\x6c\x2c\x73\xf6\x30\xa7\x5e\x6b\xbd\xd1\xe7\xf4\x03\xb8\xd3\x22\xce\xb1\xb0\x37\xf6\x90\xb2\x8a\xb2\xa1\xa9\x48\xbb\x82\x1e\x7d\x71\xb9\x48\xcf\xd7\x42\xa7\x56\x58\xf2\xb5\x20\xb2\xc6\x2b\x93\x27\x67\xc1\xaf\x5e\x51\xf6\x51\xbb\xd7\xa9\xf2\x01\xe9\x04\xd5\x75\xb4\x19\x08\xb4\xa9\x26\x11\xb3\xad\xf5\xc9\xa7\x19\xa9\x57\x0a\x70\xab\x9f\x27\x65\x3b\xc0\x8f\x8e\xd2\xd8\x13\x7a\x19\x5e\x81\x71\x28\xd7\xbf\xec\x89\x35\x0e\x63\xda\x1d\x35\xcb\x57\x8a\x0e\x27\x57\x90\xfe\xe7\x0d\xfc\x40\x7a\xe0\x33\x6b\x8b\x73\x37\x0c\xed\xba\xf0\x5f\x96\xbf\x1f\x36\x40\xa3\xd1\x9e\x6e\x63\xb5\x2d\x5d\xa5\x3a\x32\x96\x72\xdf\x5d\x9f\x94\x0a\xab\xe8\x6d\x70\x2b\x7c\x14\xd8\xa0\x82\x07\xcb\x09\x70\x0e\x3e\x54\xb0\x87\xeb\x73\x53\x2c\xd3\xc1\x12\x19\xb9\x1a\xbd\xb6\xe5\xc6\xb5\xee\x5c\xe1\x2b\xa4\xc9\xc1\x71\x56\x7c\x3b\x0e\x58\x3e\x0b\x9d\x14\xee\x70\x95\xdf\xa3\x99\xac\xab\x47\xea\x4d\xcc\xf8\x72\x89\x59\xf9\x48\x3d\xf0\x76\x6b\x0b\x5a\xa0\xb5\x47\xbb\xb8\x29\xe6\xac\x2d\xb9\xf5\xd7\x09\xf7\x04\x65\x56\x56\xd5\xa9\x01\x53\x4d\xb2\x09\xd8\x54\x43\x8c\xef\xbb\xd8\x1f\xba\xac\x0a\xee\x39\xa4\xb3\x33\x27\xf7\x98\x80\xe2\x70\xcd\x9a\x1d\x55\xaf\xd6\xfc\x4e\x6f\x5a\x84\xe6\x9f\x79\x92\x63\xcf\x91\x63\x2d\x74\xb0\xf7\xc6\xcc\x2b\xdc\xa0\x33\x73\xed\x6c\x26\x82\xa0\xf1\x40\xab\x42\xdb\x36\x8d\x19\x92\xc3\x05\x28\x2d\xde\x21\x83\x2b\x51\xb6\xa7\x40\xcc\x7e\x51\x90\x71\x76\x70\x40\xc6\x86\x6a\xf2\x9d\x25\x4b\x2a\x66\xb8\x2e\xc1\xcb\xee\x30\x3e\x7d\xf0\x80\x6c\x9c\x27\xa7\xdd\xc8\xf3\x05\x74\x94\xcc\xec\x3f\x60\x90\x10\x2d\x86\x5d\x1b\xf8\x91\x82\x48\x0d\x98\x41\x61\xc2\x18\x11\x17\xe7\x0e\x0c\x15\x45\x41\x9e\xa2\x97\x25\x95\xa3\xd7\xbc\x24\xa8\x01\x50\xe1\x24\xdc\xd7\x26\x81\x86\xbb\x99\xad\x4c\x20\xfe\x9d\x85\x28\xf2\x60\x5a\xac\xbe\x7b\xf2\xb7\xbe\x8b\x1e\x0c\xde\xb4\x46\xd9\xb8\xe5\xde\xb1\x2d\x3b\x71\x02\xab\xfe\x66\x3c\x3b\x66\xfa\xec\x4d\xee\x59\x7d\x83\x6c\xf2\x6c\xf3\xed\x14\x5f\x12\x94\x5b\x74\xfa\xcb\xa3\xcb\xb4\x31\xce\x9e\x03\xe5\x3e\x10\x4f\x88\x97\x53\xe0\x7c\x93\xe5\x51\xf3\x0e\xb0\xde\xd7\x9f\x07\xe0\x13\x1a\x65\x8d\x9e\xcd\xa2\x77\xd0\xdc\x01\x56\xb7\x6b\xdf\xb5\xa1\x1d\x6f\x47\x7c\xb1\x6d\x16\x3b\xa3\x1f\xdf\x35\xef\xa1\x81\x24\x7a\x60\x78\x88\xfa\x40\x5f\x1f\x4e\xf2\x30\x4e\x17\x72\x72\x44\x91\x8d\xe3\x91\x52\x36\x05\x27\xd7\x1f\x0e\x3f\xc4\x6e\x0b\x2c\x5e\xda\x33\x3a\x38\xe8\x9c\x83\x3b\xc7\xed\xb3\x68\x8e\x7c\xcb\x3c\x06\x60\xca\x86\x20\xdc\x2d\x9f\x69\x00\x3b\x7f\xa3\xdc\xd4\x8c\x97\x5f\x88\x10\xc0\xbc\x32\x1d\xba\x11\xcf\x89\xe2\x89\x21\x38\x69\x49\x4e\xaf\x99\xc4\x9f\x80\x0b\x52\xbf\x5f\xea\xa9\xc2\x6f\x98\xf6\xfd\x99\x14\xd5\x6f\x27\x93\x22\xf4\x04\x1e\x76\x10\xe8\xb3\x3d\xd6\xc0\x18\xf3\xba\xb5\x09\x22\x59\xbc\xff\xd0\x15\xb7\x2f\x94\x78\xb8\x4c\x2b\xe8\x2f\x8f\x57\x35\xf9\x16\xc2\xd5\xb0\x62\x2c\x0b\xe9\xca\xfe\xf0\x97\x55\x4d\x46\xda\x32\xb7\x80\x19\x2f\xa9\xc2\x81\xa3\xd9\xf2\x50\x1c\x0a\x5e\x61\x1d\x73\x1b\x7e\x96\xb8\xfe\x88\x46\x25\x96\xf8\xb0\xc2\x6c\x5e\xa0\x3f\xa8\x2e\x33\x97\xca\xe4\x0f\xe8\xdb\x3f\xe8\xbc\x58\x4b\x5e\x1a\x57\xad\x25\xfd\x44\x4a\x04\xa9\x0b\xd1\xdf\xcf\x5e\xbf\x42\x9b\x6f\x0e\x8f\xf7\x21\x52\x3c\x2f\xa4\x76\x63\xd2\xf9\x79\xc7\x47\x3a\xd9\x78\xf0\x89\x3d\x7a\x92\xc5\x6c\x9e\x91\x9f\x58\x45\xdb\xfb\x0f\x7b\x3f\x4e\x08\x9e\x2d\xc6\x3f\x5a\x6d\xcf\x73\x5e\x92\xd7\x7a\x15\x0a\xbe\x92\x13\x76\xc1\xad\xca\x29\x4f\xd8\x1c\xe8\xc9\x4a\x5d\x15\xe6\x09\x41\xe8\x36\x7b\x22\x4c\x1d\x99\x43\x9d\xa2\x28\xb8\xc9\x90\x39\x46\xcd\x85\x85\x1c\x77\x3e\xcb\xe2\x1f\x9a\xd6\xcf\x25\x02\x39\x7a\xed\xb3\xcc\x4f\xb3\xea\x77\x2c\x5c\xd2\x20\x35\x3e\xca\xbd\x8d\xcd\xd2\xfe\x6a\xea\xf1\x91\xc2\xdb\x87\x8b\x9a\x2f\x15\xbd\xfb\xac\x26\x78\xdc\xc5\xdc\x36\xd3\xb2\xef\x4c\x11\xe0\x37\x72\x41\xd4\xe1\x2d\xb1\x04\x0b\x95\xbc\xa2\x8c\x7c\xbf\xd6\x21\xe5\xa7\xfb\x47\xfa\xe7\x3f\x6b\xbc\x5a\x69\x2b\xe5\xa3\x5c\xdd\x06\x26\xdf\x31\x2a\xa7\x7f\xcc\x25\x3e\x3f\xa5\x3f\x93\xe9\x1f\x73\x00\x16\x3a\x7a\x2c\x9e\xbf\xa8\xf9\x6a\xaa\x08\x94\x3d\x6f\x92\x86\xc2\x11\x3a\xd5\x54\xe1\xbd\xb3\x86\x28\x92\x35\x9d\xcf\x49\x3d\xb6\x64\x51\xb6\x69\x65\xf4\xf6\xb7\x74\x2f\xf6\x63\xba\xbd\xf5\x6f\x07\x5e\x4b\xfe\x8a\xe3\x52\xd1\xfb\x8a\xa2\xd5\xe7\x6b\x2c\x8e\xe0\xe0\xec\x96\x9b\xa2\x20\xd0\xb7\x83\x4d\x90\xca\x3c\xc9\xdb\xb6\xfd\x54\x5d\xa3\x36\x97\x2a\xb9\x3b\xa2\x2c\x27\x85\x86\x78\xe9\xf1\x6c\xa0\xd0\x39\x91\x6f\xde\xbe\xec\x18\x07\x36\x41\x4f\x3c\xce\x1f\xe1\xcd\x42\x7d\x79\xc1\x67\x63\xfd\xc7\x3f\xd4\x19\x8d\x2d\x04\xbb\x27\x6c\x68\x62\x20\x69\xb8\xe0\x42\x81\xe6\x16\x1e\x45\xe2\x74\x3d\x5d\xf0\x08\x4c\x09\x5b\x83\xad\xeb\x3a\x44\x99\x13\x73\x88\xb2\x7d\x88\xae\xc8\xed\xa9\x25\xf6\x22\xad\x9e\xff\xf8\xd4\xd1\xf6\x08\x99\x1d\xb9\x78\x7b\xbb\x7f\x1c\xa4\x52\x4e\x6f\x32\x15\xcf\x2b\x82\xd9\xf8\x97\x14\x3e\x77\xc9\x9a\xf5\x55\x31\x3b\xe3\xcb\xa6\xcd\x87\x73\x5d\xd9\xa4\x75\x6b\x84\xed\x0f\x2e\x98\x6e\xa8\x90\xcf\x4f\x46\xa9\xb9\x24\x88\x0f\x1f\x75\xdd\x39\x58\xc3\x8e\x52\x9e\x34\x31\x61\x28\xfb\x6e\x84\xfe\x90\x98\x3c\x97\x05\x09\x91\x39\xe0\x6a\x19\x24\x5c\x0b\x5e\x47\x80\xbf\x65\x0b\x40\xc2\x05\xf4\x6b\x49\x85\xd2\x15\x2e\x1c\x8e\xb3\x6d\x36\x1b\x69\x70\x35\xf1\x70\x35\x31\xb8\x9a\x58\xdc\x9c\x46\x04\x5d\xa8\x55\x76\xc5\xaa\xfe\x35\xcf\x38\x97\x05\x88\xcd\x03\xf2\x30\x47\x87\x33\x0d\xba\x8d\x7d\xe9\xce\xd8\xfc\x97\x45\xdd\x79\x4d\x70\xf9\x03\xab\xae\xf5\xbb\x6b\x19\x5b\xf5\x60\x61\xde\x87\x85\x59\xce\x0d\x94\x66\x6d\x00\xce\xfb\xb1\x30\xdb\x59\xc2\x9c\x88\x23\xb1\x1b\x7e\xee\x9c\x8a\x2a\xbb\x1b\x78\xbc\xa8\xf8\xd5\x6c\x81\x6b\xf9\x65\x70\x6a\x5b\xa3\x9a\xe8\x99\xf4\x99\x6e\x58\x79\x94\xc7\xf3\x5d\x61\x2a\x9d\x4f\x1b\x9e\xd7\x78\x09\xaa\x1f\xfd\xe7\xff\x7b\xfd\x4a\x27\x24\xb0\x1a\x21\x75\xd1\xae\xcf\xf8\x29\x86\xe4\xe2\x46\x7a\xfb\x9d\x8e\x16\xfe\x1c\xaf\x20\x36\xb8\x53\x26\xa9\xed\x7b\x8e\xab\xea\x1c\xcf\x3e\x3e\x2c\xd3\xe8\x0e\xa6\x93\x73\xbc\x9b\xee\xca\x6c\x46\x6c\x14\x64\x76\xa3\x47\x0d\xee\x47\x26\xdd\xae\xfb\x1a\x1e\xd3\x62\x58\x60\x4d\x3b\xf8\x7a\x05\x97\xfe\xee\x1a\x1e\x49\x70\x5d\xf2\x2b\xe6\xfa\xc9\x83\x6e\x6f\x02\x6e\xd7\x67\xe0\xb4\x95\x6b\x0a\x0e\xc7\x5f\x7d\x20\xac\xc5\x4c\xa3\x20\xaa\x79\x59\xe3\xab\x09\xe5\x23\xf7\x1a\x47\x65\xd3\x9b\x4d\x3e\x2a\xfd\x10\x8c\xdb\xfb\x62\x7c\xa4\xc3\x5e\x8c\x40\xbf\x6f\x62\xb4\x74\x01\x6b\xd2\xe2\xbb\x8c\x60\xdc\x8b\x2c\x03\x13\xc8\x6c\xe6\x2e\x0e\x61\x35\x5c\x28\x06\x2a\xd1\xd4\xc5\xc0\xff\x27\x18\xa4\xaf\xb8\x90\x36\xa3\xa9\xee\x09\x90\x30\xbd\xb8\x1e\xdf\x00\xe9\x3d\x45\x15\xc7\x25\xd2\xb1\xe6\x15\xdb\x35\x3d\xce\x3f\x2d\xab\x15\x9b\xdb\xb4\x16\xf6\x1a\xaa\xfb\x8d\xfe\x23\xca\x85\x85\x2f\x09\x9a\x92\xe0\xbe\xfe\xbf\xd7\xaf\x14\xa0\xfe\xb4\xac\x14\xa8\xa1\xec\x92\x7f\x24\x36\xb0\x66\x60\x62\x67\x06\xec\x69\x1f\x64\xa0\x52\xb3\x9c\xfa\x31\x1d\x3e\xa9\x05\x83\xd8\xdb\x10\xc9\x1e\xf1\x1c\x44\x7f\xd0\xa3\xc7\xe3\xa8\x41\xf4\x7e\x5a\x07\x13\x0f\xcc\x18\x23\xbc\x3d\x63\xd6\x8f\xcb\xf2\xe5\xa5\x4e\x6e\x29\x24\x61\x8a\xfb\x5c\xba\x6c\xb3\x41\xce\x7b\x0f\xf4\x68\xd2\x22\x8f\x6f\xb6\x75\x14\x00\xf9\x79\x67\xa7\x8d\x91\x99\xdf\xa3\x7a\xc7\xe1\x7e\xde\x74\xc8\x78\xbd\xad\x0c\xa5\xab\x23\xdf\xbe\x29\x5c\xee\xde\x4e\x52\x81\x3b\xdc\x33\x73\x0c\xf9\x05\xaf\x97\x58\x4e\x11\x5c\x33\xa4\xae\xdb\x34\x3d\xf5\x5c\xac\x28\x9b\x22\x9d\xd1\x4b\xbd\x60\x73\x03\x37\xf9\x1c\x90\x01\xc0\x29\x7e\xae\x70\x8d\xda\xc0\x60\x49\xa1\xcb\x4f\x33\x80\x5f\x29\x11\x98\xc3\x51\x64\x31\x57\x15\x30\x5a\xee\x51\xec\xf9\x61\x3e\xb4\x3a\xbf\x07\x5a\x47\x6c\x19\x73\x57\xaf\x05\xbd\x2d\xe0\xee\xc5\x12\x31\x4b\xa6\x73\x39\x6c\xb2\x41\xb6\x51\x1e\xdb\x9a\x58\x55\x60\x2b\x15\x2e\xa3\xcd\xb6\xc6\x77\x7c\xbb\xda\x82\xf8\x5a\xd2\x66\x5d\x47\x09\x84\x66\xb9\xf5\xf0\xde\xdf\x91\xf1\x8c\x28\xab\xcf\xcf\x7d\xde\x69\x15\x73\xb2\xa4\x8c\x76\x11\x87\x3d\x3a\x5c\x4b\x89\x7d\x4e\x2d\xae\x25\x17\x7b\x63\x23\x6c\x23\x19\x83\x08\x5b\x43\xc2\xc5\xc1\x1d\x5a\x0b\x52\x17\x37\x26\x8d\xd4\x15\xaf\x3f\x42\x16\xa7\x26\xe5\x94\x0e\xe1\x52\xdc\x24\x13\x47\x19\xf3\xdc\xcd\x9e\xac\xaf\x6f\x82\x80\x6f\xd1\x4b\x99\x99\xa8\x70\xd9\x66\x86\x15\x9a\x66\xd9\xcd\xa6\x01\x12\x24\xd3\x8e\x09\x37\xcf\xde\x9c\xfc\x2f\xd1\x52\x07\xb0\x23\x9e\xde\x6c\x72\x2a\xc9\x52\xe7\x54\x9d\x1e\xe9\x5c\x35\x08\xe5\x6a\xca\x27\xa5\xfa\x2d\x48\xcd\x4c\xa6\x2e\x37\x75\x5d\xe2\x7e\xd9\xb4\x57\x21\x4b\xa2\x27\x93\x93\xcc\x13\x93\x5a\xe3\xc4\xf6\xcb\x33\x76\xb3\xfe\x11\xa1\xcc\x58\x9f\xb6\x40\xa4\xaa\x58\x13\x19\x18\x45\xbb\xc5\x47\x0e\x7e\xea\xc5\xa7\xc0\x98\x3f\xcb\x09\xec\x09\xca\xc9\x04\xaf\xe8\x47\x72\x1d\x97\xaf\xeb\x4a\x15\xae\xeb\xaa\x55\x62\x76\x47\x17\x9b\xbf\x33\xd7\x8f\x97\x08\x5d\xb7\x0e\x7f\x9b\xea\xde\x47\x69\x54\xe9\x3a\x3f\xa2\xef\xe7\xd7\xb9\x8a\x79\x34\x17\x85\x22\x13\x3d\x81\xc0\xf6\x9f\xee\xe6\x75\x72\x1c\xb9\x3d\xa8\x1e\x28\xd9\x77\x56\x24\x47\xee\x5a\x0c\x3c\x1e\x13\x42\x30\x58\x8a\x77\xd1\x90\x82\x54\xcd\x16\x1d\x35\xa9\x7e\xdf\x1f\x7d\x98\x9c\x94\xf1\x89\xf8\x4d\xb5\x5a\xc7\x2c\xc3\xad\xdd\x09\x1e\x2b\x32\x6b\xb6\x64\xcc\x86\x72\x1f\x86\x90\x72\x51\x74\x8f\x5c\xf2\x9b\xc9\x39\x2f\xaf\x4d\xc1\xdf\x09\x9d\x2f\x20\xc3\x51\xfb\xe0\xd2\x27\xeb\xcd\xf0\xfd\x87\x74\x3b\x38\xc7\x13\x49\x96\xbf\xe8\x11\x2a\x78\x30\xfc\x75\x25\xc5\x51\x29\x36\xe8\xf6\x76\x6c\x16\x65\x06\x20\xf1\xe1\x39\x40\xd4\x64\x61\x4e\x6e\x44\x6b\x07\xef\x3e\x87\x8e\xad\xd6\x7b\x1d\xdf\x91\x40\x16\x1e\x90\x65\xde\xe1\x65\x7b\x4d\x86\x5e\x37\x49\x66\x93\x46\xa8\x81\x58\xee\xe5\x53\x61\x93\x93\xb2\x28\x0a\x2d\x76\x82\xbf\x0e\x0e\xc6\xe1\xae\x18\x87\x8f\x9c\x4d\xc0\x9b\xa1\xf7\xca\xb7\xf6\x34\x00\xd3\xaa\x13\x6d\xb1\x17\xa5\xc7\xf6\x2f\x1f\x6b\x2e\x89\xb9\x69\xc3\xac\xde\x1d\x65\xb7\xd1\x78\xb2\x9b\x49\xf0\xa0\x6a\xbf\x09\x06\x10\x1c\x87\xba\xe2\x00\x43\x90\xbe\xb1\x2c\x9c\x1e\x36\xa0\xab\x7d\xbf\x51\x0d\x5e\x19\x34\x26\x60\x8c\x81\x86\x26\x2d\xe4\x94\xde\x5c\xe3\x0a\xd2\xc6\xcb\x1e\xde\xea\xd9\xaa\xee\xe6\x16\x61\x76\xae\xd8\x36\x4d\x85\xcb\x75\xd3\x03\x11\x7f\x23\xf7\x47\x8f\x9b\x67\x7f\x78\x1c\x49\xce\x7d\x44\xec\x4b\xfe\xbd\x06\xed\x70\xb4\x06\x22\xf2\xfb\x41\x44\x96\x03\x1e\x1d\x06\x10\x39\x0c\x11\x06\x63\xd5\x03\x99\x92\xb5\x30\xa9\x9b\x79\xeb\x48\x20\x6b\xd9\x77\x58\x90\x97\x4c\x52\x79\x3d\xa1\xa5\xab\x16\x60\x7e\x3e\x89\xf0\x79\x08\x10\x3b\xe6\x70\x1c\xcd\x01\xe4\xc8\xe9\x69\x1c\x25\x07\x86\x74\x25\x6e\xe0\x46\x67\xda\xaf\xd9\x8c\xc1\xe8\xe7\xf4\x7f\x89\xa4\x04\x1e\xfc\xd2\x08\x21\xcb\x5c\x13\x4b\xc3\x76\xb6\x70\xb7\xc0\x35\x51\x7c\x47\xcd\x70\x75\xca\xd7\xf5\x8c\xc4\xf7\xab\x5f\x8b\x39\xd4\x0e\xcc\x67\xc3\x7e\xab\x9c\x24\x95\x8b\xf5\xf9\x1d\x38\x49\xe7\x44\x33\x9c\xc9\xfc\x15\xdc\x6b\x1a\xa7\x9a\x07\x61\x38\xad\x25\x71\x8b\xdb\xe4\x57\x8c\xd4\x62\x97\xdc\xc7\x03\x38\xcb\x96\x2d\x17\xbc\xad\x6f\xe2\x48\xbc\x31\x08\x9f\x55\xd4\x04\x6c\x68\xc5\x0a\x68\xd7\x35\x92\xc4\x77\x80\xf2\x15\xfb\xd3\xcb\xf1\xe5\xee\xed\xdd\x6c\x62\x10\xcb\x60\xe2\x5c\xb1\xc4\xbc\xb8\xb1\xd3\x98\x32\x3b\xa3\x17\xb9\x37\xdc\x14\xc2\x62\xbb\x5c\xae\x56\xa6\xf9\xee\xed\x2b\xd8\x4e\xd8\x4d\xfd\xe7\x8f\x96\xcf\xad\xa8\x90\x62\xfa\xfe\x43\x7e\x5e\x63\x36\x5b\x9c\x52\x36\xd3\xdf\xe1\xe7\x2b\xca\x88\x98\xa2\xe3\xa3\x23\xc7\x26\x23\x64\x7d\x98\xbc\xec\x49\xda\x93\xea\x35\xad\x88\x90\x5c\xb5\xd8\x3f\xd6\x5f\x4e\x84\x58\x37\xbf\x9e\xf3\xe5\x92\x4a\xa1\x6e\x9d\x66\xf0\x01\xd0\xf9\x51\xdd\x53\x1c\xfe\x1e\x9f\xe8\x19\x17\x12\xfe\xcd\xf9\x44\xcf\xb9\x90\xf0\x6f\xce\x27\xde\xd4\x0b\xe9\xff\xca\xb9\x81\xf1\x85\x34\x7f\xe4\x7c\x02\xb3\x2f\xa4\xf9\x43\x81\xfe\x60\xf2\x85\x8c\x3e\x98\x1a\xb0\x18\x53\x0a\x3f\x4c\x89\x59\x98\x29\x32\xbf\x8c\x64\x82\x1a\xc9\x84\xa7\x99\xf5\x6b\x65\x07\x07\xe1\x87\x42\x81\x51\x12\x02\x65\x1e\x7d\x31\x33\x47\xb9\x9f\xbf\xca\x58\xea\xc5\x41\x72\xc0\x41\x57\x11\x6f\xa2\x10\x8d\x6d\xc3\x53\xad\xc8\x57\xf0\x08\x0c\x16\xdb\x01\x30\x5a\xf1\x31\x80\xf0\x53\xbf\x10\x2a\x8a\x42\x64\x76\x73\x35\x61\x63\xee\x78\x98\x2b\x38\xcc\x11\xac\x6a\x6b\x7f\x93\x83\x83\x71\xa0\xcd\x01\x10\x39\x52\xb5\x47\x57\x35\x67\xf3\x91\xaa\x3a\x3a\x79\x91\x9b\x58\xd8\x9a\x9d\x89\xf6\xa0\xa1\x21\x76\x19\x3a\x6b\xb2\xed\x75\xbf\xc7\x05\x99\x7d\x7c\xa6\xa9\x20\xd2\x4f\x02\x35\x79\x76\xd5\x70\xa7\x12\xcf\xc9\x93\x40\x98\x21\xc3\xcc\xbe\x12\x16\xe1\x4b\x2b\xf6\x5c\x2c\x69\xe6\x9f\xcf\xc1\x4c\x9d\x8f\x3e\x9b\xbd\xad\x13\x16\xf8\x92\x9c\x6a\x39\x11\xca\x6f\x74\x26\xe6\x29\x6b\xc1\x92\x07\x98\xeb\x66\xd3\x99\xb3\x98\x58\x86\xfd\x07\xf5\x46\x5f\xa9\x87\x19\xb8\xe9\x68\xab\x79\xad\x01\x89\xa9\x64\x00\xf4\x11\x81\x63\xce\x58\x97\x85\xde\x7c\x31\xfc\x65\xd9\x53\xd2\xf8\xaf\x83\xa8\xa4\x4d\xc4\x43\x47\x39\xcb\x7c\xe7\xf3\xb0\x8c\x38\xfb\x4f\xaa\x59\x55\x5a\x06\xdc\x80\xeb\xc1\xd1\x38\x3f\xd4\xf3\xb7\x64\xc5\x85\x59\x6c\xde\x85\x17\x14\xf6\x7a\x81\x25\x39\xa3\x4b\xf2\xc6\xa4\xca\xd4\x09\x0b\x5c\xba\x87\x12\x4b\x22\xe9\x92\x40\x22\x4d\x35\xde\x2b\x3e\xc3\x15\x19\x23\xc2\x12\xde\x1e\x00\xe0\x0e\x85\x82\x70\x28\x8b\x5a\x07\xe1\xbc\x13\x43\xe7\xe8\x05\xa4\x34\x87\xd3\x0a\xd7\xb0\xe5\xc0\x12\xa8\x73\x6f\xbb\x48\x33\x47\xbc\x9e\xd7\x6a\x94\xad\xef\xc9\x99\x0b\x7b\xe1\x00\xf6\x64\x90\xbb\x95\xf9\xe6\xc2\x50\xcd\x50\x3c\x10\x84\x64\xac\xd9\x7d\x63\x29\x13\x0c\x07\xe8\x02\x54\xcd\x0a\x11\x82\x89\xf1\x98\x17\xef\x3f\x28\x9a\xb6\x89\xe3\x04\x0b\xde\x3f\x4a\x09\x37\xdc\x0c\xf7\x8f\x81\x4e\x4a\x99\xdd\x88\x82\x07\x97\x49\xc2\x65\x6a\xc3\xd8\xb1\x7a\xf3\x56\x3e\x92\x93\xc2\x8a\x6b\xe1\x83\x0e\x23\x46\xd4\xad\x7e\x7f\xf4\xa1\xf9\xba\x7f\x94\x6d\x42\x50\x08\x0b\xf3\x54\x5d\xe6\xf0\x8e\xa3\xe7\x1d\x97\xda\xea\x09\xde\x29\x84\x04\x9b\xbb\x89\x45\x00\xc8\x84\x9e\x5b\x0f\x02\xc4\xbb\x26\x7e\x14\xef\xc0\x51\xd6\xb2\x5c\x36\xf7\x76\x2b\x50\x35\x70\x69\xc0\x95\xed\xda\x56\xdb\x83\x34\x38\xc7\x07\x8d\x0f\x72\x30\xe8\x9d\xce\x7c\x33\x92\x7c\xa4\xa7\x3d\x72\xb0\x34\x71\x7c\x20\xa6\x4a\x3c\x70\x0f\x5e\xb4\xc7\x33\xaf\xdf\xa5\xa1\x01\x54\xad\xb3\xcd\x54\x7c\x4e\xd9\x63\xae\xda\x3c\xb6\x74\x27\x79\x0a\x84\xe9\x8f\xb4\x2c\x22\xaf\xed\x90\x8e\x7e\x84\x0e\xc4\x8c\xaf\x48\xa1\x00\xc3\x41\x4d\x4a\x5a\x93\x99\xfc\x71\x5d\xd3\x02\x3d\xea\x8d\x0a\x97\x24\xb3\x55\x77\x12\x4b\x92\x6e\x9c\x0a\x1c\x98\xed\x25\xc3\x09\x12\xc5\x8b\xeb\x83\x1a\xca\xef\xb7\x11\x49\xa2\xc8\xbc\x50\x2d\x80\xb5\xe8\x23\xb8\x0d\x1c\xd2\xb9\xa7\x06\x35\x5d\xe8\xf5\x81\xa5\xf4\x8e\x02\x85\x2e\xa0\x9e\x90\xed\x06\x42\xa4\x94\xb9\x73\x23\x6b\xe0\x91\xac\x41\x51\x91\x7c\x77\x61\x02\x1f\x22\x4c\xe8\x16\x56\xb9\x64\x94\xbb\xc8\xab\xba\xe4\x23\xa4\xb1\x1f\x68\x9e\xa2\xd4\x31\x86\xc5\xc4\xed\xa8\xe2\xb2\x93\x5a\x8d\x6d\x6d\xee\xea\x48\xec\x4b\x10\x7e\xa3\x42\x90\x9f\x68\x8d\xbb\x45\x20\xc3\xc4\x1b\xbf\x66\xae\x8c\x5f\x48\x83\xae\x99\xc6\xbf\xd5\x54\x73\xd1\xf0\x4b\x41\x80\x5d\xa4\x1c\x81\x7e\x1d\xb4\x25\x03\x95\xeb\x9d\x1d\xef\xdd\x59\xed\x2e\x93\x6a\xf7\x9f\xfe\xa5\xd5\xea\x9e\xa6\xbd\x43\x5d\x9e\x34\xbc\xb9\x9b\x9a\x7c\x8b\xd0\x3a\x8c\x46\x95\x20\x1b\xfa\x4d\x80\x18\xa9\xb1\x24\x2e\x14\xc2\x26\xef\xef\xef\xb8\xab\x3f\xe0\x91\xa2\xde\x7a\xcd\x74\x76\xdb\x05\x63\xb5\x0b\xc2\x89\xc1\xdb\xd1\x5c\xc4\xe8\x50\x76\xde\xa7\xce\xb9\x9e\x91\x4f\xb2\x7b\xbe\xea\x45\xec\x38\x5b\x68\x42\xcc\x51\x84\x9c\x68\x9e\xae\x8c\xc0\x38\x60\x40\x7d\xd8\x0a\x87\xac\x77\x3f\xe3\x1d\x69\x65\x3f\xca\x46\xd7\x8d\xfb\x12\x95\x08\xcd\x66\x7d\x3e\x4d\xc2\xf6\x50\xcb\x31\x06\xfa\x8d\xa2\xd0\x25\xae\x3f\x96\xfc\x8a\x7d\x19\x0e\x0b\x15\x65\x1f\x3b\xf3\xa8\x7a\xbe\xe6\xea\x6f\x73\x8b\xd5\x4f\x35\xed\xd7\xbc\x84\x00\xce\xbf\x92\x1b\xba\xdd\xb8\x6d\xf1\xb2\x1e\x70\x24\xd3\xe3\xee\x9e\xe8\x06\x15\x77\x89\x92\xe0\xc9\x66\x4f\x11\x9a\xca\x0e\xd3\x51\xa3\x8d\xf6\x14\xc0\x8d\x3b\x37\xe9\xf1\x51\x80\xf0\x8e\x8d\x73\xc0\xee\x8e\xb6\xcd\x67\x7b\xca\x5a\xd2\x7b\x07\x8f\x9e\x7c\x4e\xa4\x9a\x71\x0a\x6c\x6e\xf3\xaa\x35\xeb\xdf\xe4\xe1\x82\x7e\x11\x67\x6d\xf3\x62\x50\x0e\x9e\xf8\xf6\xf8\x23\x07\xb0\xe3\x7b\x39\x80\x91\x4f\xb2\xc6\xff\x4b\xae\xc5\xf4\xe6\x25\x93\xa4\x9e\x22\x46\xae\x54\x87\xcf\x58\x79\xa2\xfb\x79\xce\x99\xa4\x6c\x4d\x5e\x9b\xe1\x35\x40\xde\x3c\x80\xd3\x77\xa7\x1b\xf6\x03\x7a\x83\x37\x9b\x96\xf4\x08\xf7\x8a\x43\x3f\xe6\x14\xf5\xe4\xae\x5d\xbe\x9f\xba\x8b\x43\x8d\xde\x02\x43\x76\xaf\x79\xe2\x99\x80\xf0\x3e\xf5\xd4\x6c\x0f\x70\x8d\xed\xbb\x36\x22\x07\xbb\x28\x2a\x01\x90\xd2\x8b\x6b\x9d\x51\x5a\x2e\x2b\x0d\x8c\x27\x80\xa2\xc6\x71\x27\xe1\x40\xce\x19\xcb\x64\xd4\x8d\xa3\x5e\xb5\x82\x90\xeb\x78\x56\x93\xf3\x35\xad\x4a\x53\x67\x6f\xe0\xf3\x32\x6a\x89\x53\x2d\x82\x04\x99\x55\xbe\x7f\xd4\x76\xd9\xfe\x62\x9c\xb3\x07\x47\x06\x35\x5b\xfb\xe0\xee\xd7\x21\xb6\xfe\x8d\x92\x1c\x2b\xac\xa6\x51\x63\x5a\x0d\xe7\xdd\xef\x60\xb5\xf0\x2b\x9a\xc6\xff\xf2\x2c\xfe\x6e\xa6\x0a\xc6\xef\x42\x92\xa5\x78\x68\x93\xf8\x34\x6f\xfe\xec\xcd\xc9\x99\x56\x10\x22\x94\x6b\xc3\x13\x08\xe0\xfd\x69\x7a\x7c\x94\xcf\x6b\xbe\xb6\x81\x51\xaf\x85\x24\x4b\xfd\xf7\x16\xde\xdd\xb7\xe1\x2e\xa9\x58\x55\xf8\x5a\x87\x77\x4b\x28\x08\xef\x68\x59\x39\xc0\x79\xc8\xae\xdd\x80\x82\xfb\xd8\x03\x1b\x41\x42\x2c\x3c\xe4\xd9\x0d\xeb\x64\x8a\x59\x60\x65\xcb\x23\x56\x68\x62\xf7\x1c\xe5\xe8\x3f\xcc\x7f\x6a\xaa\xdb\x66\xc2\x6d\x50\x9b\xd6\x64\x88\x9b\x8c\xab\xd3\x80\x38\x9f\x17\x35\x6a\x30\x33\x94\xad\x9c\xe5\xea\xb2\xed\x89\xa2\x09\x95\x33\xd1\x67\x9f\x3d\xe5\xf0\x87\x78\x7f\xf4\x61\xfa\x23\x04\xf4\xb6\x9f\xf2\x1b\xaa\x4d\x3e\xd4\x8f\x09\x2d\x37\x29\x7d\x56\x63\xf7\x2b\x73\xa4\x6b\xa2\x5c\x44\xc2\xd2\x8e\x6d\x3c\x4e\x2e\xa0\x7b\x27\xf5\x0e\x46\x17\x2e\x54\x8e\xcc\xd5\xda\x61\xc9\xa3\x19\xae\xaa\xd1\x05\xa6\x15\x29\x41\x0a\xf0\x59\x66\xa4\x0d\x1c\xb4\x7e\x7e\xe4\x8c\x5d\x01\x73\xff\x4d\x6f\x71\x5f\x58\x96\xe0\x82\xf7\x5b\x7c\xf6\x6b\x29\xcc\xb1\xdc\x43\xfa\xc6\x3a\x5f\x49\x23\x62\x8f\x2c\x38\x43\x4b\xf8\xa4\x01\x67\xd4\x22\xda\x48\xd8\xa6\x53\x0d\x96\x7e\x9d\x7d\x02\x10\xf8\x1b\xdd\xa8\x3b\x92\x55\xf7\xd4\x05\x25\xe4\x38\xad\x44\x3d\xee\x84\x68\x71\x7c\x64\x0c\x3b\x14\xd4\x18\x6b\xa4\x76\xc2\xe4\x58\x4c\x96\xf8\x93\xb6\x90\xa0\x45\xfc\x31\x6f\x20\x8c\x50\xcc\xc1\x27\x94\xd3\x87\x38\x9f\x21\xca\xa3\xd8\x9f\x43\x2f\x0d\x5b\x6f\x1e\x63\x51\xbb\x87\xc1\x61\xdc\xe6\x54\xf8\x96\x1e\x1c\x8c\xed\xb7\xc2\x15\x8a\x4a\x91\x17\x47\x39\xcd\xb6\x29\xcd\x44\xd6\x56\xb5\x45\x55\x70\x96\x74\xeb\xd8\x41\x73\x95\x12\x6e\x26\x3a\x6c\x19\xfc\xdc\xcd\xa8\x37\x26\x2b\x7f\xab\xd4\x71\x79\xf1\x65\xc8\xe2\x3a\xc2\x3c\x3e\x94\xfc\x6c\x55\x5e\x74\x8b\xce\xca\x0b\x60\xd8\x81\x6c\x5c\x95\x17\xc6\x41\x72\x20\x21\xec\xda\xff\x3a\xd4\xef\x42\x7b\xaa\x4d\xff\x7c\x74\x94\x0b\x5a\x92\x73\x5c\x4f\x11\xe3\x8c\xa0\x5c\x48\x5c\xcb\x37\x78\x4e\xa6\xc7\xf9\x05\xfd\xff\xb1\xf7\xae\xcb\x6d\xdc\xcc\x02\xe0\x7f\x3f\x05\x8c\xef\xac\x43\x1e\x0f\xa9\x8b\x6f\x31\xf3\xd1\x3e\xb2\x24\xdb\xfa\x22\x4b\x3a\xa2\x9c\x9c\xac\xe5\x72\x81\x33\x20\x89\x68\x08\x4c\x06\x18\x5d\x22\xab\x6a\x1f\x62\x5f\x62\x5f\x63\x1f\x65\x9f\x64\x0b\x0d\x60\xee\xc3\x8b\x24\xdb\xf2\x77\x9c\x54\x59\x43\xa0\x71\x6b\x34\x1a\x8d\x46\xa3\x3b\xa4\x60\xe8\x5a\x10\x7d\xd3\xae\x16\xb6\x84\x83\xad\xd7\x2d\xa3\x55\x83\x07\xf4\x4b\xb8\x24\xb1\x25\xdd\x57\x65\x12\xb2\x78\x2b\xd6\x66\xa9\xd0\x15\xf3\xc0\x09\xe3\xda\x1e\x76\xcd\x08\x32\xcb\xce\x8d\x38\x26\x70\xbd\x3d\x12\x71\xcb\xb0\xfb\xd5\x5f\xd4\x3f\x9d\xe1\xdc\x2f\xea\xe1\xc3\x36\x3c\xef\xa1\x3c\x90\xbf\x33\x35\x69\xd1\x0f\xea\xa3\xd5\x80\x68\x2a\x33\xd1\x20\x3d\xdd\x04\x6e\x3f\x78\x90\xe5\x3a\x37\xf5\x85\x73\x7f\xe6\x58\xfc\xb2\xa6\xd3\x59\x61\xdd\x4d\x17\xa4\x6c\xd6\x30\xb2\x12\xc6\xd2\x15\xdc\x4e\x5c\x55\x62\x74\x99\x19\x2d\x5a\x3c\x64\x95\xd9\x09\x5f\xdc\xd7\xdc\xcd\xd5\x13\x29\xc5\xcc\x90\x47\x66\x6f\xac\x36\x61\x58\x7b\x11\x33\x77\xef\x50\xf3\xf7\x0e\xd5\xa4\xfb\x80\xbd\xe2\x7a\xba\x8f\x94\x31\x7e\x7b\xc6\x3e\xd7\xaf\x12\xd8\x99\x35\x5e\x64\x04\xa3\xf7\xe6\x89\xf8\x29\xa3\x67\xe6\x99\x6b\xef\x99\x66\x1e\x39\x6e\xa1\x67\x13\xae\x34\x2c\x27\xf9\xba\x9e\xec\x66\xb3\x46\x58\x88\x43\x1b\xce\xa7\x68\x8f\x7e\x0d\xc6\xd8\xcc\x0e\x2b\x0a\x61\x8b\x77\xcd\x4f\x22\xc1\x20\x62\x15\xaf\xc9\x16\xf1\x58\x33\x8f\xc2\x52\xa8\x2c\xff\xd2\xcb\x43\x51\xc0\x80\xec\x63\x5c\xb0\x41\x35\x86\x83\x13\x22\x07\xd4\x4f\x62\x6a\x0e\x67\xed\x97\xb2\x8f\x5f\x4a\x48\x29\xd8\xa5\x65\x06\x87\x39\xe0\x5e\x35\xbf\x28\x20\x69\xa4\xe9\x0a\xe1\x28\x57\x5b\x9f\x86\xb7\xb5\x95\x90\xf6\x1e\x9e\xf5\x55\x6d\xd4\xb2\xe0\x9c\xca\xc3\x2b\x51\x32\x0c\x99\xbf\x92\xed\x01\x2b\x59\x3c\x4e\xee\xe1\xdc\x2f\x91\x8b\xd3\xb9\xb4\x0f\xaa\xfb\x0d\xd4\x67\x9f\x23\xd6\x50\xdf\xb2\xbe\xa7\xae\xc9\x41\x42\xc2\x55\x32\x6d\x54\x3b\xde\x31\x26\x72\x3b\xce\xd9\x4c\xbc\x9e\xd4\x41\x9b\xbb\x35\x35\x82\xd5\x6c\x77\x6c\xb7\x26\xea\x59\xbc\x7f\xf9\xab\xd2\xb4\xa5\xc6\xab\xd2\xe5\xec\x64\xcc\xf2\xaa\xc1\x12\xf6\xf0\x1b\x53\x13\xe3\x63\x64\x21\xba\xdd\x2e\x2e\x19\xb6\x9b\x88\x69\x59\x77\x73\x93\x82\xdb\x57\xf7\x96\xf0\xd6\x56\x38\x71\x9a\xc0\x78\xb3\xcd\x75\x6a\xf4\x03\x99\x4d\x70\x91\x1a\xb0\xa7\x8a\xfe\xb4\x0a\xe7\x33\x3a\x13\x0d\x69\x48\x95\x5a\xdb\xe3\x72\x3b\xe6\x96\xf6\x26\xad\x38\xa7\x9f\xb7\xee\xac\xcf\x84\x94\x69\xba\x00\x6f\x36\xda\xba\xa9\xcb\x26\x43\x0b\x4b\xb9\x6d\xaa\x95\x18\x17\x31\xf6\x99\xe7\xc4\xa9\xc1\xac\x7d\x19\x47\xc5\xa5\x71\xd5\xb9\x2c\x6e\xba\x14\x6b\x32\x7d\x4a\xef\x20\x35\xf4\x29\x03\x14\x37\x4c\xdf\x4f\xc7\xfc\xbf\x40\xb6\x48\xa6\xe1\x31\x87\x36\xd1\x80\xc6\xa7\x7a\x5c\x9b\x2e\xc6\xd7\x31\x3f\xe6\xad\xff\x6c\xa3\x4e\xe7\xf8\xfc\x11\x45\x78\x33\x64\xfe\x89\x85\xea\x4e\x08\x0f\x42\x7a\x48\xff\x4a\xa8\x54\xad\x36\x3e\xe6\x0e\x8c\xd3\x33\xa4\x45\x16\xac\xcb\xb3\x11\xc2\xfa\x47\x57\x1f\x12\xfc\x24\x66\xea\x62\x73\x42\xfd\x13\x8c\xf4\x92\x3b\xe6\x08\x21\xd4\x79\xf1\x41\xc5\x09\xfd\x98\x42\xee\xc0\xe9\x15\x9b\x5c\xf3\xaf\xae\x87\xc9\xd7\x22\x3e\x23\x71\xf0\xb2\x54\x9a\x0b\x5d\x36\x16\x3e\x95\x12\xf9\x82\xab\x58\x84\xb2\x52\xdc\xb7\x37\xf5\x28\x32\x90\x8c\x8f\x0b\x15\x41\x65\x30\x86\x0f\x17\x54\x7e\x44\xfd\x7e\xff\x70\x7b\x6f\x6b\xfb\x70\x67\xef\x4d\xbf\xdf\x37\x40\x34\x94\xb4\x02\xae\xdb\x07\xe8\xad\x9d\xc3\xed\xcd\xa3\x4f\x9b\x6f\xb7\x37\x7f\xcd\x8a\xf0\x80\x8d\xf2\x9d\xc9\xea\x98\xdf\x5c\xb9\xac\xc1\x03\x3a\x10\x52\x15\xb1\x90\xab\xc9\xa1\x51\x03\xa5\x68\x74\xb3\x63\xf3\x5c\x58\x1f\x8c\x88\x44\xe6\xa4\x50\x80\x9b\x31\x9c\x72\xef\x0d\xf6\x4d\xb5\x6f\x68\xa5\xc5\x7c\xe5\x85\xe1\x54\x2a\x1a\x91\x50\xd2\x26\x4c\xda\xa2\x86\xa2\xb6\x04\x72\x8f\x16\xca\xb4\x60\x30\xe0\x72\x51\x6c\x08\x14\x97\x06\xf7\x6a\xfb\xf5\xfe\xe1\xf6\xa7\xad\xed\xc1\xd1\xe1\xfe\x1f\xa6\x81\xb4\x3b\xb6\x85\x5a\x62\x0b\xe9\x48\xa5\xad\x58\x88\x25\x1a\x29\x21\x30\xd6\x72\xbf\x23\x60\x33\x25\x48\xb3\x12\xa4\xe8\x34\x0a\x89\xa2\x8b\x56\x69\x90\x93\xe2\xa8\x34\xd9\x56\x60\xcc\xad\xd2\xd6\x7f\xb6\x8f\xf9\x7f\x51\x1e\x24\xd3\xf0\xa7\x66\x9e\xed\x18\xca\x40\x0f\x90\x6b\x79\xab\x89\xa1\xe0\x02\x43\x21\xbe\x12\x31\x7a\x25\x86\xe8\x1f\x31\x0d\x8e\xf9\x4f\xe8\x68\x42\x91\xe0\xe1\x05\x0a\xd8\xc8\x46\xd4\x47\x43\xaa\xce\x28\xe5\x08\xa0\x8f\xf9\x4f\x84\x07\x28\x22\xb1\x62\x3e\x8b\x08\x57\x88\x49\x8d\x79\x14\xc4\xe4\x8c\xf1\xf1\x31\xcf\xe7\x6d\x84\xcc\xa7\xc5\xa4\x63\xbc\x83\x26\xe4\x94\x22\x82\x62\x4a\xc2\xf0\x22\x14\x7c\x8c\x38\x99\xd2\x63\xa0\xf2\x5d\xf4\x8f\xe7\xcf\x5f\xbf\x7e\xfe\xfc\x98\xaf\xfc\x84\xfe\x10\x09\xf2\x09\x47\x24\x94\x02\x05\xd4\x0f\x49\x4c\x7b\x06\x9b\xf9\x4a\x77\x75\xc9\x4a\xcd\x28\x5f\x75\x56\xad\x2e\xfc\xd3\x8a\x9e\x00\xe8\x5e\xe7\xc5\x2b\x31\xec\xa1\x8d\xec\xf4\xc2\x04\x47\x96\x65\x1e\xf3\x57\x62\xd8\x79\x01\x80\x35\x30\x32\x12\x5c\x93\x09\x00\xed\xf6\xd0\xae\x18\x23\x15\x13\x2e\xcd\x36\x9a\x4e\x1e\x9e\x3f\x79\xef\x25\xdd\x24\x72\xc6\xdc\x15\x37\x83\xde\x3b\xc2\x38\xda\x08\xa6\x8c\xf7\xf4\xe0\xe1\xeb\x98\xb7\xde\x4b\x0a\xd3\x41\xa2\x28\xb4\xfd\x6c\xeb\x7c\x9d\xd1\xd6\x63\x7e\x2f\x69\x8c\x3a\x2f\x50\x6b\xa0\xeb\x6a\xbb\x04\x43\x8a\x29\x14\x54\x87\x3a\xe5\x64\x2e\x14\x45\xb0\x1c\x90\x18\x99\x36\x51\x0f\x1d\x4d\x98\xd4\x64\x40\x38\xa2\xe7\x64\x1a\x85\xb4\x5b\x05\xb6\x75\x68\xe4\x6f\x20\xc8\x72\xf3\x6a\x12\x87\x9a\xf2\x90\xa4\xa7\x34\x26\x21\x0a\x19\xa7\x12\x96\x0a\xc0\xa6\xd5\x61\x68\x0b\x3e\x19\x6c\x22\x1c\xde\xfb\x21\x25\xd2\xa2\xc2\x04\xc5\xef\x02\x35\xed\xad\x1f\x73\x3b\x52\xd4\xed\xc2\xcf\xbd\x75\xfd\x65\xbb\x63\xe7\xe7\x98\x2f\xb0\xbc\x8c\x17\x9e\x05\xd7\x16\x78\xbf\x47\xaf\x85\x58\x43\x97\x66\x80\x8e\x94\x13\xc7\x57\x4a\x63\xd5\x49\xdd\xae\xf9\x4b\x24\xba\x10\x09\x3a\x23\x5c\xd9\x04\x1e\x20\xb8\x94\x34\x3f\x1d\x47\x51\x13\xc6\xc7\x12\x29\x31\xa6\x6a\x42\x63\x5b\xfa\xd3\xa7\x62\x8b\x66\x51\x48\x34\x25\xfc\xc2\xd4\x22\x1b\x9a\xe9\x74\xcc\xdf\x6d\x1e\xe8\x39\x83\x41\x1c\xf3\x2b\x8d\x7e\x33\x20\x20\x96\x4b\xd7\x59\x34\x60\x7a\xb6\xd1\x1b\xaa\x14\x8d\xd3\xde\x3f\x44\x63\xaa\xf6\xc8\x94\xb6\xda\xb9\x84\x8d\x20\x88\xa9\x46\x60\x56\x5a\x4c\x29\x92\xe5\xb2\xb2\x58\xf6\xd3\x27\x14\xc5\xec\x94\x28\x0a\xfe\x8b\xd3\xc1\x31\xae\x10\x19\xa7\x5b\x13\xa2\xdc\x8f\x2f\x22\x4d\x0b\x6e\x10\x03\x50\xe0\xa1\x88\x48\x79\x26\xe2\xc0\x8e\x63\xf1\x15\xe9\xe4\xb3\xbd\xd2\xc1\x6a\xc6\xac\x1f\x73\xf8\x3e\xe6\xbd\x59\x52\xd8\x2f\xc7\xbc\xa7\xc5\x2f\xbd\x87\xfc\x02\x5b\x65\xab\x4e\xf8\x6a\xc3\x8e\x86\x5a\x5a\xea\xb2\xc8\xe8\x15\x44\xaf\x5f\xd2\x8d\xb0\x95\x09\x5d\xae\x14\x17\x69\x99\x92\xc8\x95\x2b\x56\x27\x6c\x55\x2a\x00\x5a\x55\x22\x6a\x96\x75\x5a\x4c\x82\xa8\xe3\x8a\x5e\x50\x99\x2b\xdb\x2b\x08\x3a\xbf\x64\xdb\x6b\xa9\x8d\x5e\x5e\x3a\xf9\xa5\xd2\x5a\xaf\x24\x13\x15\x21\x4c\x7d\x20\x9b\xb4\x8b\x62\x48\x2b\xc8\x89\x21\xd5\x1e\xf6\x52\x21\xc4\xe2\xe0\x97\x92\x90\xa1\xcb\x8f\x4a\xc8\xcd\x15\x2f\x49\x17\xf5\xc3\xeb\xd5\x49\x0d\xbf\xd4\x4b\x05\x06\xd5\xcb\x10\x6a\xa6\x20\x5b\x70\xf3\xd0\x3b\xb2\x7f\xa2\xfb\x82\x61\x0d\x82\x65\x05\x76\xeb\xfa\xed\xd1\xd1\x01\xea\xa0\x0f\xaf\x59\x2c\xf5\x39\xc3\x56\xfe\xd1\xe4\x7e\xd8\xe0\x42\xf3\x9a\x42\xc6\x95\x23\x08\x2e\x02\x8a\xf0\x3e\x00\x18\x7b\x8d\xb4\xda\xd7\xa6\xd6\x01\xf5\x05\x0f\xaa\xd5\x96\x5b\x73\x5b\xd2\xeb\xa3\x83\x63\x7e\x85\x0c\x0b\x12\x49\xe0\xaa\xfb\xb0\x6d\xb6\x1a\xb4\xf6\xd1\xae\xec\x63\xae\x19\xc4\x90\x48\x8a\xf0\xbb\x8b\xc1\x5f\x61\xda\xf4\x48\x84\x1a\xfb\xd8\x6d\x54\xd3\x0b\x9b\x94\x42\x7c\x78\x6d\x40\x1e\xd9\xee\xd8\x01\x8d\x62\x32\xa5\x5a\x82\x14\x39\x48\x48\x7b\x9c\x01\xda\xc6\x6b\x10\xe3\xc6\x50\xe8\x6b\xee\x47\x9a\x9f\x6b\x3d\xfb\xce\x72\xd3\x16\x97\x92\x06\x15\x51\x0b\x8b\x13\xd2\x27\x21\x45\x4f\x57\x57\xd1\x19\x0b\xd4\x04\xc6\xf3\x9f\x1f\xb5\x9c\x00\xd5\xac\x1d\x9b\xa7\xb7\x6b\xae\x4f\xf0\x6b\x1d\xf5\xd0\x20\xf1\x7d\x4a\x03\x2d\x3e\x16\x21\x74\xf1\x1e\xda\x18\x8a\x58\xa5\x99\xeb\x85\xe2\x8f\x6a\x8a\xaf\x37\x14\x87\x87\xbd\xae\x98\x9d\x09\x93\x66\x28\x18\x72\x10\xdc\x9d\xe9\x5d\x4d\x0b\x7e\x6b\x06\x0a\x3e\x51\x0f\xfd\x2b\x91\x0a\x11\xa4\x40\xa8\x83\x89\xfc\xcf\x14\xc3\x15\xf0\x7c\x3a\xea\xa1\x3d\x7a\x86\xb6\x88\x22\x35\x20\x96\xb9\xea\x5c\xd4\x43\xdb\x5c\x24\xe3\x89\x85\xbd\xb2\x63\x7a\x54\x19\xf5\x6b\x30\xb2\x2a\x67\x9b\x21\xa7\x18\x41\x2b\x68\xa0\x37\xee\x43\x2a\x93\x50\xd5\x03\xa7\xf8\x31\xab\x6f\x2e\x71\xdc\x86\xa6\xf9\xdb\x5f\x58\x5d\x6b\x10\x8a\x0c\xc3\xc6\x90\x93\xa9\x87\xb1\xaf\xfc\x9a\xf6\x4b\x9b\x25\xc0\xa0\x9b\x83\x84\x98\x9e\x1e\x69\xa0\xde\x4f\xff\x04\x60\x17\xb6\xe9\xec\x42\xb2\xb3\x8b\x71\x07\x12\x31\x92\xea\x22\xa4\x7d\x0c\xcc\xa1\x87\xd6\x56\x57\xff\x8f\x5f\xf0\x8b\x7f\xaa\x09\x25\xc1\x8b\x7f\xaa\x58\x7f\xbe\xf8\xe7\x30\x7e\xf1\xcf\x15\xfd\xb1\xe0\x8f\x15\x65\xbe\x4c\x25\x43\x11\x5c\xd8\xba\x82\x52\x7b\xeb\x4f\xba\xab\xab\xb6\x4d\x53\x3a\xf8\x16\x50\xd0\xdf\x1f\x1d\xbc\x69\x07\x57\xec\x54\x9b\x25\xf9\xe2\xa7\x6b\xea\xbf\xab\xef\x48\xaa\x5a\xee\xa6\x90\xbf\x36\x3f\xef\x51\xb4\xae\xba\xfc\x02\x59\x3a\x78\x8d\xf3\x0a\xf2\x8f\xfc\xdd\x67\xf6\x42\xea\x97\xa2\xc7\x22\xda\xee\x8e\x62\x41\x42\x62\x9f\xcd\x5c\x2a\x21\xc2\x21\x89\xcd\xd5\x01\x38\x9f\xb3\x29\x3b\x5c\x1f\x18\x7b\xf7\x57\x3d\xc0\xdf\x21\x95\xec\x6f\x1a\xef\x8f\x46\x92\xaa\xde\x9a\xe6\x41\x73\xef\x61\x1a\x03\x55\xd3\x76\x57\xf0\x16\xce\xf7\xc4\xc5\xd7\x30\xf6\xa4\x41\x29\xe4\x4e\xd1\x40\xf4\xea\x3a\x81\x77\xca\x9e\x9b\xea\xd1\xd5\xee\x8a\xd1\x68\x76\xcf\xae\xf3\xa6\x78\x69\xdb\x95\x85\x6c\x54\x3c\xd9\x5f\x74\x54\x85\x49\x87\x60\x7f\x1a\xc6\x5c\x5f\x54\x2c\x5d\xf2\x1e\xe6\xe0\x7a\xbd\x91\x54\x2b\x26\x2d\x72\x71\x13\x16\x7e\xd5\xbe\xb7\xe4\x8e\xfa\xfd\xca\x04\x49\x48\xe2\x6b\xf8\x1d\xb5\x81\xd6\x9b\x5f\xf6\x7c\x03\xaf\xa3\xd9\x0b\x9e\xcc\xff\xe8\xbc\x7b\xf9\x45\x9f\x28\xdf\xa2\x40\xa2\x31\xde\x28\x92\x00\x5e\x6f\xbd\x19\xa8\xb5\xe6\xa1\xf1\x54\xcf\xb3\x16\xd6\xc1\x18\x13\x7e\xe5\x2d\x35\x7f\xc8\x47\xff\x8e\xe2\xc7\x9d\xef\xe0\x77\x2b\x1f\xe5\x7d\x84\xe4\x16\x13\xf6\x2e\x35\x09\xdb\x40\x9f\x60\x7e\x77\x74\x11\x81\xcb\xdb\x86\x90\xa7\x73\x86\x47\x82\x60\xce\x1b\xfc\x39\x15\xd8\xa0\x67\x69\x1d\xb9\x0a\x2f\x17\x33\x62\xb1\x86\x85\x3e\xf1\x27\xf4\x93\x4c\x46\x23\x76\xde\xc3\x2f\x4f\xfb\x4f\x56\xd7\xd6\xb1\x8d\x13\x21\xe2\x5e\xd3\xbe\xef\xc5\x34\x24\x8a\x9d\xd2\x4f\x49\x1c\xc2\xf3\xf7\x61\x2c\xce\x24\x8d\x3f\xc9\x88\x86\x21\x38\x57\xd5\xc8\x92\x8a\xa8\x44\x0e\x49\x6c\x9e\x4d\x3a\xc1\x2f\x22\x52\xd1\x4f\x01\x51\xe4\x13\x9b\x92\x31\x05\xc4\x9a\xaf\x4f\x49\x14\x0a\x12\x7c\x32\x2a\xe7\xb8\x57\x7e\x45\xaa\x67\x0d\x18\xde\x43\xda\x1d\x86\x62\xd8\x6a\x77\xf5\xee\xf7\x10\xff\x32\x24\x92\x3e\x7d\xec\x41\x06\x7c\xb6\x20\xcc\x9b\xae\xf5\x13\x09\x4e\x15\x19\xea\x56\xa6\x34\x60\xe4\x53\xa8\xbb\x4e\xa7\x43\x1a\x40\xd3\xf6\xa9\xbf\x64\xe1\xa9\xc6\x90\x3c\x61\xbc\x87\xc5\x39\x83\x50\xd7\xe0\xb8\xfe\x13\x58\xf3\x31\x3e\xee\x69\x91\x04\x7b\x66\xcb\xa2\xc1\x27\x78\xe1\xf5\x89\x9a\x99\x93\x3d\x3c\xf4\x98\x37\x5c\xd1\xd3\xc9\xc7\x1e\x5b\xa1\x53\xec\x8d\x04\x57\x5a\xc6\xfd\x64\xe2\xb5\xc9\x1e\xfe\x39\x3a\x47\x6b\xab\xfa\x9f\x75\xfd\xcf\x63\xfd\xcf\x13\xfd\xcf\x53\xfd\x8f\xce\x5d\xd7\xb9\xeb\x3a\x77\x5d\xe7\xae\xeb\x8c\x75\x9d\xf1\x48\x67\x3c\xd2\x19\x8f\x74\xc6\x23\x9d\xf1\x48\x67\x3c\xd6\x19\x8f\x75\xc6\x63\x9d\xf1\x58\x67\x3c\xd6\x19\x4f\x74\xc6\x13\x9d\xf1\x44\x67\x3c\xd1\x19\x4f\x74\xc6\x53\x9d\xf1\x4c\xff\xf3\xb3\xfe\xe7\x39\x74\x68\x75\x35\x3a\x77\x91\xe5\x64\xef\x72\x28\xc2\xa0\x77\x69\x67\x0e\x0f\xf1\x95\xc7\x14\x09\x99\x9f\xa5\x31\x7c\x75\xe5\x45\x61\x32\x66\x5a\xca\xc7\x24\x38\x0d\x99\x54\x88\x24\x4a\xe8\xcd\x19\x81\x57\x3c\x04\x9f\x30\x17\xc8\x9f\x90\x78\x4a\x22\x14\xc5\x8c\x2b\x34\x89\x11\xe1\xfe\x44\x18\xdd\x32\x18\x7d\x63\x0f\x1b\x87\xc6\xf6\x45\x3a\x3a\x13\x71\xe0\x8b\x84\x2b\x74\xca\x64\x42\xc2\x61\x28\xfc\x13\x69\x7f\xe8\xea\x24\xf2\x45\x40\xe1\x1f\x69\x74\x93\xa3\x24\x0c\xa5\x1f\x53\x78\xb4\xc7\x60\x79\x3a\x17\xaa\x08\x48\x00\x71\xc1\xa1\x35\xc6\xc7\x48\x92\x53\x8a\xcc\xf6\x68\x74\xe9\x4c\x70\x12\x32\x7d\x2a\xc0\x4e\xdb\x8d\x80\x68\x91\xa2\xe7\x2a\x22\x4a\xd1\x98\x9b\xf1\xe8\x53\x8d\x16\x16\xa7\x94\x27\xbd\xcb\x2b\xf8\x6b\x09\x1e\x6a\xfc\x64\x8f\x3d\x10\x88\xd5\x7c\xae\xf5\x8c\x62\xc3\x34\x19\xd0\x90\x2a\x8a\x3e\x9b\x5f\x51\x2c\x22\x69\x3e\x63\x71\x96\xfb\xe5\xd3\x30\x34\x3f\x2d\xa4\x19\x55\x2c\xce\x86\x74\x24\x62\x5a\x4a\x84\x25\x9f\x6f\x20\x16\x67\xc5\x92\xbe\x08\xab\x25\x7d\x11\x56\x4a\xfa\x22\x4c\xbb\xbe\xde\xc3\x8e\x9c\x0d\x93\x40\x9f\x91\xae\xc3\x17\xa1\x88\xd1\x90\xf8\x27\xe6\x0b\xe6\x3b\xe1\xf0\xe7\x33\xd2\x54\x84\x0c\xe1\xa0\x44\x73\x21\x4d\x3a\x48\xaa\x98\x9d\x50\x35\x89\x41\xe7\xf8\x19\x91\x90\x8d\x79\x48\x47\xca\x7c\xf9\x94\xeb\x8e\xc0\xb7\xb9\x85\x85\xcf\x3f\x13\xa9\xd8\x48\x9f\x08\xc8\x29\xfd\x24\xb8\xfe\xe3\xfc\x44\xf6\x16\x74\x7a\x71\x75\x0f\x27\xee\x4d\x2b\xee\xf7\x35\x03\x11\x23\xa4\x18\xbf\x98\xfa\xf4\x65\xe6\xb3\x77\x4c\xd5\xc0\x8f\x59\xa4\x5a\x78\xc5\xe6\xba\xbf\xdd\x29\xe3\xdd\x3f\x65\xca\x32\x73\x2d\x5b\x07\x10\x0e\x30\x10\xd3\x2e\xc4\xa7\xd4\x5f\xbb\x82\x04\xe0\xde\xd5\x73\xd9\x9a\x57\xbd\x3f\xdc\xed\xe3\x95\x15\xfc\xb0\xe2\xae\x52\x48\xf5\x30\x6d\x1b\xa7\x85\x0c\xc7\xee\x63\xdd\x8b\x2c\x15\x9e\xe3\xd0\xf6\x55\xbb\x57\x49\xb9\xf2\x8a\x7b\xc6\xa5\x83\x30\x09\xef\x08\x27\x63\x1a\x77\xe9\x39\xf5\x37\x8d\x1b\x91\x16\x9e\xfa\xf4\x30\x57\x48\x9f\xe9\xbc\xda\x43\x60\xe6\xef\x6c\x07\xb6\x4d\xd8\x4f\xf5\xa1\xc9\xda\x74\x67\xef\x87\x69\xfb\xf3\xe7\xd5\x7e\xbf\x4f\x6b\x22\xc0\x56\xac\xdd\x0a\x7b\x70\xdb\xe3\xfd\x9b\x89\xb0\x3f\xc1\xfb\x9a\xae\xdd\xca\x1f\x3c\xc8\xbd\x99\xe9\x82\x5c\x31\x62\x34\x0c\x64\xbb\x5d\xf8\x59\xf4\x4b\xdc\xe7\x0f\xb1\x96\x71\xf5\x26\x63\x7c\xd0\x3c\xc4\x20\xeb\x62\xeb\xe4\x1b\xb9\xc7\x37\xa2\xbf\xf6\x8b\xf8\xa7\x1d\xe8\x87\xd5\x8f\xee\x15\x8e\x78\xf8\xb0\x9d\x56\xb3\x29\xc2\x64\xca\x11\x7e\x28\x5c\x35\xf7\xf8\xc3\x3e\x2e\x08\xce\xd8\x83\x24\x23\x53\x61\xcf\x62\x2e\xdf\x2b\x36\x6a\x19\x90\xf8\x05\x2e\xbe\x04\xa2\x75\xbd\x0f\xca\xbd\x0f\xd2\xde\xbb\x13\x1e\x1c\xe1\x24\xe8\x74\x16\x2d\x7f\x95\x76\x1c\x5f\xb5\x3d\xfb\xc3\xf6\xd9\xfe\x02\x69\x30\xa3\xd6\x22\xe5\xe9\x19\xaf\xd7\x30\x48\x0a\xde\x6f\xb4\x60\xc4\x8b\xfe\x61\x06\x13\x71\x66\x28\xee\x9d\x3e\x20\x39\xb9\x09\x4e\x4b\xfb\x11\xe5\x25\xb5\x85\x3d\x9b\xe1\xb6\x77\x29\x27\xe2\x4c\x1f\x51\x3d\xfc\x0f\x5f\x9e\x76\x4c\x60\x61\xb8\x7a\x9a\xda\x78\xb0\xe5\xf3\x59\x76\xd6\x2a\xb9\x25\x28\x52\x69\xfa\x86\x0b\x1a\xdb\x0c\x85\xa4\x4d\xbd\xc8\x4b\xaf\xb4\xf0\xde\x81\xf7\x0f\x48\x44\x5c\xbc\x04\x27\x7d\xf6\x52\xda\xf5\x82\x0b\x4e\xa6\xcc\x3f\xba\x00\x67\x43\xaa\x9b\xc9\xa4\x5a\x76\x89\xa0\x4e\x13\xd5\x01\x22\xca\x17\x2e\x53\xf2\x4b\x94\x37\x7b\x94\x59\x6e\x92\x3c\xde\x77\x2e\xad\x35\xdb\x1a\x67\x53\x56\x8c\xeb\x9a\xf7\x1e\x40\x3d\xa7\x19\xe2\xd5\xa0\xf7\xb3\xfc\xd8\x74\x99\xbd\x35\x36\x2d\x88\xb2\x9b\x1a\x3b\x75\xcb\x8d\xc0\xd6\x7e\xbf\xe4\xd8\xc8\x54\xd2\x7e\xf0\xe0\x7e\x99\x91\x3d\x78\x40\xbb\x69\x9b\x5f\xce\xcb\x8d\x27\x96\x1e\xc9\x5c\xbf\x38\xa2\x30\x41\x8b\xfb\xc5\x59\xd4\x97\x6d\x41\x2d\xf5\xbd\xaa\xd6\x62\x1a\x86\xe2\x47\x44\x9f\x25\x23\xfa\x0c\x05\x89\x03\x1b\xd1\x87\x8b\x57\xe6\x97\x06\x8c\x22\x1b\xa5\xd5\x20\x76\x13\x1e\x33\x26\x31\xad\xaa\xca\x0c\x68\x41\xa2\xca\xad\xcd\xf2\x69\xdf\x42\x43\xf8\x3f\x68\x7c\xa0\xc5\x80\x4a\xa5\xd6\xdf\x03\x40\xcc\xd4\xc3\x15\x00\xd3\x57\x69\xe0\x40\x85\x56\xe2\x52\xa4\x6c\x1b\xff\xe3\xb1\xaf\xff\xc7\x56\x88\xa1\xdd\x28\xa6\x23\xd9\xd5\x42\xe9\x38\x16\x09\x0f\x36\xb5\x58\xec\x58\x98\xe9\x9d\xb1\xef\xea\x4e\xd4\x34\x1c\x90\x11\x6d\xe1\x0c\xba\x03\x52\x74\x0f\xe1\x87\x6a\x11\x8f\x82\x4b\xc5\x46\x2a\x31\x9c\xcb\xab\xd4\x69\x46\x7c\x71\xc9\x97\x78\x7e\x2d\x0b\xaf\x0c\x6d\xd0\x6e\x1b\x9a\xc4\x46\xdc\x35\x84\x00\xc8\x34\x9f\x2e\x12\x51\xad\xc3\x21\xbe\x98\xf7\x9e\xe6\x50\x4a\xb9\x48\x71\x96\x88\x68\xd7\x7c\x95\xa3\xc2\x29\xe3\xcf\x85\x9a\x0f\x17\x68\xaf\x22\x7e\x13\x09\x51\x75\xee\x97\xc3\x91\xd8\xfd\xc0\x86\x2b\x71\xd8\xe5\x59\x68\x97\x7f\xd8\x67\x83\x10\xdb\x25\xbf\xcf\x7f\xfe\x5c\xdf\x91\xf6\x15\xc6\xf7\xfb\x7d\x51\xa4\xea\x07\x0f\xf2\xa9\x85\x22\xed\x97\xa2\xe0\x99\xa9\x57\x7b\x6c\x71\x2e\xfd\x49\xc4\xba\x66\xe5\x81\x5b\xff\xb5\x15\xe3\xa5\x5f\x9f\x60\x4e\xe8\x45\x1f\x3f\x2c\x35\x9c\x5f\x22\x47\xa6\x5c\x40\xd3\x00\x00\xad\x8a\x7b\x9d\xda\x30\x31\xb0\xfc\xaf\x11\x75\xc4\x30\x91\xfa\x68\x31\x76\x61\x16\x5f\x93\x1a\xdd\x79\xe6\xe9\xa8\x1a\xc0\xcb\x9e\x3b\x94\x15\xc3\x5f\x66\xbd\x71\x5c\x0a\x7a\xd4\x6b\xd5\x66\xac\x19\x59\xad\x39\x3a\x8d\xca\x47\xa7\x51\xb5\xd1\x69\x2c\xeb\xa9\x8d\x4e\x63\xf3\x54\x63\x74\x9a\x59\x2b\x42\x78\xd8\x46\x1e\x58\x34\xf0\x4a\x7d\xc4\x14\x1b\x2e\xc5\x04\x23\x36\x51\x64\x2b\x91\x51\x52\xc9\x85\x17\xba\x4a\x4d\x5c\xc7\xfe\xfd\xd5\x3a\xc7\x90\xa2\xaf\x45\x36\x3f\x4c\x02\x1a\xe8\x7d\xcb\x7d\x83\x2f\x91\xda\x20\x27\xea\x0b\x05\x39\xa9\xc4\xd2\x00\xc4\x23\x8b\x81\x4a\x40\x8d\xeb\x5c\xc8\x6a\x72\x07\xeb\xd7\xa1\x38\x6f\x76\x5e\xe4\x90\x5e\xc4\xa2\x99\x83\xfb\xfd\xbe\x7a\xf0\xa0\xe0\x65\xcb\x61\x0c\x7b\xf7\x73\xa8\xcc\x87\xa5\x85\x68\x5d\x35\xbb\xa2\xe9\x6c\xf9\x32\xd7\x70\x82\x0e\x89\xa2\x72\x88\x56\x1a\xc7\xe0\xc8\xd1\x46\x67\xf5\x40\xb6\xc8\xe8\xb5\x31\x76\x88\xaa\x77\x2c\x74\xaf\x1c\xa9\xc5\xbb\x19\x97\xaa\x8e\xb0\x86\x51\x65\x6c\xea\x52\x8b\x6f\xbd\xf4\x99\x0e\xf6\x18\x57\x34\xd6\x73\x7a\x0a\x7a\x68\x13\x1f\x6f\xcb\x8a\x69\xd8\x83\x68\x25\xbd\xcb\x98\x92\x40\x67\x9f\xc5\x4c\xd1\xde\xfd\xb5\x2b\x8f\x9e\x47\x2c\x26\xe6\x41\x2e\xa7\xa0\x24\x8e\x68\x2c\x99\x54\xa0\xe5\x4e\x7c\x9f\x4a\xd9\x2b\x85\xe1\x9a\x19\xbb\xa6\xc8\xfe\x6d\xcf\xe1\x57\xab\x5d\x0d\x70\xe3\x00\xa6\x14\xfc\xcd\xba\x4d\x19\xd7\x2d\x8a\x5c\xd4\x1d\xbd\x92\x66\xf3\xe9\x39\x81\xd2\xb8\xe7\x98\xf1\x0d\x42\xe4\xb8\x1a\x5c\x88\x9c\xfc\xb6\xf0\x05\x97\x75\x7d\x88\x1c\x20\xf0\xde\xed\x04\x4c\xba\xb2\x8e\xb8\x60\x40\xcb\x87\x92\xb1\x5c\x7f\xc1\x50\x32\x45\xac\xfd\x88\x0e\x93\x45\x87\xb1\xd4\x55\xad\xfa\xdf\x25\x36\x4c\xfe\x2c\xfa\x9d\x1e\xa7\xad\xae\xf6\xce\xd9\xaf\xde\x31\xf3\x12\xa7\xd2\x6e\xb4\x78\xfd\x52\x37\xe9\x4b\x5e\x63\xdf\xa9\x4b\x66\x30\xa3\x3b\x57\x70\x01\x77\x7f\xad\xfe\xce\x79\xed\x5b\xde\x39\x9b\xdf\xbe\xf5\xe8\x71\x97\x2f\xa1\xbf\xd7\xfb\xe7\xec\xe6\xf7\x93\x35\xaa\xfc\xe4\x4b\xd9\x9b\x75\xa7\x16\xc5\x4c\x4e\xcd\xbf\x5d\x5f\x4a\x9c\xaf\x23\x24\x7c\x9c\x00\x8d\x7c\xb8\x54\xe0\xb1\x65\x63\x70\xd0\xdd\xdb\x3e\x42\xad\xcd\x7f\xb4\xb1\x73\xe2\x4f\x64\xc4\xa9\xc2\x57\x9e\x05\xda\x4c\x73\xfc\x5c\xe2\x3f\xb2\x54\x39\x21\x71\x94\xcb\x7a\xf8\x30\xcb\x8b\xf2\x19\x83\x41\xae\x90\xcc\x32\xb6\x84\x89\xef\x69\xf3\x02\xf3\x33\xcd\xde\x0e\xd9\x39\xcb\xb2\xa9\xf9\x99\x65\xc7\x7a\x60\x59\xb6\xf9\x99\x66\xbf\x36\xdd\x73\xd9\xa3\x52\x6f\xdf\x30\x95\xe6\x8d\x59\x6e\xd8\x6f\x44\x96\x2e\xb2\xe4\xb7\x44\x9e\xd0\x30\x4c\xf3\x26\xf6\x77\x06\x70\xf4\x6e\x37\xcd\x9d\x92\xf8\x24\x89\xf2\x99\x47\x07\x59\x51\xa5\x72\x59\xff\x22\xa7\x24\xcd\xfa\x53\xff\x28\x64\x99\x43\x45\x01\x40\x9a\xa4\x0c\x6c\xb0\xbf\x97\x01\x48\xc1\xb3\xac\x5d\xaa\x69\xc1\x66\x85\x34\x8f\xfc\x77\xe4\x84\x8e\x98\xde\x70\xd2\x3e\xdb\x84\x1c\x88\x8b\x0e\x91\x1b\x16\x24\xa4\x20\x7c\xcc\xf8\x79\x9a\x6f\x7e\xa5\x99\x66\xbb\x63\xa7\x14\x65\xb4\x24\x5c\x5a\x8e\xa8\x0e\x68\x9c\x21\x36\xd2\x3f\xb2\xac\xb7\x19\xde\xa2\x49\x0e\x6d\x07\xe2\x8c\xc6\x72\x92\x9f\x92\x28\x4b\xca\xc0\x2e\xd4\x44\x64\x03\x88\xcc\xcf\x34\xfb\x30\x19\x5e\xa4\x99\xb1\xfe\x91\xcb\x92\x2a\x97\x25\x73\x08\x1f\x10\x29\xd1\x20\x4f\xd6\xb2\x40\xd7\x83\xff\xce\x28\x41\xfe\x95\xeb\xcd\xe0\x8c\x8d\xb2\x4a\x25\xfc\x4a\x33\x8f\x2e\x22\x5a\x9a\x6d\xcd\x97\xcb\xb3\xfd\x3f\x33\xc8\xec\x8f\x8d\x5c\xe6\x05\x99\x86\xf8\xea\xe3\x2c\x6b\x16\xfd\x11\x83\xc5\xfa\xff\x6a\xc3\x16\x6b\xd2\xf2\x01\x5b\x46\x6d\x4c\x41\x2a\x96\x21\x8b\xd8\x7d\x80\x78\x61\xa6\x0c\xc9\x64\x68\xbf\x00\x13\x7f\x25\x02\x0c\x63\xe6\x18\x98\x60\x0f\x8b\x44\x05\x94\x2b\x64\x82\xae\xa0\x61\x12\xc2\xb4\xf1\x64\x0a\x7f\x97\xb4\x2d\x71\x76\x32\xc8\xc8\x05\x66\x76\xcd\xbf\x06\xc5\xd9\x7c\xe0\x8f\x3f\xec\x50\x96\xb3\x43\x59\xd6\xde\xf1\x56\xed\x54\x72\xc6\x03\x3f\x6e\xbd\x7f\xdc\x7a\x2f\x74\xeb\xbd\x68\xf0\xb9\xc2\x11\xf7\xbb\x3b\xa6\xab\x24\x5a\x71\x39\x1d\xf8\xd9\x10\x02\x26\x51\x2c\x94\x2b\x46\x67\xd2\x74\x6e\xff\x0a\xe1\x5e\xe6\x9d\xdc\x87\xf0\xee\x6c\x97\x0c\x69\xd8\xc3\xba\x34\x18\x59\xda\x81\x4d\x88\x3c\xd2\x74\x02\xfe\xf4\x4b\x67\xf6\x2e\x85\x55\x0b\xb1\xa9\xc2\xae\x21\xa7\xb6\x2e\x01\x0f\xfc\x39\x99\x2e\x50\x6a\xe4\x40\x4d\xc9\x5d\xb2\x68\xc1\x90\xe4\xcb\x6d\x4f\x09\x0b\xe7\x17\xa2\x1a\xcc\x94\x38\xb0\xbe\x42\xe6\x17\x72\x5e\x45\x4c\xb9\x5f\xe9\xc5\xfc\x22\xa0\x37\x87\xfd\xc0\x68\xde\x53\x66\xaa\xb7\xbe\xba\x8b\x91\x02\x9a\x71\xfb\x65\x6b\x35\xb3\x3e\x68\xb7\xf0\x3f\x60\x36\x3a\x16\xc5\xee\xca\xa1\x57\x28\x5f\x44\x7a\x63\x1d\x39\x84\xd7\xd7\x53\x98\x82\xc6\x6a\x32\xf4\xd7\xd7\x92\x4d\x08\x6e\x7f\xfe\x7c\x3f\xdb\xa0\x99\xc9\x6a\x15\xcc\xbc\xb2\xa9\x69\x6a\xcf\x66\xd7\x37\x56\x98\xcb\x9a\x2e\x73\x7a\xd6\xc9\x66\xb1\xa6\x0e\xdb\x85\x80\x19\xde\x56\x8a\xda\xc5\xa5\x22\xe0\x76\xbc\x7b\x10\x8b\x20\xf1\x55\x17\x42\xcf\xe9\x03\x31\x6c\xa4\x4c\xf0\xbc\x87\xd8\x1c\x91\xd4\xf4\x25\x23\x8d\x8e\xb9\x51\x72\xbd\x69\xe5\x35\xcf\xe9\x8a\xc4\x1e\x1e\x50\x05\xce\x3a\x93\xc8\x43\x51\x48\x89\xa4\xe8\x8c\x30\x05\x4e\x3b\x73\xb7\x4e\x46\xf7\x4b\x4e\xa9\xde\x4c\x96\x8f\x45\xa0\xb9\x1a\xd0\x46\x27\x4e\xf8\xec\x98\x56\xe6\x45\xdc\xb7\x8b\x46\xad\x65\xad\x70\xa0\x44\x4c\xc6\x0d\xa6\x38\xed\x6b\x3c\x35\x31\x62\x45\xae\x6a\xdc\xee\x32\xb3\xaa\x0e\x13\xde\x72\x2f\x64\xf2\x26\x93\x29\xbe\x3a\xf6\x91\x60\x6a\x2d\x59\x14\xa0\xc0\xb8\xb1\x6a\x78\xe9\x6c\x1e\xcb\xd5\x2c\xbd\xad\x46\xc4\xa7\xf6\x4f\x27\x34\x54\xf3\xad\xf6\x52\x45\xc6\x26\xe4\x41\xc0\x4e\xb1\x07\xe6\xc7\xfa\xb7\x3e\x21\xe6\xfb\xf7\xd1\x23\x4a\xc5\x6c\x98\x28\xfa\x8a\xf1\x80\xf1\xb1\x86\xf0\x13\xa9\xc4\xd4\x98\x25\x81\x8d\x32\xfe\xe8\xe5\xd3\xca\x2a\x63\x3b\xd6\x8a\xf9\x53\x6e\x41\x00\x48\x77\x38\x06\xa3\x22\xdc\xbe\x6a\x7b\x90\x62\x5f\xfd\x5d\x4b\x47\x6c\x5b\xb5\xf1\xa0\x4a\x4d\x49\xdc\x36\x91\xa1\x8a\xc9\x3b\x10\xda\x68\x59\xf7\xcf\x85\x79\x35\x41\x98\x67\x2c\x4b\x30\x6e\xb9\xdb\xab\xf2\x94\xd1\xb3\x2d\xca\x25\x53\x17\x3d\xbc\x56\xe7\x1c\x7e\xde\x1b\xfb\xc6\xa5\xaa\x0f\x7e\xc6\xdb\xf8\x8e\xa2\xd3\x96\xa1\x36\xd9\x0d\x4c\x6b\x79\x9b\x97\x3a\xe3\x34\xeb\xde\x16\xe6\x37\xd7\x49\x13\x1d\x21\x6f\x47\x7d\xc6\x94\x3f\xf9\x8d\xd1\xb3\xe2\x5d\x61\xa9\x4c\x33\x47\x91\x4a\xc4\x74\x56\x47\x21\x7c\xe5\x52\xcb\x3f\x61\x2b\x20\x7c\x74\xc0\x4b\xce\x37\x8c\xbb\xe2\x0b\xde\xc3\xa7\x4c\xb2\x21\x33\x8a\x93\x71\x78\x11\xa9\x89\x71\xe2\x5d\x9e\x68\x09\x98\x5c\x2c\x12\x80\xaf\x37\xe5\xf6\xa5\x4f\x24\xcd\xd7\x9f\xb3\x0e\x32\x2d\x61\x0f\x9b\xb7\x1b\x9f\x62\x1a\x7c\xa2\x17\x14\xdb\xe0\x18\xf7\xa0\xa8\x35\x6d\xa8\x2b\x96\xaa\x7c\x64\x85\xfb\xce\x5b\xa5\x09\x5b\x81\x25\x6e\x0c\x11\x3b\x11\x33\x7a\xe7\x3b\xea\x9d\x5d\x70\x73\xfb\xee\x62\x4c\x87\x22\x96\x4b\x33\x43\xbb\x16\x4d\x13\x1b\xad\x0f\x1f\x35\xbe\xa2\x44\x4e\xcc\xe0\x5a\x97\xe6\xa4\x6f\xec\x5c\x7d\x08\x06\xf1\x8f\xf5\xa7\x8f\xd6\x1f\xfd\x8c\x61\x40\x73\x40\x1f\x3d\x7b\xfc\xec\xf1\x68\x21\xd0\xc7\x4f\x9e\x90\xa7\x8f\x17\x02\x7d\xf2\xf8\x29\x7d\x46\x16\xab\xd5\x58\xa8\x2e\x02\xfa\xec\x89\xfe\x7f\x21\xd0\xa7\x6b\xfa\xff\x85\x40\x83\x27\xab\xab\xab\xab\x0b\x81\x0e\x9f\xad\xf9\x6b\x8b\xf5\xf5\xe7\x9f\x57\xe9\x82\x78\xf5\xd7\xd7\x7e\x7e\x32\x5c\x0c\x59\x64\xed\xf1\xcf\x8b\x75\xe0\x29\x59\x1b\x3e\x5f\x6c\x0a\x9e\x0d\xd7\x46\x64\x7d\x31\x72\x59\x5b\x1b\x3e\x5f\x0c\x74\x35\x78\xfc\x8c\x2c\x36\x05\x6b\x4f\x9e\x3e\xf1\x17\x9b\x82\xf5\xe7\x4f\xd7\x47\x8b\xe1\x75\xf5\xd1\xf3\x21\x5d\x8c\x5c\x56\x57\x7f\x7e\xf4\xf3\x82\xb5\xae\x3e\x5d\x5d\x70\x15\xac\xae\xfe\xfc\xfc\xd9\x62\x13\xbb\x4e\x9f\x05\x8f\x16\x9c\x82\x9f\x7f\xa6\x8f\x16\xa3\x81\xc7\x3e\x19\x3d\x59\x0c\xaf\x8f\x1e\x3d\x7d\xbe\x46\x17\x23\xed\xf5\x67\xcf\xd6\x9e\x2d\x04\x3a\x7a\x4e\x7e\x5e\x5f\x6c\x0a\x46\x23\x9f\xac\x2f\xc6\xb3\xe8\xe8\xa9\x0f\x2b\x76\x3e\x27\x1c\x8e\x1e\x3d\x5d\x5d\x0c\x59\xa3\xd1\xa3\x60\x41\x3e\xf0\x98\x3e\x7a\xbc\xbe\x18\xb2\x9e\x06\x8f\xfd\xc7\x8b\xad\x82\x9f\x83\xa7\xf4\xe9\x23\x5c\xb2\x41\xd7\x9b\x46\xc1\x1a\x0b\xa4\xeb\x16\xfd\xb0\xfa\xb1\xab\x0b\x9a\x38\x5e\x36\xb1\xce\xb0\x13\x2a\xd0\x22\x19\x25\x5a\x06\xf0\x54\xff\xc5\x65\xc1\x8c\xd3\x75\x05\x7b\x0a\x6a\xec\xf7\xfb\x60\x83\xe7\xac\x3e\xf3\x1a\x54\xd8\xcf\x8a\x41\x5a\xb2\xd4\x56\x59\x80\x83\x8a\xf3\xc2\x9b\xeb\xe6\xf2\xdb\x3e\x98\x21\xdc\xf5\x0d\x3f\x8d\xa2\x5f\xdc\xf9\x6f\x22\x79\xbb\x70\x45\x30\x7e\xdc\xbe\x57\xc9\x31\xe2\xf8\x91\xce\x96\x2d\x6b\x5b\xa6\xa7\xb8\x30\xdf\xee\x3e\x80\x06\x7d\xd5\xe5\x64\x0a\x73\xec\x19\xeb\x5c\xf8\xfd\xe0\x41\xcb\x66\xe0\x2d\x83\x10\x38\xbf\x65\x84\x08\xed\x83\xb5\xe4\x55\xd3\x24\x97\x49\xcf\x16\xc9\xcc\x87\x6b\x09\xa9\xb5\x18\x61\xba\x4e\xa7\xbd\xaa\xd2\xde\x35\xa8\x2a\x61\x1d\x72\x4a\x14\xf9\x5e\x14\xe2\xa6\xcb\x46\x65\xd5\x19\x93\xe8\x2e\xea\x1e\x3e\x66\xbf\xf2\xea\x06\x12\xfa\x60\xcc\x8d\x3f\x7a\x67\x13\x1a\xd3\x1e\x86\x1b\x4e\xec\xa5\x39\x65\x95\x43\x45\xd5\x80\x83\xe9\xdf\xb9\xc1\x67\x76\x68\x40\x10\x50\x2b\xf8\x4a\xbb\x26\x42\xef\x00\x32\x5d\x47\x96\xc3\x67\xad\x7a\x87\x84\x3e\x70\x9b\x5e\x40\x14\xe9\x04\x4c\x4e\x99\x94\xd8\xc3\x32\x19\x4e\x99\x32\x59\xea\x22\xa2\xf8\xa3\xd5\xd2\x60\xec\x99\x53\x25\x36\x47\x15\xfd\x11\x42\x68\xb6\xfb\x6b\x9e\x48\x94\xb3\x58\x83\x65\x1d\x98\xe0\x51\x50\x29\x24\xc6\x89\x9e\x09\x6a\x2c\xdd\x62\xaa\xfc\x89\xfe\x4c\xa2\x88\xc6\xfa\x3c\x08\xf6\x66\xbe\xe0\x66\xa2\x31\xdc\x75\xec\xf8\x69\xf8\xbb\x4c\xcd\x94\x02\xd5\xa8\x9a\x30\xbe\x6f\x98\x48\x0a\x64\xdf\x7b\x5f\xb5\x17\xa2\xa2\x62\xd9\xac\x2a\xe7\x52\x30\x23\x2f\x7c\x2f\xaf\xdc\x32\x23\x7e\x49\x1f\xf6\x71\xc7\xf0\xe1\x1e\x7c\x5b\xfb\x40\xc0\x96\x61\x4a\x80\xaf\x07\x0f\x5a\x90\x0d\x3f\x9c\x9f\x69\x8b\x40\x97\x67\x7f\xba\xdc\x14\x4f\x9f\x3f\x43\x3e\x98\x3d\x74\x74\x42\x87\x8b\x78\x4a\x52\x77\xd5\x0e\xcf\xb6\x1e\x03\xe7\x12\xd3\x88\x9c\x66\x02\x1c\xcc\x94\x9c\x77\xc0\xfd\x40\x67\x6d\x75\xd5\x94\x08\xe9\x48\xf7\x8c\x5a\xc4\x19\x6a\x98\xb7\xfc\x0c\x32\xec\xa4\xbf\x34\x2f\xc6\xb1\x8b\xd3\x9f\x27\xab\xc5\x2a\x32\x25\x5e\x5a\x82\x4c\x2b\xf2\x43\xe6\xc3\xdd\x77\xe9\xf2\x17\x90\xc8\xc1\xff\x7b\x5b\x63\xa9\x1b\xc5\x10\xd0\xd8\x6e\x57\x2d\x87\x67\x03\x62\xb6\x83\xe5\x39\x81\x6f\xdf\xc8\xdc\x01\x5e\x20\x23\xc2\x71\x41\xb3\xad\xfb\x56\x78\xb2\x96\x6d\x90\xf7\xf3\x26\xe9\x36\xf1\x9a\x1b\x62\xc0\x48\x28\xc6\xf3\x9e\x15\x17\xee\x5b\xbf\xfe\x35\xab\x35\xa7\x84\x50\xb9\x9e\x0f\xf7\xfa\x69\x68\x3a\x7b\xcd\xef\x81\xc1\x7d\x3c\x4d\xd3\xf7\x7f\xc5\x1e\xdc\xea\xf5\xf0\xa6\xc9\xc2\x9e\xb9\x43\x58\xf3\x24\xfb\x9b\x5a\xdd\xd9\x92\x57\x19\xee\x5d\x81\xe9\x0e\xb6\xef\x40\xe3\xa9\xf3\x8e\xf7\x30\xbd\x91\xea\x4e\xc9\x09\xdd\x09\x5a\x6b\xab\xed\xa5\xc2\xf6\xd6\x7a\x3c\xcd\x5a\xcc\x9c\x3b\x98\xe9\x9f\x88\x33\xdc\xae\xf1\x40\x0a\xfd\xd1\xf2\x86\xd7\x90\x65\x8b\xde\xcb\xfc\x71\x56\x9d\xa9\x0a\xde\xc2\x13\x16\x04\x94\x77\x87\xf6\x66\x25\xc7\xa8\x45\xfb\xd2\x9a\x37\x40\x55\xf0\xe6\xa0\xa9\xb1\x80\xc9\x48\x48\x0a\xc1\xda\x68\x28\x69\x13\xdc\x84\x05\x9a\xb1\xcd\xaf\xa6\xb0\x54\x9c\xf9\xc7\x2c\x7f\xa1\x39\x14\xd6\x55\x97\xb7\x10\x61\xa3\x3a\x86\x63\x9f\x26\xd6\x59\x6c\x38\xbf\x19\xb5\xd6\x1c\x05\x07\x70\x29\xa6\x96\xbc\x45\x34\x8b\x55\x6f\x5f\x1d\x30\x4e\xf9\xf6\x0c\x8b\x95\xee\xa0\xf0\x7c\xc9\x05\x04\x0e\xa3\x1d\x5d\x60\xff\xce\x9d\x8d\x74\x41\x4f\xd5\xdf\x1c\xbb\xbd\x3b\x77\x09\xf1\x12\xe3\x5e\xab\x12\x7a\x56\x75\xb5\x08\x02\xc7\xab\x8d\x28\x92\x6d\x0f\x07\x1a\x95\x08\x3f\xbc\xa6\x1c\x19\x32\xa9\xbe\xf9\x19\x55\x9f\x94\x5e\x33\x1a\x06\x3d\xac\x85\x82\xb1\xd0\x8c\x5b\x32\x3e\x0e\xa9\x39\xab\x69\x7e\x37\x25\xe7\x36\xa6\xf0\xaa\xe7\xce\x70\x66\x22\xe0\x2e\x70\xb3\x3a\x0f\x38\x2d\x32\xf3\xe1\x48\x06\x95\xce\x03\x7d\xb1\xfa\x12\x8b\x53\x1a\x8f\x42\x71\xd6\xb9\xe8\x21\xe9\xc7\x22\x0c\x7f\x01\xc1\xc4\x46\xff\x45\xd9\x9b\x12\x0f\x47\xe7\xbf\xe0\xb6\x89\x81\x3e\xcf\xc5\x40\x61\xd5\x1f\x89\xf1\x38\xf5\xf0\x54\xb3\x38\xcd\x30\x35\x73\x2c\x72\xcc\x1c\x6e\x70\xbb\xc6\xc7\x8e\xa2\x53\x09\x8f\x46\xf3\x6e\x87\x0a\xb6\x73\xb9\x8d\x78\xad\x78\x6e\x36\x85\x3d\xda\xbe\x6a\x2a\x40\xab\xdb\x36\x38\x3d\xaa\xeb\xb9\x51\x9d\x5c\x83\x32\xcd\x66\x64\x84\x5b\x79\x07\x78\x45\xf5\xc6\xda\xf4\x70\x24\x84\xa2\x31\xfe\x78\xdd\x21\x2e\x62\x1d\xf6\xb5\x1f\x73\x15\x64\x15\x2b\x80\xe0\x2f\x29\x71\xa8\x7a\x89\x23\x5d\x29\x4b\x5f\x79\x26\xac\x63\xc8\xf3\xdb\x51\x8e\x2f\x65\x7a\x76\x8c\x62\x31\x8d\x2c\xbb\x12\x20\xdc\xfd\xa6\xeb\x3d\x20\x6a\xd2\x83\x27\xeb\x26\x11\x6c\x7a\x4c\x22\x58\x4f\x59\x04\xb4\xda\x97\x57\xde\xa7\xd4\x3e\xb6\x6c\x5b\x16\x53\x12\x48\xb7\x1c\x8d\x87\x99\x14\x71\xbe\x79\x4c\x6b\xde\x2b\xa7\x4c\xe2\x3f\x1c\x34\x6e\x7f\x58\xfd\x98\x6a\xda\x76\x78\x40\xcf\xcb\x7b\x94\x9e\x33\xdc\xfe\x70\x3f\x27\xaf\x9b\xd1\xe0\xf6\x4b\xda\x59\xeb\xd1\x8f\xf7\xb2\x39\xce\x3a\x09\xaf\x94\x73\xaa\xbf\xd4\x2e\xf4\x7a\x22\x3e\x5c\x83\x7f\xc3\x2d\x6a\x39\xf5\x06\xac\x94\x27\xab\xab\x0b\xc9\x08\xf6\xaa\x1b\x3c\xc5\xec\x70\xab\x1a\xd2\x35\x78\x7a\x11\xc0\xb5\x36\x5a\x5b\x5d\xed\x59\x8d\x82\xc1\x84\x3e\x18\x63\xb8\xb7\x46\xeb\x95\xbc\xf5\x34\xef\x51\x25\xef\x51\x9a\xf7\xb8\x92\xf7\x38\xcd\x7b\x52\xc9\x7b\x92\xe6\x3d\xad\xe4\x3d\x4d\xf3\x9e\x55\xf2\x9e\xad\xae\xe2\xab\x6a\xd7\xaf\x25\xac\xd8\xd7\x12\x3f\x94\x5f\x73\x95\x5f\xff\xbe\x1a\xaf\x2f\xa5\xed\xfa\xa1\xcf\xba\x23\xfa\x2c\xb7\xc8\x03\x76\xca\x82\x6f\xc9\xf2\x67\x48\x7e\xae\x6f\xd7\x11\xfa\xd2\xf1\xc5\x22\x32\x2f\x1c\xbf\x8f\x3d\x2d\xe5\x3a\x29\xb7\x21\x71\x0c\xe6\xac\x45\xa6\x71\xdd\x45\x5e\xb1\xa6\xd6\xac\xa7\xbb\xa1\xdb\x18\x4c\x49\x18\x6e\x89\xb3\x4c\xed\xed\x70\x57\xc3\x06\xdc\xfa\x75\x30\x05\x2e\xf0\x63\xc1\x35\x13\x24\xd8\xd1\x7d\x33\x62\x8c\x45\xa2\x68\xdc\x74\x4d\xdd\xa8\xb1\x09\xa0\xd7\xf3\xa9\x37\x25\x5a\xb7\x67\xea\x51\x2b\x16\xc1\xb9\x26\x6f\xd8\xd0\x44\xbd\xb9\xf3\x6f\x45\x97\xa0\xab\xcb\xed\x54\xd9\x46\xd8\xcf\x28\xcf\x6c\x05\xd9\xef\x87\x18\xe1\xb6\x77\x7f\xd5\x1d\xf8\x5d\xf5\x76\xcb\x00\x2d\x99\x4b\xd3\x90\xa6\x3a\x5b\x8b\x29\x4c\x73\x3b\xeb\x02\x14\xf4\xb2\x26\x2f\x64\xfc\xe4\x48\x38\xfb\x56\x33\x07\x5d\x88\x5b\x0d\xef\x16\x8e\x44\xab\xf8\xa6\xee\x48\x60\xe7\x76\x2d\xa3\xba\x9b\x10\xdd\x37\xb6\x47\x5f\x90\xea\xaa\x3b\x80\xb3\x53\x5f\x98\xee\x52\xf6\x79\xbb\x84\x77\x2b\xc4\x66\x0c\x54\x33\x75\xce\x57\xa4\x2c\x0b\x36\x97\xa4\x66\xc6\xa1\x2a\x90\xd4\xdd\xd8\x4f\xe1\x66\xd6\xf5\xa8\x9e\x4c\x62\xc2\x24\x0d\x7a\x39\xc0\x8e\x49\xc2\x1e\x1e\x8a\x38\xa0\x71\x29\xd7\x25\x62\x0f\x1b\x41\x3f\x9f\x69\x84\x59\x0f\x07\x24\x3e\x29\x64\xe8\x04\xfc\xd1\xb3\xad\x81\x67\x59\x5b\xb7\x3e\x1d\x68\xe8\xfb\x6b\xb9\x83\x43\x4a\x9d\xcb\x2d\x6a\x49\xe3\x95\x91\x88\xc7\x42\x65\x4f\xa9\xee\x82\x5b\x22\x78\x18\x06\x6b\x8d\x5c\x1c\x4d\x08\x3f\x81\x93\x90\x24\xf6\x95\xde\xfd\x35\x0f\x20\x40\xc9\xde\xf0\x66\x2f\xf7\x2a\x10\xc0\x9a\x1f\x13\xc2\x23\xea\xac\x3e\xec\x99\x1f\x3b\xa6\x5c\x5e\x2d\x63\x50\x55\xa3\x8c\xb6\x8d\xdd\x63\xa3\x96\x65\x4a\x65\xc7\xe6\x28\x67\x70\x34\x61\xb2\xd4\x06\x38\xfb\x2a\x5f\x21\x95\x5e\xc7\xdd\x2b\xd7\x90\xe2\xc6\xdc\x7f\xd5\x64\x9b\xe7\x6a\xb5\xb9\xa5\xe6\xd7\xf2\x5a\x1f\x33\x4c\x50\x02\x1b\x33\x2f\xf0\x66\x34\xab\xf9\xd5\x86\x06\xc0\x27\xda\x55\xbb\x6b\x1c\xe6\x36\x55\xe3\xba\xb9\x5a\x75\x11\x36\x57\x67\xa8\x29\xd8\x91\x6e\x27\xa6\x92\xaa\x3b\x41\xc0\xae\x4b\xa0\x45\xb4\xdf\xf6\x2e\x58\x27\x4d\x13\xa9\xde\x11\x7b\x92\x77\xf9\xb3\xa8\x39\xf7\x5c\xd5\x2a\x61\x17\x81\x76\xb7\xcf\xf3\xdf\xc6\xc2\x1a\x28\x74\x04\x7b\xe9\xef\x6c\x25\x4c\x88\xb4\x75\x36\xd7\x92\xef\x5f\xae\x12\x5b\xae\x66\x55\xc1\xac\xd5\xba\x06\x4b\xc7\xcc\x6b\x92\xd3\xc1\x15\xbd\x4a\x67\x2b\xef\x65\xab\x4c\x6b\xe5\x01\xd5\x2e\x3b\x4e\xcf\x0e\x2a\xcf\x4a\xdb\xbd\x62\xed\x7c\x46\xed\xa5\x91\xd6\x36\x52\x19\x44\x4d\x43\x7f\x25\x24\x6c\x51\x8f\xb7\x5f\x96\xde\x83\x1a\x32\x9f\xb3\x3c\xab\x63\xad\xe1\x02\x8d\x5d\x5e\x6b\x5f\xb5\x7b\x95\x11\x56\x5e\xe5\xd6\xae\xfc\x12\x91\x18\x20\x18\x42\x19\x32\x5d\x06\x00\x73\xad\xb5\xaf\xff\xe9\x44\xb1\x30\x8e\x89\x16\xf2\x50\x0f\x4f\xea\x16\xb5\x30\xf9\xaa\x71\x1f\xe7\x99\xfd\xde\xad\x57\xf8\xc5\x47\xde\x33\xef\x6a\xf3\x8f\xc1\x9b\x96\xeb\xe7\xcf\xf7\x45\xe5\x41\x39\x98\xe1\xce\x61\x5e\x39\xc6\x65\xe8\x2d\xfd\x9d\xbd\xf2\xf7\x2e\xc7\xc0\x63\x4a\x6d\x1f\xe8\xa5\xc4\x55\xab\xca\x5d\xec\x4b\xef\xf6\x4b\xeb\x12\xb8\xb4\xfe\xab\x05\x72\x1e\x05\xda\x2f\x79\x12\x86\x3d\x33\xf7\x57\x57\x79\xb6\x39\x7b\x1c\x7e\x0d\xd0\xe2\x5d\xaf\x2d\xad\x47\xc0\x64\x87\x71\xf0\x91\x87\xb5\x84\xb8\xb0\x43\x7d\x37\xa2\x7e\x61\x3b\xb3\xcd\x58\x6f\xc0\xf8\xea\xaa\xe2\x08\xa1\x89\x91\x77\xe7\x70\xf4\x6e\xbe\xea\x3a\x69\xaa\x4c\x51\x39\x0a\x6f\x72\xf5\x5c\xe3\x19\x61\x7e\xbd\xd9\x02\x68\xaa\xb6\xea\x29\x61\x7e\xad\xce\x19\x42\x43\x95\x65\x71\x2f\x57\x9f\x9b\x6b\xda\x76\x8e\xb1\xb3\x7d\xa8\x49\xbe\xac\xa7\x25\xe7\xe0\xba\xb2\x21\x95\xc0\x67\x8d\x2b\xdf\x0b\xd7\xb3\xe6\x7e\x94\xd7\x66\x53\x07\xaa\xae\x1c\x20\xf2\x40\x75\x37\xfc\x02\x0d\x95\xfd\x10\x65\x20\x39\xbb\x2a\xeb\x85\x41\x80\xd3\x72\x12\x86\x17\xb3\xf7\xdd\x1c\xef\xc1\xb8\x79\xe7\x2d\xd2\xbc\x11\x97\x97\x74\x93\x7b\xde\x51\x60\x8f\x52\xd5\xca\x68\x29\x7c\x48\x63\x9b\xdf\x5c\x26\xcb\xb9\xb9\xa0\xdc\x58\xc0\x0e\x07\x7b\x97\x94\x27\x53\x1a\x43\x54\xde\xfb\xab\xde\x98\xaa\x5e\x8d\xe2\xd5\x0d\x1f\xbc\x4c\x2f\x36\x7e\x73\x25\xbb\x24\x02\x4c\xa1\x7f\x0f\x0c\x2c\x37\xf4\xdc\x98\xbd\x7c\xb5\x7c\xc4\xc6\x2b\x94\x9f\xb2\x58\xf0\x69\x15\x23\xb7\x63\x75\x6b\x0c\x1b\x44\x3f\x15\x7e\x3e\x14\xfa\x8b\x3f\x7e\xfe\x7c\x79\x65\xe5\xa6\xcc\xcc\x24\xbd\xe4\x01\x5f\xb1\xa9\xb8\x00\x8f\x92\x3e\x7f\xce\x10\x6c\x3f\xf6\x47\x23\xe3\x01\x29\x85\x74\x29\x9f\x3f\xe3\xfd\xd1\xa8\xd7\x13\xa3\x51\x06\xcd\xcb\xc0\x3c\x85\xe5\xbd\x9e\x5e\x9e\x72\x22\xce\x20\x4d\x66\x50\x83\x34\xed\xf3\x67\x67\xe0\x9b\x65\xb2\xbf\x75\xc7\xa6\x34\x60\xc9\x14\x2f\xb2\xac\xed\x4d\x4a\xf6\xf5\xe5\x35\x63\x97\x69\x5b\x56\x22\xb1\x15\x3b\x6c\x0f\x22\xe2\x43\x78\xb5\xde\xe5\x41\x32\x0c\x99\xdf\x5b\xf3\x0e\x62\x76\x4a\x14\xed\xad\x7b\x07\xb1\x50\x46\x1f\xfa\xe8\xca\xdb\x48\xd4\xe4\x20\x16\x70\xcf\xd6\xbb\x74\x91\x05\x7a\xe9\x00\xb1\xf7\x2b\xbd\xf0\x43\x41\x4e\x7a\xf8\xc4\x7e\x61\x6f\x77\x6b\xe3\xa0\x87\xc3\x80\x44\xd8\xdb\xdc\x18\xf4\xb0\x4f\x24\xf6\x06\x34\x3e\xa5\xb1\x6e\x37\x9f\x9f\xa5\x6e\x6c\xf5\x30\x09\xb0\xb7\xcd\xfd\xf8\x02\x0c\x71\x74\xea\x9e\xe0\xb4\x87\xb9\xe0\xb4\x9c\x33\x50\x24\x56\x47\xbb\x83\x1e\x96\xfa\x4b\x85\x12\x5f\x79\xd0\x45\xca\x95\xb1\x99\x35\x83\x3c\xa4\x24\xe8\xad\x79\xaf\x29\x0d\xc0\x9b\xe1\xba\xb7\x29\xb8\xbd\xfc\xef\x3d\xf2\x36\xa2\x28\x16\xa7\xb4\xf7\xd8\x7d\x05\xbd\x27\xde\x21\xfd\xd3\x20\xe1\xa9\x07\x38\x92\x93\xde\xb3\x2b\xef\xbd\xa4\xb1\xae\xf9\x94\xa9\x0b\x53\xf7\x66\x4c\x21\x56\xd4\x9a\x07\xad\xac\x7b\xdb\x01\x03\xdc\x79\x5b\x10\x6c\x34\xd0\xd5\xc6\xfe\x84\x99\x6a\xd3\x16\x9e\x7a\x87\xf4\x94\xc6\x1a\xe0\x99\x6b\x81\x06\x47\xd6\x87\x65\xef\xe7\x2c\xed\x55\x28\xfc\x93\xde\xf3\xac\xfb\x6b\xab\x59\xef\xd6\xd6\xbc\x01\xe5\x6a\x40\xfd\x24\xa6\xbb\x8c\x9f\xf4\xd6\xd6\xbd\xad\x98\x8c\x54\x6f\xed\x91\xf7\x1b\x8d\x25\x13\x5c\xc3\x3d\xf6\x06\xe0\xaa\x53\x7f\x3f\xc9\x2a\xef\xad\x3d\xbd\x72\x33\x9e\xe2\x0b\x50\xbe\xea\xed\xea\x76\xf5\xb8\x4e\x19\x3d\xeb\xad\x7b\x3a\xd9\x39\x20\x03\x7b\x26\x89\x22\x1a\x4f\x99\x52\x34\x40\x67\x4c\x4d\x44\xa2\x10\x81\x01\x92\x10\x43\x71\x0b\xae\x3f\x69\xe0\x21\xdf\x16\xe3\x42\x65\x45\xb1\x6d\xa1\x54\x75\x4c\xff\x4a\x58\x4c\xd3\x0a\x91\x0d\xee\x1a\x01\xc5\x9a\xed\xf5\xca\xe2\x93\x84\x85\x8e\x6f\xf0\x8b\xa1\x08\x2e\x7a\x6b\xde\x3b\xf2\xa7\x88\x99\xba\xe8\xad\x7b\xef\x39\xe1\x6c\x2a\x12\xa9\x67\xdc\x00\xd8\x16\x5d\x1d\xae\xc9\x00\x8d\x62\x31\x45\x84\x5f\xd8\xc6\x69\x8c\xd3\x9a\x6c\x19\xf7\x33\xeb\x5e\xa9\xb0\x2d\x28\x71\xd6\xb0\x2d\x9a\xfe\x6e\x2c\x1b\x86\xb9\xf2\x57\x9e\xc1\xc8\x40\x69\xba\xb8\xcc\x66\x6e\xd5\x3b\xa0\xa0\xc5\xee\xad\x79\xef\x79\x40\xe3\x74\xa2\x52\xea\x78\xe4\x40\xf6\xe8\x59\xef\xf1\x95\x77\x40\xc6\x76\xdd\x1f\x91\x21\x04\xed\xd5\xeb\xcf\x58\xb3\xa5\x81\xd1\xae\xbc\xdf\x27\xc2\x40\x69\x72\xef\x61\x13\x79\xe3\x4d\x2c\x92\xa8\x87\x63\x01\xfe\x81\xb7\x4f\x69\x7c\x21\x38\xd5\x10\x3b\x41\x0f\xaf\xe2\x42\x92\xb9\xaf\x71\x29\xd8\xdb\x65\x23\xea\x5f\xf8\x21\xed\x5d\x1a\xe2\x5c\xf5\x76\xd9\x29\xed\xad\x65\x6b\xc3\x92\xad\x45\x12\x7c\x63\x00\x72\x34\xc4\x4e\x29\x4e\xc1\xdd\xd4\xd9\x9f\xf8\xca\xd1\xba\x59\x8f\xef\x44\xa0\xbb\xcf\x4f\xb3\x05\xe0\x6d\x86\xf0\xb1\xee\xe9\x65\x62\xb9\xdb\xb2\x4c\x82\x84\x87\xf4\xaf\x84\x4a\xb5\x08\xb3\x18\x28\x11\xd3\x8c\x79\xbe\xbb\x18\xfc\xf7\x6e\x0f\xc3\x1f\xec\x1d\x08\xa9\xc6\x31\x85\xa4\xec\x1b\x7b\x07\x34\xf6\x05\x27\xe0\x12\x59\x7f\x68\xca\x8b\x19\xd9\x7a\x05\xce\x98\xf5\x07\xf6\x06\xff\xbd\x6b\xb8\x26\x38\x1a\x36\x9f\x18\x96\x71\x90\xf8\xaa\x77\xb9\x29\xa6\xd3\x84\x33\x75\x61\xfd\x9e\x81\xc3\x40\x93\xa2\x79\x68\xc9\x2b\x5a\x0f\x67\x49\xd8\x3b\x20\xfe\x09\x19\xd3\x6d\xa9\x8f\x01\x8c\x84\xb2\x87\xb3\xef\x34\x7b\x23\x38\x25\xdc\xa7\x41\x0f\xbb\xaf\x34\xeb\x20\xa6\x53\x96\x4c\x7b\xd8\x7e\xa4\x19\x5b\x44\x91\x4d\xf0\x53\xdb\xc3\xfa\x1b\x99\x1f\xd8\x3b\x08\x09\xdf\x0c\x45\x12\xf4\x30\xfc\x31\x29\x03\x1a\x8e\xde\x0a\xa9\x7a\x58\x7f\x75\x26\x42\x2a\x4d\xac\x44\xc9\xd5\xde\xaa\xf9\x58\xd3\xac\x10\xbe\xd6\x7b\xeb\x4f\xcc\xd7\xa3\xde\x13\x9b\xf6\xb8\xb7\xb6\x6a\x3f\x9f\xf4\xd6\x5d\xea\xd3\xde\xf3\xe7\xcf\x9f\x5f\x79\x60\x51\x75\xb9\x11\x04\x86\xc6\xe1\x02\xbb\x43\x82\xa0\xb3\xfe\x0c\x7b\x1b\x61\xe8\x92\xa6\x94\x27\x9d\x9f\xb1\xb7\xc1\xb9\x48\xb8\x4f\x5d\xba\x09\x8b\x68\xf9\x90\x23\x4b\x97\x09\xef\xc0\xc0\x66\xe2\x7d\x94\xd6\xad\x7f\x76\x92\xa8\xb3\x6e\xb3\xb6\xc4\x19\x2f\x66\x82\x9d\x84\xcb\xde\xa5\x23\x55\xcc\x0e\xe9\x48\xa5\xd9\x87\x70\x55\x54\xc8\x87\x67\xb1\x29\x00\x58\x6b\x64\xcd\x4b\xfd\xb3\x93\x44\xf9\xdc\x7c\x0f\x4c\xbe\xb1\x84\xc9\x20\xf2\x9d\x30\x10\x60\x30\x95\x83\x28\xf4\xc3\x80\xd8\xe7\xb9\x1b\x4a\x11\x7f\xa2\xf7\xe2\xb4\x9b\x69\x0a\xf6\x5e\x91\x78\x73\x42\xe2\x34\xcf\xd7\x3f\x3a\x43\x12\x77\x1e\x3d\xc2\x1e\xec\x79\xb2\x30\x07\x4f\xb1\xf7\x4a\x88\x93\x29\x89\x4f\x06\x22\x64\x41\x86\x6b\x93\x98\x65\x6f\x04\x95\x4c\x3d\xb3\x19\x80\xd9\x99\x2b\x30\x26\x3a\x38\xf6\x5e\x81\x6d\xdb\x86\x65\x8b\x16\xc8\x3c\x1e\x5e\xc7\xde\xa6\x7d\x1a\xe1\x72\x46\x21\x19\x63\xcd\xa3\xd3\xa1\x0c\xf5\x60\x94\x4e\x33\x4f\x02\x53\xec\x4c\x08\x78\x52\xf5\x15\xe1\x20\xdc\x3b\x00\xf8\x4b\xd3\x4e\xdb\xc7\x84\xd8\xdb\x14\x51\xda\x8c\x2f\xa2\x0b\xec\x6d\xc6\x42\xca\x0c\xce\xf8\x51\xc2\x9e\x5e\x4e\x43\x22\xd3\x21\x05\xf6\x37\xf6\xf4\x14\x87\x82\xa4\x75\x07\xf6\x37\xf6\x4a\x48\x60\x1c\x83\xe8\xe2\x12\x22\x0a\xa3\xdd\x36\x17\x77\x26\xcd\x2a\x06\xb7\xcf\x23\xc2\xd3\x1a\x29\x0f\x49\x3c\xa6\x90\x2c\xb2\xf9\x04\xfb\x49\xe3\x6f\xda\x65\xad\xbb\x3c\x97\xfc\x9a\x85\x2a\x5b\x7c\x52\xc4\x0a\xae\x4b\xf5\x5e\x93\xcd\xef\x38\x66\x41\x07\xe2\x5c\x8d\x88\x4f\xb1\xf7\x46\x1c\x89\x94\xaa\xf5\xf0\x3b\x21\xb9\xa0\x31\x90\xf6\x5b\xc2\x03\x39\x21\x27\xe9\xb0\x26\x2e\x01\x7b\x60\x55\x5d\x5e\xd5\x3b\x5c\xd1\xb1\x09\x84\x95\xa2\x75\x4c\xc5\x94\xaa\xf8\x02\xc3\x46\xe1\x52\x8d\x63\xee\x5d\x26\xd5\xab\x24\x0c\xa9\xca\xd2\xa5\xea\x0c\x21\x49\xe3\xcb\x48\x3a\x69\xa6\xd0\xd3\xf8\x4e\xc4\xf4\xad\x88\xd9\xdf\x82\x2b\x52\x64\x2c\x4f\xb0\xb7\x27\xd4\x46\x18\x8a\xb3\xac\xd4\x90\x70\xec\x1d\x6c\xbd\x4e\xa7\x22\x18\x61\x2d\x9f\x67\x0b\x09\x3c\xb2\x63\xef\x20\x09\xb3\x39\x8f\xf4\x0f\xcd\x3a\x93\x74\x24\xd4\x90\xfd\x01\x8d\x65\x46\xc9\xe6\xd1\x4a\x67\x75\x4d\x67\x88\x28\x4c\x2b\x98\x26\xa1\x62\x51\x48\x3b\x6b\xcf\x75\x73\x46\x98\x48\x1b\x84\x9f\xd8\x08\xb9\xf9\x11\x3c\xd3\x69\x7a\x1a\xf2\x7c\xd4\xac\xa4\xce\xfa\xcf\xd8\x4a\x9d\x69\x11\x32\xe6\x36\x9a\xec\x80\x66\x34\x24\x29\x0f\x74\x0a\xb8\xd0\x94\x59\xaa\xf9\xdd\x19\x53\xa2\x0b\x4c\x48\x9c\xb1\x5f\xaa\xce\x44\x7c\xd2\xf1\x05\xe7\xce\xd2\x7d\x90\x23\x3f\x12\x46\x13\xd2\x81\x2b\x76\xec\x0d\xa2\x30\x23\x6c\xa9\x7f\x74\x1e\x3d\xc3\xde\x11\x19\x97\x3a\x7c\x42\x2f\xb0\x77\xc4\xfc\x93\x8c\x2b\xc1\x42\xd4\x49\x03\xc0\x5b\x21\xc3\xe2\xd2\xe4\x6f\x89\x64\x58\xce\x0f\x20\x4d\xe7\x4f\xe9\x2b\x92\x55\xab\xd8\x54\xa7\xc6\x0c\x18\x41\x2d\xa7\x56\x36\x13\xe8\xba\x00\x59\xe5\xda\x29\xac\x61\xdf\x05\xe8\x2a\x07\x4f\xa1\x0d\x2b\x2f\x40\xd7\x70\xf3\x14\xdc\xb2\xf5\xf7\x9c\x14\x37\xbb\x8c\xa5\xbc\xe7\x61\x81\xfc\x13\xfb\x1b\x9b\x73\x93\x94\x6c\xcc\xf3\x4c\x12\x70\xfb\xbb\x88\xc3\x6c\xb1\x87\x62\xa8\xc5\x4b\xf7\xbc\xae\x77\xa9\x0f\x79\x3d\xf3\xbc\x0e\x9e\x2b\x76\x24\x38\xdd\x18\x24\x91\xe5\x36\xb9\x1c\x93\x86\xbd\x77\x54\x4a\x32\xa6\x85\xcc\xa9\x49\xc3\x5a\x6c\x93\x85\x1c\x12\x45\x52\xef\x0d\xe7\x85\x54\xd8\xc2\xdf\xb0\x51\xb1\x89\x31\x44\x6f\xd8\xa2\x76\x24\x59\x46\x00\x49\x7a\xef\x08\x87\xc5\x7a\x92\x70\xa8\x7b\xa4\x62\xe6\xcb\x52\x8f\x20\x0d\x7b\x07\x8c\xba\xad\x30\xcb\x8d\x18\x85\x2d\xb1\xb0\x53\xe6\xaa\xd5\x93\x00\xd9\xaf\x19\x27\x46\x2e\xc9\x72\x47\x26\x0d\x7b\xbb\xa4\xd8\x9b\x50\x4b\xfc\x9b\xe0\x35\x28\x97\xea\x8b\x80\x62\xef\x2d\x0d\xa3\x42\xf2\x84\x86\x91\x16\x3f\x79\x02\x62\x60\xbe\xeb\x26\x0d\x7b\xaf\x43\x71\x56\x6c\x39\x14\x67\xd8\xdb\x4f\x8a\xbd\x15\x89\xd2\xbc\xb6\x90\xa6\x37\x9c\x03\x12\x2b\x4e\x8b\xf3\x1b\x99\x34\xec\xed\xc7\xe3\x62\x25\xf1\x18\x7b\x6f\xc5\xb4\xd8\xf7\x89\x98\x02\x73\x1f\x31\xce\x14\x2d\xb5\x60\x12\xb1\x77\x24\x02\x51\xc8\x52\x22\x10\x9a\xc9\x09\x9f\x06\x49\x5c\x2c\x16\xb9\x54\x18\xc7\x58\x40\x7c\xa2\xe2\x60\x20\x51\xb7\xea\x8b\x69\x39\x9b\xd9\x44\xbd\xb2\xc8\xa9\x3e\xa4\xe4\xdb\x85\x24\xec\xfd\xce\x78\x79\xdc\x67\x90\x84\xbd\x43\x41\x82\x29\x29\xce\x44\x6c\xd2\xf4\x56\xc2\xe9\x45\x71\x2a\x74\x0a\x9c\xe2\x12\x38\xe8\x16\x16\x84\x4d\xc4\xde\x51\xc2\x8b\x83\x54\x89\x3e\x96\xbd\x49\x58\x89\x14\xc6\x09\xc4\x67\x1a\x4c\x59\x58\xcc\x90\x53\xb8\x90\x3d\xd4\x0b\x5a\x95\x3a\xa7\x93\x0c\x93\x2b\xb6\x01\x5c\x6e\x33\x29\x8e\x45\x92\x90\x4a\x38\xd5\x9c\x50\x55\x46\xde\xd4\xa5\x16\x04\xee\xdc\x5a\xb5\x89\x7a\x0d\x9e\x8a\xd2\x42\x0e\x20\x29\xe3\x28\x39\xdc\xea\x14\x73\xac\x28\x4e\x75\xa8\xb7\xda\xf4\x02\x57\x96\x56\x85\x4b\xce\xed\x94\xb9\xb2\x90\x64\x85\x38\x2d\x05\x14\x0b\xbb\x54\x7d\x7e\x07\xe3\xc3\xcb\x43\xcd\x18\xc1\x6e\xec\x4d\x4c\x29\xef\xe1\xb1\x89\x7a\xf2\x07\x0d\x61\x15\x5d\xc0\x5f\x9d\x4b\x2e\x74\x26\xb9\xc0\x57\x9e\x39\xe7\x5e\x82\x48\xbb\xa1\x37\xf3\x0d\xe3\x99\x9a\xf6\xb0\xfb\xc2\xa9\x02\xcb\x6a\x32\x74\x4a\x2e\xd6\x63\x0f\xe7\x7f\x69\x01\x96\xfb\xa0\x68\xb1\xde\x0e\xc0\xc1\x31\x1c\xbd\xb4\xfc\x60\x64\xce\x4d\x90\x36\x9d\x88\xb8\x65\x05\xe3\xad\x24\x0a\x6d\x95\xe9\xa7\x93\x1a\xf5\xbf\x99\x0c\x68\xfe\x82\x84\x47\x7b\xf8\x35\x90\xce\xce\xd4\xe4\x99\xbf\x7a\xf5\x48\x0a\xbf\xe1\xaf\xfe\x7d\x0a\x2b\xd8\xfc\xc5\xde\xbf\x04\xe3\x3d\xac\xff\xc5\xde\x2e\x25\x7a\x7c\xf0\x47\x0b\x59\x63\x9d\x05\x7f\xf4\x9a\xd0\x59\xef\x60\xdc\x7b\x10\x04\x47\xff\x8b\xbd\xfd\x5f\x8d\xe7\x86\x54\x94\x39\x70\x42\x8c\x95\xa5\x0e\x9c\x14\x65\x4e\xec\xd8\x7e\x60\x7b\x9c\xef\x61\xf3\xd7\x09\x38\xfa\xb7\x11\xb7\x0f\x69\x14\x5e\xe8\x9f\x51\x78\xa1\x7f\x49\x0a\xc0\x60\xab\x74\x48\xc1\x79\x2c\xfc\xd6\x1f\x3a\xc5\x68\x0c\xb0\xfd\xc0\xde\x00\x06\x33\x80\xb1\x38\xf9\xc8\xfc\x75\x62\xd1\xc0\x08\x44\x46\xe2\x81\x3f\xd8\x1b\xb0\x31\xd7\x3c\x54\xff\x45\x3b\xa9\xbc\x33\x00\x64\x82\x4a\xb7\x87\xe1\x8f\xfd\x25\xed\x4f\xa3\x82\x82\xcd\x57\x53\x60\xf6\x8d\x3d\xe3\x47\xa2\x87\xcd\x5f\xfd\xdb\x9c\x15\xde\x5b\x01\xdd\xea\x54\x7a\xd8\x7e\xe0\xab\xab\xf6\xd5\x3c\x7b\x44\xa3\xf6\x1f\x53\xa9\x92\x98\xca\x95\x98\xfa\x62\xcc\xd9\xdf\x34\x96\x2b\xe0\x98\xa4\x7a\xa5\xd1\x08\xfb\xa5\xac\xbc\xd2\x0b\x88\x79\xd6\x29\xb3\xfa\xc7\x78\xfd\xdd\xd4\x0c\xe8\x3b\x3d\x9e\x18\x22\x85\x2d\x3a\x1e\x80\xbe\xcb\xe3\x89\x45\xd9\xd1\xf2\xcc\x01\x59\xf0\xbb\x3c\x22\x79\xc6\xa2\xc5\x07\x64\xa0\xef\xf2\x78\x14\x89\x16\x1e\x8d\x86\xfd\x5e\x2e\x72\x67\x0c\xe3\x94\xc6\x7a\x1b\x0e\x3b\xcb\x70\xc2\x42\xa1\x7f\x27\x24\x2c\x47\xd0\xa5\x62\xdf\x0d\x22\x4e\x29\x57\x9f\x02\x26\x23\xa2\xfc\x09\x8d\x67\x8e\xb7\x0a\xfc\xcd\x2e\xf2\xcd\xcd\xb1\x91\x15\x5c\xc0\xaf\x29\x8d\xc7\x14\xac\x6b\x64\x5f\xb4\x2e\xaf\xbc\x4b\xe8\xff\x7b\x49\x37\x49\xa4\x47\xd0\xbb\xbf\xe6\x19\xa5\xe4\x51\x4c\xfc\x13\x2d\xde\xdf\x5f\xf3\x12\x49\x5f\x13\xa9\x0e\x88\x9a\xc8\xde\xfd\xb5\xab\xf6\x3d\x5d\x5c\x66\x21\x57\xba\x0e\x01\x6d\x60\x2f\xac\xc6\x42\x20\xc9\xda\x90\xdd\x52\xab\xe5\x26\x65\xb7\x98\x50\xec\x80\xec\xe6\x7f\x16\xae\xf0\x59\xdd\x04\xea\x63\xb0\xa6\x3f\xc2\x83\x5a\x7b\x8c\x38\x51\x93\x8e\x03\xca\x03\xdf\x45\x0a\x6d\xae\x13\x86\xb7\x60\x7d\x84\x07\x0d\xd4\x9e\x8e\x3f\x8a\x3a\xf6\xf2\xad\xc1\xb3\x4a\x0d\x39\x3b\x94\xfa\x21\xeb\xe4\x2a\xb0\x06\xbd\x31\x1d\xd3\xf3\xf2\x2e\xa0\x69\xde\xfd\x46\xc2\x39\x93\x15\xfd\xd4\xf4\xb1\x1b\x52\x3e\x56\x93\x17\x6b\x0f\x1e\x18\x02\xbf\xdf\xcf\x32\x3f\xac\x7d\x7c\x99\xff\xd1\xbb\xbc\xb2\xf4\x9f\x37\x52\xd9\x38\x38\xe8\xda\xae\x00\xed\xb3\xbe\x70\xbf\xf7\x79\x78\xf1\xf9\xb3\xe8\x4e\x58\x40\x07\x13\xe2\x91\xbe\xe8\xca\x09\xc9\x27\x5b\xd1\xd9\x0b\xfb\x3c\x09\x43\x67\x2c\xcb\x1e\x3c\x68\x69\x50\x71\xb6\x6d\x83\x1e\x3f\x78\xd0\x0a\xfb\xb2\x3b\x85\x97\x15\xdc\x35\xe0\x72\x0f\xe9\x78\xfb\x3c\x6a\xb7\xbd\xf0\xf3\xe7\x3a\x38\x97\xdf\xf6\x48\xa9\x22\x39\x21\x59\xe1\x97\xe1\x87\xd5\x8f\x3d\x79\x75\x0d\x36\x41\xa2\xc8\x0e\xa5\x2f\x66\x1b\x44\xbf\x05\x1a\xe8\x1a\x52\x68\x89\xb9\x36\x32\x8e\x66\x8c\x37\xbe\x0e\x09\x6b\x6d\xde\x7c\xc1\xfd\x24\x8e\x29\xf7\x2f\xea\x4a\xdc\xc5\xc5\x36\x6b\xb0\x81\xb5\x53\x59\x19\xb1\x90\xce\x79\xf4\x9b\x12\x78\xce\x5b\x32\x4e\xf8\x09\x17\x67\xbc\x1b\xf1\x31\xbe\x67\x9d\x97\x80\x6f\x6f\x25\x76\xc5\x19\x8d\x37\x89\xa4\x2d\x17\x8f\xe3\xd9\xdf\xb8\x67\x3f\x58\x64\x3f\xff\x66\xd1\x79\xf6\x69\xbf\xce\x48\x6c\xbf\xe2\xf4\x4b\xa5\x5f\x63\x00\x54\x7d\x5d\xc0\x34\x9c\x0b\xdc\x41\x4e\x99\x05\x9b\x8a\x53\xf7\x15\x3d\x06\x78\x72\xca\x2a\xf0\x13\x35\x0d\x21\x53\x7f\x54\x72\x7d\x29\x21\xd3\x97\xb2\x92\x37\x24\xca\xd6\x2f\x27\xf6\x23\x92\xe9\xc7\x9a\xfd\xf2\x5d\xd2\xe9\xd0\xe5\x4d\xdc\x30\x21\xca\xb2\x1d\x93\x70\x69\x0e\x3e\x4e\xe1\x2f\xd2\x2c\xc1\x5d\xad\xc0\xb6\xec\x8f\x73\x3b\x02\x5f\x04\xb4\xda\x4b\xe6\xca\xd0\x73\x6a\xbf\x82\xd0\x14\x18\x32\x5e\x85\x9f\xa6\xbd\x8b\xc6\xe9\x17\x75\x9f\x63\x36\x72\xf3\xc1\x46\xee\x53\x9e\xba\x6c\x5d\x9b\xc3\x40\x60\xbf\x88\x9b\x10\x79\x42\x95\x3f\x81\x96\x21\xec\x6b\xa5\xed\xf3\xd0\x0d\xfe\x3c\x94\xe7\x29\x02\x4f\xa1\xc8\x79\x58\x9d\x82\x50\xb8\xe6\xd4\xb9\x9b\x8c\xa9\x6b\x37\x0d\x12\xad\x4b\xab\x73\x55\x29\x3d\x8d\x1e\xa5\xf4\x66\xda\x98\x46\x8f\x2a\x50\x51\x30\x82\xbc\x28\x18\x55\xf3\x22\xd7\x6a\x14\xa9\x73\x03\x16\x55\x1b\x3a\x4d\x71\x71\x2a\x03\x03\x76\x2a\x83\x0a\x58\x20\x7c\x37\x41\xc2\x37\x60\x81\xf0\x01\xcc\x3a\xcd\x41\x9c\x9e\x59\x0b\xe5\x01\x3c\x2c\xe9\x6a\xaa\x1d\x90\x11\x6d\xa9\xf6\x75\xd8\xa9\x5b\xff\xaf\x59\x48\x77\x7c\xc1\xfb\x6a\xf6\x93\xb4\x22\x53\x55\x73\xdf\xd5\x38\x3e\x43\xff\x5a\x5c\x68\xa1\x7f\x25\xb7\x11\x32\xee\xab\x8a\x2d\xa6\xcf\x8b\xd6\x08\xd0\x73\x38\xb3\x09\x01\xad\x68\xd0\x09\x66\x46\x6a\xaa\xe3\xca\x9a\x01\x7b\xbc\x4f\x3f\xac\x7d\xcc\x3b\x93\xcc\x1e\x65\xf3\xf6\x83\x07\x2d\xde\xc7\x5b\x02\xbd\x7b\xf7\xee\x1d\xfa\xe3\x8f\x3f\xfe\xf0\xd0\xdb\xb7\xbd\xe9\x14\xb7\xbd\xa9\xd0\x24\xd1\x4d\x94\xdf\x52\x6d\x88\x56\x1c\xb6\xda\x5d\xd3\xa1\x16\xbf\x16\x9d\xa5\xa3\xd9\x22\x8a\x7e\x29\x22\xcb\x50\x16\xc5\xcc\xbf\x06\xce\x8a\x9e\x37\x75\x5f\x5a\xaa\xfd\x72\xb5\xdf\xef\x67\xfe\xb8\xda\x2f\xf1\x7f\xac\xe2\x1e\xfe\x0f\xfc\x50\xad\xac\xad\xae\xf6\xf4\xcf\x1b\xa1\xe4\x40\x77\xf6\x4b\xe1\x64\x4c\x39\x8d\x89\xa2\x1d\x16\x7c\xad\xb7\xf0\xc5\xae\xe6\xdb\x71\x0e\x35\x3f\xac\x7e\x7c\x88\x3b\xf8\xa1\x26\xd0\xf9\x2f\xcb\xd3\xa1\xa8\xc5\x79\xc8\xf8\x6e\x1a\xdc\x37\xd7\x39\x5e\xbc\xba\xf1\x3c\xa1\x6e\x5c\xaf\x70\x6c\xc2\xd4\xdd\x54\x62\xcc\x42\x15\x5d\x02\x57\x74\x0e\xb2\x98\xec\x90\x38\x26\x17\x8b\x63\x2c\x2d\xf1\x7d\xa1\x8d\xc9\x0d\x33\xce\x05\xeb\xb4\xf0\xf3\xd1\x47\xcd\xe3\xde\x25\xd0\x67\x4a\xdc\x45\xf4\xcd\x1b\xaa\xd9\xe6\xbf\x35\x1f\x0d\xa9\xfa\xa0\x3c\xfe\xb1\x4f\x53\x97\x57\xfd\xbe\xde\x07\xe6\xb9\x49\xc9\x0d\x85\x8b\xaf\xe6\x0d\x75\xce\x40\xb2\x61\xdc\x57\x8b\xef\x06\x4c\x76\x04\xa7\x1d\x31\x5a\x74\x9b\x67\xa3\x56\xab\x12\x78\xff\xf3\xe7\xfb\x39\x37\xdb\x10\x87\xdf\x6a\x6a\xfa\xeb\x05\xc9\x60\x24\xe2\x96\x71\x2c\xbf\xf6\x0b\xff\xa7\x83\xfa\x85\x3f\x7c\xd8\x66\xa3\x16\xfd\xc0\x3f\xf6\xfb\xca\xbe\x21\xbc\xbf\x6a\xc5\xf5\xfb\x6b\xd7\x11\x0c\x98\xdc\xe7\x74\x7f\xf4\xa5\x24\x82\x70\x89\x6d\x34\xfc\xde\xb6\xd1\x25\xaa\x9b\xbb\xde\xc3\x65\xb6\xd1\xf0\xbb\xdb\x46\xc3\x25\xb6\xd1\x70\xee\x36\xca\x85\xea\x2c\x73\xc8\x33\xf0\xdf\xdf\x41\x8f\x0b\xb5\xfd\xd7\xc2\x35\x02\xf4\x7c\xcc\x2d\x85\xb6\xef\x0f\x61\xcb\xa0\x6b\x0e\xb2\x44\xed\xc5\x55\x3d\xae\x44\xfc\x9d\xa1\x0a\xbc\x32\x2c\x56\x9d\x88\xe7\x20\x2a\xa2\xb1\x3e\x60\x2e\xaa\xc2\x76\xe0\x77\x11\x61\x33\x87\x19\x26\x31\x09\xe1\x05\x68\x75\xa0\x8c\x8f\x42\xea\x2b\x11\xaf\x84\x6c\x58\x53\xe4\x9b\x5b\x25\xb8\x2e\xc5\x84\x07\x62\x5a\x3a\xa2\x7f\x1b\xf7\xff\x0d\xb2\x5a\x75\x62\x72\xbe\xf9\xe7\xbb\xd7\x49\x07\x4a\x49\xd0\x89\x88\x9a\xdc\x11\xd1\xb3\x20\x43\x9b\x12\x63\x88\xdd\xc8\x17\xf0\x48\xee\x06\x25\x19\x1f\x27\x21\x89\x97\xa2\xc2\x7c\xa1\x3b\x43\x87\x8a\xc8\x93\x45\x39\x06\xc0\x7e\x6f\xec\x42\xb1\x29\xed\x90\xb1\x98\xb9\xce\x82\x3a\x0b\xac\xf4\x2c\xe1\x88\x27\x8f\xdf\xae\xae\x77\x63\x2c\xe0\xe6\xcb\x79\x22\xc2\x3b\xc6\x39\x0e\x82\xfa\xf4\xf9\xcc\xe8\x5c\x71\xdb\xe3\xd7\x39\x16\xd8\x36\xfa\x7c\x76\xac\xb1\x22\xc5\xf3\xb9\x21\x99\x1c\x6a\xc0\xe3\x15\xe3\xcc\xbe\xb0\xbc\x55\x75\xb3\x6a\x3f\x78\xd0\x52\x7d\xf0\x3b\x5a\xaf\x88\xd6\x39\x2d\xd5\x95\xc9\xd0\x70\xb9\xd6\xaa\xb7\xd6\x7e\xc8\x4b\x09\xed\xae\x12\xef\xa3\xc8\xdd\x2a\x5e\x07\x8b\x7a\x98\x3b\x76\x94\x5f\xea\x84\x75\xbe\x8c\x94\x72\xfe\xdd\x89\x29\xe7\x4b\xc8\x29\xe7\x8d\x82\x8a\x25\x35\x63\x54\xd5\x68\xa7\x51\x6f\x89\x91\x2b\xdb\x19\x11\xcd\x5b\x2f\x96\x36\x51\x02\x03\x0d\x4f\xde\xbb\x31\xb3\xcd\xd9\x0f\x6d\x1c\x1c\x3c\x78\xd0\xca\x79\x1f\x01\xa3\x0d\x4e\xa6\xd4\x93\xa5\x44\x3b\x14\x67\x69\x04\x51\xaf\xc0\x72\x1e\x39\x23\x67\x2f\x1b\x65\xaf\xe8\x6c\x48\x78\xb2\x60\xff\x5c\x6b\x2f\x54\xc6\x6f\xea\xad\x60\x8e\x37\xbb\x3a\x57\x21\xf3\x8c\x5d\x32\x46\x38\x0e\xc5\x90\x84\xdb\xa7\x24\xec\xe7\xc8\xe1\x2a\xeb\x7d\x97\xfc\x49\xce\x07\x54\x25\x51\xeb\xd2\x8f\x85\x94\x5b\x62\x4a\x18\xd7\x34\xe4\x0b\x0e\xae\x28\x62\xd9\xbb\xc4\x8a\x9e\x2b\x24\xfd\x98\x45\x0a\xf7\x68\xff\x85\x3e\x7f\x5a\x87\x4a\x19\x22\xd3\x1e\xde\xa3\xdd\x98\x8e\x99\x54\x34\xce\xb9\x8d\xef\xe9\x9a\xb1\x27\xda\xde\x56\x2c\xa2\xbf\x05\xa7\x5d\x92\x28\xb1\xc5\xa4\x2f\x4e\x69\xdc\xbf\xa6\x7a\x26\x45\x6c\xb3\x05\x8a\x9d\xce\x02\xda\x73\xd3\x29\xae\xe6\x19\xa3\x14\x66\x6f\x18\x8b\x33\x39\x2b\xf8\x41\x91\x29\x53\xeb\xe1\xaf\x85\xc1\xd1\x32\xf6\x70\x5a\x01\xb6\x4e\xff\x7a\x2e\xc5\x0c\xc8\x40\xfb\x82\xab\x58\x84\x21\x00\x2e\x5a\x24\x73\xf5\x33\xa3\xc4\x0d\xd1\xdc\xc8\xa6\x2d\x9a\xd3\x96\xc9\x08\x1e\xf2\x4a\x2a\x2b\x2b\x48\x5d\xcd\xe3\xde\x05\x94\x2f\xe0\x26\x67\x1e\xd2\x73\x55\x94\x49\xb2\x11\xeb\x0b\x97\xc9\xd0\xbe\x60\x11\x65\x5d\xba\x2c\x5e\xc2\xce\xe2\xe2\x05\xc0\x1d\xdd\x1c\xf0\x2f\x4c\x09\xb9\xa6\x2d\x2d\x34\x2d\xc1\xe5\xe9\x41\x11\xc6\x69\xdc\x09\xe8\x30\x19\x77\x48\x40\x22\x55\x6f\x45\x1b\x53\x29\xc2\x53\x1a\xaf\xb8\x0f\xb9\x02\x0e\xbf\x99\xdf\x58\xcb\x97\x3a\x00\x64\x58\xa9\xef\x7c\x36\xc4\xd4\xbd\x62\xde\x0e\xf1\xf3\xe7\xec\xd7\xea\xc7\x32\x8f\xad\xab\xd2\x72\xdc\x6c\xaf\x2a\x11\x7a\x73\x11\x08\x71\x26\xcd\xbb\xa1\xfc\xa4\x39\xba\x59\x6e\xba\x32\xb1\x61\xca\x62\x78\x6f\xfb\xc5\x9d\x5d\x19\x54\x57\x1b\x2e\xe0\xf8\x6a\xee\xb3\xa5\xba\x61\x64\xa7\xaf\x79\x87\xb3\x39\xa5\xef\xa2\x9c\xb9\x20\x12\x02\x52\x8c\x11\xeb\x46\xaf\xd3\x57\xa4\x96\x27\x3a\x29\x81\x15\x32\xbf\x60\x70\xe7\xc2\x9c\x9b\x0e\xe6\x39\x4c\x3a\xc8\x79\x47\xb0\x9a\xe1\x4a\x36\x8d\x42\xda\x31\x3e\x85\x97\x35\x5c\xce\x15\xb6\x60\x49\xec\x1c\x41\x56\x21\x0a\xad\x1b\x4c\xa6\x1b\xe8\x52\xe0\x9d\x6c\xc7\x58\xaa\x58\x0c\x4f\x14\x4d\x07\xab\x7e\x92\x3d\xe9\xb1\xdb\x9a\x32\x52\x9c\xb2\x02\x92\x73\xeb\x94\xba\x00\x89\x24\x3b\xe2\x7f\xa8\x29\x63\x9c\x09\x92\x6e\x2c\x84\x7a\x7f\xb8\x9b\xd3\x07\xd8\x94\xcf\x9f\xb3\xa4\x21\x91\xf4\xfd\xe1\x6e\xee\xb4\x10\x0a\x12\xb4\x08\x78\x12\x15\x99\x70\x4f\x21\x41\x96\x13\x58\x3e\xa1\xc0\x46\xc8\x7c\x92\x3a\xa5\x5c\x75\x86\xc9\x0d\x84\x19\xa8\xe2\x55\x22\x73\xd2\x5d\x9a\xd4\x24\x99\x2c\x5e\x26\x27\x01\x2d\x5a\x08\x9c\x6e\xcf\x83\xff\xc2\xd2\x46\xd6\xf6\xed\x0a\x1b\x66\x8a\x3a\xb9\xda\x3a\xe6\x5c\xb5\x38\x2b\x98\xa1\xbe\x6a\x5f\xea\x41\xcc\xdc\xe9\xd9\xa8\x75\x7f\xed\x7e\xbf\xf0\xfe\x45\xb7\xba\x91\xf5\xe8\x0d\x74\xc8\xd4\xc5\x75\x01\x9c\x38\xa5\x0e\xbe\xdf\x57\x17\x11\x15\x23\x74\xc6\x78\x20\xce\xda\xbc\x6f\x3e\xee\xd1\x50\x52\xd4\x00\x6b\x46\xd8\xe6\x7d\xf3\x01\xb0\x97\x45\xd8\xbe\x83\x95\x34\x1c\xb9\x08\xe5\xbc\xaf\x7f\x5d\x01\x47\xf6\xe4\xfc\x2e\xdf\x13\x7d\x6c\x35\xe9\x59\x7d\x2f\x9d\x8b\x4a\x6b\x55\x6b\x04\xb6\xd1\x45\x2b\xa7\xee\x06\x6a\x39\x88\xe9\x88\x9d\xb7\x3d\xfe\x41\x7c\xfc\xfc\xb9\xa5\xff\xf4\xa9\xa7\x25\x23\x11\x51\xde\xba\x3c\x63\x61\xb8\x45\xa5\x8a\xc5\x45\xaf\x1c\xe2\xcc\x78\xc4\xee\xea\x69\x35\x5e\x9c\xbd\x9c\x67\x6c\xe3\xfa\x05\xe9\x0a\xaf\xae\xda\xed\xab\x1b\x92\x6e\xa3\x92\xd0\x91\x6e\x33\x89\xe5\xe8\x96\x2f\xb7\x75\x85\x62\x3c\xbe\xc9\x31\xd5\x95\x4f\x57\xb2\x4d\x68\x62\x30\x8b\xc1\xe7\x98\x4b\x63\x81\x2f\xcc\x28\x5c\xbb\xb7\x77\x3e\x05\x94\x75\xcc\x20\xc5\x35\x50\x9e\x47\xa3\x09\xc7\x94\x7e\xcc\x3a\x09\xd6\x83\x7e\x61\xec\x95\xc7\x7a\x7d\xac\xa5\x88\xbf\x2e\x85\x66\x82\x91\xa3\x20\x97\xd2\x48\x73\x8b\x16\xc9\xe6\x63\xb1\x12\x6e\x03\x9c\x01\xfd\x85\xe7\x25\x6d\x79\xc9\xdd\xaf\x6a\x96\xc6\xe0\xd4\xee\xd3\xce\xb2\x82\x7f\x06\xdf\x01\x37\x17\xa9\x08\xfa\x85\x4f\xd4\xcb\x88\xfc\x0d\x64\xd9\x3c\x62\xf7\x0a\xf5\x2b\x1f\x5a\xb3\x66\x73\x23\xca\xb7\x8a\xdd\x8f\x6c\xe3\xa4\xdd\x50\x88\x93\x24\x7a\xe9\x3e\x52\x66\xd1\xcb\xea\x73\xb1\x67\xc6\x54\xed\x9f\x71\x1a\xb7\x68\x7b\x16\xf4\x22\x67\xe4\x66\xe4\x35\x1c\x9c\xbe\x02\xfe\x9a\x4e\x13\x8b\x9c\xfa\x0b\x21\x64\xbe\xce\xcd\xf8\x3b\xdd\x64\xd7\x07\x3f\xb5\xad\x79\x11\x62\x98\xcc\x7b\xe0\x4e\xfd\x6f\xdf\x5f\x2d\xe5\xa4\x5e\xb8\xef\xaf\x95\x72\xc0\xd7\x76\x25\x75\x73\x63\x60\x12\xb7\x12\x12\xea\x0c\xf8\x35\x27\x8a\xc8\xbd\x72\x20\x90\x5c\x9c\x58\x2d\x89\x66\x01\xe8\xeb\xbb\x8d\xf3\x91\xe8\xcd\xb8\xbb\x24\x07\x87\xdb\xfd\x7e\x9f\x76\xf3\x45\xbb\xae\xac\x8b\xe8\x5c\xad\xfd\xd7\xd4\xed\xf8\xf2\xb5\xbb\xb2\xcd\xb5\x6b\xf4\x5d\xa7\x66\x5d\xae\xb9\xd6\xcd\x8d\xc1\x22\x95\x96\xea\xdc\xdc\x18\xb4\xaf\xdb\x95\x4a\x10\x97\x7c\xe9\x4d\xf3\xa8\xb1\x7d\xaf\x6a\xa5\x9b\x33\xd2\x35\x3f\xd2\x68\x5c\xf9\xb1\x39\x2a\x82\x48\x53\xbd\x16\xed\xff\x6b\xb0\xbf\xd7\x85\xb7\x3b\xad\xd2\xd4\x65\xa0\xb4\x4b\xc2\x50\x9c\xbd\x16\xf1\x14\x90\x53\x09\x18\x35\x6b\xc5\x9a\x18\xc0\x5f\x3f\x34\x5c\x71\xf5\x42\x2f\xf6\xf5\x01\x84\x9a\xd0\x52\xc5\xfb\x42\xda\xee\x02\x44\x0b\x07\x4c\x46\x42\xd2\x4a\xf8\x92\x14\x82\x97\x2f\xe8\x45\xfb\xf3\xe7\xd2\xed\x63\xbb\xab\x62\xa6\x05\xda\x16\x86\x48\x27\xb8\x7d\xe5\x41\xe9\x1d\x1e\x25\xea\x35\x04\x3f\xa1\x1e\xaf\xe9\x85\xd0\x28\x94\x13\x71\xc6\xbb\x43\xd9\xb5\xb8\xcb\xb3\xb8\x62\x09\x5e\xd3\x92\x6b\x6b\xcb\x8c\xa4\x5a\xa8\x66\xb0\xb6\xc8\x5b\x16\xcc\x84\x9f\xb0\x20\x03\x06\x3f\x64\xf3\xa1\x9b\xf0\x58\x69\x7c\x9f\x0f\x26\xe2\x6c\x1e\x5e\x1a\xd0\xc2\x21\x60\x55\xa1\x26\x7e\x5d\x14\x97\xea\x32\x48\x69\xae\x4a\x0f\x73\xe1\x9a\x02\x3a\xb3\x5b\x13\x80\x98\x5d\xdb\x7c\x5b\x32\xbb\xf2\x8c\xe7\xeb\xaf\x17\x12\xbe\xb8\xe2\xa0\xf5\x8b\x41\xe2\xfb\x54\x4a\xb8\x02\xd7\xbc\xc5\x29\x84\xba\x91\xf1\xe1\xd6\xc2\x06\xee\x3d\xdc\x4e\x52\x0f\x4b\x53\x40\x53\x85\xc9\xd9\xe1\x23\xb1\x78\x71\xc6\x47\x22\x2b\xfb\x3b\x89\xf9\xe2\x65\xcf\x48\xcc\xb3\xb2\x10\xcd\x68\xf1\xc2\x36\xe8\x51\x2e\x26\xd7\xff\x52\x04\x2c\xbe\x33\xb8\x38\x06\xdf\x84\x3c\x17\xe8\xa5\x08\x68\x28\x57\xf2\xbe\xd0\x1b\xce\x58\xee\x5a\x37\x97\x44\x94\x2a\x5f\x5a\xde\xe6\xbd\x4a\xd5\xed\x8e\x7b\xa6\xbe\x13\xf4\x5a\x39\x83\x9b\x76\xcb\xa9\xf2\xda\x5e\x44\xc6\x74\x46\x36\xd4\x04\x5e\x04\x9b\x20\x46\x2c\x9c\x55\x81\xce\x06\x71\xbf\x09\xe0\x4f\x31\x6c\xcc\x13\xf1\x78\x46\xd5\xbe\x0d\xde\x52\xcc\x6f\x7b\x31\x3d\x85\x30\xcd\xa5\xf4\xab\xb9\x36\x7d\x76\x72\x87\xc6\xf1\xf7\x1d\x9e\xd7\xd9\x78\x81\xeb\xe0\x19\xf9\x89\x89\xfa\xd1\x88\x56\xc1\x15\xe5\x0a\xe2\x6a\xcc\xa2\x9a\x99\x00\x8a\xa9\xb0\x39\x17\xe2\xbb\x34\x93\x9c\x4f\xe3\x48\xcd\xea\x7e\xa5\xf3\x1c\x5e\x9d\x63\xef\xd2\x26\xfd\x06\x48\xd5\x38\x8d\xc9\xd9\xab\x6a\x6b\x36\x6e\xef\xb8\x92\xac\x31\x1c\x73\x12\x0e\x44\x12\xfb\x95\x01\x0c\x85\x08\x29\xe1\xe5\x76\xee\xaf\x5d\x69\x42\xb7\xa1\x0d\x1b\x3b\xee\xa2\x14\x7e\x75\x82\xf6\x6d\xd0\x83\x0e\x44\xed\xa9\xe8\xf2\xbe\x33\xf2\x76\xa3\x99\x01\x72\x36\x11\xb3\x73\xe7\x56\xfe\x1b\xa3\x67\x4d\xb3\xdf\xf6\x66\xce\xa2\xa4\xa1\x09\x27\xd3\x54\x7c\xe9\x79\xfb\x8e\x27\x6b\x1e\x2f\x72\x43\xbc\xad\x35\xe1\xb9\x2d\x4f\x56\x72\x34\xdb\xab\xa4\x2e\x3c\x17\x81\xf0\x3b\x12\xbc\xfc\x76\x62\x2a\x93\xfa\xd7\xa0\x77\x7a\x52\x32\xdc\x34\x66\xcc\x28\x33\x08\x93\x2a\xb7\x54\x64\x5c\xc5\x73\x3d\xff\x6e\x7b\x4c\xd1\x69\x4d\x03\x3a\xb9\x66\x2b\xb1\xa4\x53\x9f\x5a\x53\x0d\xa4\xd7\x77\xd2\x45\x65\x2b\x67\x58\x5b\xe2\xba\xca\xea\x97\xf0\x52\xd4\x02\x58\xeb\x10\x1b\x6e\xee\xbb\xa3\x96\xc5\x97\xf0\xcd\x85\x4c\x90\x26\x66\x0a\x0c\x73\x44\x96\x5b\xd8\x7b\x49\x3e\x2e\x60\xbd\x74\xd1\xcc\x8c\x5c\x61\xe3\xef\xbd\x1c\x47\x3a\x5f\x75\x4d\x60\x6e\x8c\x3d\xd5\xa0\x95\xb5\x8e\xe1\x72\x6a\xbf\x7c\x55\xd6\x3d\x1c\x52\xdd\x72\x60\xc3\xae\x8b\x6b\x48\xfb\x78\x23\x08\x68\x90\xf7\x97\x55\x07\x0f\x81\x61\x68\x1f\xeb\x6d\x6f\x3e\xb4\x0d\x92\x48\xfb\xd8\x7c\xcd\x83\x77\xb1\x14\x69\xdf\x3a\xa3\x9f\x5b\x22\x8d\x2b\xa7\x07\xe0\xa2\xc4\xcd\x2b\xe3\x22\xba\xe9\x32\xf6\x7b\xfe\xb8\x6d\x14\x47\xda\xc7\xee\x7b\x5e\x99\x6a\xb8\x47\xda\xc7\x69\x22\x72\xa9\x0b\x57\x63\x22\x44\x16\xea\x80\xa4\xf9\x7d\xb7\x61\xeb\xa0\xef\xe6\x7b\xe1\x46\x0b\xed\xa5\x6e\xd2\xe8\x55\x46\xcb\x26\xee\xc1\xdd\xa2\x65\x5f\xf7\xa9\x33\x8e\xc9\x45\xe7\xd9\xea\xea\xa2\x44\x6d\x4a\x0d\x43\x32\x1f\xa7\x19\x65\xbb\xa6\x28\xe5\x8b\xb4\x95\x23\x71\x53\x32\xa6\x41\xe7\xe9\xfc\x72\x79\x42\x5f\x6e\x74\x79\x72\x5f\xb2\xb3\x79\xaa\x5f\xaa\xb7\x55\xd2\x5f\x9c\xba\x97\x9d\xbb\x8c\xb8\xaf\xd7\xc5\x3a\xbc\xe4\xe8\x7c\xf9\xad\xfc\xdf\xe2\xf0\xb4\xc0\x66\x7d\xfd\xc3\xd3\xcc\x0d\xd6\xb5\x0c\x01\x47\x1a\x4f\x56\x0e\xca\x05\x45\x99\x0b\x78\x28\x42\xba\x58\x95\x1a\x72\x5e\xb5\x4b\x53\x45\x23\x29\xc0\xbc\x37\xbd\x45\xaf\x21\x9a\xaa\x05\xef\x6d\x11\x89\xec\x8b\x0a\x91\xb8\x99\x52\x73\x14\x30\xb5\xf9\x56\x63\x57\x9b\x17\x0a\xfb\xfe\xa0\x09\x20\x25\xcf\xda\xdc\x9c\xac\x59\x9b\x9f\xc9\x81\xb5\xd9\xee\x3c\x52\x9f\x99\x3b\x07\xa8\x5a\x4a\x89\xd2\x48\xca\x65\x98\x66\xfd\x92\x8b\x02\xbc\x78\x89\x30\x8d\xa6\xbb\x50\x91\xb5\xab\xf4\xa4\x42\x2b\x23\xcf\xfa\x5e\x38\xcc\xd4\x8e\xdf\x39\xbd\x8e\x03\x1a\x2f\xde\xdb\x71\x2c\x92\x68\x46\xad\x39\x91\x58\x35\x9c\xcf\x0b\xe9\xf9\x03\x7f\x2e\xa3\xd8\x70\xab\xdd\x7f\xf1\xe1\xe3\x55\xdb\x93\xfa\x40\x57\x96\x41\x34\xf1\x16\x64\x0f\xe7\xe4\x35\x25\xf3\x29\x39\x81\xb3\x60\x4e\xda\x80\x42\xed\xf6\x55\xf1\x70\x57\x87\xcb\x3a\xe5\x1e\x93\x26\xf0\x71\xb9\x2b\xe9\x5c\xd6\xc8\x42\xf5\x62\x90\x7b\xca\x91\x66\x66\x55\x80\xc9\x40\x1a\x6b\xb9\x0b\x2d\x42\xdb\x10\x6c\xf9\x6b\x36\xad\x1b\xcc\x53\x6a\xfd\xb9\x66\xf9\x1e\x54\x64\xc0\x5c\x0f\xac\x00\x58\xc1\x40\xcf\xed\xd9\xe5\x0c\xe8\xd4\xbd\x4a\x21\x40\x56\x4d\x99\x34\x18\x75\xb5\x48\x2a\x84\xd5\x14\x2b\x84\xac\xb6\xf2\x03\xc6\x7a\xe1\x07\xc1\x21\xf5\x29\xaf\x12\x85\x5d\x12\x35\x58\x31\x1e\x62\x5b\xed\xae\x4c\x86\x2a\x26\xbe\x6a\x3d\xf3\x70\x40\x2e\x72\xb3\x63\x41\x72\xf8\xb3\xb5\xb5\xdb\x5d\x26\x07\x64\x4a\xf7\xe3\x8d\x91\x02\x73\xb0\xab\xb6\x97\x40\xec\xa7\xaf\xd2\x11\xbb\xa2\xeb\x3a\xf2\xe0\xc1\xec\x6e\xbf\x82\xe0\xef\xe6\xa6\x7a\xae\x43\x79\xbb\xc3\x8e\x44\x18\xd4\xbf\x14\xfc\xde\xf7\xd7\xd9\x5b\xe0\x9c\x2d\x0e\x76\x48\xa7\xa4\x98\xcf\xc2\xd7\xaf\xb7\xe1\x84\xec\x84\x36\xef\xa4\xcc\x6f\xdc\xe0\x4b\x75\xc1\x4a\x09\xa8\xf4\x97\x00\x0f\xf5\x4a\x6b\xc4\x40\x5d\x09\x5f\x24\x5c\x6d\xd6\x6f\x2c\x33\xb6\x36\x53\xcc\xdc\x76\x2d\xb1\xe1\x87\xa1\x38\xdb\x05\xfc\x54\x19\xe2\x09\x95\x35\x3b\xd3\xfd\xcc\xf2\x2a\xcf\xfa\x34\x70\xbb\xfd\xe0\x41\xc9\xbb\x62\x15\xe4\x0b\x6d\x84\x10\x6d\x5b\x1e\x52\x8d\x59\xbd\x21\xce\x61\xde\x99\x19\x58\x4a\x83\xd8\xa3\xdd\x81\xfb\xd1\x3d\x30\xe2\x13\x0d\xda\x57\xb6\xee\x83\x18\x62\x1c\xde\xbc\x62\xa8\x26\xab\x56\x9f\xf1\xfc\x1b\xd7\x0a\xb5\xb4\xaf\x3c\x39\x21\x31\x0d\x7e\x67\x6a\x52\x95\x56\x96\x93\x6e\x16\x66\x6e\x20\x55\x75\xa6\xd4\x10\xd9\x77\x7b\x9a\xcc\x09\x87\xdf\x48\x6d\x3b\x4a\xc2\x10\x00\xca\x6b\x23\xad\x1b\x7b\xd8\xd5\x52\xb3\x56\x30\xee\xfa\x82\xfb\x24\xbf\x75\x65\x45\xdb\x1e\x46\xb8\x5d\x85\x48\x2b\x6c\x97\x77\xb4\x59\x67\x46\xc0\xd6\x77\x3c\xdb\x33\x27\x22\x4a\xe2\x48\xc8\x5b\xbb\xdb\xf6\xcc\xda\x28\xdf\x2e\x35\xf3\xe5\x85\x67\x01\xb6\x97\x79\x62\xc5\x5c\xf1\xe1\xf6\x66\x81\x37\xcf\x42\xed\xe6\x3b\x53\xb4\x00\x85\xd7\xed\x9d\xd5\xf4\x06\xd9\x5b\xf5\x86\xe3\x7a\x65\x30\xb4\x56\xb7\x01\xd5\x87\xda\xc0\x43\xe2\x9f\xe8\x45\xc0\x83\x8e\xe9\x28\xc2\x0f\xf3\xcc\x5b\xd7\xd6\x7e\x88\x7f\xc1\x7a\x77\x1a\x8e\x47\x5f\xb9\x59\x34\xb7\x53\x0b\x13\x99\x88\xc7\x84\xb3\xbf\x6b\x3c\x07\xdd\xb1\x15\x3f\xdb\x4e\xc7\x86\x5d\x6f\x36\xd5\x99\x12\x16\xce\xd0\xf8\x81\x8b\xa2\x19\x76\x46\x2e\x4c\x16\x0f\x22\xc1\x2a\xf7\xd2\xb9\xcb\x39\x2d\x73\x6d\x70\xc1\x2f\xa6\x22\x91\x1b\x60\x0b\xb9\x8c\x6d\xce\x94\x9c\x1f\x55\xaf\xaa\x1b\x98\xc9\xa3\xab\xb6\xa7\x26\xf4\x1b\xd8\xe9\x44\x64\x4c\xf3\xee\x18\xee\x30\xdd\x44\x55\xb2\xd0\xe4\xa2\x48\x25\x31\xa2\x3c\x60\xbc\x7a\x2d\xef\x4f\x08\x1f\xd3\x83\xda\xdc\x9c\x5e\xcb\x80\x6d\x9c\x11\xa6\x18\x1f\x1f\x9a\x60\xd0\x73\xa0\xd3\xcb\x83\x46\x38\x2d\x98\xbc\x25\x72\x73\xb1\x3e\x14\xa0\x17\xed\x4a\xa1\xd0\xc2\x3d\xda\xa3\x67\x07\x64\x7e\x97\x96\x23\x29\x3d\x2f\x77\x7a\xc7\xcb\xec\x03\x6a\xf7\xad\xe2\xa5\xc5\xed\x9f\xa9\x73\x36\x82\xa5\xfd\xcf\xd9\x08\x16\x92\xab\x36\x82\x8b\xaa\x11\x6f\x72\x9c\x98\x3b\xcb\x76\xa1\xfd\x9b\xb0\x0d\x71\xc6\x8d\x9a\xba\x9e\x03\xff\x60\x1e\xd7\xe5\x06\x77\x9a\x3e\x16\xb8\x9e\x9c\x63\x1c\x7a\x1b\xc6\xcb\x21\x3d\xa5\x15\xb1\xa6\x59\x59\x26\xe9\x5f\x09\xe5\x55\x6b\xe1\x86\x12\xab\xeb\x8f\xaf\xda\x9e\xc9\xac\xa1\x9c\x8c\x2b\x69\xa6\x00\xaf\x46\x16\x36\x76\x06\xcb\xf5\x19\xd8\xb9\x81\x55\x76\xbd\x1d\x75\x5e\x54\xac\x59\xc4\x52\x11\x95\x2c\xd1\xff\x98\x86\x44\xb1\xd3\x1b\x18\xaf\x2b\x32\xde\xab\x53\x07\xc0\x94\xd6\x9d\xff\x27\xeb\x58\xcb\x7b\xc2\xdf\xe1\x41\x9d\x0e\xbd\xa9\x20\x5a\x5b\xfd\xcf\xbc\x46\x00\xc0\xda\x9d\xb5\x76\xbe\xb6\x4d\x59\x55\x12\xa6\x99\x33\x6f\x4d\x32\xa8\xd4\x2f\xf2\x94\xc4\x63\xc6\x3b\x21\x1d\xa9\x4e\xaa\xb5\x80\x4b\x80\x09\x91\x87\x29\xb1\x94\xdb\x4b\xc9\xa8\x6e\x10\x25\xed\x3e\x80\xb5\x5f\xac\x5e\x2d\x7f\x5e\x67\x4e\x74\x79\x2f\x69\x6c\x99\x62\x16\xbb\x0c\xe3\x7e\xbf\x9f\x6f\xcc\xcd\x33\x6e\x3f\x78\x90\xa5\x9b\xc9\x35\xaf\x60\x1f\x3c\xc8\xa1\xd7\x10\x12\x64\xd4\x6a\xfb\xba\x86\x53\x0e\x14\x51\xb4\x6b\x5b\xdf\xa3\x67\x9f\x3f\x5f\xb3\x8a\xf7\x3c\xa0\xb1\x61\xd2\xed\xab\x6c\x6c\x26\xe5\x90\x92\xe0\xa2\xb5\xe4\xd0\xae\xdb\xfc\xd5\xe2\xcc\x9d\xdd\xed\xa3\xe6\x6c\xc6\x3d\x67\x5d\xdf\x82\x11\xea\x72\x6c\xfa\xf9\xf3\xab\xb6\x17\xcd\x3a\xbe\x2e\xbd\x40\x40\xf5\x5c\x59\x9f\x59\xcf\x6b\xd5\x93\x05\x7a\xc9\xc1\xb6\xcd\xad\xb4\xb3\xe8\x5e\xb2\xd6\xfb\xcd\xb5\x2e\x4e\x6f\x4e\xdd\xdf\x31\x57\x75\x9d\x88\xc4\x8a\xf9\x2c\x22\x77\xfc\x55\xdc\x1c\x52\x9b\xad\xd4\xb8\x05\x9d\xf5\xec\xd7\x23\x73\x08\xbd\x70\xff\xb7\xd8\xae\xfa\x3d\xe9\xc8\x6b\x9e\x7f\xde\x39\xfa\xf9\x0a\x0f\xe4\x02\x6a\x7c\x78\xcf\x7a\x78\xc9\x7c\xc1\x5f\x8b\x19\x5a\x33\x00\x60\x33\x5a\x89\xa9\x62\xf1\xac\x93\xce\x84\xc8\x9d\xa9\x3e\xb2\x95\x29\xc7\xb5\x8d\x3d\xec\x5a\x99\x2d\x5e\xa4\x50\x6d\x17\x28\xee\x1a\x42\xc6\xe2\x54\xa4\x17\xc9\xbf\x87\xc1\xe6\x3c\x7e\x70\x7d\x6b\x4d\xa8\x79\xf6\x3b\x37\x00\x79\x47\x78\x8d\x0e\xb8\x04\xb4\x5f\x77\x5c\xaf\x31\xeb\x0c\x66\x50\xdb\x72\x16\xa2\xc6\xe2\x7a\x3e\xdc\xbb\x85\xcc\x48\x37\x45\x54\x39\xdb\x54\xa1\x8e\xea\x9f\x12\xdd\xc4\x7e\x75\x37\x6f\x9c\x31\x1b\xd4\x46\x38\x68\x06\x9c\xb9\xb1\xcc\xbe\x50\x5b\x7c\x6d\x65\x1e\xd1\xff\xfd\x2c\x73\x7e\x58\xbe\xfe\xb0\x7c\x5d\xd8\xf2\xf5\x3a\x76\xa4\x5f\xc2\x8c\x67\xd9\x5b\xdd\x1f\xb6\xac\x3f\x6c\x59\x8b\xb6\xac\x0b\x9b\x2d\x41\xb0\xab\xef\xe2\x49\xab\xdb\x33\xf7\x16\x79\x92\x72\x93\xf7\xeb\x82\xab\x98\x0d\x93\x1a\xf5\x7c\xc6\x7e\xe0\x51\xe5\x92\x8a\x84\xdc\xe5\xb7\x7b\xe8\xd5\x2c\xc6\xd7\xdf\x0f\x94\xf9\xdf\x0c\x88\x40\x13\xe1\xac\x3e\x38\xaa\x6a\x36\xff\x71\xcf\xae\x9a\x20\x26\x44\x6e\xe6\x90\x55\x35\xea\x48\xf3\x66\x9f\x24\xf2\x80\x85\xc3\xc4\x84\x48\xf3\x7c\xb5\x52\xb7\x99\x80\xd9\xd5\x5a\x98\x72\x8d\xee\xf1\xe1\x22\xa6\xd5\xd5\xae\x3a\x1b\xe8\x52\xa5\xe9\xd3\xbd\xca\xeb\x4a\xf7\x6c\x75\x66\xb5\x29\x54\xb9\xde\xf4\xa2\xa8\xaa\x03\xb6\xcf\x43\xe7\xa8\x80\x2d\x54\x05\xad\x29\xfd\x54\x30\xeb\x72\xe6\x20\x37\x05\x2b\x57\xbd\x65\x09\xaf\xa2\xbf\x32\xe9\xb3\xab\x75\x40\x15\xfc\x3a\x6a\xad\xe0\xd7\x3d\x25\x9e\x8d\x5f\x07\x55\xae\x37\x7b\x5b\x58\xae\x38\x25\xff\xd9\x35\x67\x60\xf9\xaa\xcb\xa2\x77\xd5\xd1\x6f\x8e\xfd\xde\x69\xae\x7b\x0b\xca\xb1\xd9\xda\x37\x17\x68\xb1\x99\x51\xe9\xcd\x69\x29\xbf\x3d\x34\x60\x4a\x34\x1e\x5d\xeb\x4a\x90\x60\x5a\xd5\x0b\xcf\x2a\xa0\x79\xcb\xfb\x1a\xef\x23\xb3\x5b\xe1\x24\xbc\x50\xcc\x5f\xaa\x90\x71\x46\xbf\x54\x33\x3e\x58\xf9\x55\xdd\x78\x80\xf8\x5b\x4d\xd6\x13\xd8\x70\x10\xcd\xce\x1b\xb7\x69\x3d\x75\x17\xd4\x97\xde\x98\x72\x1a\x13\x45\x5d\x08\xcc\x1a\xd9\x30\x57\x65\x57\xc5\x6c\xda\x6a\x17\x9e\xc2\x67\xf5\xd9\xdc\x9c\x81\x7a\x16\x3e\x94\xda\xc8\x9d\x26\x8e\xa7\xca\xff\x6a\x2f\x70\x13\x14\x89\xc0\x78\x43\x5e\xf1\x89\x09\xbe\xe5\xfc\xa9\x7f\x1d\x6f\x7a\x9b\x69\x8b\x29\x4b\x98\xef\x52\xaf\xd8\x69\xeb\x32\xfe\xeb\xf4\xf7\x50\x37\x96\x76\x95\xfc\x49\xce\x9b\x3c\x39\x5b\xa7\xed\x4d\xd9\x73\xfc\x40\x87\xc2\x27\xe1\x40\x89\x38\xd3\xa5\x56\x60\xc0\xfd\xed\x01\x89\xc9\x54\xf6\x2e\x35\x33\xef\x5d\xc6\x74\x14\x53\x39\x79\xa7\x39\xbb\x1e\x8d\xa7\x98\x7f\x42\x55\x25\xc3\x8b\x69\x14\x12\x1f\x46\x7c\x95\x1a\x6d\x62\xeb\x61\x1e\xa0\xb2\xab\x58\xc4\xe9\x99\xb5\x94\x3d\x1c\xfc\x76\xd0\x3d\x88\xc5\x94\x49\xda\x52\xfd\x17\x2e\x3e\x6f\xf3\x7b\x8a\x19\x9e\x8b\xef\xf7\xfb\xbc\xe2\xf0\xf8\xc1\x03\xd5\x72\xf1\x27\x69\xd7\x74\xff\x1e\x5c\x6a\x89\x2c\x4b\xf6\x2f\xed\xc0\xc4\x55\xae\x99\xd4\x1f\x3f\x34\x44\xb9\x62\x3e\x51\xb4\x85\x73\xbf\x44\xdc\xf3\x89\xc4\x9e\x6c\x77\x75\x5a\xab\xd5\xee\xbf\x30\x9e\x29\x55\x4c\xb8\x64\x9a\x6a\x8e\x44\x0b\x9b\x0b\x2a\x70\x9f\x49\xfb\x2f\x2e\x4b\x7e\x92\xbb\xe0\xd4\x32\xef\x12\xd9\xa2\x10\x7b\xb4\xdd\xab\x4b\xb5\x25\x72\x9e\x91\xf5\x84\x61\xcf\x8a\x50\x9a\x05\xb6\xe0\xd6\x03\xbc\xbc\xe6\xb1\x6f\x66\x36\x1b\x24\x94\xcb\x0c\x6d\x73\x19\xb6\xb1\xb6\x9b\x74\x87\xbe\x45\x7c\x69\x16\x97\x54\x9d\xc6\xee\x8b\x06\x0f\x3f\x7a\xb7\xfb\x8a\xc4\xb2\xeb\x1a\x6e\x5d\xb2\xa0\x87\x9f\x3c\x3e\x7f\xb6\xb9\xff\x2e\xc2\xc6\x4c\xa5\xf7\xd3\x25\x96\x17\xd3\xa1\x08\x25\xee\x7d\xf8\xe8\xc1\x0d\x39\x05\xd7\x5d\xb8\xf7\xe1\xc3\x63\x0f\xb3\x11\xf6\x3e\x7c\x58\x7f\xee\x61\x26\x3b\xf4\xaf\x04\x3c\x46\x7f\x58\x7f\xe2\x7d\x48\x63\x26\x02\xfa\x3e\x7e\x84\x10\x25\x8c\xe3\x8f\x1e\x4f\xc2\xf0\xa3\xf9\xe3\x5d\x96\xaa\x5c\xf5\x30\x42\x08\xe1\x8f\xde\x87\x67\x1e\x0e\xd8\xa9\xfe\x5a\x5b\xf3\x30\x84\xad\xc1\x1e\x96\x52\x74\x86\xe2\x5c\x27\x3f\xff\xe8\x69\xf8\xe3\x63\x8e\xec\x7f\xb6\x58\x94\xcb\xdd\xc8\x28\x91\xf1\x31\x3a\x63\x6a\x82\x36\x37\x06\xdd\x6e\x17\x6a\x5e\x6d\xaa\x83\x4d\xc7\xae\x69\x19\xfb\xd8\xc3\x2b\x44\x4a\xaa\xe4\x0a\x9b\x8e\x57\x86\x89\xbc\x00\x37\x19\xdd\x31\x1b\xb9\xc6\x4a\x75\x95\xaa\x07\x0c\x44\x9a\x75\x50\xa5\xc9\xbc\xf7\xe1\xe3\x95\xc1\x44\x06\xe1\x2d\x8b\x51\x4b\xca\x5f\x19\xa5\x9b\x1b\x03\x94\x5b\xe0\x4c\x70\x34\x22\x2c\x4c\x62\x3a\x1b\xa5\x69\x1d\x6b\x5e\x69\x3c\x76\x1d\x7d\xfc\xe8\x8d\x48\x28\xe9\x0d\x90\xf9\xd1\xc3\x13\x22\xb7\x4f\x49\x88\x7b\x50\xd7\xd5\x4f\xc6\xec\xe9\xd2\x04\x39\x02\x5d\xc3\xbc\x45\xd8\x9d\x0c\x25\x5e\x6a\x09\x8f\x44\x3c\x16\xea\x6e\xec\xe6\xfa\x04\x32\xb0\xb1\x27\x6a\xf7\x31\x30\xe1\xc1\x73\x36\x44\xbd\x83\x18\xa3\xe4\x76\xe6\x19\xd9\x0c\xb3\x10\x39\xa3\x72\x7e\xca\x35\x8f\xdb\x5d\x53\xe2\x80\x48\x79\x26\xe2\x00\xe2\xbb\x5d\x03\xaf\x15\x81\xe3\x2b\xb9\xa2\x2f\xc9\x1e\xb3\x05\x88\x21\x3c\xa0\x36\x3b\xf9\x02\xcf\x1e\x67\x6f\xd3\x0d\x31\x1a\xac\xb5\x52\x71\xe7\xd4\x85\xbb\x86\xb9\xb6\xaf\x3c\x08\x40\x98\x91\x85\x41\x4b\x3e\xe0\x84\x4e\xd0\x42\x2c\xcd\xe2\xda\x66\x09\x92\x5c\x1c\x4d\x08\x3f\x91\x10\x67\xc0\x38\xc5\xb6\xcf\x43\xb3\x5e\xa7\xc1\x8f\x75\x19\x70\x0a\xb7\x21\x0f\x26\x31\x91\xb4\x85\x5f\xc3\x8c\x21\x37\xe3\x15\x37\xf2\x78\x28\x82\x0b\x2d\x2f\x04\xc1\xa6\xe6\x3f\xd5\xa7\x3f\x1d\x38\x9a\x74\xd6\x56\x57\x51\xd0\x19\x85\xf4\x1c\xfd\x99\x48\xc5\x46\x17\x1d\x7b\xa9\xdf\xf1\x29\x57\x34\x46\x24\x64\x63\xde\x61\x8a\x4e\xa5\x4d\xd2\xe3\x0f\x68\xae\xcf\xf5\x6d\xc7\x74\x2a\x4e\xe9\x17\x69\x7e\xbe\x8f\xf7\x0a\x71\xdf\x91\xad\xff\xed\xea\xee\xe1\x9f\x2b\x74\x6d\xb1\xad\xbf\x7e\x27\xd1\xc3\x72\xb8\x28\xec\x26\xc7\xc7\xaa\x79\xff\x81\x52\x95\x0d\xe8\xf8\x58\xcd\x2c\x15\x8a\xb1\xa8\x2b\x91\x15\x72\x5b\xf8\xba\xdd\xc2\x3f\x3c\x5a\x75\x3b\xa9\x5d\x77\xd8\xc3\xd4\xbe\x6b\x82\x2d\x65\x05\x94\x3f\xfe\x8a\xae\xfb\xa5\x3f\xec\x63\xef\xc3\xfa\x23\x0f\xc7\x84\x07\x62\xda\x61\x01\xfe\xf8\xf1\xa3\xed\x06\xd8\x86\x60\x0f\xa7\x91\x57\x6c\x3a\x09\x55\x4d\xaa\xeb\x34\x9b\x8e\x3b\xa3\x30\xd1\x35\x55\x84\x86\x72\xf7\x6b\xc6\x9c\xc4\x61\x79\x0f\xcd\x46\x62\x7a\x94\xdb\x43\xf5\xc6\xdf\xc2\xb5\xb0\x24\x8a\xde\x0a\xa9\x4a\xd0\x6d\x5c\xd7\xa3\xc6\xc4\xc6\x79\x61\xbc\x33\x12\xf1\x74\xc6\xec\xe8\x1e\x3d\xf7\x60\xaf\xb0\xcb\xa0\x13\x39\x8e\x61\xa4\x98\x0f\x1f\xb0\xc9\xd0\xe0\x00\x4c\x9c\xd5\xd1\x87\xf5\xc7\xde\xaa\xf7\x41\x4f\x58\x0a\x62\x36\xff\xe2\x70\x66\x8c\xa0\x22\x4f\x54\xc5\x8b\xeb\x89\x11\xa5\x35\xbd\xbc\x24\x71\x62\xe3\xe5\xdc\x0d\x59\xe2\x5a\x3d\xff\x86\xea\x81\x9b\xa9\x00\x4e\x7c\x88\xd3\xf4\x65\x15\x04\x85\xc3\x7f\x5e\x66\xb8\x9d\xd3\x7f\xee\xa4\x5b\x3e\x42\x2b\xd1\xcd\xf5\xaf\xab\x81\xda\x2f\xdd\x19\xa2\x57\x9f\x9f\x9e\x31\x0a\xd6\xa8\xe6\x44\x9c\x37\x9d\x6e\x8c\x94\xc4\xeb\xc3\x41\x7d\xfe\xac\x5a\xf9\x48\x4b\x06\xf5\x5a\x60\xa4\xca\xd7\xe0\x23\x16\xd2\x96\x55\x19\xd0\x9a\x81\xa7\x05\xa6\x24\x72\xe0\xb4\xbd\xb4\x6a\xe2\x24\x0d\x6d\xc5\xef\xa8\x7e\x02\x5a\x9b\x01\x54\xd7\x60\x59\xb5\x71\x7d\xcd\xc6\x72\xe2\x7a\xca\x02\xee\x88\x4c\x43\x5e\xaf\xfc\xf9\xd7\x23\xf1\xc7\xbf\xb7\x3a\xc3\xad\xa9\x1f\x3a\x8d\xeb\xe3\xd5\xe1\xf0\xdf\x4f\xb1\x51\x59\x93\xcb\xcb\x24\x40\xe9\x0d\x02\x89\x57\x1f\xe9\xf1\xcb\x9e\xcb\xab\x92\x4a\x7a\xca\xf3\x66\x1f\xd3\xf3\x6a\x8d\x99\xc2\x42\xb6\x7f\x78\x8c\x9f\x92\x90\x05\x9b\x31\x0d\x34\x65\x90\x50\xf6\xee\xaf\x79\x31\xd5\x5c\x37\x7f\x2c\x6e\x08\xc9\xe8\xf6\x49\x49\x95\x1d\x38\xa3\xb2\x75\x69\x2e\x51\x31\xf6\x9c\xe0\x6b\xfc\x64\xb5\x9a\xea\x83\x30\x89\xed\xfc\x6b\xa9\x6a\xc0\xc3\x76\x43\x5b\x5a\xce\x36\xf1\x3c\x4b\xcd\xd9\x78\x93\xce\xc8\xa6\x3b\xa1\x24\x30\x42\xc0\x00\x2c\xe7\x44\xdc\xc2\x1f\x22\x3b\x5d\xfd\x60\x38\x21\x72\xf2\xd1\x5c\xc5\xe9\xa3\xf0\x3d\x9a\x5e\x91\x3f\x78\x80\x2f\x2f\xbb\x5b\xaf\x34\xc4\xd5\x95\x16\x17\xea\x94\x15\x20\xad\x69\xdc\xaa\x24\x2a\xc4\xdc\x02\x12\x6b\xb5\x2f\x5d\x8c\xcb\x99\x08\x2d\x6b\x57\x72\x43\xc5\x80\x56\xac\x17\x91\x53\x40\x2c\x2d\x13\x04\x69\x30\x4d\x9a\x09\x20\xad\xa6\xb1\xa4\x72\x81\x47\xdb\xed\xae\x4f\x94\x3f\xc9\xc9\x10\xf6\xee\xb0\x4c\x40\xd8\xbb\xbf\xaa\xf7\xe7\x19\xc3\x35\xf3\x3d\x6b\xa8\x6e\x56\x6f\x36\xda\x30\x20\xd1\x57\x18\xe9\xd5\x52\xaa\x11\xc3\x71\xbe\x0b\xb5\xdf\xec\x43\x83\xbd\xec\xbf\xc1\x91\x42\x4e\xc4\xd9\xae\x46\x87\x66\x3a\xb7\x7a\x5e\xa8\x7a\x7b\xaf\x15\xe2\xad\xa1\x64\x83\x20\x9f\x93\x6d\xd3\x9e\x82\xee\xb0\x4e\xb8\xb7\xab\x7c\xb6\xa0\x0d\xea\xcc\x4c\x2e\xbf\xac\x9e\xa9\xac\xe8\x75\x75\x65\x04\x5d\x4f\x0f\x94\x76\xc9\x50\xc4\xca\x78\x84\x90\x22\xa4\xba\xb1\x96\xb2\xdd\x58\xba\x05\x2b\x85\x5c\x81\xe5\x4f\xce\x9b\x79\xf5\xfa\xb4\x67\x57\x68\x2e\x1e\x6b\x3d\x46\x5d\x08\xd8\xb6\xc7\xfb\xb4\x9b\xc4\xe1\x43\x6c\xe8\xfc\xa5\x9d\xec\x3e\x7e\x48\xb9\x2f\x02\xfa\xfe\x70\x67\xd3\x05\x4d\x6f\xd1\x6e\x4c\x03\x16\x53\x5f\xbd\x8f\xc3\xf6\xbd\x33\xc6\x03\x71\xd6\x75\x96\xec\x5d\x7b\xad\xdc\xe2\x80\x0b\xd3\xd5\x2b\x4b\xdb\x0d\x73\xb3\x6a\xd0\x56\x73\x3c\xc8\x68\x2d\xc7\x45\xd2\x92\xed\xab\x8a\x76\xb9\x57\x5c\x86\x8b\xa8\x99\xed\xbe\x79\x0d\xd5\xb2\xed\xc5\x0f\x85\xf2\x6c\xae\x79\x47\xce\x5e\x3b\x6b\x07\xe3\xbf\x86\x3b\xeb\x5f\x44\x9f\x5c\x3c\x57\xe4\x45\xee\x8c\x5c\x3f\xce\x38\x3c\xcc\x53\x62\xce\x52\x49\x5f\x57\x2b\xfd\xfd\x2b\xa6\xef\x9e\x6e\xba\x49\x3d\x9d\xf5\x74\x86\x22\x7a\xe6\x70\x74\xb9\x8e\xf1\x06\x39\x87\xf2\x1a\xa4\xd4\xf9\xe4\x57\xd3\x11\xe3\xf8\xd0\x76\x65\x24\x62\x4b\x8a\xdb\x20\xd4\x66\xfd\x48\x7f\x37\xcc\x52\x45\xd1\x0e\x21\xa6\x3b\x8c\x47\x89\xca\xf4\xeb\x0a\xdc\xad\x62\x58\xe7\x9a\x04\x02\x9c\x0d\x1f\x36\x95\x89\x75\xef\xac\xfb\x20\x7c\x31\x8d\x42\xaa\x80\x72\x9c\x94\x6d\x10\x60\x7e\x68\x32\xcd\xfa\x6a\x11\x68\xcf\x8c\x68\x2a\x12\x49\x55\xac\x25\x4d\x8c\xbd\x54\x72\x45\xae\x68\x59\x6f\x3f\x4b\xb3\x30\x0b\xfb\x20\x34\xdf\x26\xe6\xdf\x3b\x19\x3b\x43\x7e\x3e\xe9\x5b\xe1\x5f\xd1\x73\xe5\xd0\x9f\x1e\x03\xdc\x0c\xbc\xcf\xce\x05\x8d\x93\xc0\xa9\x3a\x13\xf1\x09\x32\xfe\xff\x50\xee\x28\x91\xab\x6e\x99\x59\x29\xe1\x76\x06\x72\xbe\x93\x35\x97\xde\x60\x67\x5d\xc9\x27\x2d\x3a\xf3\x4b\xcc\x79\x65\x96\xb3\x2b\x31\x33\xea\xf4\xb7\x9b\xe9\xb4\x43\xc5\x99\xd6\x75\x26\x71\x0c\x01\x71\xb2\x22\x77\x76\x8d\xfd\xaf\xc6\xf4\xec\x75\x83\x4a\xff\xe5\xef\x4e\xd9\x4a\xc2\x3a\xc3\x44\x29\xc1\xb3\x51\x5b\xbf\xab\x38\x64\xe3\x89\xc2\x0e\xe5\x1e\x16\x7c\x33\x64\xfe\x89\xb9\x4c\xd5\x23\xcc\x0e\x82\x1e\xde\xb4\x85\xde\xc4\x94\x42\x67\x55\x9c\x50\xaf\x0a\xb7\x6b\x2b\x1b\xb0\x31\xdf\x01\xc0\xc6\x8b\xd9\xa2\x72\xbc\xe6\x5e\x96\xcf\xe6\x0a\xeb\xe9\x64\x59\xe1\x48\x8f\x98\x87\x14\x52\x2c\x55\x56\x75\x0d\xba\x65\xc6\x4f\x99\x64\x43\x2d\x6e\x58\x1c\x63\x54\x88\x4e\x85\xa6\xaa\xf3\x08\x66\xc9\x51\xdb\x8e\xa9\x09\xf9\xf9\xaa\x2a\x17\xc4\xb7\xcd\x81\x6c\x9d\x21\xe3\x27\x1d\x25\xb2\x29\x34\x5a\x0f\x4d\x95\x70\x4e\x75\x57\xdc\x1f\xeb\xaa\xb4\xd6\x36\x17\x22\x89\x91\x23\xc0\x97\x8b\xa8\xe5\x17\x23\x48\xdd\x8b\x47\xb3\x27\xf8\xc3\x07\x2c\xe0\x2f\x96\xc9\x70\xca\x94\x41\xec\x3c\x23\x82\x59\x1d\xb8\x9d\x8b\xf8\xe2\x59\xe8\x5a\x3a\x6f\x91\xdc\x11\x8b\xbe\x6b\xf4\xfb\xbb\xbd\x83\x87\x8e\xc7\x37\x51\x98\xb9\xd3\x7a\x2f\xf7\xca\xa4\x4e\x29\x6a\xf9\x07\x9c\xeb\x73\x1a\xa9\xab\xf6\x75\xe8\xe4\x8e\x1c\xba\xd9\xfa\xaf\x07\x4f\x46\x1b\x3f\xdf\xe4\xd0\xdd\x78\x75\x56\x73\x6d\xb6\x2b\xc6\x63\xc6\xc7\x48\x24\xaa\xfe\xf6\xf1\x36\x6e\x1e\x6f\xcf\x3a\xa7\x34\x59\xcb\x73\x05\x50\x5e\xdd\x0d\xa6\x70\xfb\x66\xbe\xb9\x9b\xa1\xf4\x1b\x94\x96\xf1\x54\x27\x4d\x13\xa9\xde\x11\xe5\x4f\x7a\xf7\xd7\xb2\x8b\x1b\xa3\xce\x9b\x6f\x08\x0c\x70\xa9\x1d\x30\x40\x81\xca\x26\xbd\x79\xa8\x57\x07\xdb\xab\x87\x82\x89\xeb\x92\x46\x09\x66\xce\xee\xc6\x5d\x02\x0c\xb9\xce\x7e\x9a\x76\x95\x38\xa1\xfc\x1a\x5a\xd1\x43\x3d\xbc\x1f\xf6\xb6\x0b\xa8\x47\x0d\x21\xdc\x11\x4e\xfd\xdb\xbb\x95\xa7\xff\x23\xf7\xfc\x1f\xe6\xb6\xdf\x5a\xab\x79\xc7\x54\x9a\xcd\x89\x39\x9b\x59\xc7\x9e\x3b\x40\xd3\xb9\xb3\x03\xfc\x9c\x65\x31\xeb\x20\x9a\x0d\x66\xbf\x98\x6d\x6c\x71\xfd\x5d\x63\xf3\xfd\x76\x32\xed\x32\xdd\x84\x50\x55\x77\x43\x46\x98\x2d\x6b\x2f\x3f\xa8\x9a\x4d\xd4\xb8\x32\x90\x6c\x1a\x85\xb4\x03\xa0\x39\x33\x20\x67\x73\x10\x74\xa0\x64\x07\xb2\xbe\xe6\x86\x9b\x33\x0b\x9a\x73\x2c\x59\xe4\x64\x51\x7c\xe1\x93\x7b\x37\x9e\x2b\x8b\xdb\x5d\x3f\xa4\x24\xde\x08\xc3\x96\xbb\x60\x2d\x6c\xf8\xd9\x9d\xac\xb1\xa7\xd8\x09\xb0\x47\xbb\x2c\xc8\x9b\x72\xca\x30\x19\xc3\x43\xf3\x30\x19\x17\xd2\x69\xcc\x48\x08\x39\xf0\x75\xf3\xe7\x3e\xb6\x42\xdb\x04\xd4\x99\xe6\x41\x27\x4c\x0e\xf4\x83\x96\xbb\x0d\x79\xee\xe7\xe2\x37\xba\xbf\x33\x35\x11\x89\x1a\x24\xa3\x11\x3b\x6f\xe1\xdf\x69\xe8\x8b\x29\x45\x4a\xa0\xcc\xc4\x67\xa9\x8d\xdd\x10\xe7\x1d\xd9\xd8\x77\x7e\x1e\x47\x7f\xfe\x4d\xde\x2f\xb6\xb1\x3f\xf1\x70\x48\x2e\xf4\xa1\x64\x4a\xa4\xa2\x71\x87\x93\x53\x36\x76\x31\x89\x40\xbd\xf2\x5f\x13\x16\xd0\xbd\x2c\xf9\xa3\xf7\x41\xc5\x09\x85\xad\x31\x63\xd1\x95\x8a\x94\x10\xe1\x90\xc4\xb6\x96\x8f\x9a\xfb\xe7\xd5\x6f\xc5\x32\xe3\x98\x05\x2b\xf9\xa8\x36\x69\x99\x7a\x45\x96\xdb\x27\x4a\x35\x48\x16\xd0\x52\x9b\xcd\xe5\x67\x6e\xbd\xb6\x26\x27\x03\x2e\x7d\x0f\xeb\x7c\xd4\x5e\xe3\xe6\xcf\x6e\xec\x69\xc1\xb3\x8c\x3e\x83\xbc\x9c\x31\xf3\x76\xa3\x70\x48\xa6\xea\xf8\x27\x89\xb4\x98\x9e\x44\x46\x57\x67\x3d\x7a\x20\xc2\x03\x34\xa6\xa0\xc0\x43\x52\x91\x58\xd1\x46\x95\xf7\x82\xc2\x42\x9d\x66\xad\xa8\x76\xad\x9b\x38\x87\xe6\x65\x26\xce\xca\x23\xb6\x1a\x2d\xc3\x75\x26\x94\x98\xf0\x26\xa9\x12\xde\x8a\x6d\x01\x95\x7e\x4e\x88\x6c\x94\xa5\xca\x19\x39\x03\x5a\x47\xf3\x35\x8a\xe4\x52\x8f\x04\x1f\x0a\x12\x07\x86\x2d\x74\x5c\x8c\x5a\xd7\x25\xc7\xf2\x72\x7c\xcc\xb0\xba\xb4\x5f\x16\x22\xed\x4e\x0a\x98\xa6\x18\xf8\x26\xf1\x69\xc6\x04\xcc\xcf\xbc\x9e\x68\x55\xe4\x80\xcb\x8b\x56\x52\x8a\xbb\x21\xb1\x2c\xdb\xe9\x6f\x28\x13\x1a\xd3\xbe\xc1\xa9\xdf\xa0\x59\x31\xf9\xf3\xec\x8c\x97\x97\x3c\xe8\x42\xa2\xc7\xbc\xd7\x3f\xa3\xb8\x60\x4b\x5c\xaa\x47\x52\xf5\x9a\xc5\x52\x1d\x26\xbc\x95\x77\x90\x11\x52\x75\x09\x8a\x8a\x9e\xba\xea\xd3\x1b\x58\xd6\x06\xb4\x62\xe8\xa6\xda\x15\x4d\x50\x5d\xd7\x98\xcc\x7a\xf6\x32\x83\x4a\x67\x03\xb7\xbb\x96\x01\xcc\x33\x34\xcc\x5e\xf4\x54\xad\x59\x1b\x21\x7b\xb3\x9f\x06\xcd\x34\x6a\xcc\x14\x58\x8b\x8a\x4a\x2d\x3c\x18\xec\x97\xa5\xa1\x05\x96\xc5\x1d\x91\x85\x56\xdf\xff\xbc\xe1\x47\x7f\xbe\xfe\x5a\xea\xe8\x01\x1b\x73\xc6\xc7\x88\xf1\x5b\xd4\x46\x67\x6a\x06\x9d\xf5\x45\xf5\xd3\xf9\xa9\x5b\x9e\x89\xdf\x91\x49\xff\x3f\x7f\x9d\x24\xaf\x8f\x36\xc7\x8b\x4d\xfa\x9a\xd1\xf9\x88\x44\x85\xa0\x97\xa8\xb9\x39\xbf\x1e\x2e\xaf\x85\x47\x3f\x91\x4a\xc0\x4f\xe3\x14\x64\xc1\x27\x2f\x5c\x28\x36\x62\xb4\xec\xc8\xef\xab\x3e\x7b\x99\x6d\x69\x3e\xe7\xd6\x6d\xde\x9d\x9d\xd3\xf6\x0b\x3e\x20\xa7\x74\x31\xd3\xf3\xca\xe6\xd0\x65\xf2\x0d\x74\x72\x23\x98\x6a\x3e\x58\xe1\xde\x9a\xf1\x91\x53\xba\x91\x1a\x4b\xb7\x8a\x97\x03\x2d\xe0\xbf\xe6\x55\xa4\xe0\x83\x0b\xee\x3b\x2b\xf4\xd6\xbc\x0e\xd1\x42\x87\xb2\xe6\x0a\x75\x98\xb6\xc0\x9a\xbc\xa5\xec\x03\x4a\xd3\xce\xee\xd6\xc6\xc1\x4d\xda\x30\xe5\xeb\xeb\x37\x41\x85\x8a\xdb\x7a\xb6\x9d\x9a\x2b\xab\x56\x5e\x0b\x50\x6b\xa6\xef\xd1\xc2\xef\x26\x78\x6b\x84\x6e\xa1\xcd\xaf\xb6\x57\x36\x2a\x9f\xc4\x74\xd4\xc7\x2b\x78\xe1\x47\x1b\xa5\x75\xf3\x3d\xeb\x89\x6e\xb6\x52\x66\xaf\xc2\x26\x05\x52\xc3\x02\xb1\x02\xda\x2c\x6f\x2f\xd3\xf9\xee\x66\x3c\xd5\xbf\xcc\x93\x46\x6f\xde\x83\x0f\x2f\x23\x8d\x9e\x3e\x35\x5d\xdd\x9b\x4d\xf7\xbc\x9e\xee\xc7\x54\xe5\x56\xb2\x25\x7e\xd1\x7f\x71\xe9\xde\x9d\x14\x09\xd6\xb9\xe3\xae\x7f\x65\x52\x97\xa9\x17\x55\x6d\xc6\xe6\xc6\xa0\xa7\x72\x04\xde\x17\xf9\x27\x1c\x0d\xae\x75\x8a\x25\x30\xbe\xe2\xe9\x1a\x5d\x58\x58\xdb\x28\x3c\x1e\x5d\x5c\x8b\x55\x5a\x3e\x77\x64\x23\x7f\xb8\x7b\x32\x26\xfc\xd9\x6f\x8b\x6f\xe4\x4b\xaa\x03\x98\x6f\x4d\x87\x4a\x78\xf3\xf0\xe6\x44\x08\x49\xc1\x2c\xb5\xfc\x22\x37\xb2\x13\x87\xfe\xbf\xff\xeb\xff\x4e\x15\x86\x1e\x3a\xa4\xc1\x84\xa8\xf4\x2d\xb4\x87\x34\x75\xac\x6c\x6c\x79\x68\x73\x63\x80\x6b\x8c\xd9\x76\x7c\x68\x69\x57\xf8\x27\x34\x68\x38\xcc\xf3\x9c\x56\xa1\x38\x47\x1d\x49\x95\x62\x7c\x2c\xb3\xc1\x15\xd9\x31\xce\x73\x5b\x6c\xf6\x4d\xf3\x61\xb7\x83\xf4\xc7\xaf\xe9\x43\x24\xec\x36\x83\x4c\x17\xe1\x9e\x35\x14\x2a\x4f\xf5\x10\xf9\x5c\xdb\xd6\x2c\xa3\x3c\xdb\x0b\x67\x17\x37\x0b\xce\x75\x72\x41\xd8\x74\x0c\x0b\xc0\xa7\x43\x6c\xb8\x82\xba\x9e\xcc\xd7\xb0\x84\xea\xa5\xbf\xaa\xf7\xe6\x52\x1d\x43\xe2\x9f\x24\xd1\xdd\x50\x89\xcc\x11\xec\x32\xd1\xec\x15\x74\xba\xd6\x16\x23\x65\xca\x43\x07\xa3\x25\x8f\x43\x2a\x95\x88\xa9\xd9\x5d\x9b\xcb\xc4\x39\xb0\x85\x4d\x2f\x2a\xb8\xfc\x21\x13\x5c\x57\x26\x58\x5e\x1a\x58\x62\xcb\x32\x44\xb3\x62\x49\xe1\x3a\x5b\x96\x9d\xdf\x3b\xb2\x69\x5d\x3c\xf9\xd7\xf3\x57\xcf\xe8\x12\xa7\xcf\xeb\x6e\x5a\x06\x73\xe8\x01\x72\xb8\xf3\xf0\x36\x8c\x1b\x91\x30\x44\x56\xa3\x8e\x94\x40\x92\x86\xa3\x8e\xbb\x5c\x09\x90\x64\x7c\x1c\x52\xf4\x37\x8b\xd0\x08\x62\xb2\x35\xee\x4d\x5b\x44\x91\x21\x91\x74\xa9\xdd\xc9\x4c\x47\x27\x76\x9d\x72\xc3\x70\xfc\x01\xb6\x19\xd7\xe5\x59\x96\x02\x69\x81\x05\x78\x7a\x56\xdf\x17\x62\xea\x25\x22\xbb\xe6\xa1\xfe\x4e\xf0\xf3\x5b\xb9\x94\xcf\xc6\x64\x95\x8f\x77\x63\x6c\xd7\xee\xfd\xf7\xbc\x3b\xd4\x70\xf0\x12\xf3\x5e\x80\x75\x2f\xcc\xb0\x4d\xa8\x3f\x04\x81\x6a\xe5\x75\xf8\xb5\x43\xf9\x1d\x61\xd8\xc3\xd5\xdd\x83\x5f\xdf\xee\x7c\x85\x53\x86\x45\x99\x87\x4d\x58\x42\x04\x71\x83\xa4\x87\x14\x39\xa1\x48\x9c\x71\x1a\xcb\x09\x8b\x90\x18\x21\xb8\x4e\x0b\xe0\x76\x56\xc4\xd1\x84\x00\xdb\xb6\xa5\x1b\xb9\xf5\x9b\x98\xcd\x3d\x47\x3c\xca\x73\x6a\x13\x01\x13\x22\x55\xa4\x8a\xcf\x9b\x71\xc9\xf2\xd4\x5e\x93\x4d\x9a\x48\x0a\xe1\xdd\x60\x29\x22\x1e\xcf\x36\x73\x16\xf1\x98\x70\xf6\xb7\x3d\x72\xe7\x05\xe2\xf7\x91\xb1\xee\xaf\xca\xb6\x59\xa5\x56\xe7\x98\xb3\x48\xee\xda\xe1\x97\x1e\x05\x78\x82\x6f\x99\x8e\xef\x8a\xb1\xa8\x95\xb2\x0b\xb5\x26\x92\x16\xe1\xaf\x21\x3a\xbb\x89\xf8\x9e\xb9\xe3\xd2\xf3\x77\x23\x59\xfb\x4b\x48\xd3\x65\xdd\x9a\xd3\x9a\x41\xb0\xc8\x2c\xce\x5d\x4e\x33\x36\x21\x72\xd2\xba\xb4\xb3\xd7\x6b\x20\x90\x31\x55\xfb\xf1\x58\x13\xc6\x32\xec\xff\x8d\xa9\x14\x0d\x9c\xfe\xe1\x1a\x3b\x80\x23\xab\x3b\xb2\x03\x04\xbf\x9f\x8e\x2f\xde\x9e\x05\x5f\x7e\x07\xb0\xc8\xc3\x1e\xde\x87\xb8\xcd\x52\x8b\xe7\x13\x1a\x82\x55\x0e\x4a\x11\x94\xd9\xa1\x35\x73\xfb\x14\xff\xcb\xc8\xe6\x16\xf1\x35\xca\x23\xa7\xc9\x71\x4c\x0b\x3e\x73\xfc\xa3\xac\x11\x9a\xad\xe6\xb1\x75\x2c\x20\xb8\x17\x9b\xf8\x42\xc2\x7b\x99\xde\xae\xbb\x2d\x41\xb4\xa3\xbb\xb1\x2b\x5d\xb7\xf3\xdf\x33\x27\xff\xba\x72\xee\x1b\x40\xd8\xb5\xd8\x9b\x41\xf5\x1d\xe1\x6e\xe3\x0d\x75\xfe\x70\x85\xfc\xf5\xe5\xb9\xdb\x7b\x49\x63\x64\xd1\xa6\x85\x5c\x3d\x2a\x64\x90\x81\x46\x22\x46\x94\x48\x46\x63\xab\x54\xe7\x01\xca\x62\xaf\xa3\x29\x1c\x2a\xa6\xc6\x04\xb0\x89\xe5\x1d\x50\x11\x85\x73\x95\x11\x05\x11\x17\x82\x91\x9a\x2e\xdc\x92\x88\x5b\x9a\xdc\x6b\xb2\x12\xc6\x15\x1d\xc7\x20\x72\x7c\xaf\x0c\xa5\x30\x84\xef\x99\xad\xfc\xaf\x11\x10\xe7\x1b\x44\x54\x44\xc8\x3f\x59\x4c\x66\xcb\x8f\x56\x0e\xd1\xb3\xa2\x81\x71\xdb\x53\x31\x0d\x43\x31\xa3\x94\x69\xd3\x15\xc4\x83\xed\xcd\xa3\x9d\xfd\xbd\xce\xd1\xe1\xf6\xee\xee\x3e\xd8\xb8\xdd\x66\x3f\x2e\x49\x14\xfd\x4a\x2f\x7a\x18\x9c\xe9\x2d\xce\xff\x77\x72\xf4\x7d\x9d\x5d\xa0\xb0\x3e\xee\xc8\x5e\xf0\x3f\x8f\xe8\xb6\xff\xd7\xde\x57\xd0\x75\x14\xb0\xe7\xe1\x6d\x4e\x86\x21\x05\xae\xef\xc3\x3d\x61\x12\x53\x4d\x8f\x71\x80\x22\x12\xab\x0b\xc4\x0a\xf0\x8d\x5b\x40\xa1\xda\x65\x24\xdf\x5c\xfd\x35\xd2\x2f\x50\x8c\x87\x0d\xc5\x54\x2f\x3f\x21\xbb\x72\xe9\xe9\xa0\xbf\x80\xc0\x5a\x4b\x3b\xd7\xdc\x6a\xc0\x03\x4b\xd3\x26\x73\x37\x4d\xc9\xa0\xcb\xcd\x86\xcd\xc6\xa7\x4c\xdb\x0b\x05\x09\x8a\xef\xa0\x6c\x39\x6b\xfc\x11\x86\x79\x07\xfe\x45\x17\xf6\x21\xf6\xb2\x83\xaf\x55\xd7\x6c\x04\x41\xc9\xb8\x39\xab\x8f\x40\x5e\xd9\x9e\xd7\xf4\xc0\x98\x3a\x01\xe2\x2e\x06\x89\xef\x53\x29\x5b\xc6\x57\x0d\x22\x41\x40\x03\xdc\x76\xea\x9b\x90\x2a\xda\xd8\x44\xe0\xb2\x97\x6e\xc5\x94\x4c\xdb\xb1\x6a\xa7\xa6\x76\x12\x97\xbd\x74\x3b\x92\x9c\xda\x56\x96\x67\x87\x96\x0c\xbf\x67\x41\x61\x41\xb2\xbc\x7b\xf2\x41\x65\xff\xaf\x59\x28\xcb\x98\x84\x47\xc4\xa7\x08\x48\xe2\x5a\x3b\xa3\x25\x85\x3b\xb2\x27\xae\xac\x9d\x89\xd7\xff\xda\x9a\x7c\xf9\x3d\xd1\x62\xcc\x33\x47\x4b\xd8\x0c\xed\x6b\x3b\x77\x17\x60\xe2\x29\x9c\x32\x99\x90\x10\x85\x16\xbc\x71\x33\xdc\x9c\x50\xff\x04\x4c\xd3\x97\xd8\x08\x8d\xd2\xdf\xd5\xed\xba\xec\x7e\x63\xe0\x82\x56\xf9\x03\xde\xc9\x0a\xea\x9c\x25\x54\x40\xba\x9a\x85\xf4\x3f\xd6\x07\xda\x5c\xc8\xa2\x4e\xe9\xf6\xf7\xdc\x12\x55\x5e\x73\xb7\xd5\x7c\xd3\xff\xf7\xbc\xe8\xb5\x43\xfb\x9e\x39\xf8\xbf\xb1\x1d\xcd\x1e\xcc\xce\xb5\xf8\xb1\x9d\xd8\x3b\xc2\x8f\x07\x8f\x1f\xff\xb5\x4a\xb6\x16\x8c\x03\x78\x13\x7e\x7c\x04\xe7\x8f\x03\x38\x7f\x38\xf4\x65\xbe\x3c\x50\xa2\x58\xc8\xfe\xa6\x12\x89\x88\x72\x24\x45\x12\xfb\x14\x85\x6c\x18\x93\x98\x51\x69\xcf\x32\xf6\xf1\x98\x44\xa3\x58\x4c\x73\x27\x1a\x36\xf3\xaa\x76\x83\x73\x91\x70\x7f\xa6\x2e\xeb\x99\x87\xa3\x98\x16\x9f\x1d\x4d\x94\x8a\x64\x6f\x65\x65\x2c\x42\xc2\xc7\xfa\x7c\x6f\xe0\x37\x45\x74\x11\xb3\xf1\x44\xa1\x96\xdf\x46\xeb\xab\xab\xcf\xd1\xd1\x84\xa2\x37\x02\x6d\x24\x6a\x22\x62\xd9\x45\x1b\x61\x88\x00\x44\xa2\x98\x6a\xaa\xa5\x41\xd7\x14\x3e\xa4\x01\x93\x2a\x66\xc3\x04\xec\x5b\xf5\xb8\x12\x49\x11\x4b\xc7\xac\x53\x86\x8c\x93\xf8\x02\x8d\x44\x3c\x95\x9e\xd9\xa6\x44\x0c\x7f\x45\xa2\x8e\x8f\xf9\x54\x04\x6c\x64\x4d\x64\x3d\x44\x62\x6a\xb4\x7b\x4a\xd1\xc0\x59\xcc\x06\x48\x4d\x88\x42\x6a\x42\xd1\x48\x84\xa1\x38\x63\x7c\xac\x4f\x83\x01\x33\x57\x21\x24\xa6\xba\x22\xaa\x7a\xa6\x5f\xff\x89\x8a\x3d\x93\x70\x33\x6e\xba\xe4\x8b\x80\xa2\x69\x22\x15\x8a\xa9\x22\x8c\x43\xad\x64\x28\x4e\x75\x96\xc5\xc5\xf1\x31\x37\x94\xed\x81\xe4\x83\x42\x26\x95\xae\x22\xdf\x24\x0f\x4a\xfd\x09\x98\xf4\x43\xc2\xa6\x34\xee\xd6\x76\x81\xf1\x3c\x2a\x5c\x17\xa2\x58\x04\x89\x4f\xb3\x5e\x1c\x1f\xf3\xb4\x1f\xe8\x26\xbd\x38\x3e\xe6\x76\x74\x2e\x46\x0a\x71\xb3\xb4\x22\x62\x24\xd4\x84\xc6\x68\x4a\x14\x3c\x19\x96\x19\xaa\x61\x86\xd4\x44\x77\x24\x3f\x00\x33\xa8\x3d\xca\xa0\x9c\xae\x16\xdc\x20\x8b\x11\x7a\x23\xc4\x38\xa4\x68\x87\xfb\x5d\xc4\x45\x96\x07\x58\x67\x4a\xc2\x88\xb8\xa9\x48\xc4\x12\x4d\xc9\x05\x1a\x82\x85\x74\x80\x94\x40\x94\x07\x22\x96\x54\x13\x45\x14\x8b\xa9\x50\x14\x19\xa4\x28\x89\x02\x1a\xb3\x53\x1a\xc0\x12\x39\x3e\xe6\x80\x06\x29\x46\xea\x4c\x93\x89\x25\x21\x24\x23\xea\x6b\x0a\x42\x51\xcc\x34\x65\xc5\x9a\x76\x78\x4e\x47\x6c\xa9\xf5\xe8\xed\xce\x00\x0d\xf6\x5f\x1f\xfd\xbe\x71\xb8\x8d\x76\x06\xe8\xe0\x70\xff\xb7\x9d\xad\xed\x2d\xf4\xea\x0f\x74\xf4\x76\x1b\x6d\xee\x1f\xfc\x71\xb8\xf3\xe6\xed\x11\x7a\xbb\xbf\xbb\xb5\x7d\x38\x40\x1b\x7b\x5b\x68\x73\x7f\xef\xe8\x70\xe7\xd5\xfb\xa3\xfd\xc3\x01\x54\x84\x37\x06\x68\x67\x70\x7c\x8c\x21\x7b\x63\xef\x0f\xb4\xfd\x3f\x07\x87\xdb\x83\x01\xda\x3f\x44\x3b\xef\x0e\x76\x77\xb6\xb7\xd0\xef\x1b\x87\x87\x1b\x7b\x47\x3b\xdb\x03\x0f\xed\xec\x6d\xee\xbe\xdf\xda\xd9\x7b\xe3\xa1\x57\xef\x8f\xd0\xde\xfe\xd1\xf1\x31\xdf\xdd\x79\xb7\x73\xb4\xbd\x85\x8e\xf6\x3d\x68\xbc\x5a\x10\xed\xbf\x46\xef\xb6\x0f\x37\xdf\x6e\xec\x1d\x6d\xbc\xda\xd9\xdd\x39\xfa\x03\x5a\x7c\xbd\x73\xb4\xa7\x5b\x7b\xbd\x7f\x78\x7c\xcc\x37\xd0\xc1\xc6\xe1\xd1\xce\xe6\xfb\xdd\x8d\x43\x74\xf0\xfe\xf0\x60\x7f\xb0\x8d\xf4\x00\xb7\x76\x06\x9b\xbb\x1b\x3b\xef\xb6\xb7\xba\x68\x67\x0f\xed\xed\xa3\xed\xdf\xb6\xf7\x8e\xd0\xe0\xed\xc6\xee\x6e\x71\xbc\xc7\xc7\x7c\xff\xf7\xbd\xed\x43\x3d\x80\xfc\x70\xd1\xab\x6d\xb4\xbb\xb3\xf1\x6a\x77\x5b\x37\x06\x43\xdd\xda\x39\xdc\xde\x3c\xd2\x63\xca\xbe\x36\x77\xb6\xb6\xf7\x8e\x36\x76\xbd\xe3\x63\x3e\x38\xd8\xde\xdc\xd9\xd8\xf5\xd0\xf6\xff\x6c\xbf\x3b\xd8\xdd\x38\xfc\xc3\xb3\xb5\x0e\xb6\xff\xfb\xfd\xf6\xde\xd1\xce\xc6\x2e\xda\xda\x78\xb7\xf1\x66\x7b\x80\x5a\x73\x31\x73\x70\xb8\xbf\xf9\xfe\x70\xfb\x9d\xee\xf8\xfe\x6b\x34\x78\xff\x6a\x70\xb4\x73\xf4\xfe\x68\x1b\xbd\xd9\xdf\xdf\x02\x8c\x0f\xb6\x0f\x7f\xdb\xd9\xdc\x1e\xfc\x82\x76\xf7\x07\x80\xb4\xf7\x83\x6d\xdd\x95\xad\x8d\xa3\x0d\x68\xfc\xe0\x70\xff\xf5\xce\xd1\xe0\x17\xfd\xfd\xea\xfd\x60\x07\xb0\xb7\xb3\x77\xb4\x7d\x78\xf8\xfe\xe0\x68\x67\x7f\xaf\x8d\xde\xee\xff\xbe\xfd\xdb\xf6\x21\xda\xdc\x78\x3f\xd8\xde\x02\x34\xef\xef\xe9\x01\x03\xdd\x6c\xef\x1f\xfe\xa1\x2b\xd6\xb8\x80\x79\xf0\xd0\xef\x6f\xb7\x8f\xde\x6e\x1f\x6a\xcc\x02\xc6\x36\x34\x2a\x06\x47\x87\x3b\x9b\x47\x79\xb0\xfd\x43\x74\xb4\x7f\xa8\x47\x95\x8d\x15\xed\x6d\xbf\xd9\xdd\x79\xb3\xbd\xb7\xb9\xad\xf3\xf7\x75\x3d\xbf\xef\x0c\xb6\xdb\x68\xe3\x70\x67\xa0\x01\x76\xa0\x69\xf4\xfb\xc6\x1f\x68\xff\x3d\x0c\x5c\x4f\xd7\xfb\xc1\xb6\x9e\x28\xfd\x23\x47\xc8\x1e\x4c\x2b\xda\x79\x8d\x36\xb6\x7e\xdb\xd1\x9d\xb7\xe0\x07\xfb\x83\xc1\x8e\x25\x1b\x40\xdd\xe6\x5b\x8b\xf8\x6e\xea\xc6\x36\xdd\x15\x98\x9a\x24\xc3\xae\x2f\xa6\x2b\x63\x11\xb3\x30\x24\xc6\xaf\xc2\xb9\x9a\x0d\x34\x4d\xce\xeb\xb7\x91\xb5\x75\x74\x28\x82\x98\x8d\x05\x7a\x27\x62\x42\x7f\x6c\x23\x3f\xb6\x91\x1f\xdb\xc8\x8f\x6d\xe4\xc7\x36\xf2\xbf\x64\x1b\xd1\xfc\x71\x4c\xf8\x58\x2a\xb2\xc2\xe9\x38\x16\x9c\xd9\xe5\x33\xa1\xe8\xdd\xce\x11\xda\x65\x3e\xe5\x92\xa2\xd6\xbb\x9d\xa3\x76\xc3\x26\xf2\x18\xfd\x8b\xc6\x74\x7a\x81\x06\x84\xf2\xbf\x0d\xd0\x41\x76\xf5\xcf\x24\x9a\xd0\x98\x0e\x2f\xd0\x38\x26\x5c\xd1\xc0\x43\xa3\x98\x02\x33\xf1\x27\x24\x1e\x6b\x8e\x27\x10\xe1\x17\x7a\x11\x4b\xc1\x91\x18\x6a\x56\xad\xf9\x1b\x01\x2e\x7d\x7c\xcc\xc5\x08\x15\xd9\x81\xe6\x85\x44\x4a\xe1\x33\xa2\xb7\x8e\x22\xd3\x1b\xb1\x90\x4a\xd4\xd2\xac\xe9\xf8\x18\x0f\x6c\x99\xe3\x63\xdc\x86\xa6\x02\x4a\xc2\x8c\x5f\x0e\xca\x1c\x26\xa6\x9a\x0f\xfa\x66\x87\x62\xdc\x0f\x93\xc0\x45\x42\xd5\xd9\x21\x9b\x32\xdb\x8e\x2e\x6e\xf6\x4a\xcd\xae\x84\x66\x72\x1e\xf4\xd8\x43\xb0\xcf\xe9\xbf\x14\x06\x08\x7e\x28\xe5\xc4\x43\x29\x93\xa5\x1e\x92\xe0\x9c\x52\xa3\xd7\x73\x7c\x5a\xd2\x30\x34\x7b\x02\x33\x1c\x35\xdf\x43\xcf\xec\x00\xc2\x6e\x99\x16\x5d\x60\x62\x76\x36\x81\xc3\x69\x6e\x34\x4c\xf7\x69\x94\xc4\x9c\xc9\x89\x61\xbd\x81\x40\x52\x40\xab\xfa\x90\xaf\x53\x9a\xb6\xd8\x5e\x46\x03\xa5\xbd\xd2\xee\x51\x76\x2b\x62\x32\x6f\xe2\x61\xb3\xe4\x84\x84\xa1\x66\xf9\x06\x75\x34\xd0\x7b\x21\x29\x0c\x2b\xd6\x9d\x80\x23\x33\x23\x21\x8a\x44\x9c\x6e\xdb\xf9\x21\xa4\x8c\x7c\xbb\x9e\x8f\xe7\x78\xb3\x87\x7e\xdf\x39\x7a\xab\x57\x8f\x65\xa8\xb0\x08\xf4\xaa\xfa\x75\x67\x6f\xcb\xcb\xb1\xec\xe3\x63\x6e\x79\x6f\x8e\x53\x3b\x76\x84\x32\x66\x04\x8b\x6a\x26\x77\xd6\x4c\x27\xc7\x9c\x51\x3d\x6b\xde\xdb\x42\x7b\xfb\x7b\x3b\x7b\xaf\x0f\x77\xf6\xde\x00\x67\x6b\xe0\xcf\x9a\xb9\xbf\x3f\x7a\xab\xf9\x30\x70\xd0\xf2\xe6\x54\x65\xce\xc0\xef\xbd\x94\xbd\x3a\xe6\x02\x3c\xb5\x8e\x73\x6d\xec\xa1\x0d\xb8\x88\xd7\x83\xc9\xd8\x98\xe6\x58\x05\xce\xe4\xa5\x9c\xe9\xf5\xe1\xfe\x3b\x3d\x4c\xcb\x96\xf6\x1d\x03\xdc\x33\x17\xfa\x80\x74\x54\x98\x1f\xcd\x01\x0d\xf3\x4a\xab\x44\x5b\xdb\x1b\xbb\x3b\x7b\x6f\x34\x13\xb6\x03\x75\xe0\x33\x59\x53\x30\x8e\xd9\x9f\x24\x3c\x25\x2b\x7f\x9e\xa9\xce\x58\x34\x4a\xb0\x5b\xe4\x94\xa2\x37\x16\xf8\xf6\xb9\x0f\xba\x75\xde\x83\x6e\x93\xf3\xa0\x5b\xe3\x3b\xe8\x56\xb8\x0e\xba\x4b\x3c\x07\xdd\x01\x8e\x83\x6e\x8b\xdf\xa0\x5b\xe4\x36\xe8\x76\x78\x4d\x83\x8c\x74\x4d\x4e\x83\x6e\x95\xcf\xa0\x85\xb8\x4c\x9c\x48\x19\x0b\x29\x57\x86\x21\xf1\x4f\x46\x31\x0b\xc8\x85\x01\x7e\x95\x25\x68\xb2\xce\x16\x50\x80\x12\x1e\xd8\x53\xd1\x80\x4d\xa3\x90\x8d\x18\x0d\xd0\xab\xc1\x96\x93\x96\x2c\x2d\xbf\x40\x19\xb7\xfa\x7f\xff\x1f\xcd\xac\xd6\xd0\x61\x22\x25\x3a\x14\x52\x42\x7e\xc3\x61\xfb\x05\x64\xde\xca\x79\xfb\x05\xba\xf9\x89\x1b\xaa\xd1\x05\xed\x99\xdb\x74\x6f\xad\x7b\xf3\x73\xf7\x8b\x1b\x9d\x79\x33\x54\xad\x57\xfb\xb2\xf8\x01\xfc\x45\x85\xd5\x2c\xd1\x1d\x28\x9f\x75\x09\x5d\xfb\x10\x0e\x15\x41\xd1\xd2\x31\xdc\x8c\xf0\x76\x8e\xb3\x2f\xd0\x6d\x1d\x68\x5f\xa0\x1b\x1f\x69\xa1\x96\x66\x5e\xb6\xc8\xa1\xd6\x2c\xb2\xd2\xc8\xaf\x73\xae\x85\x8a\x72\x67\x5b\x74\xdd\x93\x2d\x54\x54\x65\xef\xcb\x9d\x6d\x0d\x7e\x73\xe7\x5b\x74\x8d\xd3\xad\xc1\x4d\xf9\x84\x8b\x96\x3d\xdf\xda\xb9\x2e\x9f\x71\xd1\x72\x27\x5c\xc3\xed\x6a\x4f\xb9\x68\xd1\x33\x2e\xd4\x71\xcd\x73\xee\x9f\x8a\xd2\xe4\x8c\xf2\x95\xb1\xe8\x0c\x19\x0f\x88\x22\x4e\xde\x60\x12\x41\xa0\x42\x2d\xe1\x15\xc5\x94\xcd\xcd\x55\xb4\xd6\x5d\x45\xef\x39\x3b\xa5\xb1\x24\x21\x6a\xd9\xa4\x36\x3a\x00\x19\x0a\x6d\x99\xe8\x86\x5b\x34\xb0\x1c\xf6\xf8\x98\x5b\xd9\x6a\x66\x7f\x68\x48\xfe\x26\x71\x98\xeb\x4e\x07\x3c\x04\x8e\x64\xd3\x19\xdb\x43\xdb\x50\x06\xed\x52\x36\x14\xa7\xcc\xd7\x1c\xe3\xbb\x50\xd6\xa2\xdb\x53\xd5\x16\xf8\x33\xa0\x7a\xe9\x0d\xe3\x26\xda\xda\x6a\x47\x9c\x9a\x72\xc9\x8e\xd4\x6e\x13\xc7\xc7\x7c\x51\x6d\x6d\x65\x93\xb8\x1d\x85\x67\x7e\x77\xd0\xd4\x75\xdd\xfd\xa1\xbc\x37\x64\x87\xee\xe5\x14\x9e\x8d\x3b\xc3\xf1\x31\x5f\x42\xe1\x39\x77\x5f\xd0\x27\xf9\x45\x34\x9e\x0b\xed\x0a\xa0\x8b\x6c\xd4\x78\x2e\xb9\x27\xe8\xc3\x72\xad\xc6\xf3\x9a\x3b\xc2\xcd\xf7\x83\x1c\xd8\xf1\x31\xbf\xde\x6e\xf0\x2d\xaf\xcd\x3a\xf2\xaf\xb0\x13\xc4\x9a\xa3\xaf\x4c\x2f\xe4\x5f\xa1\x81\x7d\x23\x3a\xef\x2e\x06\xff\xbd\xdb\xd9\x82\x2c\x04\x6b\x1a\xf8\x78\x5e\xdc\x7f\x27\xfe\x66\x61\x48\x1c\xf7\x77\xca\xd1\xdf\x68\x0c\xa7\xd1\xf5\xee\xaa\xa9\xcd\xc1\xc9\x64\x3a\x25\x31\xd8\x98\xe8\xe2\xb6\x46\x24\x7d\x11\x51\x44\xa4\xe5\x0d\xee\xec\xfb\xee\x60\xb7\x07\x66\x1d\x9a\xcd\x84\x74\xa4\x10\x89\xa2\x50\x9f\x5f\xad\x86\xc2\xe8\x16\xac\xa3\x17\xcd\x51\xde\x1d\xec\xd2\x00\x38\xa7\x63\x02\x9a\x19\x4f\x29\x49\xcf\xd3\x7f\x88\x04\xf9\x04\xe2\xef\x42\x17\x12\xee\x83\x77\xac\xa0\xc0\x76\x87\x42\x4d\x34\x4f\x8a\x62\xb0\x45\x72\xa6\x2f\x53\x1a\xfb\x8c\x84\xe1\x45\x17\xfd\x3e\xa1\x3c\xc7\x75\xf8\xd8\x83\x17\xad\xc0\x29\xad\x92\x01\xea\xcf\xd7\x2a\x46\xd0\x6b\xd7\xa0\xe9\x7d\x1d\x56\x0f\x76\x35\xea\x6c\x0a\x69\x17\x12\x99\x92\x34\x1c\xe9\x7d\x69\xd8\x06\x8d\xcc\x34\x22\x8a\x0d\xc3\x0c\x9b\x2d\xda\x1d\x77\xd1\x9b\x83\x5d\xf4\xa8\xbb\xaa\x01\x37\x22\xe2\x4f\x68\x3a\x3b\xeb\xdd\xd5\x76\x86\x0c\x4e\x69\xc0\x8f\x7f\x9a\xd9\x6b\xf0\xa0\x6f\x0c\x81\x2e\xf4\x34\x85\x82\x8f\xf5\x5f\x60\xe7\xf3\x46\xa1\x77\xbc\x14\xcb\x56\x1d\x15\x52\x22\x29\x8a\x29\x09\x0a\xa0\xaf\x37\xfe\x1b\x31\x68\x0e\x4d\xc8\x29\x45\xa3\x24\x06\xce\xff\x57\x42\xa5\xd9\x44\x62\x3a\x26\x31\x28\x81\x72\xf4\x33\x93\xc2\x43\x36\x5c\x89\xfe\x6a\x90\x22\xd6\x3a\xeb\xab\x6b\x8f\x3c\x74\xfc\x53\xf4\xd7\xf1\x4f\x68\x33\x7f\x51\x77\xe0\x94\x22\xb9\x52\x9b\xa6\x14\x7a\x15\x92\x13\x8a\xde\xb1\xbf\x69\x4c\xf8\xc5\x0f\x1d\xdb\x0f\x1d\xdb\x0f\x1d\xdb\x0f\x1d\xdb\xa2\x3a\xb6\x3f\xa7\x82\xc5\x82\xaf\xc8\xbf\xc2\x26\x3b\x94\x47\x1e\xfa\x17\xd1\x9c\xe1\x1d\x80\xde\x98\xc3\x1c\x1f\xf3\x9b\xf1\x98\xe3\x63\x7e\x03\x2e\x73\x7c\xcc\x6f\xc2\x67\xac\x55\xc8\x37\xbb\x45\xd4\x52\xe7\x35\xb9\x8d\x31\xff\xb8\x4d\x7e\x03\x37\xb5\x77\x83\xe3\x1c\x1f\xf3\x1b\xf2\x1c\x23\xe2\x5e\x8b\xeb\x1c\x1f\xf3\x1b\xf0\x9d\xe3\x63\x7e\x13\xce\x73\x7c\xcc\x6f\xc2\x7b\xf4\x01\xeb\x26\xdc\x47\xa3\xed\xfa\xfc\x67\x7a\xa1\x62\x16\xd2\x95\x29\x9b\xd2\x8e\x31\x96\x5b\xda\xc2\x61\x0b\xd6\x6b\x8c\x7e\x15\x52\x89\xd3\x2f\x22\x01\x55\x4c\x9e\x6e\x41\x06\x82\x3a\x6f\x4f\x0a\x3a\x3e\xe6\xb7\x2d\x07\x95\x7a\x78\x0b\x92\xd0\xf1\x31\xff\x61\xe3\x70\xcb\xf2\x90\xd3\x90\xdc\x9a\x44\xa4\x57\xd9\xad\xca\x44\x7a\xd0\xb7\x23\x15\x41\xd7\xbe\x86\x5c\xc4\x93\x67\x13\xa2\xfc\xc9\xca\x58\x24\x09\x0b\x2a\xbc\xc7\x9d\xbe\x86\x17\xe8\xd7\xf8\xef\x0b\xf9\xb7\x12\x23\xf4\xab\x38\x23\x21\x3b\x41\xfe\x24\x66\xf2\xbf\x4c\x15\x5d\x50\x06\xff\xe0\x48\xb7\xc0\x91\x9c\xad\xd9\xad\x71\x24\xcd\x8d\x7e\x58\x5d\xfd\xb0\xba\xfa\x4e\xac\xae\x62\xb9\x72\x5e\xc3\x8a\x8c\x18\xf4\x04\xed\x87\xec\x94\xd1\x18\x1d\x08\xa6\x62\x7a\x81\x62\xf9\x5f\x01\x61\xe1\xc5\x54\xc0\x4d\x84\x0f\x86\xdb\x3f\xcc\x3f\xef\x82\xf9\x67\xc6\x88\x4c\xef\x7e\x98\x7f\xfe\x60\x44\xdf\x98\x11\x95\xa6\x73\x26\x23\x92\x93\x24\xf6\x85\xd8\x5d\x91\x84\x33\xc5\xfe\xa6\xc1\x27\xc2\xfd\x89\x88\x3f\x71\x32\xa5\xf6\xc2\x24\x3b\xbe\x35\x72\xac\xad\x29\x53\x31\x43\x83\xff\x9f\xbd\xf7\x5d\x6e\xe3\x48\xf6\x05\xbf\xfb\x29\xea\x60\xe3\xce\x00\x1b\x4d\x90\x94\xad\x99\x63\x39\x74\xcf\x50\x24\x25\x73\x86\xa2\x78\x08\xca\x3a\x5e\xd1\x31\x5b\x40\x17\x80\x36\x1b\x5d\x70\x57\x35\x21\xd8\x47\x11\xfb\x10\x1b\xf7\xeb\xbe\xdb\x7d\x92\x8d\xca\xcc\xfa\xd7\x68\x80\x20\x01\xd9\xb2\x07\x8e\x7b\xcf\x88\x64\x77\x75\x55\x56\x56\x56\xfe\xf9\x65\xe6\xb8\x2a\x79\x3e\xff\x14\xa6\xdb\x4e\x3e\xed\xe0\xe9\x3b\xf9\xf4\x47\x90\x4f\x0f\x51\x94\x7e\x94\x65\xca\x8b\xbd\x19\xf0\xdd\xbe\x98\xf0\x8c\x22\xc9\xa7\x39\x16\x2f\xb0\xfc\xe2\x64\x42\x86\x05\x7a\xe0\xf8\xb3\x99\x28\x05\x41\x33\x29\xe3\x8d\xad\x1e\xdc\xf0\xf4\xcd\x4d\x61\x06\xaa\x1d\x11\x38\xa4\x03\xc1\xfa\x22\x97\xb3\x67\x0f\x77\x6e\x7d\xc9\xfe\x0e\x9f\x63\xef\x2c\x2c\x73\x67\x49\xee\x7c\x5b\x7f\x7c\x01\xb9\xf3\x6d\x7d\x42\xdf\x56\x2e\x53\xae\xc6\xf4\x3f\x8d\x32\xa9\x2e\x8d\xfe\xde\x63\x2f\x65\x55\xa4\x0e\x32\x4d\x30\xb8\x28\x9b\x98\xea\xa6\xe0\x07\x6d\xef\xe4\x1f\x55\x77\xe8\xde\x6c\x25\xad\x86\x0e\xca\x37\x37\xc5\x0b\xae\x44\xca\x64\xc1\xde\x16\xa9\x28\xd5\x40\x96\xa2\xfb\xa3\x4a\x82\xb3\x41\x59\x8c\x47\x6a\x7c\x2b\x0a\xae\x20\xab\x94\xe4\xd2\x71\x2e\x2b\x6c\xd7\x71\x56\xdc\x09\xa5\xb3\x11\xd7\xd9\x9d\x60\x57\xc2\x70\xbf\x28\x15\xfb\x13\x3b\x4d\xb3\xfa\x1c\xdd\x14\x2b\xf7\xcd\x1f\x55\x57\x96\xa3\xa5\xb3\xbc\x8e\xa4\xe4\x40\x16\x2a\x53\x78\x97\xdc\xc9\xbc\x2a\x34\x2f\xe7\x9e\x22\x70\xea\x26\x3c\x15\xac\x3f\x67\x13\x44\x66\x64\x45\x9a\xdd\x65\x69\xc5\x73\xd5\x65\x2f\x65\xc9\xc4\x07\x3e\xd0\xd1\x3b\x6c\x9c\x29\x2d\xcb\x79\xc2\x94\x40\x54\x50\x29\xee\x32\x15\xfc\xc5\x5c\x34\x77\x3c\xcb\xb1\xa6\xa7\x66\xeb\x6f\xb0\x17\x47\x16\x9e\x13\x62\x98\xf2\x1c\x6a\xe7\xa8\xc5\x58\xac\xf8\x30\x10\x53\xcd\xb8\x51\x0b\xed\x65\x20\xd2\xe8\x4e\x7b\xfe\xfc\xf9\xf3\x2d\x5e\x4e\x66\x8d\x9b\x81\x4f\x30\x3f\x7c\x1b\xf0\x93\x9b\x9b\x62\x0b\x00\x94\x30\x87\xff\xd1\x10\x94\x9b\x9b\x62\x2b\x20\x14\xba\xfb\x3e\xd9\xf5\xf4\x87\x0a\x0b\xb3\x37\x2f\x8d\x39\xfb\xeb\x87\x85\x83\xeb\x89\x14\xf3\xcd\x01\x29\x18\xe3\xde\x1c\x92\x72\x73\x53\x6c\xe5\x82\xf2\x72\xc3\x5f\x36\x86\xc1\x4a\x91\xc3\xf1\xa6\x23\x36\x34\x7c\xc3\x27\xd3\x9c\x70\x80\x70\x6a\x39\x14\xa4\xb8\xcb\x38\x3b\x3e\x3e\xe8\xb2\x1e\xfc\x1d\x34\xa1\x14\xce\x00\x56\x4a\x33\xd2\x02\x38\x30\xc4\x11\xa6\x99\x9a\xe6\x7c\x4e\xa8\x6d\x92\x07\xd3\x52\x2a\x41\x9c\x18\x48\x3a\x1e\xe0\xb8\x8f\x8f\x0f\x9e\x81\xc0\x7d\xb6\xbf\x3f\x28\x05\xdc\x33\x03\x39\x99\xc8\x02\x6e\x8e\x7d\x38\xed\x83\x14\x12\x0f\xf6\x7f\x16\xa5\xdc\x3f\xec\x1e\xec\xd7\x97\xfa\x12\x61\x8a\x12\x0a\xf3\x59\x69\x54\xc8\x54\xfc\x13\x4b\x25\x22\x3e\xfd\x0e\xca\x71\xb0\x34\x2b\xc5\x40\x4b\xac\x7a\x06\xc2\x58\x8b\xb2\xe0\x79\x6e\x2e\x02\xf3\x1d\x6a\x2c\xe8\x6b\xa3\x41\x39\x8f\xfe\xbc\x26\x37\x67\xe3\x6c\x30\x46\x28\xa3\x1e\x8b\xac\x64\x72\x16\x24\x44\xa8\x6f\xd8\xcc\x5c\x35\x00\x2c\x2d\x52\x80\x3d\x5a\x48\xe4\x24\x21\x7c\x65\x56\x32\x2d\xca\x09\xd6\x0d\x49\xb3\xe1\x50\x94\xb6\xf2\x9a\x21\x18\xfe\x0d\xa4\xc6\xea\xba\x06\x03\x3e\x99\xf6\x45\x9e\xef\x4f\x64\xa5\x84\x2e\xf9\xd4\x3d\xce\x56\xfe\x17\x83\x47\x57\x3c\x1e\x80\x7e\x13\xf6\x77\x5e\x54\xe6\x6a\x7e\x72\x70\xf0\xd5\xb2\x77\x68\x4f\x67\xb3\x59\x97\xc3\x47\x60\x3b\x2d\x71\x68\x07\xaf\x4f\xaf\x5e\x3b\x60\xfe\xc9\x99\x39\x07\x78\xfe\x01\xf4\x7d\x75\x7a\x79\xf5\xe6\xe4\x2d\x1c\x8f\x04\x9e\x3a\x39\xeb\x21\xa0\x1d\x0f\xcc\xcd\x4d\x71\xd8\x65\xd0\x99\x01\x65\x6d\xd7\xad\xf9\xe6\xa6\xe5\x16\xd5\x22\x31\x3a\x11\x1c\x39\x83\xe8\x8a\xd5\xbb\x6d\x06\x83\x39\x11\x70\xeb\xd8\x54\x08\xb8\xb5\x70\x34\xf3\x68\x9c\x61\xe2\x0f\x43\x7f\xce\x7a\x02\xab\x2e\xb3\x43\xa6\xc7\xa5\xac\x46\x63\xf6\xb5\xbb\x67\x2d\xd7\x37\xcc\x4d\x96\x0d\x93\xf3\xd7\x03\xf4\x50\x33\x02\x5e\x14\x3a\xd3\x73\xe8\xdc\x2c\xcb\xec\x67\xf8\x28\x0e\xd5\xf4\x02\xa4\xa8\x64\x0a\x55\x04\x0b\xa6\x3d\x8f\xc0\xb4\x34\x09\x31\xe2\x39\x3b\x85\xc1\x1b\x26\x52\x15\x66\xa5\x74\x8f\xf0\x01\x0c\x65\x67\x62\x54\x06\x30\x92\x18\x23\xc5\x15\xfe\x02\x9a\x8f\xf9\x3c\x15\x0c\xc5\x34\x1a\x57\x3d\xd4\xcc\x3b\x31\x0b\x42\xd4\x70\x0a\xfa\xae\x39\xeb\x38\x10\x3d\x67\xf3\x3e\xb8\xa6\xcf\xa1\x66\x07\x02\xa5\x2a\xa7\x52\x09\xaf\x51\xa5\x6e\xef\x13\xb7\x2c\x1a\xc6\xac\x08\xb0\xe1\xac\x9d\x21\xc8\x7a\x2a\x67\xa2\x4c\xe8\xfc\x9b\x69\x18\xed\xd1\xfc\x1b\x14\x99\x01\x27\xd4\x38\x0e\x84\x7f\x01\x0a\x94\x41\x3f\x0f\x48\xe1\xa9\x06\x63\x9a\x5a\xc2\x66\x63\x01\xeb\xef\x93\xa6\xca\x61\xe8\x80\x32\xb3\xcc\x30\x95\x2c\x59\x3b\xcb\x3a\x71\x5f\xbc\x61\x36\xd4\xa0\xaa\x0d\xcc\xc8\xed\xa7\x07\xff\xa3\x03\x5f\x93\x65\x20\x35\xcd\x38\x95\x36\x17\x3c\x18\xf6\xd0\x4b\x4f\xd9\x01\xb3\x0e\xeb\x8b\x42\x0c\xb3\x81\xb9\xfc\xe3\xa6\x7b\x7e\x96\xd1\xae\x7f\x2f\x2b\x43\x9a\xb6\x2c\xe9\x27\xc3\x84\x9d\x70\xf3\x79\xc1\xbc\x5e\x6d\x3e\x14\x33\x8a\x19\x47\x7c\x10\xe5\x20\x53\x66\x42\x5e\x69\x51\x56\x2b\x75\xb2\xb2\x89\xeb\x7a\x70\x6b\x98\x29\x40\xf6\x51\x8d\xe9\xa6\xa5\x18\x8a\xb2\x14\x29\xfe\x75\x08\xc4\xbf\x35\xdf\x09\xd3\xb3\x14\xed\xb6\xf7\x77\xf4\x2b\x50\xa7\x50\xa1\x44\x25\xcd\x09\xea\xe0\x9e\x4a\x16\x70\x8f\x8c\xd1\xdf\x93\xa8\x9c\x7f\xa0\xfd\x46\xb3\xc7\x9a\xa1\x4d\xb3\x87\x94\x05\xf3\xbb\x52\xa8\x2a\x87\xd3\x02\xa2\x7c\x22\x06\x63\x5e\x64\x03\x4e\xc7\x05\x0a\xa5\x9a\x07\xb9\xe5\x2e\xf8\x4d\x4e\x3f\x0e\x19\x67\x48\x22\x18\x2d\x89\xd7\x88\x43\xd4\x16\x3a\x90\x93\x69\x66\x4e\x97\x44\x75\x14\x17\x8a\x5d\xa2\x16\x34\xfa\x40\xa2\x0d\x64\x71\x87\x62\x1d\xd4\x5e\xca\xc3\x12\x69\xc6\x99\x9e\x4f\x6b\x0b\x7f\x27\xcb\xdb\x06\x21\x01\xc9\x84\x66\xd2\x58\x98\x73\x9c\x4d\xfd\x91\xc8\x0a\xbb\x12\x7b\x20\x90\x7a\xb4\x30\x30\xe5\xbc\xe1\xe5\x73\x0b\xce\x9d\x1e\xaf\x80\x11\xf1\x56\xef\xcf\x19\xb7\x72\xa2\xa6\x40\x5b\x89\x17\xaa\xc8\x46\xca\x68\x6d\x2e\x9e\xd4\x3a\x8f\x66\xb0\x04\x33\x42\x9b\x17\xc6\x52\x04\xf5\x27\x0b\x32\xce\x48\x73\x38\x9a\x4e\x45\x91\x66\x1f\xd0\x20\xeb\x44\x74\x38\x11\x90\x35\x62\xcc\x61\x43\x12\x55\xa3\x89\xe1\x02\xf3\x9d\x66\x2a\x30\xcb\x3e\x66\x30\xa4\x82\x9d\x7b\xdf\x1a\xec\xe6\x60\x86\xb5\xc1\x50\x76\x99\x6f\xc1\xa6\x99\x13\x81\x9a\x87\x13\x0f\x02\x4c\x71\x23\x00\xac\x65\xab\x0c\x33\x17\x52\xd3\x61\x61\x22\xe7\x7d\x59\xda\x9f\x7c\xce\x5d\x78\xa4\x70\x2c\x73\xf9\x09\x25\x0a\x0d\xd4\xe7\xc6\x16\xca\xe1\x68\x30\x59\x66\xa3\xac\xe0\x79\xc3\x96\x2f\x0a\x68\x92\x5b\xc3\x48\x0c\x24\xac\x4e\x3c\xa2\x9c\xe1\x67\xda\x3b\x18\x9d\x2e\x91\x52\x18\x6d\x8c\xce\xa8\x98\xf2\x12\xf8\xc4\xd0\x04\xd6\x30\x11\xa5\xc8\xe7\x2c\xcf\x8a\x5b\x20\x5a\x3f\x2b\x80\x4b\x0a\x3e\x11\x1d\xbb\xe7\x99\x51\xa2\x86\x50\x8c\x5c\x0e\x13\x7f\x69\x3a\x7a\x2e\x4c\xc9\x50\x46\xc8\x61\xb4\xe9\xc7\x81\x3f\x61\xc9\x86\xd7\x0f\x41\x68\xed\xd2\x37\x1d\x05\xe9\xd4\xd9\xbb\xd5\xcd\xc5\x8c\x15\xed\x09\x70\x71\xea\x0b\x13\x98\x81\x24\x12\x07\x5e\x92\xe5\xd2\xf9\x27\xc1\xa9\xd0\xe6\x1a\x90\x56\xc5\x35\xd4\xac\xfa\x94\xd8\xaa\x25\xb3\xba\x08\xb0\x16\x4c\x1b\x7d\x0d\x85\x9f\x1c\xc8\xf3\x05\x4d\x83\x36\x19\xee\xbe\x95\x77\x46\xa8\xb9\x18\xc1\x0c\x5f\x37\xbc\xde\x17\x63\x9e\x0f\xd1\x77\xdc\xac\xcd\xac\x77\xf7\x9b\x3d\x72\x6b\xc2\x74\x4e\xc6\xe8\xf6\x77\x72\x59\x0e\x99\xc8\xc5\x40\x97\xb2\xc8\x06\x89\xd9\x84\x3e\xcf\x81\x93\x6c\x59\x3d\xa3\x8c\x54\x05\x11\x9f\x99\x53\x10\xd0\x5c\x78\x42\x19\x3a\x41\x12\x32\x9d\x15\x20\xbf\x4a\x56\x5e\x47\x56\x74\x85\x5f\x90\x45\x30\x23\x36\xe1\x59\x8e\xae\x24\xa5\x55\x12\x59\x57\x56\x33\x52\x73\xa5\xc5\x44\x05\x32\x3c\x53\xaa\x12\xe6\x06\x19\xc0\x25\x49\x0f\xe0\xde\x43\x36\x32\x68\x2e\x4e\xf1\x0a\x69\x9e\x78\x09\x12\xb1\x40\x40\x6c\x43\xb3\x34\x53\x83\x4a\xc1\x55\x0f\x1f\x9c\x80\xb4\x24\xb5\xf2\x1d\x88\x3a\x77\x31\x89\x0f\x96\x00\xf1\x42\x2d\x2b\x0e\x64\xa1\xa6\xd9\xa0\x92\x95\xca\xe7\x6c\xc2\xcb\x5b\x23\xf3\x4a\xaf\x28\x91\xee\x25\x54\x36\x2a\xac\x2d\x67\x76\x07\x68\xda\xc8\x84\x46\x4c\xdd\xdc\xb4\x2e\xa4\x66\x9c\x85\xe7\xb4\x8b\x7c\xb0\x78\x86\x17\xb4\x6e\xb7\x7a\x7b\x06\xef\xd3\x7e\x42\x2a\xa2\xb7\x28\xfe\x34\x1b\x73\xc5\xfa\x42\x14\xc6\xfe\x13\x20\xc9\xfb\xf3\xe8\x33\xee\x18\x2a\xf1\x53\x25\x0a\x9d\x9b\x8f\x0e\x64\x39\x95\x78\x65\x07\x46\xb4\x21\x31\x09\xa3\x27\x5d\xf6\xca\x68\x58\xe6\xb3\xde\xba\xb7\x4a\x16\xeb\xc5\xb1\x92\x46\x2b\xc7\x1f\xb5\x50\x2e\x0b\x3e\x18\x87\xf9\x71\x91\x97\x11\x94\x83\xef\x65\xc5\xb8\xd1\xf5\xa6\x42\x57\x3c\x27\x0e\x9c\xc9\x32\x4f\x67\x99\x51\x37\x0a\x59\xec\xc1\xf6\xab\xec\x0e\x7e\xdc\xb3\x1e\xc9\x52\xce\x79\xae\xe7\x7b\xc3\x52\x88\x84\x65\x65\x29\xee\xe4\xc0\x88\xf2\xfa\x6d\x6e\x7d\xa8\x5a\xfa\x74\xf4\xc4\x68\x84\x53\xc3\xc9\x0b\x82\xce\xc9\x73\xf4\x11\xe4\x73\xeb\x84\x48\xfc\x6f\xa6\xa2\xc4\x6b\xb6\xe6\x1e\x0c\x22\x5b\xfe\x14\x38\x39\x0c\xaa\xf3\xc2\xf7\x1a\x2e\x72\x10\x2c\xb4\x39\x5f\x06\x9b\x73\xc9\x8d\xc8\xfd\xbd\xef\x4c\xdb\xb9\xa9\x19\x54\xa9\x4f\x5d\x50\x57\xa1\x69\xd4\x61\x53\x5c\x68\xb0\x73\x13\x7e\x2b\x12\xf4\x8a\x18\x05\x8f\xa6\x03\x86\xb5\x04\xff\x86\xb9\x00\x44\x9e\x27\xf4\x7f\xb3\xc9\x54\x96\x3a\xf1\x21\x10\x23\x06\x48\x49\x26\x7d\x10\x84\x0c\x2d\xcb\x2c\x1f\xf7\xa7\xee\x71\x97\x45\x3e\x47\x02\x1b\xc1\x45\x13\x83\x0a\x04\x36\x81\xd5\xaf\xac\x3f\xc7\x31\x42\xc2\x3a\x91\x59\x88\x81\x50\x8a\x97\x19\x1c\xca\x61\x99\x15\x23\x6b\xd2\x88\x8c\x2e\xbd\xf0\xb4\xb7\x55\x87\xf1\x5c\x16\x82\xae\xc2\x81\x9c\xf4\xb3\xc2\xa9\xf3\xe8\xe6\xa9\xbd\x40\xab\xb1\x05\x0e\x80\xf3\xc0\xf3\x6c\x14\xbb\x78\x6a\xf4\x85\x19\x57\xfe\xda\xee\xb2\xb3\x21\x03\x43\x0e\xad\x20\xa5\x33\x6d\x58\xd9\x6d\x07\x86\x6c\x64\xc1\xf8\x88\x9b\x3f\x83\x58\x23\xe3\xbd\xed\xaf\x29\xab\x50\x97\x52\xa9\x3d\xa0\x95\x59\xc3\x40\x56\x46\x6b\xc2\x9f\xb3\x82\x71\x96\xf3\x99\xaa\x32\x6d\xd6\x99\x8b\x11\x0a\x7f\xaa\x83\xf1\xce\x29\xd5\x46\xb2\xc5\x62\x70\x95\x48\x83\xbb\x00\xa7\xad\xc8\xd8\x76\xc3\x04\x41\xb0\xb9\x5d\x93\xdd\x89\x09\xe8\xa6\x7a\x2c\x50\xf5\x8a\x19\x90\x74\x24\x6b\x86\xd2\xe9\xb0\x96\x85\x3f\x57\x74\xcf\x59\x35\x0a\xef\x02\x73\x2a\xcd\xbe\x11\x8f\x70\xe7\x43\x4f\xa1\xa3\x0d\xf2\x9c\x23\x2c\x41\x1b\x6c\x05\x92\xaf\xea\x35\x99\xba\xf0\xe9\x09\x9f\x07\xa5\x35\x6a\x82\x27\x0a\x4d\x04\x22\x68\x85\x56\x07\xdb\x61\xb4\x44\x91\x66\xd5\xa4\xa9\x8a\x89\xd1\x7b\x22\x4b\x19\x6f\xed\x25\xb2\x2b\xa9\x55\x36\x71\x3c\x35\x11\x62\x79\x9d\x93\x67\xee\x5e\x6d\xf3\x0e\xae\xb3\x52\x9a\x8d\xcc\x74\xcd\xec\xd0\xba\x28\xc5\x20\x9b\x66\x21\x38\x84\x56\xe7\x5d\x86\x0b\xcb\xac\xc5\xa8\x68\xbb\xbe\xa1\x2b\x93\xbe\xd9\x0f\xbe\x89\x5e\x1b\xaf\x38\xbb\xcc\x7b\xf0\xe8\x94\x86\x7f\x4a\x39\xc9\x0a\xc3\x24\x68\x2d\x2a\xff\x79\x23\xd5\x1c\x33\x43\xed\x00\x4a\xde\x77\xa9\xef\xb5\x2f\x0f\x82\x2f\x63\xdd\x96\xc4\xc7\xbe\x9c\xcd\x6e\x4b\x01\x2c\x9a\x8a\xf6\xc3\xee\x83\x61\x04\x8b\x82\x3a\x78\x19\x26\xc4\xd9\x89\x11\x85\xa9\x30\xaa\x52\xe2\x15\x07\xf3\x1f\xd7\xfe\xa0\xd1\xca\x9c\xef\xb8\x3e\x9b\x9a\x14\x65\x91\xaa\x86\x02\xd3\x0e\x01\x53\x4b\x25\x68\xaf\x53\x51\x62\x6d\x1a\x8a\x29\xf2\x52\xbb\x6b\x8a\x91\xbe\x5e\x5f\x64\x8d\x62\x69\xc7\x88\x2a\xb7\xf9\x64\xe5\x99\x8d\x36\x4a\xdb\x9b\xeb\xb3\xe3\x53\xa3\x8d\x69\xf1\x41\x23\x54\x88\x2b\xfb\x1d\xaa\xaf\x4d\xdf\x0a\xcf\x56\x70\xfe\x1b\x0e\xca\x02\x69\x61\xbf\xfc\x48\xd6\xd2\xe4\xe0\x8f\x07\x9b\xd2\x33\x9d\x68\xa4\x2b\x15\xa1\x10\x01\xf9\x49\x9c\x81\x58\xc0\x75\xc0\xfc\x93\x75\x08\xeb\x47\x69\xa6\x70\x23\x61\x81\xd3\xb8\x66\xb9\xe0\xca\x18\x4f\x81\xb7\x9e\xde\xf0\x47\x75\x9a\x1b\x8b\xf7\x99\x9d\x24\xb7\x33\xf4\x64\x0e\x0a\xfc\x05\x2c\xa5\x56\xce\xe0\x9b\x50\x86\x47\x1c\x16\x1c\xe9\xd8\xd9\xc4\xb2\xa1\x97\x30\x1c\x2a\x4b\xb8\x4b\x6f\x71\x78\x59\x26\x0b\x04\xe6\x56\xab\x0b\x1c\x5a\x64\x09\x34\x50\x68\x18\x9f\x11\x50\x17\xee\x44\x89\xdb\x04\xed\x6c\xf6\xb0\x41\xa7\xdd\x95\x42\x96\x13\x63\x17\x1b\x35\x42\xf0\xb2\x4b\x15\x49\xc0\x64\x56\x0b\x14\x0e\x36\x1a\x54\x05\xb4\x98\x9d\x33\x8f\xe7\x81\x95\x6a\xd4\x91\x68\x32\x74\xa8\x30\x9c\x1d\x39\xe5\xdd\x55\xc1\xd3\xd4\xfc\x1b\x42\x49\x21\x23\xfa\x41\xec\xbc\x89\x3a\xeb\xb0\x7f\x82\x84\x57\x59\x1a\xb2\x0c\x18\x4e\xbc\x80\x96\x8e\x45\x5a\x4d\xac\x6e\x1a\x71\x8a\x15\x27\x68\xe6\xd9\x8d\xac\xc9\x31\xa0\xad\xf5\x52\xf0\xbc\xf9\x00\x81\x3b\x8a\xf5\x11\xe4\xa1\xcb\xaa\xc6\x76\x48\x94\xa5\xc1\x8a\x46\xfa\x78\xc3\xc1\xf5\x50\xa2\x1b\xbf\xe6\xd9\xf2\xdb\x60\xc6\xa0\x55\x84\x33\x86\xa0\xa0\x51\x4e\x23\x5d\xb6\x41\x49\x77\x8e\xbb\x86\x48\x11\x8e\x12\xc4\x88\xe4\xb0\x61\x2e\x89\x3b\x2c\x43\xb0\x04\xe7\x4b\x8c\x8d\xd0\xf9\xe6\x0e\x10\x0c\x47\x29\xf3\xe4\xab\xf3\x9f\x5f\x88\x51\x45\x97\xae\xd3\xac\x07\x72\x82\xfa\x32\x95\x61\x74\x6e\x17\x67\x88\xd4\x74\xfd\x78\x33\x9e\x82\x31\x63\x51\x0a\x60\x87\x06\xf0\x9c\x2e\x7b\x5b\xe4\x42\x29\xd8\x30\xf1\x61\x9a\x67\x83\xcc\xd8\xb6\x30\x64\x10\x0e\xb1\xfe\x8b\x79\x5d\x5f\x0c\x3c\x55\x81\x93\x6a\xa9\x63\xca\x69\xf3\xe6\x7b\x75\x2f\x8d\x83\xf6\x79\xcf\xf2\x03\x0c\x2f\x8b\x50\x31\x93\x0c\x58\x05\x47\x40\x1d\x35\xf5\x41\x47\xc6\xd8\x85\xd4\xe6\x1d\x17\xa8\xd1\x16\xf0\x61\x4c\x2e\x73\x58\x47\x60\xbb\x99\x3b\x03\x26\xa6\xaa\xa9\x28\x95\x48\x05\x86\x7c\x0c\xff\xfb\xed\xa0\xcf\xa0\x1e\x81\xbe\x4f\xed\x6b\x00\xf1\x51\x29\x90\xdf\xe7\x74\x30\xc0\xde\x12\x1f\xc4\xc0\x0b\x74\x90\xb3\x8e\x18\xbe\xb4\xce\x82\x75\x61\xfd\xfc\x7f\xe9\xb2\x6b\xab\x6b\x28\x23\x08\x03\x7d\x39\x95\x20\x2b\x35\xaa\xd6\x21\x50\x05\xb1\x3a\x38\x69\xf3\x36\x45\x28\xf8\x44\xa8\x40\x77\x51\xc6\xdc\x83\xd6\x72\x8c\x7e\xc4\x96\x18\x86\x7b\x7d\x43\x8d\x70\xfb\x12\xe7\x51\x22\x13\xb4\x14\x3f\x55\x19\x05\x86\xcc\xcd\xad\x64\xd0\x84\x19\x9a\xbf\xf1\x72\x6e\xcb\xfe\xa5\x42\x0d\xca\xac\x4f\xfb\x60\x0d\x8b\x6c\x94\x2d\x3a\x5d\xed\x29\xb2\x7b\x46\xc2\xbf\x41\xe4\x13\x9d\xfe\xda\x65\x27\xbe\xb6\x9d\x1c\xb2\x77\xbc\x34\x54\x99\x3b\xee\x77\x53\xed\xcf\xd1\x3c\x05\xa3\xda\x58\x51\xee\xf4\xc3\x16\x82\x85\xe2\x3d\x5c\x89\xdf\x2e\x3a\xf2\xca\x4f\xb5\x6d\xe6\x2a\xf8\x60\x5c\x33\x40\xc3\x87\x33\xad\xe2\x9d\xed\x30\x00\x17\x46\x75\x50\x5f\x1c\xf5\xce\x7a\x44\xdd\x1a\xd0\xe7\xec\x94\xf0\x32\x2e\x16\x1f\xe1\x52\xa9\x3f\x8a\xf8\x30\x2d\xcd\x2a\xed\x52\xa0\x28\xb0\x48\x03\xf7\x67\xd2\x00\x3f\x4e\xd0\x53\x8e\xa4\x22\xe0\x52\x5d\xb0\xca\x21\xbb\x3e\xbb\x3e\x3f\x4d\xd8\xc5\x9b\x8b\xbd\x10\xe5\x93\x2c\xe2\x59\x65\x19\x23\x86\x70\x88\x45\xd8\x10\xde\xae\x18\x07\xcc\x45\x6e\xec\x31\x35\x95\x85\x82\xaa\x5a\x43\x08\xb6\xa0\xe5\x17\x31\x0b\x9f\x4e\x4b\x39\x2d\x33\xa3\x84\xc3\x62\x87\xac\x02\x1f\x28\x30\x5f\x58\x1a\xac\xe6\xc2\x57\xaa\x9a\x80\x41\x42\x32\x3a\x53\x20\xcd\x1d\xbc\x0e\x8e\x25\x08\x72\x8a\xa1\x82\x93\x35\x0c\xa2\x2e\x9a\xab\xc4\x78\xff\xde\x65\xe7\x1e\x2f\x27\x87\xec\x3c\xe3\xfd\x2c\x87\x08\xf9\x99\xb9\x6b\x99\xb8\x33\x9c\x0b\xe5\x2f\x61\x90\x42\xb2\x1c\xbc\x97\x7a\x2c\x64\x39\xf7\x4e\x14\x1b\x99\xd2\xb2\xd4\xa1\x43\xa0\x10\xa3\x3c\x1b\x89\x62\x20\x3a\x89\x8b\x67\x27\x91\x8b\xd6\x7a\x74\xee\x65\xf5\x36\x2a\x06\x8a\xa5\x22\xcf\xfa\xa0\xba\xc1\xd4\x46\xa5\x54\xca\x46\x22\xec\x07\x35\xe3\x03\xad\x20\xfc\xdd\x7c\x34\x50\x68\x46\x57\x86\x2c\x11\x19\xc7\x18\xcb\x33\xf8\x2c\x19\xfc\xb0\xab\x7c\xc2\x47\xb1\x53\xde\xbc\x6c\x03\xfe\x3e\xf4\x0f\x2d\x76\x9c\xdf\x2c\x2b\x06\x59\x6a\xd4\x57\x8c\x0c\x18\x6d\x05\x3d\xb4\x19\xcf\xed\x98\x41\xa9\x37\x43\x1e\x51\x32\x5e\x62\x2c\xdc\xdc\xda\xf6\x6e\x56\x55\xae\xeb\x86\x2c\x10\xb2\x72\xb2\xa5\xc2\xdf\x64\x05\x6d\x63\x20\x4c\x03\x77\x40\x7b\x65\x94\xdb\xce\xc9\xac\x39\x97\xc8\xa9\x23\x29\xd3\x59\x96\x07\xbe\xc0\x5b\xa6\xb4\x9c\x4e\xf9\x08\x50\x95\x93\x69\x65\x66\x3d\xe4\x59\x5e\x95\x78\xff\xf0\xdc\x76\xc6\x44\x80\x46\xd1\x08\xf2\xf0\x55\xf2\x3c\x2d\xf0\xb3\x42\x75\x12\x60\x3f\xa3\x83\xd7\x7d\x6b\x38\x84\x73\x8a\xf3\xf4\x2e\x83\x60\xe7\x90\x60\x19\x4a\x65\x44\x00\x8b\x5b\xa0\xd1\x89\xf1\xbf\xee\xb2\xa3\x81\xb9\x07\x0c\x0d\xac\xb4\x85\xda\x77\xfe\x62\x0e\xce\xc2\xbb\xb1\xd1\xcf\xe3\x53\x5a\x8b\xfc\xad\x0c\x9c\x59\x6d\x73\x30\x96\x12\x9d\x9a\xe0\xb9\x0c\x23\xe7\xe0\x40\x65\x9c\x0d\x05\xc8\x90\x84\x71\x98\x1f\x2f\x06\x02\xd7\x30\x45\xaf\x26\xc9\xbb\x39\x30\x9c\x98\x14\x99\xb6\x87\xd0\x05\x61\x73\x3b\x71\x26\xfb\x39\x79\x97\x94\x85\xb0\x12\x5a\x8f\x90\xd1\xe6\x98\x90\xf9\x94\xa9\x30\x72\x23\xba\xec\x5b\x39\x33\x96\x0e\x5a\x89\x8e\x58\x40\xcc\x60\x5c\xbf\x38\xc0\xa9\x14\xb9\x8f\x68\x38\xbd\x9a\x42\x1b\xe0\x90\xa5\x5f\x1b\xc9\xe9\xe5\x26\xcc\x16\xb4\x1a\x1f\x09\x71\x02\xdc\xfb\x7f\x02\x06\x20\xf7\xae\x31\x89\xb2\x21\xca\x63\x73\xc8\xf1\x8c\x03\x5d\x86\x96\x2e\xa9\x18\x8a\x22\xc5\x17\xc6\x32\x4f\x1b\x3c\xe0\xbc\x9c\x80\xec\xb1\x1a\xb4\xa3\xa0\x3b\xc2\x55\x59\xfa\x98\x17\xf9\x80\xb9\x52\xa2\x34\x87\x86\x5c\xa2\xc9\xa2\x0b\xb8\x3f\x27\xc5\xc2\xad\x06\x6a\x23\x7a\x72\x3a\x7d\x7d\x16\x30\x61\xa0\x1d\xba\x99\x10\xe3\x9e\x5e\x60\x09\xcf\x06\x98\x1b\x3e\xb0\xb7\xb7\xc7\x4e\x41\xc5\xb1\x28\x0c\xc4\x1f\x00\x2a\xef\x49\xf7\xc0\x09\x8e\xbd\xbd\xbd\x3d\x7c\xe5\x08\xcc\x36\x61\x5f\x32\x46\x2f\xc5\xea\xbd\xcc\x81\x69\x23\x2c\xc4\x4c\x7b\x8e\x7b\x18\xa0\x60\x2c\x4c\x38\xc8\xe6\x74\x60\x67\xc0\x44\x4e\xfa\x22\x45\x44\x04\xb8\x26\x42\x9f\xa1\x3b\xa4\xd1\x88\x73\xf0\x1c\xa2\xbf\x33\x70\xbd\x20\x0a\xc9\x8e\xe6\xd0\xc9\xd6\x73\x12\x0e\x6b\x75\x06\xb0\x50\xe6\x1e\x27\x5e\xb7\x4f\xe4\xd0\x03\xee\xbe\x6a\xf3\x4e\xc2\xbe\x6a\xf7\x3b\xc0\x30\x5f\xb5\xd3\x4e\xac\x48\xda\xbb\xf3\xac\x70\xfb\x94\xd8\x2a\x94\xe8\xa8\x07\xf9\x07\x20\x02\x87\xa3\x81\x12\xd1\x6c\x81\x30\x64\x31\x39\x5c\x91\x8d\x6a\x36\x94\xc7\x7c\x75\x79\x7e\xf7\x84\xb5\x21\xec\x08\x1f\x49\x59\x88\x9c\x47\x9f\xec\x10\x2e\x8b\x81\xac\x4a\xaa\xa6\x3c\x99\x0a\x38\xe3\x3f\x56\x65\xa6\x52\xc4\xcd\x3b\xf5\xc4\xba\x90\x40\x64\xa2\xd7\x1b\x14\x3f\xd0\xc2\xdb\x44\x91\x9b\x9b\xe2\xcb\x4e\x42\xc8\x07\x12\x38\x0d\x8f\xb1\xaf\x3b\x5e\x00\xd9\xdf\xc5\x74\xc3\xd2\x66\xc3\x3c\x1b\x68\xc5\x96\x6c\x83\x5b\x69\xe2\x0c\x91\x52\xe8\x52\x42\x97\x67\xe1\xfc\x1f\xd3\x52\x9a\x4b\x96\x7e\xe7\xa5\x6a\x2a\xc4\xc4\x82\x8e\x43\x0d\x83\x5c\x68\xc4\x3c\x34\xbd\xb6\x51\x0e\x6c\x8e\x99\xb3\xd2\xcc\x85\x88\x62\xa5\xa0\x40\x8b\xb9\xaa\x4b\x41\x18\x45\xf8\x13\x4c\xde\x08\xaf\xb0\xd8\x39\xed\x4a\x50\xfb\x6d\x75\x51\x2d\x69\xcc\x2d\xfa\x9f\x20\x1d\xfb\xec\xf8\xf4\x02\x4a\xf9\x2e\xa4\x1a\xae\x93\xe0\xb3\x2b\xfc\xb7\x2b\xfc\xf7\x87\xcc\xf0\xd8\x15\xfe\xfb\x0d\x0a\xff\xf5\xf3\x4a\x64\x93\xe9\xfe\xdf\xf9\x1d\xef\x0d\xca\x6c\xaa\xf7\x5e\x9f\x3c\xc5\xc7\xfd\xef\xd8\xeb\x93\xa7\xec\xb0\x7b\xd0\x3d\xac\x4b\xad\x27\x07\x87\x87\x09\xeb\x89\x3e\x57\x3a\xe3\x05\xbb\x56\x83\x31\x0f\xbf\x45\x1f\xe8\x16\xc2\x9c\xfc\xf3\x86\xa2\xd0\x67\xd7\xf6\x32\x7c\x46\xef\x51\x0a\x80\x9c\x8a\x02\xd5\x85\x38\x0d\xe0\xf5\xd9\x75\x9c\xaf\x08\x5d\x3f\x83\xd9\x66\x93\x29\x66\x98\x87\xf1\x74\x76\xd5\x3b\x62\x27\x5c\x73\x73\x39\x54\x25\x68\xa3\xd0\xa2\xd5\xac\xed\xb5\x50\x8a\x8f\xcc\x79\x3a\xc9\x46\x42\x69\x76\x94\x8f\x64\x99\xe9\x31\x66\x5d\x58\xd8\x7e\x56\xb0\xab\x97\xc7\xec\xf0\xcb\x27\x87\x86\xaa\x3e\xbf\xe1\x49\xad\x24\xf4\x25\xaf\x72\xf6\x77\x39\x2e\x94\x96\x05\x3b\xfc\xfa\xeb\xaf\xd9\x1e\xf4\xa4\x37\xbb\xb5\x20\xd2\x9f\xb1\x57\xa5\x18\xb1\x6f\x65\xae\x13\x76\x54\xa4\xa5\x98\xb1\x7f\x88\xa9\x30\xc6\xc0\xf7\x69\xc1\xcb\x84\x9d\x4b\xa5\x33\xa4\xe1\x49\x63\x9b\xa5\xa0\xb7\x92\x11\x51\x42\xd8\x64\x8a\x29\xff\x71\x2c\x27\x40\xc2\x6e\x75\xbb\x3f\x28\xe7\x53\xbd\x3f\x49\x9f\x22\x4c\x5a\x42\xd6\xfd\x50\xae\x64\x92\xfd\x09\x2f\x6f\x53\x39\x2b\xf6\x32\x1d\xfe\x7b\xad\x3b\x0d\x6a\x43\x7e\x97\x69\x9e\xcf\xd9\x65\xf5\x73\x99\x15\x09\x3b\xca\xc5\x07\xf6\x0f\x69\xae\xa7\xcc\x26\xf5\xec\x6e\xb4\xdd\x8d\xb6\xbb\xd1\x76\x37\xda\x63\x6f\xb4\x9c\x93\xd6\x2d\x0a\xb9\x9f\x96\x72\xfa\x33\x86\xbb\xfd\xad\x83\x3f\xb4\x6b\x49\xf6\xcb\x6a\x7e\x3c\x61\xaf\xb9\xce\xb8\x62\xaf\x45\x21\xd9\xe4\x6f\xe6\xdf\x5d\x28\xab\x74\x2e\x47\x92\xfd\x89\xbd\x13\x7d\x95\x69\xc1\x4e\x00\x78\xea\xcb\x29\xdd\xdc\xb4\x0e\xbf\x3e\x3c\xb8\xb9\x69\x31\x73\x8b\xcd\x04\x2f\x85\xf9\xc5\xa7\x29\xfd\xb6\xeb\x0b\xb0\xeb\x0b\xb0\xeb\x0b\xf0\x47\xed\x0b\xa0\xb3\x62\x3e\x19\x08\xfb\xbf\xf8\xdc\xab\x8b\xb7\xec\xfc\xb4\xd7\x3b\xbd\x62\xaf\x4e\x2f\x4e\xaf\x8e\xce\xd9\xe5\xdb\x17\xe7\x67\xc7\x81\x1a\xd6\x98\x85\x7b\x98\xb0\x97\xa2\x5f\x42\x1a\xae\xd1\x49\x09\x2a\x11\xab\xae\x87\x5f\x7f\x7d\x98\xa0\xca\xfa\xd2\x48\x22\x77\x78\xbc\x67\x02\x15\x67\xf3\xea\xd3\x43\xf6\xb2\xe4\xc5\x6d\x9e\x15\xac\xa7\x4b\x21\x74\xc2\x5e\x66\x43\x3d\x66\x2f\x73\x29\xcb\x84\xbd\x90\x46\x03\x4e\xd8\xeb\x23\xc6\x0e\x9e\x1c\x1e\x1e\xec\x1d\x7e\x79\x70\xc8\xd8\xdb\x1e\xc4\xde\x4e\xef\x44\x39\x97\x05\x26\x54\xb9\xc6\x69\x90\x9e\x36\x9d\xd7\xa1\x8f\x90\x7c\xa1\xb3\x89\xaf\x43\xeb\x84\x5f\xee\x42\xce\x28\xec\xd0\xc9\x03\xc8\x3c\x73\x8e\x33\x70\xb9\x15\x52\x9b\x53\x27\x67\x0e\x80\xf9\x1e\xe2\xd5\x99\x6d\x5b\x53\x02\x42\x0f\x3a\xd1\xa4\xf5\x7c\x9b\x73\xa1\x94\x28\xd9\xab\xcb\xf3\x2e\x63\x67\x66\x20\x25\x11\xf4\x0a\x13\xa1\xd6\x37\xaa\x1a\x0c\x84\x82\x74\x0f\xf2\x74\x99\xbd\xa2\x36\x39\x71\x4b\xa4\xc4\x7d\xe1\x49\xc2\xc6\xa2\x80\xdd\x85\x77\xec\xef\x8b\x6a\xd2\x17\xa5\xd9\xb7\xee\x0f\xf5\xbc\xec\xcb\x52\xf0\x09\x42\x93\xe1\xf7\xd7\xbe\xf7\x8d\x22\xcd\x5e\xe9\xe0\x4e\x28\x05\x25\x48\x50\x66\x1b\xbf\x15\x8c\xcf\xf8\x1c\xdc\xbc\x46\xfd\x2d\x85\x48\x25\x00\x7a\x20\x59\xd4\x46\x2c\x8a\x91\x60\x99\xee\x32\xf6\xc2\xa6\xaa\x2a\x44\xd2\xc2\xca\x5e\x01\xba\x2a\xa7\x95\xf9\x9b\x16\x73\xe4\x01\x99\x91\xe2\x07\x47\x15\x87\xfb\x4d\xa0\x5f\x79\xc5\xe7\x68\x32\x6e\xee\x7b\x7b\x04\x10\x67\xaa\x2a\x11\x33\xa0\x42\x79\x5e\x62\x34\x05\xe4\x69\xa6\x21\xef\xbe\xf4\x59\x88\xd7\x01\x77\x24\xd1\x46\x46\x53\x0f\xd2\x07\x7d\x2d\x16\x25\xe1\xba\xa7\x58\x5f\x3e\x0f\x53\x4c\xdc\x14\xa6\x7c\x70\xcb\x47\x42\xed\xed\xe9\xf9\x34\x1b\xc0\x73\xae\x08\xc0\xde\x9e\xc3\xe9\x2e\x3b\x4b\x81\x97\x8f\x32\xc1\xcc\xbd\xc5\x52\x31\xc8\x52\x61\x63\x7b\xb0\x03\x08\xb3\xb5\x9d\xaa\x32\x73\x5d\x49\xe4\xf3\x99\xa1\xcd\x08\xec\xd6\xb9\xac\x88\x91\xf5\x18\xdc\xd3\xbc\x14\xc3\x0a\xb0\x6a\x7d\x73\x49\x53\x18\xd7\x37\xe5\x73\x21\x46\x4c\x36\x4b\xb1\xc7\x5f\x33\x75\xec\x49\xe9\x0b\xad\x61\x0c\xa5\x4b\xae\xc5\xc8\xc5\x20\xb3\xc2\x21\x12\xb3\x41\x95\xf3\x92\x0d\x38\x78\x5c\x6d\x9e\xa2\x79\x5b\x7c\x98\xe6\xbc\xa0\x90\x15\x24\x4b\xba\xdd\x82\x16\x5a\x66\x35\x53\xc1\x21\x39\x2e\xe2\x84\xc4\xfc\xc9\x50\x0f\xd3\x7d\x21\x8c\x2e\x1d\x2b\x41\xb0\x1d\xac\x29\x40\xa1\x96\xd9\x40\x74\x19\x7b\x53\x2d\xdb\x6a\xb5\x70\x28\x42\x26\xe3\xc6\xaa\x73\x5d\xa7\x40\x3c\x78\x96\x6d\x84\x63\x47\x53\x45\xe4\x05\x6a\x70\x86\xa1\x65\x69\x73\x20\x10\xcf\x42\xc1\x84\x59\xa6\xc6\x9d\x6f\xd0\x45\x8f\xb5\x1e\x20\xf3\x27\x6e\xb6\x55\x42\x77\xb2\x11\xd8\xfe\x46\x90\xd1\xab\xbc\xd0\x2c\xd3\xc1\xcb\xe6\x29\x3a\xb1\xd1\x21\xb1\x8d\x2d\xa7\x99\x18\xd8\x9a\x6b\x66\x9c\x82\x15\x62\x86\xd3\x9e\x96\x72\x54\xf2\x09\xe2\x70\xfd\x88\x9c\x9c\x03\xe5\x44\xa4\xf1\x77\x52\x2a\x5e\x03\x71\xe7\xac\x18\x05\x07\x4e\x9a\xd1\xb4\x51\xa7\xe0\xa4\xa3\x1a\x08\x5b\x57\x88\x80\xce\x81\x32\x49\x31\x8a\xa1\x2c\xfb\x50\x57\xd9\x91\xd7\x1c\x06\x50\x4a\x0b\x90\x53\x0c\x3f\x48\x8a\xa5\x84\xac\x10\xae\x6e\xf1\x4f\xd2\xec\x5c\x29\xac\x3f\x04\xb4\x7d\x7c\xb2\x0b\xd2\x51\xd5\x3f\x49\xf9\xd3\x70\xc6\x06\x84\xa8\x8d\xa2\x95\x19\x4a\x52\xe2\x03\x22\xfb\x32\x24\xbe\xeb\x85\x26\x4b\xfb\x28\x61\x36\x33\x5f\xc4\x81\x6a\x4d\x4d\xa6\xb9\x48\xd6\x1d\xd0\xe7\x04\x8f\x4a\xae\x21\x82\x4b\x29\x77\x10\x48\x0e\x7a\xcc\x01\x92\x1e\x34\x6f\x8f\xa1\x87\x14\x85\x40\x19\x37\x74\x9e\x09\x36\xe2\xd0\xd6\x79\x2e\xab\x2e\xf3\xe0\xf4\x98\xff\xcd\x7b\xf3\x04\x85\x8c\xe5\x4b\xcf\x8b\xc4\x62\x98\x95\x0f\xb5\x5e\xcc\xb5\x88\x4b\x82\xb8\x98\x0d\x5c\xa4\xc2\x07\x82\xdc\x92\x7c\x5f\x3c\x44\x21\xc1\x10\x86\x2c\x5a\xd8\x7c\x74\x07\xc8\x8f\x57\x94\x30\x25\xfd\xf4\x60\x36\xa5\x80\x0f\xea\xb1\x98\x84\xc1\x3f\xd7\x9c\x6e\xa8\x85\xab\x07\x80\xe7\x43\xf9\xba\x90\xf4\x0c\x40\xba\x5c\xec\x13\x0e\x48\x97\xb1\x23\x2a\xc1\x02\x53\x55\x63\x39\x83\x8f\x10\x1b\x22\xda\x0e\x66\x23\xe6\xec\xb6\xc0\xbf\x66\x96\xe3\xbd\x4c\x13\x4d\x07\x02\x89\xc2\x99\x9e\xc9\x3d\xa5\xc5\x94\x4d\x84\x1e\xcb\xf4\x19\x6b\x1f\x76\xcc\x0e\x79\xf3\x02\xaf\x0f\x47\x3a\x33\xd5\xf6\x13\x78\x06\x53\xa3\xf0\x60\x84\xb7\x1c\x26\x04\x19\x76\x50\xb8\x1f\x62\x04\x75\x04\x62\x00\x1e\x1a\x64\x01\xfb\x91\xad\x15\x40\x8d\xe9\xa3\x4d\x67\x1b\x02\xec\xc1\x41\x85\x03\x0e\x32\xc9\x1e\xf0\x4c\x1b\x45\x66\xce\x06\xb9\xe0\xa5\x95\xa8\x00\x97\x40\x5d\xcc\x87\xc3\x6d\xfe\x28\x88\x22\xfb\x4d\xc6\x8e\x72\x63\x9b\x65\xf1\xf1\x82\x03\xe0\xb2\x36\xfa\x73\xb8\xa4\x8d\x02\x29\x72\x85\xa2\x6e\xca\x15\x5e\x36\x49\xfd\x30\xa8\xb1\xac\xf2\x14\xb6\x0a\xa6\x62\xce\x82\xe3\x24\x90\xf3\xa4\x24\x36\xe5\x5d\x47\x8c\xe7\xfe\x7a\x73\x53\xe0\xad\x7d\xf3\x67\x48\xed\xad\xc8\x00\x9e\x65\x94\xa1\xde\x17\x8c\x0f\x87\x62\x40\x08\xf4\x69\x29\xfb\xb9\xcb\xb5\x9d\xc0\x06\x93\xd3\x4b\x63\xbe\x0f\x3c\x06\x87\xc7\xb3\xd0\xcb\x0c\xc0\xad\x49\xa8\x75\x00\xd6\x9c\x41\xbe\x2d\x47\x7c\x34\x10\x7f\x5c\x0a\xee\x0c\x59\xf1\x01\xf0\x1f\x00\x2f\x81\xd6\xb9\xf3\x48\xdc\x77\x81\x39\x67\xd0\xe1\xb1\x7e\xfb\xd9\x3e\x92\xc5\x9c\x60\xd8\x37\x37\x85\x80\x85\x60\x40\xd6\xca\x52\x0b\x49\x2a\x11\xe0\x14\x8d\x0f\x2b\xf1\xee\x8a\xd0\x4d\x7a\xe7\x71\xa9\x80\x17\xe7\x36\x3a\x3d\x96\x79\x2a\x4a\x14\xd9\xa5\x18\x4a\xba\xf5\x33\x80\xb2\x58\x2e\x5a\xcc\xe1\xa2\xef\x10\xd0\x93\xd7\x95\x77\xcb\x3d\x70\x90\xfb\x14\xa6\xae\x81\x63\x04\x33\x7a\x52\x4d\x9d\x40\xa0\x17\xf0\x9a\x85\x36\xe7\x35\x9c\xf9\x6b\xa3\x68\x1b\x65\xd8\xab\x29\xde\x37\x62\xb8\xd3\xab\x83\x09\xa6\x33\xdf\x89\xd2\xe5\x23\x80\x38\xb7\x4a\xd7\x82\x46\xed\x91\x3a\x0d\x8a\x2c\x98\x16\xa0\xcc\x1a\x9b\xf0\x7e\x75\xd6\x5e\x72\x81\x16\x1b\xcc\x0c\xa3\xee\x99\x62\x3f\x55\x99\x16\x01\xb4\xdd\xe1\xf9\xef\x51\x0e\x91\x9b\x2a\xb8\x78\x23\xdd\xd2\xec\x88\xfd\xb6\x2f\x8f\x05\xd5\x36\x52\x4c\xed\x24\xd7\x8d\x11\xe3\x2e\x05\xc6\xc9\x3c\x7c\x58\x4b\x48\x49\x8d\xb4\x95\x58\x6d\xe4\x8e\xed\xe0\xdb\xc5\xad\xc5\x4d\xf2\xc5\xab\x14\x72\xb8\x50\x57\x07\x58\xbe\xad\x75\x08\xb6\x48\xea\x9f\x47\xf4\x42\x3d\x33\xd3\x08\x6d\xf8\x88\x91\xab\xf9\x1c\xb5\x55\xcb\xe2\x03\x0b\xdd\xc0\x82\x1e\x1c\xcb\x72\x20\x64\x8c\x5e\x77\xa2\xc5\xcb\xba\xeb\x80\xbe\x4b\x77\x13\xc1\x66\xe6\x4c\x10\xc5\x94\x4d\x30\x44\xba\x59\xa8\x14\xb2\x15\x62\x1a\xa2\xe9\x0f\xcd\x2b\xe6\xff\x0f\xca\x0c\x1a\x67\x5b\xbd\x35\x95\x13\x9a\x44\x6c\x1d\xdd\xdc\x14\xb5\x29\xd8\x0f\x43\xe0\x28\xe7\x1f\xfc\x50\x43\x42\xc4\xc0\x4c\xe2\xcb\x9f\x00\x18\xf5\xeb\xe4\x9d\x60\x03\x54\x50\x02\x6e\x21\xcf\xa4\x65\xec\xd6\x32\x53\xa4\x2f\x30\x8b\x0f\xa2\x50\x80\x34\x37\xaf\x00\x37\xd1\x15\x65\x25\x93\x11\xcd\x4e\x79\x1f\x53\x09\x9a\x3a\x33\x2f\xac\x34\xb0\xf2\x1d\x54\x1a\x97\x15\x2b\xfa\xa9\xb8\x13\xb9\x9c\x1a\x01\x68\x26\x80\xd8\x28\x48\x91\xb9\xe3\x85\xe6\x23\xc1\xcc\x79\x27\x9c\x0e\xa0\x65\x17\xd8\xd8\xea\xa7\x69\xa6\xdc\x5b\x8a\x0a\x59\xe3\x15\x06\x7d\x1f\x67\xc2\x81\xe6\xef\xb3\xd3\xb0\x02\x12\xc0\x89\xdd\x21\xea\x32\x0f\xf7\x0b\xec\x60\x4b\x77\xb7\x48\x3f\x05\x73\x46\xe9\xe0\x7a\x33\x98\x0d\xb2\x72\x50\x4d\x14\xc0\x16\x55\xb3\x6a\x2b\x0b\x56\x9a\xc9\xcb\xc1\x80\x53\x65\x19\xbc\xf8\x27\x7c\x0e\x37\xa2\xc5\xcf\x5a\x93\x00\xd8\x75\x20\xab\x92\x93\xf1\x32\x33\x53\xd1\x84\xf2\xcc\x09\xf4\x6a\xee\x97\x58\x90\xcc\xfd\xad\x9c\x19\xc1\x3e\x90\x13\xa4\x1c\x4b\xc5\xde\x90\x0f\x8c\x55\xa0\x79\x91\xf2\x32\xed\x82\xfa\xc2\x07\xe3\x4c\x80\x9a\x9c\xa9\x64\x71\x2b\x82\x0b\x82\x1c\x45\x61\xaa\x42\xa0\x9a\x20\xff\x0f\x4b\x84\xf9\x82\x95\x8b\xc6\x31\xdc\x9c\x66\x4c\xaf\xb3\x61\x1e\x04\xe8\xcb\x7c\x22\xd8\x8f\xb2\xcf\xb8\x82\x15\xe6\x73\xac\x12\xe8\xe6\x11\x6e\xd6\x59\x61\x11\x9b\x68\x43\x3b\xd5\x29\xcf\xb4\x46\xd8\xf2\xc8\x50\xa2\x3f\x47\xcf\xbb\x45\x95\x87\x5a\x94\xb5\x8f\x43\x00\x9a\x91\x12\x40\xb6\x80\x9f\x56\xfa\x44\xdc\x1e\x9f\x15\xf6\x60\x73\x65\xae\x8c\xc5\x84\x0e\x1e\x9a\xfe\x4e\x65\x2b\xdc\x02\x11\xd7\x85\xa4\x16\x90\x89\xa1\x18\x67\x23\xa3\xb3\x88\xd2\xfa\xbb\x00\xd9\x2e\xa7\xb9\xf0\xa3\xe6\x80\x9c\xed\xcb\x94\x0a\xa5\x47\x47\xb0\x5b\xe3\xbe\xe6\x3c\x13\x73\x5b\x1e\x3b\x57\x1c\x70\xf4\xe2\xf6\xdb\x39\x4d\x30\x37\x18\x04\x6d\x38\x13\x60\xcd\xb1\xcc\x61\x38\x73\xd4\xa7\xa2\xc4\x6c\x60\xac\xa1\x02\x60\x81\x99\xc8\x73\xa8\x42\xa5\x15\xbb\xe3\x65\xc6\x0b\xef\x31\xdb\x3f\xcf\x8a\xea\x03\x73\xef\x99\x8d\x81\x37\x1d\x91\x8f\x72\x3d\x86\x62\x80\xf7\xee\x8b\xe1\x05\x90\x79\x24\xf0\xfc\x0d\x83\x75\xda\x4b\x75\xf3\x67\x2b\xf8\x12\x73\x3e\x80\x0f\x45\x11\x59\x78\x20\x21\xf1\x68\xd9\xeb\x93\x10\x8a\xc0\xc0\xfe\x16\x45\x04\x1d\x52\x6f\x6c\x1b\x7d\x93\x54\x45\xa7\x81\xc0\xcc\x49\xf3\x34\xcf\xa1\x1e\x47\x55\x58\x3d\xdb\x8e\x8d\xe9\x10\xdc\xe7\x5d\xd7\xbd\xac\x75\x8b\x03\xab\xbb\x41\xc6\xc3\xd2\x02\x8c\xc6\x92\x01\xb8\x7f\x5c\x6d\x11\x14\x9a\x30\x8f\x8e\x02\x3b\x5d\xc6\x2e\xb9\xb1\x4b\x40\x77\xd6\x94\x3d\x66\x75\x66\xab\xf8\x40\xb7\x00\x3d\x03\xe8\x39\x56\x31\x06\x44\x7c\xe4\xc9\x22\x0e\x37\xb7\x14\x04\xdd\x98\x7d\x0a\xd6\x5c\x29\xd7\xd3\xde\x3e\x86\xa2\x1e\x1d\x42\x13\x02\x81\xf0\xac\x50\x54\x0e\x35\x28\xe0\xb5\xe0\x02\x30\x97\x00\xfe\xd2\x4c\xb9\xb4\xe9\xc9\x7d\x7b\xc3\x87\xfb\x14\x9c\x3c\xa7\x63\x95\x55\xd1\x0d\x9d\xc8\x6b\x06\x11\x96\x16\xdb\x3c\x7e\x73\xf9\xfd\xd9\xc5\xab\x24\x2a\xaf\x09\x0f\xbe\x7e\x73\x72\xf6\xf2\xec\xf8\xc8\xd7\xdb\x64\xec\xa0\x96\x1a\x76\xe4\x92\xd1\x6a\xfd\xfb\x9d\x98\x0a\xfc\x29\x92\x3c\x96\x96\x89\xd0\xbe\x75\xb4\xe3\x36\xcc\x06\x09\xcc\xe9\x62\xc9\x1f\xb4\x29\x30\xf5\x28\xf4\xb4\x42\x69\x29\xcc\xec\x55\x7c\x4e\x71\x02\xba\xa2\xd2\x46\x90\x8d\xcd\xb0\xb3\x2a\xee\xea\xf3\xd9\xc6\x18\x01\x87\x22\x96\x37\x37\xad\x30\xa9\xe3\xe6\xa6\x05\x25\xe2\x4e\xb9\xaf\x4a\x02\x27\x9a\xa7\x69\x29\xc0\x82\xc5\x1a\x45\x00\x91\x6e\x79\xf1\x60\x7e\x17\xf0\x1d\x95\xab\x62\x03\x99\xe7\x1e\x92\xeb\xa8\x68\xf3\x33\x5c\x6e\x40\xca\x35\x07\x52\x42\x7d\x9c\xd4\xdc\x03\x1c\x88\x8f\x59\xb6\x77\xa2\xc8\xb0\xb2\x50\xa4\x41\x63\x8e\x0e\x8c\x6e\x65\xe5\xcd\x4d\xd1\xc6\x8d\x00\x33\xc9\xd8\x39\x70\x86\xcd\xa1\x8a\xbe\x0a\x9f\x84\xd2\x6a\x00\xd8\xc6\x7c\x43\x10\xb3\xd1\x29\x87\xfa\xa6\x76\x59\x09\xfa\x85\x13\xf4\xf4\x7a\xe6\x40\x00\xf9\x22\x87\x50\x91\x3e\x5b\x5c\x97\x52\x46\x1a\xf7\xd0\x0a\x92\x2e\xd1\x72\xe1\x54\x43\x14\xa3\x46\x5f\x4a\x62\x0b\x65\x20\xa5\x11\x04\xda\x3d\x8c\x04\xdf\x21\x44\x0f\x15\x28\xe2\xb3\x67\x0e\xf5\x6d\x14\x12\x3e\x37\x66\xc1\x8c\xca\x99\x58\xf3\xb8\x3e\xb6\xd9\x24\x8c\x03\x63\x55\x03\x97\x49\xe7\xa2\x60\x54\xc1\x63\x31\x6d\x79\x3f\x28\x0f\x09\x68\x65\xa5\x4b\x6e\xe6\x32\x94\xe5\x8c\x97\x29\x20\x9f\x81\xa4\x94\x4c\xc2\x8b\x51\xc5\x47\xe6\x22\x6d\x7f\x0b\xd9\xa6\xe0\x33\x4b\xa2\x1a\x93\x70\x21\xb8\xf8\x75\x43\xcc\x3f\xf3\x65\x72\x0d\x5d\xc3\x59\x19\x06\xee\xd8\xcd\x76\xd5\x3c\x41\xe8\x51\x51\x4c\x4b\x10\x24\xb7\x5e\xac\xe9\x49\xf7\x03\x3c\x84\x4e\xd9\xa6\x0a\x9f\x90\x1b\xa2\x49\x21\x08\xec\x3e\xe7\x5c\x0c\x1d\xeb\xf0\x2d\xd4\xf4\x02\x6f\x26\xfe\xcd\x06\x94\x6c\x25\xe8\x4c\x3b\x79\x93\xb0\x69\x5e\x61\x85\x38\x8f\xb2\x40\x0f\x0e\x16\x0d\x0c\x6a\xcc\xa1\x17\x93\xde\x80\x6f\x00\x40\x91\x8a\x43\x83\x13\x0e\x6b\xb4\xa1\xeb\xd1\x62\xd1\xb0\xf8\x8a\xd2\x3c\xcf\x23\xbb\xb3\x6e\x40\x1d\x99\x4b\x1f\x1d\xd5\x92\x18\x94\x17\xcb\xaf\xc3\x88\x56\x58\xb5\x08\xfc\x3a\x91\x47\x22\x2c\xa0\x02\x8e\x31\xd0\x19\x2b\xad\xb2\x54\x80\x4a\xa3\x06\x72\x2a\xc8\x5a\x84\x7c\x20\x23\x0d\xcb\xaa\x20\x4c\x4a\x7c\xd3\x87\x5c\x4d\xce\x35\xeb\x03\x12\x94\xaf\x23\x2b\x3d\xad\xd0\xcd\x00\xad\x5b\x06\xe3\xd8\x94\xb7\xb3\xb3\xd6\x6d\x86\xa9\x4d\xe8\xff\xf2\xf5\x80\x2c\x07\xc1\x51\x36\x82\xbe\x88\x3e\xde\xce\x8a\x54\x4c\x45\x91\x06\x59\xba\x95\xab\x33\x1e\xe8\x85\x8c\x33\x2d\x65\x4e\x4c\x66\xcb\xc8\x65\xba\xd3\x05\x3f\x83\x25\x33\x9e\xe6\xb2\x32\xbb\x6d\x86\x55\x46\x7a\x58\x6f\xa2\x1b\xce\x68\x5c\xb4\x9f\xee\x6f\x91\x9a\xe5\x74\x84\xf0\x0d\xb7\xbf\x87\xbe\xc8\xc3\x1a\xf1\xf0\xda\x5a\x54\xe8\x54\x0f\x79\x9b\xab\x28\xd6\x94\xe9\xa4\x5e\x20\x28\x2a\xef\x43\xf1\x8f\xb8\x0a\x1f\xa8\x3b\x3e\xdb\x35\x9f\x5b\x28\x0f\x94\x27\xe4\x70\x3d\xc3\x84\xcd\xea\xfd\x73\xcd\xa8\x99\x34\x4a\x8c\xb6\x6e\xe1\x6f\xd8\xad\x10\x53\x23\xa9\x38\x54\x79\xb2\xc7\x34\x2a\x8d\x02\x42\x02\x55\xb7\x40\xbb\x20\x44\x10\x26\xd3\x2b\x72\x80\x52\x7a\xad\x1f\xbe\x46\xcd\xe6\x2a\x42\xb5\xfa\x23\xfe\x72\x70\x9b\xe4\x13\xff\xe2\xf4\x3e\xdc\xec\xf1\x5c\x65\x03\x9e\xd3\x49\x71\x25\xca\x4a\x0f\xe0\x4a\x88\x41\x6c\x32\x0c\xa7\x38\x81\x9c\xd2\xd1\x37\x2b\x74\xbe\x72\xab\xeb\xa3\xc0\x15\x1f\x28\xe0\x37\xa4\x2b\x63\x28\xbc\xb9\xf6\xc4\x73\x0f\xf9\xf4\x29\xc3\x6b\x3a\xc7\x2c\xd5\x06\xa6\xb1\xd7\x1a\x5d\x3d\xe8\xcd\xc8\xc0\x7e\xa9\x40\xd9\x9e\xe0\xc4\x17\x75\xe1\xf3\x30\x40\x61\xb9\x35\x6a\xb7\x81\xd7\xf7\x42\xa9\x52\x7f\x6d\x46\x2a\x96\xcb\x30\x3a\x34\xf4\xc1\x92\x08\x71\xd9\x29\x88\x50\x1a\x0d\x0b\xca\x4e\x19\xf6\xc0\xb5\x28\xd1\x58\x75\x8a\xf1\x0e\xc8\x2c\x67\x7a\xe0\x85\x63\x0c\xfe\x4c\x2b\x91\x0f\xc9\x33\x51\x53\x2f\x02\xa5\x79\xb1\x84\x94\xb6\x25\x9f\xfc\xa8\xf7\x96\x90\x8a\xea\x47\xcd\x9b\xea\x47\x39\x7b\x0a\x6a\x88\xf9\xbc\xe1\x62\x14\x54\x37\x61\x83\xc6\xd9\xa0\x75\x1a\xde\x96\xa8\xdb\xb9\x74\x33\x6e\xe6\x63\x87\x40\x96\xa5\xb6\x33\x50\xe9\x06\x0d\x78\xa1\x9a\x76\xa4\xb9\x3a\x37\xc3\x6a\x4d\x9c\x0d\xf9\x00\x53\x52\x49\x13\x70\x24\xb1\xbc\x15\x28\x73\x4e\x45\xb4\xba\x0e\x14\x86\x81\x74\x6c\x39\x04\x8d\x91\xe6\xad\x2a\xb0\x0f\x52\x2a\x17\xdb\xa0\x89\x7a\x41\x6a\x87\x31\x74\xa4\xb9\x24\xe1\xc5\x48\xb5\x6b\xca\x11\x40\x84\x6c\xa0\x68\x36\x16\x45\xf4\x0e\x0d\x03\x45\x70\xef\xe4\xad\xb9\xa7\xa0\x72\xd4\x3c\x8a\x93\x72\x48\x98\x66\x43\x6e\x24\x83\x18\x0e\x65\x09\x61\x97\xc0\xbc\xb6\x65\x89\x88\x1c\x36\xcd\x3e\x5a\x83\x2b\x91\x01\xeb\x24\x0d\x37\xa0\x4d\x48\x99\x24\x9a\x25\x53\x3a\x33\x2c\x0f\x9e\x04\x72\xe0\xdb\xca\x95\x0a\x6e\x1b\xa8\x61\x14\x97\xdf\x32\x77\xa7\xad\xd2\x8a\x85\x92\x15\xa8\x41\x59\x31\x1a\x56\x79\xb0\xa7\xed\xc8\xa3\x12\x6c\x17\x56\xf6\xf3\xde\x25\xca\x0b\x67\xea\xa7\x0a\x90\x19\x52\x6a\x65\x34\x70\x7b\xe6\xdc\xe7\xec\x9d\x89\x6e\xe9\x7c\x0e\x6e\x92\x3d\x9f\x58\x51\xbf\x9d\xed\x00\x9e\x58\x71\x50\xa8\x57\xf5\xa9\xa0\x24\x7b\x92\xda\x8a\x02\xd6\x03\x67\x0b\x29\x84\xaf\xef\x39\x56\x0a\x79\x0f\x79\x2e\xea\xd5\xe1\xfe\x1c\x54\x00\xeb\x0b\x92\xc7\x3c\x7f\x66\x43\x92\xab\xf6\x31\x23\x97\x0f\x92\x85\x06\x31\xc4\x89\x47\xa7\x4d\x6c\x22\xa2\x55\x98\x2d\x74\x01\xd6\x87\x5d\x13\x39\x7c\x82\x2e\xb8\x58\x9c\xf9\x0a\x40\x10\x8e\x37\x6a\xa9\xa1\x69\x36\xc4\x52\x07\xca\xa6\xc0\x02\x8d\xb9\xa6\x97\x50\x13\x5c\xf4\x3f\x58\x99\x4e\x37\xd4\x80\x17\x86\x10\xae\x8c\xca\x1c\x53\xcc\x53\x50\xcf\xc2\x1d\x84\x72\xa8\xb6\xfe\xcc\x8c\xea\xa0\x62\x10\x60\xa2\x44\x0e\x65\x8f\x35\x1e\xbb\xb0\x7a\x0e\xa8\xbd\x5a\xa1\xc0\x49\x6c\xe9\xab\x60\xb5\x18\x16\x72\x8b\x98\xd9\x53\x19\xd7\x65\x9d\x40\xed\xd1\xe8\xf3\x5d\xc6\x5e\x20\xf8\xa9\xa0\x9c\xe3\xf8\x15\xf4\xcc\xba\x81\x83\x92\x66\x44\x4d\xf2\x39\x64\x6a\xb5\x9a\x99\x90\x0b\x69\xb1\xa0\x12\x8e\x42\xee\x65\x7b\x67\x2e\xb8\x13\x7c\x04\x5f\xda\x58\x0b\xd5\xf7\x18\x06\xa9\xff\xe8\x2c\x50\xd0\x83\xc6\x69\x3a\x3e\xe2\xe3\xaa\xaf\xa7\x78\x6b\x1b\xa9\x64\x34\x32\xa8\x05\x03\x21\x79\x58\x1c\x16\xf7\xc9\xa9\x4e\xc9\x6c\x2c\xd9\xcc\xe8\x16\x88\x7d\xb0\xbc\x57\xa9\x24\x00\x4f\x6a\xaa\x8d\x5e\xf8\x1a\x15\xf6\x0c\x1a\x51\x00\xa5\x3f\x3d\x3a\x07\x94\x74\x45\xfa\x63\x19\xe0\xc1\x81\x80\xb6\x7c\xb6\x93\x07\x7d\xd0\x4f\xbe\x61\x25\x37\xcb\x4c\xc2\x8f\x65\xd4\x7c\xd2\x15\x3f\x71\x90\x96\xd0\x86\x6a\x22\x7d\x18\x7c\x43\xb3\x1c\xdd\x24\x77\x96\x2f\x9b\x74\x98\xa6\xec\xef\x89\x28\x05\xe3\xa3\x91\xa1\x9a\x1d\xdc\xda\xcf\xb0\x1e\x08\xf6\x37\x0c\x16\x42\x52\x9c\x31\x62\x4d\xf7\x15\x8a\x14\x56\xe1\x81\x96\x76\x13\x1b\xbf\x67\x4a\x4b\x08\x91\xd4\xab\x86\xa1\xe2\xee\xa5\x50\xbf\xb4\xc6\x57\x30\x43\xeb\x9a\x40\x3b\x54\x4e\xc5\xd2\x3b\xfd\x4b\xaf\x39\xca\x29\xd0\x98\x0e\x61\xac\x0d\x84\x71\xa8\x15\x60\x50\x30\x65\x05\x4f\x17\x54\x6b\x50\x04\x46\xd9\x9d\x28\xa2\x5a\x8a\xe7\x3e\x2a\x2a\x2d\xd0\x2c\x53\x01\x68\x88\xe7\x50\x3e\x65\x6d\x7b\x20\x61\x4a\x5a\x47\x34\x98\xb4\xc1\x53\x2b\xd7\xd0\x04\xd5\x05\x4b\xdf\xaf\x27\xfe\x52\x97\xb1\x36\xe8\x42\x85\x98\xa1\xab\x46\x51\x25\xf3\xc2\x0f\xe1\x2f\xb8\x35\x3e\x0d\xde\x2c\x2c\x33\x18\x29\x22\x46\x16\x23\x36\x61\x6e\x97\x66\x3f\x60\xa7\x17\x60\x0c\xbb\x1d\xc6\x4e\xa8\x92\x20\x28\x2f\xae\xde\x86\x85\xf8\x16\x0e\xcf\x47\xf4\x74\xcc\xf0\xa6\x18\x60\xbc\xcc\x3d\x4b\x0d\x15\x41\x15\xf0\xdb\x67\x05\x05\x54\x84\x36\x53\xa1\x52\x49\x76\x7a\xf8\x8c\x5a\x9b\xe8\xb5\xae\x88\xd8\xd6\x55\xd9\x80\x1b\x1a\x2f\x60\xc2\xc5\x1e\x38\x9a\x1c\xdd\x61\xf4\xdd\x18\x0e\x4c\x96\x55\x06\x6e\x98\x61\x95\xfb\x8b\xc4\x62\x61\x80\x1d\xc3\xaa\x96\x88\xc4\xf4\x95\x04\xac\xb7\x00\x58\xb8\x16\x38\xc1\x5b\x6b\xc1\x7e\xf8\x6a\xb5\x31\x5f\x97\x0f\x9c\x39\xf7\x9f\x21\x61\x8c\x22\x30\xea\x05\x2a\xe8\xd6\x4a\x7a\xd2\x01\x6f\xbf\xef\xe5\x02\x2d\xa0\x9c\xaf\x15\x4c\xb7\x9b\x9b\x62\xb9\x9d\xa5\xd8\x21\x4c\xe9\x09\xe5\xb7\x34\xd8\x5a\x03\x42\x04\x21\x7e\x34\x28\xef\x40\x4e\x86\x81\x2c\x11\x40\x09\xd0\x97\x09\x1f\x8c\xb3\x42\xec\xb9\x7a\xa9\x51\xe5\x0f\xb8\x4f\x6f\x6e\x0a\x7b\x23\xae\xf6\xb7\x2f\x9b\xa4\xc4\xe0\x0c\x89\x3f\x5b\xd0\x2d\xb3\x71\x55\xe8\x57\xe7\x7b\x4b\x6b\x51\xd6\xac\xa8\xb3\xe1\xc2\x8d\x11\x92\x30\xf3\xad\x43\xc1\x0c\x07\xdb\x17\x00\xfe\x96\x49\x20\x16\x09\xf8\xa5\x00\x55\x03\x71\x08\x3a\xab\xee\x3d\xa3\xc0\xdd\xf1\x1c\x8b\x56\x85\x43\x90\x2c\x88\xbc\x8f\x56\x01\x03\xb5\x04\x86\x63\x8a\xeb\x4c\x0d\x33\x72\x17\x05\xfa\x20\x5e\x8d\x75\x7d\x26\xa4\x35\x54\x58\x72\x51\xc5\xd0\xc8\x0b\x7d\x80\x93\xa9\x80\x40\x45\x30\x2d\x3b\x4c\xad\x06\x6b\x40\x22\x47\xc9\xa7\x5d\x76\x14\x1f\x04\x17\x9f\x29\x64\x0d\x03\x13\x38\x18\xbc\x2c\x74\x1a\x54\xbf\xd2\xd8\x36\xd0\x03\xb3\x51\x61\xa8\xdf\xa2\xfd\x39\xeb\x0b\x6a\x1b\x41\xad\x8c\xca\x5a\xd0\x12\x7c\x5b\xca\x86\x60\x96\xc5\xe7\xce\xc3\xf8\x5c\x0f\x1c\x90\xe6\xd6\x06\xfc\x4e\x66\xe4\x84\xcc\x6d\x61\x5a\x7b\xb8\xeb\x6e\xff\xf8\xea\xb2\x68\x2a\x8f\xd7\x19\xf2\x3c\x57\xce\x8d\x7a\xff\x0d\xec\x90\x1a\x16\x51\x73\xff\xdc\x17\x08\x64\x76\x15\x22\xeb\x54\xfb\xc7\xc9\x02\x2b\xa7\x9a\xb0\x49\x4e\x04\x45\xf8\x1a\xb7\x97\xf5\xd4\x34\xab\xac\x24\xa4\xb6\x91\xa1\xdd\x3c\x59\x0f\x89\x70\xa1\xd0\x70\x5a\x99\x0a\x00\x4e\x4b\x7c\xd2\x5d\xc8\x6d\x47\x91\xf7\x17\xac\x10\x4a\xf6\x02\xd6\x6f\xab\x1d\x66\x2c\x24\xd4\x10\x71\x22\xc4\xd8\xbd\x34\x85\xdf\x4d\x38\x20\x9c\x72\x0b\x55\x1c\x0b\x6e\x04\xd4\x30\xcb\x85\xbd\xdc\xb2\xb8\x08\x72\x64\x0e\x84\x12\xc5\xfa\x05\xd1\xf7\x44\x68\x98\x58\xbc\x37\xf0\x53\xed\x04\xc7\xee\x5c\xe4\x49\xb3\x32\xef\x9e\xa6\xa4\xa6\xb2\x82\x3f\x0b\x9f\xc1\x62\xce\x14\xb8\xdf\x0a\x6d\xcd\x58\x0c\x44\x81\x69\x17\x9f\x1e\x59\xe9\x78\x31\x08\x6d\x77\xef\x64\xca\x3a\xce\x78\x8c\x64\x03\xa2\x94\x42\x41\x25\x2e\x97\xfa\x80\xfe\x1c\x3b\x27\xcc\xd1\x80\xc0\x3e\x24\xd6\xb8\xb6\x88\x39\x9f\x85\xe2\x19\xe3\x01\x45\x88\x0a\xc7\x4d\x81\x70\x40\x51\x4d\x44\x09\xfe\x55\x63\xed\x4d\x84\x16\xa5\x31\x1c\x31\xc6\xa9\x74\x59\x0d\x74\x05\x38\xb5\xb9\x39\x7a\xe8\xb5\xa6\x04\x2d\xf2\x98\xa8\x09\x84\x79\xf8\xa0\x94\x2a\xf8\x45\x66\x08\x01\x81\x7a\x17\xca\x6c\x1b\x6b\x25\x87\x92\x4a\xb2\x64\x60\x37\x65\x05\xcb\x45\x31\xd2\xe3\x8e\xb3\x67\xa3\xa8\x82\xb4\x8d\xbb\x60\xda\x46\xdf\x28\xc2\xe8\x47\xdd\x02\xa3\x02\x8b\x3a\xc4\x16\x86\x67\x94\x84\x92\x51\x32\x4f\x3d\x4f\xc7\x41\x44\xa3\xde\x04\xfc\x06\x81\xa7\xda\xa1\xf5\xc2\x16\x61\xca\xe8\x83\x30\x12\xaa\xa6\x53\xfc\xc5\x07\xed\xde\xf8\xa6\x84\x35\x16\x58\x21\x44\x5c\x81\xa7\xc5\xfb\x69\xe9\x99\x58\xe1\x08\xfe\x8b\xe1\x8b\xa3\x62\x1e\x1e\xe8\x78\xf1\xce\xa1\x91\x2b\xd9\xb8\xa0\x04\x82\xc4\x48\x67\x59\x5a\x9b\x16\x63\x5c\xc4\xf9\x58\xe1\xd1\x56\x80\x8a\xb4\x3d\x60\x76\xc7\x9c\x7f\xe9\xb2\x5a\x55\x35\x6b\x51\x38\x65\x85\xdc\xd6\xce\xb3\x8f\x29\x83\xb6\x7e\x18\x9d\xb6\xc7\x88\x76\x82\x39\x62\x7f\x08\x62\x8b\x90\x14\x4b\xc4\x74\x43\x17\x1b\x22\x99\x57\x0d\x2d\xd5\x31\x56\x30\x96\xd9\x60\xc1\xf1\xee\x77\x07\xd1\xa0\x75\x98\x4d\x2d\x56\x8b\x4a\x22\xe8\x66\x08\xc6\x94\x33\x4c\x61\xc3\xac\x0b\x63\x2b\xa0\xf7\x62\x94\x15\x02\x95\x25\xac\xb0\xda\xaf\x46\x23\x57\x8f\x30\x8a\x1b\xc4\xc1\x17\x97\xfc\x52\x77\xb9\x23\xdd\x7c\x38\x2a\x72\x8b\xd3\x4a\x82\xd3\x90\x51\x5c\xd6\xdc\xf9\xda\x67\x42\x85\x74\xb7\x2e\x2a\x98\x7e\x74\x4d\xd5\x7c\x38\x61\x5e\x0d\xf9\x04\x9b\x03\x4c\x98\x36\xa3\x7d\xa7\xc1\xb4\x42\x7d\x11\x98\x1c\x7c\x8b\x58\xca\x5e\x2d\x04\xcf\x42\x9b\xd8\xf6\x27\xc0\x15\x2d\x84\xd9\xec\x36\xb8\x75\x4c\x24\x3a\x08\x62\xc8\x1a\x47\xd3\x98\x92\x51\xa9\x9b\x29\x79\x12\x00\x28\x46\x1c\xbe\x64\x21\x98\xb1\xe1\xe6\x94\x4a\xea\x38\xe0\xe2\x32\x98\x2b\x16\xc7\x64\x8e\xac\x59\xe1\xf7\xe6\x1e\xd3\x82\xde\x5d\x65\x60\x2c\x2c\x38\x28\x57\x40\xae\x71\x1f\x03\x81\x8c\xa0\x99\x28\x85\xdb\x7e\x37\x13\x82\xb8\x2c\xb5\x52\x68\x90\x66\xf3\xa4\x03\x31\xc6\x45\x89\x19\x29\x63\x28\x76\x68\x9c\xfa\x39\x4f\x1a\x48\xb1\xb0\xec\x50\x7a\xd0\x38\x0d\x32\x04\xf6\x39\x14\xbb\xb6\xb4\x42\x68\x29\x04\x29\x2e\x7e\x24\xcc\xf9\x8a\x3a\x10\xf8\xc3\x00\xd7\x9e\xcd\xc0\x0a\x84\x92\xf3\x4b\xd3\x38\xc1\x8a\x6b\xa0\x97\x7a\x98\x08\x7c\x28\x1a\x6f\xcb\x54\x94\x4a\x4b\x99\xba\xc8\x4e\x08\x5a\x9c\x8d\xa5\xcf\xe7\x0a\x1a\x30\xa0\xdf\xcf\xb5\x77\xa6\x98\x5a\x56\x04\xab\x8a\xee\x3f\x73\x0b\x84\xed\x9b\x8c\x4a\x46\x75\x81\x6d\x4e\x98\xa8\x3b\xfc\xed\x84\x3c\x2c\xd4\x2d\x23\xf8\xb4\xbf\x3f\x21\x78\xf8\x16\xb0\xac\xaa\xca\x90\x0e\x71\xb2\x81\x6d\xf9\xaa\x26\x11\x92\x3e\x08\x3c\x07\x13\x07\xf0\x92\x1b\xc8\xbf\x69\x6e\xff\x82\xc4\x7a\xfb\xb0\x83\x7c\xc0\x35\x2b\xab\x82\xe9\x6c\x22\x5c\xa8\x2d\x14\x87\x2e\x09\x2e\x37\x2c\x35\x67\xd4\x9f\xd0\xfa\x23\x2d\x84\xde\x55\x00\x26\xa8\xab\x0d\x6a\xf0\x05\xe4\x89\x1b\xd1\x2b\x4f\xe0\x29\xd1\x91\xbe\xef\x52\xd9\x1c\xef\xfb\x70\x96\xe1\xa3\xa9\x28\xed\x2d\xbc\x1c\x2f\xea\x10\x3e\xd9\x30\x88\xfe\x01\x7b\x10\x80\x06\x28\x02\xcc\x0f\x46\x2c\x81\x28\x17\xc6\xb3\xa5\x71\x7d\xef\xcf\x3d\x10\x4b\x1a\xdc\x58\xee\x14\x06\x1e\x3d\x1d\xc8\x2b\x4e\x8e\x02\xf3\x5c\x1c\xa2\x5d\x26\xdd\xb8\x73\x80\x63\x99\x60\x76\xc7\xf3\x8c\xb2\x97\xec\x29\xc6\xa6\x2d\x46\x95\x16\x6c\x2e\xb8\x51\x59\xb5\xf4\x69\x9e\xe0\x1c\x40\xa9\x6c\x56\x44\x46\x8a\x0b\x33\x87\x89\x4b\x41\xb0\xec\x2f\x3c\xb1\x7a\x09\xe2\xae\x28\x08\x5c\x48\x00\x3c\xfb\x93\x66\x1b\x8b\x2b\x4d\xb5\xc6\x6d\xf4\x1f\xfb\x68\x86\x5d\xab\xea\xb1\xe0\xc6\x00\x08\x49\xbf\xfb\x1d\x2a\x66\x9c\xa5\x4e\x15\x84\x43\xac\x74\xa6\xe0\xf2\x16\xc8\xe0\x08\xd4\xe4\x5e\x09\x96\x20\x3a\xec\x3b\x51\xa2\xac\x0b\xc5\x0d\x38\x62\xe9\x88\xb8\x0e\x8d\xe1\x9d\x2e\x5c\x2f\x7c\xff\x29\xdb\x31\xcc\x65\x92\xdb\x11\xe0\x84\x01\x25\x61\x70\x1e\xbb\x29\x01\xbe\x56\x44\x87\x25\xf0\xfa\xc4\x90\xb8\x65\xa6\x76\x08\x62\x0c\x35\x04\x40\x2d\x72\xcd\x31\x2f\x5c\x63\x30\xd9\x21\xe0\x0b\x21\x52\xfc\x00\xa4\xeb\xc5\x5d\x0e\x42\x7f\xa2\xa1\x21\x40\xed\x9c\xab\x02\xf4\x07\x9b\xd8\xe1\x4b\x0d\x93\xcf\xd4\xd3\x04\x0d\xc1\xf0\x2a\x85\x2c\x90\xb0\x9f\x2f\x2f\xe6\xd8\xfc\xc2\x63\xd1\x5d\xcf\x9d\xf0\xc5\x76\x56\x58\x58\xa4\x72\x9d\xca\xfa\xe8\x59\x36\x34\xea\xf8\x93\x3b\xe1\x3f\x52\x04\x68\x32\x95\x05\xdc\x13\x6d\x12\xee\x65\xc2\x6e\x45\x59\x88\x9c\x4c\x42\xa3\xb6\xb8\x8a\xc0\x75\x88\x3f\x96\x1b\x74\xcd\x94\x43\x9a\x94\x55\xa1\x12\x5b\xe3\x9e\x7c\x60\xf4\x31\x67\x29\x93\x38\xc0\xf2\x25\xf1\xfb\xde\xec\xd5\xd4\x9e\x63\x3a\x15\x4e\xd4\x64\x2a\x72\xfa\x61\x2d\x8e\x14\x0a\xed\x6a\x5f\xfb\x23\x2e\x45\x07\x57\x21\xfa\xf9\x11\x82\x25\xb4\xa1\x8c\xcf\xab\x0b\xfb\x76\x59\x02\xdf\xdc\x14\x3c\x12\x5a\x75\x0a\x38\x27\x59\x30\x09\x0c\x42\xf1\x42\xd9\xe0\x04\x7a\x15\xcd\xe5\xd8\x97\xb8\x03\x3e\x4d\xc0\x1b\x31\x23\xd7\x53\xa0\xc1\x43\x55\x0f\xd4\x3a\xfa\xfc\xd5\x7b\xd2\xd1\x37\xea\xee\x1b\xc4\x46\xb8\x95\x41\xf5\x83\xc5\x10\x5b\xa0\xf2\xab\x2c\x15\x7b\xfd\xf9\x1e\xa2\x1b\x0b\xc3\xc0\x59\x31\xca\xc3\x04\x1a\x9a\x23\x36\xcd\xa3\x08\xac\xf5\xaf\x05\x1f\x34\x24\x5c\xe2\xb4\x5a\x30\xbb\x94\x25\x9f\xab\x27\xec\xee\xb1\x45\x4b\xcb\x45\xb2\x97\x4a\xd5\xbe\x2f\x83\x59\x57\xcf\x2c\x13\x87\xf3\x0e\xc9\x94\xa9\xa8\x8d\xae\x2b\xc1\x43\x70\x92\x85\x18\x40\x2a\xad\x26\x3f\x93\x6b\x68\xf3\x2e\x35\x21\x77\x0a\x97\x1e\xc7\x42\x13\x85\xb0\xef\xb2\xbe\x04\x55\x56\x15\x71\x9a\x83\x8f\x60\xf9\xdd\x80\x8b\xc3\xad\xcd\xe6\xcc\xae\x19\x61\xf0\x3a\x56\x6c\xbe\xc7\xf8\xaf\x57\xcb\xcd\xcc\xc6\xf5\xda\x26\x6b\xdc\x36\xaa\x44\x52\xfa\x66\x75\x75\x48\x41\x23\x9c\x0e\x2a\xa6\x80\xc6\x6c\x75\x25\xc8\x05\xd3\x92\x0d\x33\x3a\x53\xee\xc8\x9a\x73\x1a\x10\x2b\xbc\x29\x1c\xa5\xdd\x9a\xfe\xdd\x9f\x24\xe4\xdf\xb0\x46\x5b\x58\x87\x0d\xf4\x7b\xb3\xcc\xb8\x63\x95\xa8\xb1\x9c\x6f\xbc\x43\xfd\x5e\xf2\xb9\x67\xa2\x86\x16\x25\x8c\x1d\x41\x38\x89\x6b\x2d\x26\x53\x1d\xf6\x72\x95\xeb\xce\x66\xd1\xb9\x14\xd8\xf3\x77\x32\x23\x5e\x06\xf5\x92\x57\x5a\x4e\x5c\xea\xaf\xeb\xdd\x69\x8b\x20\x11\x44\xa1\x71\xa2\xee\x9a\xb3\xb1\x13\x63\x7e\xc0\x95\xee\x94\x01\x0c\x4a\x26\x58\xa1\xc3\xd6\x3d\x81\x8b\x72\xde\xdc\x50\xd4\x99\x1f\xb6\xc8\x4c\x56\x86\x4d\x49\xdd\xfc\xe0\x4e\xb2\xea\x2b\x08\x0f\x3b\x09\x04\x71\x19\xc9\x05\xc9\xeb\xd8\xa7\x8b\x17\x81\x42\xf3\xb5\x6f\x65\x83\xe8\x6b\x52\x21\xb4\xa4\x16\x05\xf5\x50\x79\x56\x0c\x84\xd7\x57\x50\x8e\x53\x28\x26\xbe\xef\x6d\x83\x2a\xa8\xbc\x40\xad\x85\xcd\x7b\x71\xfe\x1d\xd9\x8d\xab\xf6\x89\x3a\xa3\xd7\x03\xb9\x2e\x2f\x96\xdb\xf3\x58\x52\x02\xe1\x38\xeb\x67\xda\xb9\x8b\x5d\x25\x15\xc2\x0b\x2d\xae\x2a\x46\x8e\x81\xaf\xc6\xf7\x8e\x8b\xc2\x06\x35\xc8\x7a\x9b\xe0\xb0\x2b\xae\x90\x0e\x3a\x3c\xb2\x22\x35\xa6\xa1\x08\x9b\x3f\xd8\xc6\x1e\x75\xd0\x03\x55\x1d\xc4\x18\x91\x2d\x5b\xf5\x90\xec\x36\x9c\xb5\x5b\x42\xed\x10\x12\xa6\x36\xc0\xb6\x04\x25\x68\x0e\x0f\xba\x0c\x72\x8e\xc0\x1c\x44\x1c\xf8\xaa\x28\xf4\xbd\x8b\xd7\x61\x8d\x8d\xda\x01\xa3\x93\xa1\x20\x40\x10\x54\x7b\xb0\xe8\x07\x97\x06\x4f\x0d\xac\x1a\xaa\x92\x04\x87\x9d\xc5\xc5\x49\x7c\x94\x2b\x2e\xdf\xb8\x24\x53\xb0\xcb\x22\x51\x97\x4d\xb0\x74\x46\x61\xac\xd4\x92\x12\xcc\x62\xd5\xa9\x88\xd7\xa6\x6e\xfe\x1c\x75\x5f\xd2\xbe\xac\x8e\x6d\x1d\x8c\xad\xda\x0c\xad\xe3\x23\x17\xb7\x8e\x12\xc5\x50\x96\x03\x1b\xb8\xc4\xe3\x4a\x2a\x43\x10\x9a\x75\x79\xf3\x0d\xd1\xc1\xc3\xc3\x2e\x3b\xb3\x0d\x3c\x5c\xb7\xa1\x81\x4d\x91\x86\xde\x10\x3f\x56\xe9\x08\x34\x45\xcc\x64\x09\x60\x4b\x58\x39\x03\x70\x2c\xbe\x3b\x32\xb3\x45\x85\x82\x4e\xbc\x90\x75\xde\xae\xb5\x0e\xb2\x9d\x95\x95\xaa\x84\xea\x24\x51\x05\x60\x2c\x18\x05\x94\x05\x5e\x31\xec\xd5\xb6\xfe\x76\x68\x72\x0d\x5d\x2b\xca\x14\xcc\x05\x97\x02\xe8\x13\xf3\x8c\xe8\xef\xf8\xf0\x31\xea\x96\xd6\xb9\x13\xf5\x90\x08\x45\x16\xb8\xf0\x5d\x93\x54\xf1\x61\x60\xd4\x4e\x28\x84\x66\x0d\xbd\xe5\x6f\xfb\xaa\x45\x4e\x69\x0d\x15\x35\x9b\x1d\x87\xd1\x77\xa3\x2f\x4e\xaa\x5c\xf3\x42\x60\x1a\x04\x02\xf5\x83\x0e\x3c\x5e\xc8\x07\xf8\x27\x08\x3b\x39\xba\x4e\x45\xa9\x51\x7b\x88\x5a\xec\x60\x73\xda\xfa\x86\xfa\x06\x29\x00\xd0\x6c\x3e\xa8\x1c\xd0\xef\xf5\x34\xe8\x6c\xe8\xaa\xaa\x80\x82\x49\x57\x0e\x94\xc0\xa1\x3e\xbd\x93\x4c\x47\xed\xdc\xa3\xf6\x47\x0b\x49\xb9\x28\x38\x11\x76\x65\xce\x8e\xb9\x00\x6d\x12\x09\xe1\x71\x5c\xf0\x04\x1a\x54\xb9\x9f\xf4\xb8\x84\xd0\xe5\x5c\x56\xb8\x50\x92\x58\xd8\x69\x03\x8b\x10\x1a\xe6\xc8\x53\x47\x68\xb0\x1a\x9c\x17\x3e\xbc\x33\xe1\xb1\xbe\x40\xd8\x43\x29\x86\xa5\xb9\x00\x1d\x8a\x10\xb6\x7c\xc5\x22\x2c\xb6\xaf\x01\x85\x10\xa0\x19\xa1\x2a\x6f\x9e\xb2\xac\x40\xb7\x8c\x2c\x59\x55\xe0\xb9\x15\x08\x18\x86\x7d\x46\x2c\x4c\x58\xed\x2e\xa8\x8d\x80\xa2\xb1\xcf\x73\x7f\x0d\x88\xf0\x03\x61\x75\x44\x80\xd7\x59\x98\x6d\xf8\x9c\xc7\xf3\x36\xbe\x02\x98\x1f\xc4\x71\x35\x54\x65\x38\x8b\x80\x9b\x16\x88\xdd\x80\xdc\xcc\x0a\x70\xda\x52\x1d\x35\x2b\x16\xdc\xf2\xc8\xab\x5a\x06\xa6\xa4\x28\xf5\x9c\x10\x98\xd4\x29\xc9\x8a\x6f\xc0\x7c\xa2\x37\x8b\x7a\x73\xe1\x30\xa0\xb6\xe0\xb3\xdf\xc4\x13\xb0\xd9\xe4\xd0\x2f\x2a\x98\xa5\x4d\x75\x71\x1d\xf6\xcc\xf2\x47\x25\x8d\xaa\x6d\xa9\x03\x5f\x89\x23\xdc\x75\x32\xd6\x2d\x6c\xd7\xbc\x6d\x9b\x02\x50\x25\x26\x04\x9b\xf9\xf2\x17\x46\xcb\x18\x80\xd9\xf0\x1a\xcb\x2d\x43\xe2\x3f\x28\x41\x13\x6c\x51\x09\xbd\x84\x65\xa5\x7c\xed\xfe\xb0\xff\xd2\xcc\x98\x90\x25\x20\xe4\xc2\x0c\xdc\xb8\x67\xb2\x3d\x09\xd8\x03\x17\xe7\x98\xa1\x03\x1d\xd9\xa4\x08\xdb\x76\x85\x08\x73\x42\x6c\xbb\x82\x01\xdf\x90\xf1\x50\x4d\x5d\xaa\x13\x24\x35\xef\xa7\xb2\xc0\xbd\xa0\x12\x92\xd9\x90\x01\xe0\x8e\xa9\x31\x30\x91\x51\x3a\x49\x69\x88\x2a\x19\x06\x1d\x8a\x70\x8e\x5e\x64\xd1\x44\x31\xc7\xdd\x25\x2b\x3b\x81\x49\x77\x29\x8a\x6d\x88\x18\x3a\xfc\x70\x7c\xa6\x42\xfe\x05\x1c\xa2\x99\xb0\xf9\x56\x6e\xcb\x84\xcd\x08\x4c\xd1\x17\x79\x26\xee\x6c\x6d\x90\xbe\x58\xbc\xe7\xf0\x6e\x56\x0b\xdd\xf2\xfc\x25\xf9\xa4\x6b\x23\x6b\xf5\x44\xc8\x7d\xec\xc5\xbb\x90\xfc\xa7\x82\xe4\x44\x84\x44\xda\x72\x23\x50\xe8\x15\x5c\x26\xe4\x6e\xea\xcf\x59\x70\x30\xfa\x73\x1f\x9c\xc3\xfe\x57\xe8\x43\x46\xb9\x1e\xea\x3a\x0b\x59\xe9\x46\x8a\x62\xe7\xed\x68\x2e\x0d\xd6\x02\xf5\x32\x06\x29\xe1\xfa\xe4\xb2\x91\x90\xa3\x92\x4f\xc7\x80\x82\x88\x16\x1a\xe4\xe6\xd6\xdb\x8b\xbb\xe5\x24\x80\x3c\x23\x3f\x50\xf8\x72\x54\x8f\xd7\x36\x4b\x32\xfa\x01\x04\x0e\x3d\x39\x50\xba\x54\x0a\x2f\x5e\x48\x0e\xc6\xda\x25\x78\xde\xa9\x72\x49\xb0\x8a\xac\x18\xc8\x72\x2a\x4b\x44\xee\x80\xe7\xca\x4d\x93\x2b\xf4\xe3\x5b\xd7\x38\x45\xe2\xa8\xee\xc7\x92\x6d\xfe\x12\xdb\x6f\x2f\xad\xaf\x0a\x6e\x22\x4a\x4e\x2c\x05\x36\x11\x24\x1e\x28\xc4\xec\xe6\xa6\x20\x9f\xbe\xaa\x57\xfa\x5d\x52\x5a\x07\x74\x0a\xa3\x3c\x9b\x63\x97\x4d\x10\x92\x64\x16\x5b\x88\x19\x73\x63\x81\x69\xd7\x17\x46\x61\xc8\xcc\xcd\x90\x15\x4c\x4d\xb3\x32\x73\xb5\xd9\x6c\x94\xc5\x96\x97\x33\x6c\x5e\xa1\xe3\x0f\x4b\x50\x60\x47\x5a\xcd\x33\xa8\xa5\x41\x65\x01\xe0\x23\xae\x88\x1c\x82\xec\x07\xa2\x74\x11\x71\x50\xed\x7d\x4c\x83\xe0\xb9\xd0\x0e\xdd\x08\xd2\x2a\x53\x60\xb2\xc5\x15\x86\x7d\x08\x3a\xd0\xa9\xc9\x6f\xae\x82\x62\x6a\xbe\x3e\x4b\x7c\x23\x83\x8c\x0d\xd0\xba\x78\x6d\x63\xd1\x0c\x68\xb5\x07\xd5\x5d\x68\x14\x08\x45\x46\x85\x55\x5d\xa2\x63\x50\x78\x5d\x87\x7d\x97\x63\x1d\x93\x0e\xa0\xcd\x60\x71\x01\xa1\xd2\x42\x0b\xa3\xcf\xd9\xad\xf7\x31\xfa\xe5\xac\xb2\x40\x87\x20\xad\x07\xa1\xd6\x10\x3f\xb3\x57\x46\x4c\x16\x0f\xf3\xa0\x5e\x65\x66\x2a\xf6\x11\x4c\xc5\x7a\xc0\x4c\x1c\x77\x7f\xd5\xb5\xfa\xa9\xc5\x26\x07\x07\x08\x8c\x85\x85\x14\x4e\x88\xb5\xf9\x52\x55\x61\xcd\x1d\xcc\x2b\x89\x0e\x7a\x5d\x7b\x2f\x1a\xc2\x5e\x58\x56\xd7\x9c\x4a\x11\x5f\x36\xb6\x02\xab\xb1\x1c\xbc\xd9\x4f\x9a\xa8\xbb\x50\x82\x4b\x38\x94\x92\x54\xa7\x63\x79\x91\xf1\xe8\x83\x2f\x71\x29\x0d\x0f\x7e\x03\x15\x83\xe5\x44\x98\xd3\xa8\xf0\x62\x11\xbe\x3d\xa2\x05\xa0\x61\x31\x60\xc0\xda\x0d\xb0\xb1\x9d\x3d\xa3\xa3\x0a\xfc\x53\x34\x1f\x3d\x93\x6c\x24\x21\x78\x33\xc4\x53\x5a\xde\x45\xb5\x95\x94\xe6\xba\xb2\x85\xbe\xf2\x3c\xf0\x5b\xa0\xbf\xbd\xaa\x97\x08\x23\x47\xec\xb4\x94\x13\xe9\x5c\x0c\x0a\x7a\xdf\x8c\x48\xe7\x2b\x05\xdd\x47\xee\xa5\x11\x8a\x9f\x7c\xde\xad\x97\xfe\xbe\x78\xe3\x8a\xfa\x3b\x36\x79\xda\x65\x2f\x4e\x8f\x8f\xde\xf6\x4e\xa1\xb6\xfc\xf9\xd9\x8b\xab\xa3\xab\xef\xd9\x59\xcf\x56\x73\x39\x61\x2f\xaf\x4e\x4f\xa1\xe0\xfd\xb7\x47\x57\xaf\x4e\x13\xf3\x1c\xf6\x0f\xb8\x78\x73\x73\x53\xb8\x36\x01\x2f\xa9\x76\x3d\x0d\x91\xd8\xe2\xff\xa7\xff\x75\x7d\x7a\x71\xcd\x2e\x4f\xaf\x5e\x9f\x5d\x5f\x9f\x9e\xb0\x17\xdf\xb3\xa3\xcb\xcb\xf3\xb3\x63\xa8\xc4\x7f\x7e\xf4\x0e\xca\x99\xfc\xd7\xf1\xe9\xe5\x35\x7b\xf7\xed\xe9\x85\xaf\xa3\xcf\x7a\xd7\x47\xe6\x8d\xb3\x0b\xf6\xee\xea\xec\xfa\xec\xe2\x15\x8c\xb8\x58\xd8\xff\xe8\xe2\x64\x3f\x68\xff\x01\x2d\x04\x4e\x5d\x83\x83\x68\x65\x61\x73\xea\x25\xad\x0e\x6e\x6e\x0a\x6a\x76\x70\x06\xc3\x51\xcf\x83\xd3\x93\xe6\xae\x07\x49\x43\xdb\x03\xa0\x92\xd1\xa4\xf1\xe9\xd5\x1d\x10\xa0\xf8\xcd\xb2\x26\x08\x37\x37\x85\x6b\x2d\x8d\xf4\xbc\xb8\x3e\xbb\x3a\x65\x57\x67\xbd\x7f\xb0\xa3\x9e\xa5\xf2\x7f\xbe\x3d\x72\x43\x5d\x9e\x5e\xbd\x7c\x73\xf5\xfa\xe8\xe2\x18\xf6\x0d\x67\x12\xec\x2c\xb4\x1d\xf8\xfe\xcd\xdb\x2e\x63\xbd\x6f\xdf\xbc\x3d\x3f\x89\x08\x64\x88\x76\xca\x4e\x4e\x5f\x9e\x1e\x5f\x9f\x7d\x77\x9a\x98\x27\xd9\x51\xaf\xf7\xf6\xf5\x29\xf5\x90\x38\x7e\xd3\x83\x7e\x06\x47\xe7\xe7\xec\xe2\xf4\xf8\xb4\xd7\x33\xef\xf5\x4e\xaf\xbe\x3b\x3b\x06\x7a\x5c\x9d\x5e\x1e\x9d\x5d\x61\x0f\x86\xab\x2b\x6c\x76\xe0\x25\xd3\x5f\xe2\xde\x0d\x6f\x2f\xce\xcd\xba\xaf\x4e\xff\xf3\xed\xd9\x55\x13\x7b\x98\x71\x8e\x5e\x5d\x9d\x62\x3f\x89\xb3\x0b\xc3\x74\xc4\x0d\xef\xce\xce\xcf\xb1\x8f\x43\x8d\x25\x12\x46\x0d\x1e\x3c\x43\x7c\xcf\xde\x7d\xfb\x86\xbd\x3e\xfa\x1e\xeb\x0c\x99\x5d\x46\xb6\x61\x57\xa7\xae\x14\x51\xcc\x2b\x47\xbd\x80\x6d\x8f\x5e\xbc\x31\xd4\xf0\x3d\x24\xae\xdf\x18\xd2\xdc\xdc\x14\x66\xcb\xa8\x83\x44\xd8\x0c\xc3\x7c\x9e\x2a\x24\x25\xac\x77\x79\x7a\x7c\x66\xfe\x71\x76\x71\x7c\x76\x72\x7a\x71\x7d\x74\x8e\x0d\x6b\x8e\xdf\x5c\xf4\x4e\xff\xf3\xad\xd9\xd5\xa3\x73\xd7\x88\xc2\xf6\x8f\xa0\xce\x11\x41\x4f\x88\xb3\x0b\xcb\x35\xd7\x6f\x18\x1d\xdb\x60\x7b\xdb\x2b\x9b\x71\x9c\xbf\xe9\x01\x03\x9e\x1c\x5d\x1f\x31\x98\xf5\xf5\x11\x7b\x71\x8a\xad\x77\xae\x4e\x2f\x4e\x4e\xaf\xe0\xb8\x1d\x1d\x1f\xbf\xbd\x3a\xba\x86\x0f\x9a\x77\x4e\x7b\xac\xf7\xb6\x77\x7d\x74\x76\x81\x1b\x64\x58\x02\x8e\xfb\xd9\xd5\x89\x3b\x6d\xd4\x16\xfd\xe5\xd1\xd9\xf9\xdb\x2b\xcb\x79\x8e\x96\xd7\x6f\xd8\x9b\xcb\x53\x18\x14\xf8\xcf\x6f\x8e\xed\x67\xd1\x49\x80\x23\xd8\xd9\x4b\x23\xae\xdf\x1e\x7f\x4b\x7b\xe9\x3b\x61\xe0\x36\x7e\x7b\xd4\x63\x2f\x4e\x4f\x2f\xd8\xd1\xc9\x77\x67\x70\x2a\xf1\x4b\x97\x6f\x7a\xbd\x33\xa2\xcd\x9b\x97\xcc\x8c\x70\x73\x53\x10\x45\xeb\xc2\xf0\xde\x5e\xb9\x41\x1f\x8c\x6f\xe5\xcc\x5c\x26\x47\x60\x38\xa3\x67\xf9\x1a\x54\x0c\x6c\x00\x5e\xb2\x0b\x31\xa3\x4b\x14\xc3\xb3\x16\x83\x0c\xce\x65\x2c\xf3\x88\xa9\x5d\x2c\xaa\xc6\x1c\x54\x63\xa7\xd8\x36\x5d\xc8\x58\xd7\x0e\x32\x20\xa3\x42\x86\x56\x03\x04\xc5\x12\xca\xdb\x02\xce\x68\x22\x8a\xd4\xd6\xa9\xce\x74\xed\x0e\x21\xdb\x4f\xd8\x7e\x19\x58\xf8\x3a\xae\xde\x6c\x6b\x04\xa0\xa7\x13\xcb\xb4\x33\x25\xc1\x56\x41\x5d\x1e\x2f\x9c\x9a\x97\x67\xa1\x34\x12\x6b\x43\xf3\xe5\x5c\x8b\xb2\xe0\x58\xef\x37\x59\x1e\x32\xbb\xa7\x16\x65\x27\xac\x1e\xed\xd2\x08\xed\xa7\x12\xc6\xb5\xe6\x14\x4a\xf7\xea\x9f\xcb\xe9\x8b\xca\x74\x63\x49\x4e\xd0\x23\x14\x1f\x1a\xdb\xcf\xa8\x1f\xee\xfd\x89\x7d\x5c\x69\x0a\xaf\x01\xf2\x93\x80\x01\x00\xc1\x86\x78\x84\xd2\x2c\xa8\x64\x8c\xca\xe5\x9d\x98\x53\x34\x7f\x90\x57\x16\x60\x14\x97\x0a\x81\xc1\x60\x14\xaa\x23\x8d\x78\x0e\xed\x60\x3a\xd8\x8b\xa3\xe5\x54\x1c\x73\x35\xe5\x59\x41\xfe\x3f\x36\x95\x60\x16\x62\x63\x22\x41\xa5\x3d\x21\x6a\x43\x51\xc4\xcc\xe8\x2a\x55\x91\x06\x3c\x6e\x76\x1a\x86\x08\x71\x3f\x44\x0d\xc5\x0a\x3e\xb1\x83\xf7\xcb\x4c\x0c\x59\x96\x0a\x8e\x50\x72\x2c\x88\x69\x8b\xc9\x98\xa1\xe2\x26\x2f\x73\x63\x6c\xe3\x00\x46\x8b\xc1\x12\xd6\xee\xb3\x54\x6b\xd8\x59\xc5\x11\x2b\x7e\xe3\xf2\x0f\x23\xfe\x43\xa5\x7f\xdf\x95\x2c\x70\xd5\xef\x97\x70\x4e\x50\xbe\x78\x31\x73\x94\xf9\x26\xe5\x90\x8c\x1d\x68\xce\x2b\x75\xc6\x6f\xc8\x3a\xa0\x21\xee\x7c\xe7\x1b\x16\x37\x2a\x86\x30\x66\x3b\x2e\xb5\xd2\x59\xb4\x1e\xba\xcb\x69\x12\x86\x93\xc9\x4e\x1d\xcb\xa9\x70\xc5\x48\xad\x72\x89\x29\x86\x16\x2d\x67\x4c\x3c\xab\xae\x18\xd1\x69\x55\x96\x6f\x5c\xc6\x05\xa5\x7a\x80\x1f\x1d\xaa\x15\xf8\xae\xe1\x16\xe2\x56\xd7\x3b\x64\x79\x6f\xef\x25\xa3\x23\x08\x57\x08\xd3\x52\x78\xb5\xa1\x6b\xdb\x43\xa2\x11\xaa\x02\x5a\x18\xf1\x12\x1e\x82\x66\x38\xd4\xfa\x3b\x1c\xa6\x97\x79\x2a\x7f\xc3\xb2\xa1\x39\x1b\x0d\x86\x40\xd0\x17\x1b\x46\xaa\xb7\x26\x4a\x36\x6d\x4c\x64\xb4\x8a\x5c\x81\xd9\x4d\x1d\x30\xc8\x0b\x57\xb0\x31\x5e\x23\x80\x62\xc5\x9a\xfe\x86\x2b\x45\x2e\x06\xba\x94\x45\x36\xa0\x22\xf4\x53\x68\x3a\x90\xd9\xa2\x1a\x01\xc9\x20\x0d\x60\x24\x88\xf7\xc4\x64\x9a\xcb\xb9\x28\x59\xdb\xe6\xeb\xba\x3a\x0e\x64\xb6\x4d\x44\x09\x8d\xb7\x29\x48\xad\x8c\x7d\x99\xa3\x7f\xbf\x80\x06\x0d\x90\xd5\x83\x69\x04\xde\xbd\xe4\x8b\x2a\xd9\x12\x6b\x8b\x78\x49\x8b\x7a\x35\x92\xf5\x5b\xaa\x2e\xcb\x99\x82\x00\xc2\x37\x94\x66\x6d\xde\x32\x72\xc2\xe3\x3c\xbe\x97\x73\x99\xce\x0b\x61\x49\x4d\xfd\xeb\xec\x07\x95\xed\x6c\x46\x13\x01\xa9\x27\x00\x80\xe6\x40\x16\xf6\x1c\xfd\xdf\x2f\x4b\xd9\xbf\xf9\x33\x6b\xfb\x9a\x22\x30\xd3\x19\x15\xd4\xbe\x2d\x64\x5f\x75\x1c\x54\xb2\x3f\x67\x7f\x37\x53\x61\x57\xbc\x48\xe5\x84\x7d\xcb\x07\xb7\xa2\x74\x8c\x89\x58\xc1\xaa\x04\x99\x76\x3d\x67\xc7\xd2\x6c\xf0\x21\x3b\x9a\x96\x59\xce\x0e\xbf\xfe\xfa\x00\xef\x21\xfb\x97\xcb\x52\xa8\xcc\x96\x1c\xf9\x2e\xb3\xed\xb5\xae\xcd\x55\xfb\x67\xd7\x3b\x03\xc9\x02\x6e\x8d\x7f\x5b\x68\xd5\x35\x90\xa9\x98\x64\x65\x29\x4b\x6a\x70\x6b\xfb\xa1\x86\x1d\x07\x63\xd1\xfb\xe4\xe0\xf0\xaf\x66\x25\xaf\x79\x99\xfd\x58\xb0\x6f\xf9\x9d\x28\xfb\xe2\x56\xb0\x09\xfc\x62\xfc\xb7\x11\xb0\xcd\x80\xea\xaa\x62\x2b\x80\xed\xf7\x0d\x0c\x9a\xf8\x6f\xad\x73\x20\xf8\xe8\x81\x63\xb6\xd2\x3b\x10\x5d\xd4\xdb\xe9\x1e\xb8\x49\x83\xd4\xb0\x7f\x20\xa4\x84\x7d\x1e\x1d\x04\x29\x18\xf7\x19\xf4\x10\xf4\x16\xf2\xc6\x5d\x04\x8d\xe5\xb1\xbd\x3e\x82\x46\x8c\x6f\xa5\x93\x20\x98\x66\x5b\xec\x25\x78\x73\x53\x6c\xad\x9b\x60\x6d\x3b\x7d\x3f\x41\xe8\x9f\xcd\xc1\x05\x56\x90\x6c\x3a\x9a\xf2\x81\xd7\x82\xa2\x16\xd6\x07\x09\xfb\x3b\x2f\xa0\x37\xe0\x93\x83\x83\xaf\xe2\x56\xdc\x1c\xde\x8b\xdb\x70\x13\x27\x2d\x2b\x10\xfc\xd6\x2c\xfa\xea\xf4\xf2\xea\xcd\xc9\x5b\x58\x59\x02\x4f\x85\xe5\x82\x71\x84\xc3\x2e\x3b\x09\x72\x26\xec\xf4\x5b\xbe\x52\x2e\xb1\xff\x44\xf0\x22\xf6\x0c\xd7\xb1\x32\x20\x2b\x2c\x6a\xd9\xa2\x8f\x23\xf0\x25\x85\x19\x82\x84\xd3\x20\x77\xc7\x46\xbe\xbe\x76\x3e\x6e\x2b\x02\xeb\xb3\x92\x65\xc3\xb4\xfc\x81\x96\xb3\x02\x33\x0c\x45\xa1\x33\x3d\x0f\xeb\x0d\x3b\xdf\x6f\xfd\x69\x9b\x47\x0c\xf2\xdc\x03\x91\xc2\x68\x07\xf4\x45\x18\xf1\x9c\x9d\xc2\xb0\x0d\x53\xa8\x8a\x20\xe4\xcd\x31\x78\x6a\xe7\x60\x84\x3b\x08\x42\xf4\x0d\xc3\xaf\x1d\x54\x96\x8a\xe8\x24\x94\xd5\x06\x3f\xe4\x30\x5d\x50\x95\xcd\x6f\x51\x8f\x37\x86\x2a\x40\x4d\x6d\xd9\x1d\xd2\xdb\xb8\xa6\x0f\x75\xc1\xf9\x1b\x44\x9c\x3d\xe6\xc2\xa7\xc6\x24\xd6\x56\x82\x31\x7c\xa1\xdd\x76\xd6\xc1\x57\xe5\x4c\x94\x09\xe1\x09\x42\x34\x41\x82\x05\xf6\x28\xeb\xc6\x27\xa9\x61\x04\x60\xc2\x0b\x6e\xf1\x2c\x36\xfb\x1b\x26\xe5\x5b\x7f\xf4\x6d\x1f\xc3\x41\x1d\x78\x82\x36\x41\x96\x75\x70\x43\xd4\x38\x9b\x42\x50\x22\x1b\x6a\xb8\x45\x07\x66\xd8\xf6\xd3\x83\xff\xd1\x61\x56\x35\xf6\x46\x70\xa5\xa1\xd1\x00\xa0\xa4\xc7\xbc\x14\xca\x8e\x96\x75\x58\x5f\x14\x62\x98\x01\x2c\x3e\x1a\x39\x98\x9f\xdf\x60\xe8\xf2\xd7\x02\xf0\x15\xfe\x64\x38\xad\x13\xee\x33\x2f\x80\x1a\x77\x59\x5a\x99\x11\x4b\x16\xf3\x84\xad\x92\x04\x79\xa0\x41\x05\x29\x0b\x52\x6a\xc8\xa8\xc7\x2f\xf7\xa8\x9b\x57\x0b\x41\xa3\x35\xce\xaa\xd5\xe3\xc5\x0e\x13\x8b\x15\x78\x13\x57\x25\xd8\xfc\xc9\x98\x3b\x35\xfc\x90\x53\x36\xa2\xc4\xb3\x7a\x37\x76\xfc\xa3\x2d\x26\x59\x0c\xb3\x51\x55\x06\x6a\x88\x9f\xf4\x1b\x4a\xb1\x5e\x9c\x34\x40\xbb\xcc\xef\x4a\xa1\xaa\x1c\x4e\x02\xc4\xee\x28\x5b\x6a\x00\xea\x0a\xd6\xe3\xf4\xea\x7d\x19\xd5\x3c\x06\x38\x15\x15\x2b\x36\x0f\x85\x9a\x4b\x1f\xfa\xbe\xd7\x16\xe7\x2b\x51\xf8\x44\xbb\x84\x5c\xf9\x0b\x1a\x95\x2b\xab\x26\x7d\x08\xd2\x45\x6e\x26\x22\xcd\x38\xd3\xf3\x69\xb8\xd8\x77\x80\x92\x5e\x38\xf4\xb6\x62\x00\xf5\x8f\x1c\x67\x53\xcf\xee\xc6\xfc\xb1\x99\x11\xe6\xd2\xa1\x34\x7a\x58\x0c\xa4\xe2\xf0\x3b\x9e\xe5\x01\xa6\x25\x32\x92\xb9\x72\xc0\x46\xac\xc0\xd8\x94\x5b\x6a\x05\x57\xd8\xdc\x18\xd2\x98\xb4\xb9\x33\x5c\x25\x56\x82\x78\xb7\x21\x78\x0d\x26\x06\x04\x99\x2d\x3a\x98\x14\xc7\xa3\xe9\x54\x14\x69\xf6\x01\x0b\x80\x77\xfc\xda\x4f\x3c\x3a\xd4\x90\x41\xd5\xe8\x60\x81\x8a\xcd\x2b\x67\x6f\x5c\x26\x3e\xac\xdc\x4e\xd9\xa1\x1a\xdb\x90\x70\xec\xcb\xdf\xa1\x14\x7a\x07\xa6\x58\x81\x69\x59\x2e\xe5\xc3\x1c\xb1\x34\xd3\x12\x4a\x42\x40\x44\x19\x11\x5c\x00\x87\xb0\x70\x2e\x91\xf3\xbe\x2c\xed\x4f\x0e\x3b\x13\x9d\x15\xca\xb0\x81\x38\x70\x12\x40\x7d\x12\x28\x78\x60\x11\x03\x8b\xbb\xbb\x28\x61\x03\x65\xde\xed\x5d\x9d\x60\x44\xad\x30\xcd\x06\x61\xa2\x54\x38\x6b\x42\x6d\x5e\x20\xdd\xc0\xa6\xf8\xc0\xd4\x27\x02\xa0\x55\x00\xc4\x6c\x63\x82\x0d\x70\x83\x31\x0b\x3b\x76\x7b\x3d\xe6\x81\xc9\xa1\x4d\xfa\x71\x04\x5c\x98\x0c\x18\x56\x72\xe8\xf7\xf7\x38\xc0\xd4\x2c\xd9\xdb\x3a\x8f\xbb\xc3\x68\xe1\x64\xb5\x96\x6d\xf6\x1e\x74\xb3\xc0\xae\x1e\xb5\xfa\xb3\xb6\xc6\x1b\x99\x1b\x40\x0d\x78\x43\x96\x4b\xa7\x9d\x04\x4c\x4f\xfd\x23\x28\x75\x46\x55\x7d\xdf\xc4\xd8\xea\x0a\xc0\x3f\x30\x5b\x15\x54\x4a\x87\x8f\x2c\x34\x2b\x80\x1b\x02\x21\xe4\x58\xf2\x74\xb9\xac\x0f\xd5\x0a\xe8\x7f\x69\x3e\x6d\xb8\xb9\x2f\xc6\x3c\x1f\xfa\x7a\x55\xb5\xd1\xd7\xbb\xa1\xcd\xf5\xe3\x56\x73\x73\xd3\x82\x3a\x4b\xd0\x6c\xc0\x0a\x56\x39\x0c\xdc\x1e\x09\x96\xa3\xce\x81\x63\xac\xc1\x6e\x94\x85\xaa\xb0\x10\x26\x85\x50\x44\x62\x18\x47\x1c\x82\x7f\xbb\xa3\x80\xa1\xd4\x9a\xac\xad\x5d\x23\x98\xc8\x15\x8c\x2d\x8b\xd0\x05\x63\x2c\x68\x4c\x44\x55\xd8\x32\xd2\x27\x86\x5b\xb5\x05\x31\x4d\xca\x0a\x61\xc0\xb3\x1a\xe1\x3f\xb8\xf5\x99\x4e\x41\x1a\x11\x6a\x16\x4e\x1f\x0a\x89\x9c\x38\x4c\x74\xb0\xdb\x35\xc4\x5d\x9a\xa9\x41\xa5\xb0\xf9\x89\xf9\xda\x04\xe4\x1e\x29\x79\xef\x40\x6e\xe1\x85\xe2\x91\x3a\xf1\xfa\x2c\xbf\xc5\x65\xb8\x27\xbc\xbc\x85\xba\x47\x51\x16\x4f\x90\x35\x99\x15\xcc\x96\x30\x6f\xe6\x34\xea\x32\x71\x01\x55\x8d\xc2\x33\xd8\xc5\x2d\xaf\x1d\xce\x05\xbd\xd7\x2d\xda\x9e\xaf\x95\xaa\x49\x48\x36\x34\xaf\xe3\x8f\xfa\xde\x0d\xce\xa5\xd8\x9f\x47\xdf\x88\xca\xc0\x01\x2a\xc9\xa1\x21\x30\x33\x28\x38\x5c\x24\x5c\x9e\x74\xd9\x2b\xa3\xfb\x98\x6f\x7a\x57\x8c\xc3\xff\xf6\x62\xd3\xbd\xd1\xb6\x68\x28\xd1\x09\xe1\x80\x80\x2e\x91\x3b\xc6\xc6\x94\x18\x37\x2a\xd8\x54\xe8\x8a\x83\x0b\x78\x26\xcb\x3c\x9d\x65\x46\x29\x28\x64\xb1\x47\xd1\x86\x3b\xf8\x71\xcf\xfa\x6d\x42\x44\x6e\x82\xe5\xf4\xe4\x80\x63\xaf\xef\xa0\xad\x84\xcf\x27\xb0\x06\x0f\x14\xea\x80\xbe\x1e\x8b\x82\x0b\x65\x32\x86\x9c\x30\x89\x72\x9a\xf3\x39\xf9\x50\xcc\x6f\x28\xc1\x77\xc1\x81\x52\x03\x1d\xdf\xdc\x14\x4e\x9c\x82\xfe\xba\xf0\xa5\x86\x7b\x17\xc4\x05\xed\xc6\x97\xc1\x6e\x5c\x22\x96\xfc\xf7\xb9\x15\x6d\x9f\xec\x04\x75\xa8\x7c\x87\x48\x42\x3c\x76\xea\x3d\x2a\x09\xf5\x98\x78\x50\x69\x82\x39\x92\x36\xad\xd9\x08\x71\x91\xe7\x09\xfd\xdf\x6c\x32\x95\xa5\x4e\xbc\x1b\x10\x33\xa3\xa8\x84\xbc\x17\x1d\x58\xd4\xa6\x14\xb6\x1b\x60\x5c\x3e\x11\xc0\x7b\xb6\x7c\xae\x9d\x12\x79\x6a\xf1\x59\x5a\x50\x9f\xca\x4f\x87\x94\x74\xf2\x2f\x2c\x90\x60\x01\xc2\x36\x1c\x93\x95\xe0\xe4\xf4\xc7\xb8\xad\x3a\xe0\xd4\x17\x0e\x1b\x59\x6f\xa1\x98\x95\xac\xf6\x42\x58\x27\xf5\x1d\xd5\x2d\x47\x95\x2b\x9e\x14\x0d\x3f\x83\x4c\x28\xba\x9d\x00\x23\x85\xed\xd1\x33\xd7\x0f\xc2\x11\x5f\x13\xc8\x9e\xf1\x11\x37\x7f\x06\x31\x45\x46\x71\xdb\x5f\x32\xa0\xdb\x96\x52\xa9\x3d\x2c\x64\x0b\xe0\xba\x0a\x8a\x06\xc2\xcf\x58\xf9\x9a\xcf\x54\x95\xe9\x0e\xa6\x54\xb8\x0c\x65\x3b\x69\xbc\xb7\x6b\x32\x6d\x95\x88\x0a\x1a\x58\x58\xf4\x3c\x8e\x31\xf0\x9b\xe0\x7a\x9d\x86\xf9\x1a\x36\x61\x60\xa1\x13\xaa\x51\x63\xac\xa9\x47\x9c\xdf\x80\x25\x1d\xda\xbd\x85\x49\xa0\x3c\x77\xe9\x66\xe6\x4a\x74\x8e\x43\xa8\x41\x4f\x8c\xe5\x28\x99\x61\x55\x0d\x1b\xaa\xfc\xaa\xcb\xae\xa2\x98\xb2\x4f\x2b\x74\xb2\xa9\x2e\x4b\x22\x6f\xac\x95\x2a\x2b\x54\xae\x7a\x8f\x0a\x9b\x11\x44\x1e\xe4\x5a\x0d\x22\xaa\xee\xb5\x4c\x16\xd5\xf3\x6c\x91\x77\xa0\x8f\xc0\x3d\xee\xdb\x36\xef\xd4\x8a\x0e\x85\x19\x33\xae\xd5\x70\xa8\x79\x82\xe1\xb5\xb0\xac\xe6\x6a\x40\xdf\x38\xe4\x64\xd1\x5e\x6c\x37\xe0\xf5\x57\x63\xa6\xd8\x06\xd9\xcb\xdb\x0d\x44\xad\x06\xbe\x6f\x6a\x35\x10\x7e\x2f\x6c\x28\x50\x0a\xcd\x33\xf0\xd4\x93\xf7\xd8\xd9\xc0\x16\x65\xb9\x68\x8f\x15\xee\x33\xa1\x3f\x3e\x0a\x06\x25\xc4\xac\xd0\x5a\x28\x15\x46\x7d\x71\x79\x70\xda\x9f\x18\x1b\xfe\x77\xf9\x3b\xb5\xef\x87\x92\xaf\x0e\x6d\x8e\xca\x01\x53\x4a\xe0\x94\x50\xdc\x36\x22\xe2\x6a\xe2\x9b\x81\xea\x0b\x09\x49\x82\xe5\x2c\xdc\x4e\x92\xdd\xa4\x30\xd6\x76\xf1\xe6\xfa\xec\xf8\xd4\xe8\x43\x5a\x7c\xa0\xd2\x74\x41\xe5\xf0\x0c\x02\x18\xe1\xa9\x08\xce\x6c\x03\x97\x2f\xd0\xce\xd6\x9f\x77\x45\x11\x98\x2b\xf9\x13\x46\x59\x9b\x08\x47\x25\x76\x20\xe5\x80\x24\x0e\x1c\x61\x9c\x32\x4c\x35\x59\x00\x85\x37\x50\x0e\x53\xc2\x1b\x68\xc7\x9a\x28\x87\x7d\x64\x2c\x20\x22\x2c\xfd\x14\x9c\x28\xc4\xba\x3f\xb3\x82\x90\xdb\x39\x79\x1a\xc6\x19\x13\x5c\xad\xfc\xe6\x37\xa1\x44\x8d\xd8\x04\xa0\x9e\x91\xbf\x85\x65\x43\x7f\xee\x6b\x35\x4d\x17\xc7\x95\x65\xe2\xa9\xc7\xad\xc6\x14\x38\x73\x48\xa1\x6e\xa0\xc2\x90\x58\x08\x6e\xe5\x3b\x51\x22\xf1\x21\xbf\x6f\x0f\xfb\xcd\x59\x5a\xbb\xaa\x16\x58\xe2\x19\xa1\xec\xb6\x90\x91\x27\x5f\xb0\x6f\x70\x1b\xa3\x3d\xe9\xfc\x56\x3c\x0f\x2c\xb9\x22\x77\xad\x57\xa8\xe2\x73\x98\x33\x49\x9a\x96\x15\xcf\x3c\x4d\x11\xfb\x24\x67\x45\xc8\x49\xe8\xda\x82\x29\x12\x05\xd6\xe1\xd8\x04\xa9\xaa\xb0\xa3\xbf\x2c\x6d\xc7\x8d\x34\x15\x45\x5a\x39\x7c\x4e\xb4\xe3\xf6\x88\xa3\x11\x64\xb7\xc7\x4a\x13\xac\x94\x40\x16\x3a\xcf\x9b\x99\x1d\x1c\x2f\xd4\xc0\x4e\xe9\xb2\xb2\x7c\xe3\x73\x7c\x17\x5d\xe9\x8d\x04\xf0\xda\x35\x68\x74\x54\x5d\x17\xff\xbe\xd0\x65\x8d\xf2\xf2\x68\xc6\xe1\x24\x21\xa3\xd8\xb6\xcf\x76\xca\x5f\x83\x32\x8b\xfe\xa8\x86\xa8\xc5\x42\x81\x77\x39\x6c\x98\x05\x65\xbf\xdb\xb4\xcd\x66\x75\x3c\x74\x2b\x39\xe6\x87\xb1\x2a\x84\x75\xc7\x1f\x5e\x08\x96\x44\x37\x99\x53\x42\x31\x73\x35\x4c\x53\x8d\x92\x2c\x6b\x0a\x71\x4c\xfa\xa7\xa0\xe8\xdb\x00\x27\x18\x65\x41\x3a\x55\x97\xbd\xc5\x02\x2a\x66\x87\x6c\x96\x4b\x3e\xc7\x21\xfd\x0c\x12\x6a\x03\x5f\xd3\xb4\x02\x67\x8c\x57\x0f\x97\xbb\x5f\x50\xeb\xfd\x1e\xf3\xde\x22\xa7\x84\x0b\xb8\xd6\xd1\x4b\xf7\x9b\x23\x36\xa6\x0d\x1d\xe2\x3c\x57\x10\xf8\xa9\x0c\x73\x92\x6f\x6e\x8a\x0b\xa9\xcd\x0b\x2e\x7a\xa0\x6d\x7c\xd8\x27\xd8\x63\x5a\x31\x4d\x49\x55\x53\x51\x2a\x81\x05\xbe\x91\xc3\x89\xfe\x0e\x5d\x05\xcc\x60\xab\x86\x38\x73\xc0\xa5\xdb\xda\x3c\x05\xb0\x42\xb0\xe8\x8a\xbb\x28\x3c\x01\xb0\x38\xa9\x2b\xbf\x18\xef\x11\x6e\xe4\x5f\xba\xec\xda\x5e\xe3\xaa\xd6\xe0\xd3\x65\x4e\x80\x2e\xba\xa4\x27\x2f\x28\x01\x46\xd4\xf0\x09\xa4\x4a\xb9\xc1\x8c\x05\x54\xde\x65\x03\x00\x45\xdc\xa2\x03\x95\xb8\x14\xc1\x28\x31\x9c\x0b\x45\xb5\xb7\xc7\xc2\x3a\x49\xbe\x5d\x09\x61\x24\xa9\x48\x38\x94\x08\xc7\x1c\x1b\x35\x28\xb3\xbe\x4f\x33\x44\x37\xe2\x82\xf3\xb0\x5e\x0c\x89\xa4\x34\x5b\x14\xd1\x44\x9e\xbf\x76\xd9\x49\xd4\xd9\xec\x1d\x21\xb9\x1c\x8b\xbb\x79\xf6\xe7\x36\xd7\x0f\x4a\x02\xf2\x19\x9e\x6c\xd8\xb3\x14\x93\x3e\xac\x1f\x27\xf1\x5b\xe4\x5a\x76\xbb\x79\xb6\x2d\x50\x31\x34\xc8\xc2\x27\x33\xad\xe2\xad\xc4\x36\x13\x45\x84\xa7\x7f\x71\xd4\x3b\xeb\x19\x8a\xd6\xe2\xff\x84\x0e\x0e\xe2\xbc\x11\x1e\x80\x12\x73\xa8\xf2\x07\xae\x80\x40\x6c\x81\x33\x2f\x69\xc0\x7c\x24\xe8\xe2\x45\xf2\x10\x98\x21\x92\x92\x72\xc8\xae\xcf\xae\xcf\x4f\x13\x76\xf1\xe6\x62\x2f\x0c\xfc\x27\x0b\x08\x82\x05\x38\xdc\xcd\x4d\xd1\x04\x88\xb3\x29\xfa\x4a\xe6\x02\x6a\x15\xc4\x59\xfa\xa9\x40\x7b\xc8\xf3\x45\xd0\xc7\xae\xa0\x9a\xbd\xd8\xe4\x10\x98\x6c\xa1\x86\x84\xf7\x3a\x2b\x55\x4d\x6c\x36\x6d\x99\x29\x10\xca\x0e\x64\x03\xa7\x0e\xe4\x71\x58\x5c\x20\x0c\xdc\x35\x94\x23\x41\x06\xfb\xf7\x2e\x3b\xf7\xb8\x19\x39\x64\xe7\x19\xef\x43\x3d\xaf\x2e\x3b\x33\xf7\xa3\xeb\x39\x65\x8b\xaf\x14\x12\x0b\x0b\x9b\x09\x4a\x6c\xec\x13\x84\x4b\xb4\x2c\x75\x68\x11\x17\x62\x94\x67\x23\x51\x0c\x44\x27\x71\x41\xd3\x24\xf2\x36\x82\x03\xe3\x5e\x66\x6e\xe3\x35\xae\x58\x2a\xf2\xac\x8f\x15\xfe\xcc\xa4\x46\xc6\xdc\x06\xb7\xb9\xfd\x94\x66\x7c\xa0\x15\x04\x58\x9b\x99\x1f\x85\x60\x24\xf9\x65\x69\x4b\x57\xdb\xb2\x8d\x66\x6b\x61\x0f\xf9\x84\x8f\x62\x57\x32\x54\x3f\xa3\x48\xb2\x8f\x29\x53\xd5\x32\x0a\x5e\x02\x26\x8c\x3c\xd9\x2e\xeb\x14\x50\x35\x34\x20\xf3\x3d\xd9\x0c\x49\x44\xc9\x78\x89\x01\x57\x73\xdb\x62\x21\x89\x2a\x5f\x48\x4d\x05\xca\x55\x71\xfb\x49\x43\x78\xda\xb4\x40\x32\x5a\x7b\xb8\xbd\x32\x94\x6a\x67\x03\xf5\x22\x25\x72\xe4\x48\xca\x74\x96\xe5\xd6\xc5\x75\xcb\x94\x96\xd3\x29\x1f\x89\xc4\x17\x70\x1c\xf2\x2c\x07\x94\x5c\xc9\x26\x3c\xb7\x45\x1a\x13\xdb\xfb\xaf\x0e\x14\x00\x68\x7a\x39\x88\xd6\x8f\x1f\x14\xaa\x43\xdd\x05\xb2\xe1\x82\xef\xe8\xe6\xa6\x70\xde\x5c\x9e\x62\xde\x25\xad\x1c\xd1\xf0\xb8\x68\x1b\x07\xa7\xa1\x89\xb5\xbf\xee\xb2\x23\xa8\xa1\x62\x96\xfe\xce\x21\x60\x4b\x76\xe4\x2f\xd4\x80\xdb\xdf\x8d\x8d\x66\x1c\x1f\xc2\x30\x04\xb5\x32\x94\xf3\x7d\x9c\xb7\xa7\x25\x95\x64\xb4\xe1\xd9\x5a\x5f\xc7\xa4\x56\xdd\x45\x55\x53\x74\xd3\x59\xa0\x2e\x30\x96\x98\x14\x99\x9e\x53\x2d\x20\x5b\xa8\xca\x6e\x74\x58\x31\x82\x30\x6a\x54\x49\x24\x48\xfe\x76\x78\x58\x5f\x49\xa2\xeb\x8b\xef\x18\x9b\xc4\x11\x08\x08\x18\x55\x93\x70\xea\xed\x40\x83\x45\x80\xbe\x77\xa7\xe8\x92\x13\x1e\x1c\x8b\xf4\x6b\xc8\xbe\x77\x42\x90\x9a\xe7\x19\x86\x73\x3e\x7b\xca\x78\x73\xee\x8e\x60\xaf\xc9\x47\x49\x1d\x5a\x41\xb2\x9a\xd3\x4b\xb5\x05\x0c\x2d\x86\x40\x8b\x54\x0c\x45\x41\x05\x99\xa0\x3a\xfc\xa2\xeb\x96\x97\x13\x10\x27\x56\xab\x75\x54\xc3\xb3\x59\x95\xa5\x8f\xc2\x58\xbc\xa9\x52\xa2\x34\x67\x82\x1c\x7c\xc9\xa2\x1f\xb3\x3f\x27\x3d\x00\x17\x11\x14\xe9\xb1\x42\x01\x5e\x99\x05\x9c\x16\xa8\x6e\x6e\x0e\x36\xcb\xf6\xbe\xac\x93\xa3\xcb\xcb\xd3\x8b\x93\xb3\xff\x7a\x66\x93\x4e\x7c\xff\xa4\x18\x81\x65\xfe\x06\x93\x09\xca\x72\x5d\xaf\xf9\x78\x73\xee\x84\x51\x69\x65\x96\x8b\x72\x9a\x1b\x31\x8b\x46\x52\x50\x47\x78\x98\x89\x3c\x55\x4c\x14\xd0\xff\x1e\xa4\x75\xbf\xe4\x83\x5b\xa1\x21\x10\xf4\xfe\x07\x8c\xfb\x94\x82\xba\xa9\xc3\x8b\x73\xcb\x38\xd4\x4d\x0e\x9b\xa5\x7b\x03\xb4\xcb\xda\x27\xb2\xb8\xf9\xb3\x0b\x2d\xd3\xe1\xb3\x23\xff\x1b\xb6\xde\x04\x8b\x8f\x50\xd0\x7d\xe1\xe7\x40\x1a\x79\x70\xc1\x52\x7c\xcf\x9c\x03\x35\x2f\x34\xff\xe0\x82\x6a\x60\x03\xe3\x87\xbb\xec\x9d\x40\x34\xb5\xcf\x9f\x41\x87\xb5\x2d\xb9\x8f\x3c\xa2\x82\x54\x09\xd4\xf6\x5c\xc6\xb1\x0d\xd1\x85\xc8\x4a\x57\xe4\x08\xea\xa5\xdd\xdc\xb4\xa6\x65\x06\xee\x54\x23\x46\xa1\xd7\xbf\xaa\x45\xd2\x82\x22\xdb\x82\xab\x0c\xe2\xb7\xb6\xef\x1e\xc5\xef\x9c\x97\xc2\xfb\x00\x78\x39\x18\x67\x77\x4e\xe4\xf9\xd0\xd4\xfb\xf9\x7c\x3e\xff\x81\xbd\xb7\xe9\x19\xb5\x90\xdd\x0f\xf8\xfc\xb9\xed\xe8\xe9\x2d\x94\x98\x59\x12\x16\x80\xfb\x1c\x70\x37\xe8\x3f\xff\x0d\xb5\xf6\xb5\xe5\x65\xf0\xf2\x21\xdf\xae\xad\xe5\x06\xc5\x0f\x5c\x99\xa2\xa0\x40\xb5\xd3\x44\x5c\xab\x30\x40\x18\xd7\x72\x00\x1c\xc6\x5f\x7b\xe0\xf4\x0a\x4c\x21\x65\xab\xee\x3d\xe9\x1e\xe0\xf3\xeb\x68\xca\xcb\x54\x05\x9f\x23\xd0\x5c\xfb\xcf\x95\x24\x88\xb3\x39\x3e\x9d\x42\x6c\x73\x3a\xb0\x8b\x89\x88\x26\x61\xf9\x9b\x12\xef\x07\xae\x2b\x3b\x1b\xc9\x3b\x51\x16\x75\x38\x17\x7a\x20\xbc\x0e\xad\x16\x17\xd6\x5d\x80\xab\xff\xf8\x53\x25\xca\xb9\x21\x79\x00\x55\x47\x92\xd7\x99\xf0\xef\xbd\xb0\x88\x82\x0b\x41\x85\x81\x09\x95\x30\x37\xb0\xea\x0e\xdd\xd3\xfb\x5b\x44\xab\x43\xdb\xbb\xc8\x53\xfe\x50\xb4\xba\x05\xb7\x35\xe0\xd5\xd9\xc3\xd0\xea\x64\x23\x2f\xc5\xab\xb3\xb5\xd0\xea\x11\x3b\x2e\xc5\xab\xb3\xd5\x68\x75\x57\xab\xf3\x3e\xbc\x3a\x5b\x8d\x56\x27\x39\xfd\xc9\xf0\xea\xde\x7d\x0d\x52\xfe\xb7\xc4\xab\x43\x76\xba\x45\xac\x37\xe4\x7f\xaf\x85\x57\x37\x67\xa6\x6e\x6f\xae\x83\x57\xbf\xb9\x29\xd6\x43\xac\xb3\x7b\xf0\xea\x04\x44\xbf\x1f\xb1\xce\xee\xc1\xab\xdf\xdc\x14\x0f\x42\xac\xb3\x25\x78\x75\x92\x8a\x0f\x42\xac\xb3\x66\xbc\xba\x15\x26\xa3\x4c\x8f\xab\x7e\x77\x20\x27\xfb\x62\xd2\x17\xe5\x8f\x0a\xff\xb7\xfb\xa3\xba\x57\x6c\xb5\x07\x90\x61\xf3\xef\xec\x7b\x31\xae\x52\xce\xfe\xc1\xf5\xcf\x09\xbb\x96\x13\x76\xc2\xc9\x03\x74\x4a\x63\x45\xa2\x6c\xfb\x09\x36\x81\x6b\x70\x6b\x09\x36\xae\x4f\xe3\x76\x12\x6c\x50\x00\x6c\x27\xc1\x86\xce\xb5\x8f\x59\x3c\x32\xc1\xa6\x2e\xb0\x00\x0c\xfc\xdb\x24\xd8\x90\x15\xbc\x4b\xb0\xf9\x17\x4f\xb0\xa1\x85\xae\x25\xb0\x78\xc9\x15\xd7\x5c\xf1\xf9\x28\x2b\xf6\x33\xe5\x64\x96\x61\xcb\x20\x33\x90\xb5\x5f\x9f\x5d\x77\x96\x48\xaf\xaf\xf6\x9e\x1c\x1c\xfe\x85\x1d\x95\x5c\xb1\x23\x3b\xd8\x2e\x05\x70\x97\x02\xb8\x93\x50\x3b\x09\xb5\xa9\x84\x9a\xf0\x72\x20\x72\x99\xca\xfc\x67\xbe\x9f\xfd\x9c\x5d\x4b\xae\xb4\x4d\xa1\x5e\xc8\x0f\x64\xcb\xff\x5b\x95\x3a\xb8\xec\x9d\xb5\x52\x0a\x19\x6b\x74\xad\x3d\x2c\xab\x90\x31\xd6\x98\x58\x88\xf3\xd8\x62\x7a\x21\x0e\xb8\xc5\x24\xc3\xda\x0c\x37\x4c\x35\xc4\xd1\x1e\x99\x70\xe8\xa7\xb2\x85\xb4\x43\x1c\x6c\x3b\xc9\x87\x38\xd6\xc6\x29\x88\x6e\x7d\x5b\x48\x44\xc4\xb1\x36\x4e\x47\x0c\xa8\xb4\x69\x52\x22\x0d\xb5\x9d\xd4\x44\x47\xaa\xcd\x13\x14\x71\xa8\x47\xa5\x29\xba\x59\x6c\x2d\x59\x11\x47\xdc\x42\xca\x22\x0e\xb4\x5e\xe2\xa2\x5b\xc6\x86\xe9\x8b\x74\xb8\x37\x4c\x62\xc4\x51\x36\x4d\x65\xf4\x72\x70\xcd\x84\x46\x47\x84\xcd\xd3\x1a\x71\xa8\x2d\x24\x37\x5a\xb9\xb2\x51\x8a\x23\x0e\xf2\xa8\x44\x47\x47\x93\x2d\xa5\x3b\xe2\x78\xdb\x49\x7a\xa4\x63\xbb\xad\xd4\x47\x1c\x6e\x7b\x09\x90\x24\xed\xb6\x94\x06\x49\xa7\x79\x5b\xc9\x90\xfe\x16\x5e\x37\x25\xd2\x71\xc2\x86\x89\x91\xfe\xcb\x9b\xa7\x47\xd2\x58\x1b\x27\x49\x12\x71\xb7\x95\x2a\x49\x3b\xbf\xa5\x84\xc9\xa5\x0a\xd3\xa3\xd3\x26\x71\xc4\xed\x24\x4f\x06\x5b\xb0\x79\x0a\xa5\x95\x76\xdb\x4a\xa4\xf4\x57\xc0\x16\xd2\x29\x71\xb0\xad\x24\x55\x5a\x85\x63\xf3\xd4\x4a\x52\xf2\xb6\x9b\x60\xb9\x78\xd4\x37\x4c\xb3\xa4\x03\xb1\x8d\x64\x4b\x77\x54\x1f\x94\x72\xc9\x18\xdb\x56\xd6\xa5\x3d\x8e\x1b\x27\xfc\xe1\x40\x1b\xa7\xfd\xd5\x35\x84\x47\xe5\x61\xe2\x20\x5b\xc9\xc6\xc4\xa1\x36\xcb\xc9\x64\x8c\x6d\x25\x2d\xf3\xf3\xdc\xab\x6d\x25\x6a\xe2\x68\x5b\x49\xd7\xa4\xf5\x6d\x21\x69\x13\x47\xda\x2c\x75\x13\xc7\xd8\x42\x02\x27\x2d\x6b\x0b\x69\x9c\x38\xd2\x66\xc9\x9c\x74\x52\x37\x4f\xe9\x74\xfa\xc5\xc6\x89\x9d\x6e\xa4\x8d\xd2\x3b\x71\x94\xcd\x93\x3c\xe9\xba\x7e\x50\xaa\x27\x63\x6c\x1b\xd9\x9e\x81\xd4\xda\x28\xe7\x93\x54\xab\x4d\x33\x3f\xad\x86\x76\x7f\xfe\x27\x89\x94\x47\x66\x81\x32\xf7\xdf\xc3\xf3\x41\xe9\xcb\x9b\x67\x85\xfa\x49\x3c\x28\x3f\x94\xbe\xbf\x71\x96\xa8\xff\xfc\x46\xf9\xa2\x7e\x98\xc7\x66\x8e\xfa\x11\x36\xca\x21\x0d\xd7\xb3\x32\x9b\x94\x08\xb8\x79\x4e\xa9\xff\xe2\x16\xb2\x4b\xfd\x60\x1b\xe6\x99\xfa\x81\x36\xcc\x38\xf5\x03\x6d\x98\x7b\xea\x07\xda\x38\x0b\x35\xe0\xb6\x4d\xf2\x51\x83\x9d\xdb\x38\x33\x75\x81\xde\x8f\xcb\x51\x0d\x86\xd9\x38\x5b\x75\x81\xe0\x8f\xcb\x5b\x0d\xa9\xb4\x49\x06\xab\x1f\x67\xe3\x5c\xd6\x60\x65\x9b\x65\xb5\xd6\xa4\xdf\xe3\xf3\x5b\x23\x8e\x5c\x95\xe9\x8a\x0f\x6d\x25\xdf\x15\x87\xda\x42\xd6\x2b\x0e\xb4\x85\xdc\x57\x3f\xd0\x06\x19\xb0\x38\xc8\x56\xf2\x60\xfd\x45\xb0\x6e\x36\x2c\x63\x6c\x6b\x09\xb1\xc4\x0f\xdb\x48\x8b\xc5\xa1\xb6\x91\x1c\x6b\x49\xf2\xf8\x14\x59\x1c\x61\x3b\x89\xb2\x7e\x83\x36\x4d\x97\xf5\xb2\xf7\x41\x49\xb3\x8c\xb1\xad\xe5\xcd\x92\x70\xdb\x4a\xf6\x2c\x8e\xb5\xad\x1c\x5a\x2b\x2b\xb7\x93\x49\xcb\x18\xdb\x3c\x99\x96\x0e\xc7\x26\x29\xb5\x38\xc4\x16\x12\x6b\x71\xa0\xcd\xd3\x6b\x71\x9c\x2d\x25\xd9\xba\x9b\x7b\xa3\x54\x5b\x1c\x65\x2b\x09\xb7\xb4\x63\xdb\x48\xbb\x25\x11\xbf\xc5\xe4\x5b\xc6\xd8\x56\xf2\x6f\x9d\xee\xb5\x61\x16\x2e\x8e\xb3\x8d\x5c\x5c\x92\x2a\x5b\xc8\xc8\xc5\x91\xb6\x93\x97\x4b\xac\xbe\x8d\xec\x5c\x7b\xdf\x6f\x9c\xa3\x4b\xc7\x78\xf3\x4c\x5d\x62\x82\x4d\xf3\x75\xe9\x04\x6f\x98\xb5\x8b\xa3\x3c\x3e\x77\x97\x31\xb6\x9d\xf4\x5d\x7f\x57\x6f\x94\xc4\x6b\xb5\xa2\xcd\x53\x79\x9d\x05\xb0\x71\x42\x2f\x8e\xb4\x8d\xb4\x5e\x9a\xd3\x16\x92\x7b\x9d\xfc\xdf\x28\xc5\x17\x47\xd9\x30\xd1\xd7\x1d\xf6\x2d\xa4\xfb\xba\x65\x6d\x98\xf4\xbb\x66\xb7\xb9\x8d\x52\x7f\x71\xae\x1b\x27\x00\x93\xf2\xbe\x41\x1a\xf0\x2f\x1f\xc3\xd0\xf5\xe6\xc9\xc0\xfe\x28\x07\x29\xc1\x0f\xcf\x09\xc6\x61\x36\xcc\x0c\xc6\x41\xb6\x90\x1f\x8c\x03\x6d\x94\x25\x4c\x8c\xfe\xd0\x5c\xe1\xa8\x9f\xdb\x2f\xf3\xf9\x7c\xfe\x91\xfd\xb2\x24\x5d\xf8\xa3\x7b\x65\x3b\x19\xc3\x8c\xb1\x2d\x24\x0d\x07\x2e\x89\xb5\xf2\x86\x19\xdd\x4a\x0f\x4c\x1f\x66\x6c\x2d\xf3\xe0\xfe\x0c\xe2\xd0\xd9\xba\x61\x12\xf1\xe6\x9a\x7f\x98\x47\xcc\x7c\x67\xb7\xcd\x52\x89\x41\x53\x5b\x2b\x9b\xf8\xe6\xa6\xf8\x87\x98\x0f\x72\xc9\x6f\x31\xbd\xc5\xf3\x22\xe4\xad\x5c\x89\x94\x7d\xcb\x35\xf6\x07\x7b\x44\xce\xf7\x12\xdc\xfa\x58\xe6\x7a\xff\x92\x4f\xf9\x25\x2f\x95\x78\x78\x56\xcd\x53\xf6\x9a\x6b\x3d\x16\x33\xf6\xad\xcc\xf5\x2e\xe1\x6f\x3b\x09\x7f\xbe\x90\xe6\x96\x12\xfe\x98\x92\x09\x56\xf9\xde\xa5\xd3\x6c\x23\x9d\xc6\x5a\xe8\xd4\xe1\x78\xc3\x74\x9a\x20\x3f\x19\xba\x1e\x3f\x3a\x9d\xa6\x21\x3f\xd9\x2c\xfa\xd1\xe9\x34\x51\x7e\x32\x36\x64\xde\x28\x9d\x66\x45\x7e\xf2\xb4\xcc\xd4\xe4\x47\x05\x52\x69\xdd\x84\xe4\x27\xec\x5c\x70\x73\xbd\x42\xbc\x79\x97\xc8\xb7\x4b\xe4\xdb\xf5\xf2\xdb\x25\xf2\x35\xf5\xf2\x5b\xaa\x00\xa5\x32\x95\xfb\x85\x4c\xc5\x9e\xca\xab\xd1\xb2\xd4\x61\xf6\xbf\xff\xd7\xff\xc7\xfe\xf7\xff\xfa\x5f\xf4\x3f\x6d\xf3\x56\x67\xfb\x9a\xce\x96\xa5\xcd\x03\x2b\xb1\xdc\xab\xe5\x6c\x49\xd2\xdc\x53\x85\x65\x03\x0d\x67\x5d\x29\xb3\xbf\xcf\xb6\xab\xdf\x3c\x42\xc6\x98\x39\x6c\x55\xc6\x3c\xb6\xfa\xca\x52\xdd\x66\x1b\xf2\xe5\xbe\xca\x2b\x8f\xd7\x6b\x36\x90\x2d\xcb\xaa\xae\x6c\x5d\xa7\x09\xe4\x4c\x4f\x96\xda\xd8\xc6\x7f\xef\xb9\x7f\xde\xdc\x14\x7f\xb3\x4d\xe2\xf5\x55\xd5\xe7\xff\xc5\x31\xef\x4c\x8d\xff\x56\x56\x7d\xfe\x81\x53\x4d\x29\xff\x94\x9c\x89\x62\x02\x9e\xb7\x99\x28\x9e\x7c\xf9\xe5\xd3\xa7\xbe\xb1\xb1\x79\xd0\x06\x5a\x5f\x9f\x5d\xaf\x9a\x8c\x9e\xf5\xd5\x7e\x5f\x4a\xad\x74\xc9\xa7\x0f\x37\xfa\x0e\xf7\x9e\x1c\x1c\x7e\xcd\xae\x67\x99\xd6\xa2\x74\x26\xe9\xd2\xe7\xc6\x82\xbd\xb0\x5f\x63\x47\x98\x53\xb3\x53\xd8\x76\x0a\xdb\x4e\x61\xdb\x29\x6c\x0f\x6a\xbe\x3c\x92\x39\x2f\x46\xe0\xe9\xfa\xb0\x3f\x28\xe7\x53\x70\xbd\x34\x88\x9e\x03\x94\x3a\xaf\xa4\x15\x37\x5d\x76\x94\xe7\x56\x95\x29\x85\x12\xe5\x9d\x83\x5f\xc7\xc0\x6b\x8c\x2c\x23\x04\x83\x52\xb3\xcc\x6f\xfa\x59\x41\x9d\xf4\x27\xea\xbe\x46\x39\x98\x73\x8f\xc7\x0f\xbc\xd7\x11\x3a\x7a\xd9\x71\x62\xe8\x14\x9d\x08\xed\x61\xd1\xff\x67\x0d\x15\x0e\xdc\x1f\x26\x8c\x05\x90\x61\x0f\xde\xf1\x07\xd1\xb5\x9c\x48\xf0\x1c\xe6\x99\xd2\xe8\xce\xf6\x5f\x2d\xd2\xda\x94\x52\x87\x09\xe9\x2e\x9b\x45\x56\x84\x04\xb1\xb3\xb0\x38\x75\x37\x91\x86\xce\xa6\x8f\x9b\x88\x97\xc3\xb1\x08\x27\x79\x48\xc9\xb0\x5c\x8b\x32\xe3\x79\x90\x17\x6c\xbd\xe4\xb5\xa6\x31\x6e\x5d\x17\xe4\x06\x36\x23\x5b\x57\xff\x2b\x29\x47\xb9\x80\x4b\x8d\x15\xd2\xff\x4d\x79\xb0\x70\x58\xe4\x0c\xdc\xed\x7d\x88\x6a\x83\xfc\x14\x45\x2a\x4b\x8c\x70\x4f\x4b\x39\x91\x5a\x58\x9c\x90\x8a\x12\x83\x17\xdc\x9a\xf6\xe6\x70\x1e\xe6\x69\x99\x05\x99\x8b\x5e\x84\x3a\x89\x77\xd6\x6b\x16\x79\x2f\xbe\x87\xe3\xb5\x28\x1d\x28\xbc\x86\x55\x3d\xde\x5c\x61\x80\xcd\x7b\xd3\xcd\x9f\x8d\xc8\x58\x54\x2a\x03\x19\x17\x08\xc4\xc4\x4a\x44\x10\x26\x56\x26\x26\xf0\xf1\xc5\x17\x1b\x84\x23\x7c\x31\x90\x8e\x46\xba\x35\xca\xc7\xab\x53\x76\x72\xd6\x03\x51\x76\x7a\xb2\x4c\xd7\x74\xeb\x35\xb2\xe8\xdd\xc5\xe9\x15\xf9\xff\xdd\x72\x1b\xa4\xe3\xc9\xd9\xd5\xa9\x11\x6f\x67\x17\xfe\x5f\xc7\x67\x27\xa7\x17\xd7\x47\xe7\x46\xa6\xf5\x2e\x4f\x8f\xcf\x8e\xce\xcd\xdd\x70\xfa\xfa\xf2\xfc\xe8\xea\xfb\x84\x46\xed\x9d\xfe\xe7\xdb\xd3\x8b\xeb\xb3\xa3\x73\x27\x5b\xdb\xf7\x52\xe6\xf2\xea\xcd\xf1\xdb\x2b\x10\xf0\x86\x1c\xbd\xb7\x2f\x7a\xd7\x67\xd7\x6f\xaf\x4f\xd9\xab\x37\x6f\x4e\x80\xe2\xbd\xd3\xab\xef\xce\x8e\x4f\x7b\xdf\xb0\xf3\x37\x3d\x20\xda\xdb\xde\xa9\x99\xca\xc9\xd1\xf5\x11\x7c\xfc\xf2\xea\xcd\xcb\xb3\xeb\xde\x37\xe6\xdf\x2f\xde\xf6\xce\x80\x7a\x67\x17\xd7\xa7\x57\x57\x6f\x2f\x8d\xc4\xed\xb0\x6f\xdf\xbc\x3b\xfd\xee\xf4\x8a\x1d\x1f\xbd\xed\x9d\x9e\x00\x99\xdf\x18\xd1\xfe\x3d\x8a\xd6\x37\x57\x70\xf3\x35\x5f\x00\x5e\xe6\xf7\xae\xaf\xce\x8e\xaf\xc3\xc7\x8c\xe0\x7e\x73\x65\x56\xe5\xd7\xca\x2e\x4e\x5f\x9d\x9f\xbd\x3a\xbd\x38\x3e\x8d\x2e\x88\x8e\xbb\x20\xe0\x56\xf9\x9e\xbd\x3b\xfa\xde\xaa\xde\x24\xfd\xb1\x5e\x62\xc4\xc8\x09\x6c\x2b\x3b\x7b\xc9\x8e\x4e\xbe\x3b\x33\x93\xa7\xc7\x2f\xdf\xf4\x7a\x67\xc4\x36\x40\xba\xe3\x6f\x89\xf0\xe1\xfd\x30\xbd\x1d\x75\xb3\x62\x9f\xab\xe2\x70\xaf\x2f\xca\xee\xdd\xe1\x23\xd5\xdb\xa7\xec\x75\x36\x18\x73\x91\xb3\xd7\x99\xd6\xb2\x60\xed\xc9\x04\xfe\xe1\x35\x6e\xf0\x00\x58\xad\x64\xb0\x10\x19\xc1\x7a\x63\x23\xb9\x67\x27\xb3\x53\x7d\x77\xaa\xef\xbf\x54\x94\x64\xa7\xfa\x6e\xaf\xe8\x98\x13\x6d\x79\xca\xa7\xdd\xbb\x27\x8b\xbf\xfa\xf2\xb7\x97\x74\x66\x22\x3b\x29\xb7\x93\x72\x3b\x29\xb7\x93\x72\x9b\x49\x39\x9e\x8b\x0f\x03\xa1\x78\x29\xf7\x7f\xaa\xa4\x16\x29\x20\xc1\x78\x3f\x17\x8f\x12\x74\x5f\xb1\xa3\x5c\x7c\xe0\x45\x5a\x0a\x76\x0c\xc3\xee\xa0\x2a\x3b\xa8\xca\xbf\x84\x78\xda\x41\x55\xb6\x15\xd6\xf1\xc2\xa9\x48\xe7\xa3\xb2\x2a\x66\x3c\x4f\xf7\x47\x72\xef\xc7\xac\xe4\x8f\xb2\x34\x9f\xb2\xa3\x22\x9d\xb3\x57\x34\xd6\x4e\x65\xda\xa9\x4c\xff\x12\x32\x69\xa7\x32\x7d\xd2\x6a\xd4\xe9\xa8\xcc\x7e\xe4\xf9\x1d\xdf\xff\x71\xa6\xf7\x46\x4b\x62\x24\x87\x4f\xd8\x09\xbf\x13\xec\x15\x3d\xfc\x49\x34\xa2\x1d\xa4\xe5\xd7\x81\xb4\x6c\x5d\xe6\x7c\x0e\x51\xd8\x1d\xa4\xe5\xb3\x83\xb4\x84\x62\x66\xc8\x75\x36\xde\x57\xba\xac\x06\xfa\x31\x0d\x39\xd8\x4b\x33\x00\x3b\x2a\x55\xce\x77\x9d\x38\x76\xba\xcf\x4e\xf7\xd9\xe9\x3e\x8f\xd3\x7d\x42\xa9\x84\x18\x91\xfd\x69\x29\xb5\xec\x57\x43\x7c\xf0\x95\xb4\x79\xc8\x90\xc8\x75\x69\xfe\x38\x90\x39\x7b\x51\x0d\x87\xa2\x54\x6c\x8f\xa2\xfe\x37\x7f\x56\x2c\xe5\x9a\x63\xb1\x69\xac\xdc\x46\xe9\x8f\x75\x29\xf6\xe4\xe0\xf0\x60\x01\x64\xb2\x0c\x65\xd2\xa0\xa4\x35\xce\xf3\x33\x86\xa2\x7c\x26\x58\x94\x3f\x2c\x18\x65\x87\x46\xd9\xa1\x51\x76\x68\x94\x3f\x12\x1a\xa5\x51\xe8\x9b\xd3\xbc\x3f\x92\x7b\xd0\x34\xd8\x08\x81\x62\x59\xd6\xc9\x97\x74\xf6\x77\xd0\xc5\x1d\x74\x71\x07\x5d\xdc\x5d\x16\xbb\xcb\xe2\x0f\x7b\x59\x34\xd9\x31\x93\xfe\xc1\x7e\x9a\x0d\x87\x4b\x9d\xb7\xaf\x79\xa9\xb3\x82\xf5\x06\xe3\x82\xf7\x45\xfe\x3b\xb9\x26\x98\xbf\x24\x0e\xeb\x35\xcf\x1f\x7a\x45\x44\x72\xd9\x56\xdb\x78\xf0\x2d\xf1\x64\x71\x1a\x6b\xde\x11\x8b\x33\xc1\x49\x3c\xe6\x9a\x60\x4d\x97\x04\x0e\xb7\xee\x4d\xc1\xea\xf7\xc4\x4e\xd2\xee\x24\xed\x4e\xd2\xae\xa1\x96\x17\xd5\x5f\xc7\x5c\x0f\xc6\xfb\x23\x59\x55\x59\xba\x20\x72\x8f\x11\x2d\xc9\xfa\x73\xf6\x8f\xf2\xe7\xb9\xfa\x59\xcb\x21\xfb\x87\x9c\xf1\x3c\xbb\x65\x83\x71\x99\xa9\xbf\xe1\x10\x5d\x28\x69\xba\x03\x16\xed\x9a\xde\xef\x1c\xd9\x3b\x47\xf6\x46\x41\xfc\xe9\xed\x68\x5f\x94\xa5\x43\x52\x2f\x82\x87\x12\x8c\xdf\x1f\x8f\x45\x21\xe6\x2c\xe5\x77\xe2\x6f\x03\xf8\x77\xb7\x10\x46\x61\xfb\xbd\xe9\x83\x9b\x7a\x0c\x16\xd5\xc1\x47\x68\x83\x8d\xf3\xd8\x4c\x1f\xdc\xae\x3a\xf8\x1b\x6b\x83\xa1\xd8\x31\x3c\xf6\x58\x6d\x90\xd5\x74\x41\x2f\x98\x1e\xa6\x0d\x2e\x91\x3b\x57\x66\xc0\x07\x68\x83\xb4\xde\xe5\xca\xa0\x85\x4f\xde\xa7\x0e\xb2\x75\x94\x41\x50\xd4\x96\xaa\x83\xec\x61\xca\xa0\x11\x28\x8d\xea\x20\x7b\x84\x32\x68\x04\x4d\x5d\x1d\x64\x1b\x28\x83\x46\x7a\xa2\x3a\xc8\x7e\x2f\xca\x60\xc9\xb3\x62\x3e\xe0\x53\xb1\x5f\x15\x59\x2a\x8c\xe4\x69\x88\xfd\x7d\xc5\xae\xcc\x73\xec\x98\x4f\x05\xeb\x75\xcf\xbb\x6c\x2c\xf2\x5c\xfe\xcd\xbd\x4d\x35\x39\xcc\x19\xd9\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\x6f\xd0\x10\x76\xfd\xff\x3f\xf7\xbd\xda\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\x5f\x14\xc2\x6c\xd7\xff\x9f\x59\x69\xbb\xeb\xff\xbf\xeb\xff\xbf\xeb\xff\xbf\xeb\xff\xbf\xeb\xff\xbf\xeb\xff\x0f\xff\xed\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\x47\x13\xfd\x17\xea\xff\xdf\x94\x02\xae\xcd\xc5\x3c\x92\xfb\xda\x96\xf0\x64\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\xbf\xc7\xbd\xda\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\xef\x81\x92\x07\x48\xf2\x54\x14\x99\x12\xc5\x2d\xb4\xa0\xdc\x9b\x28\xf5\x53\x9e\xf6\x97\x76\x16\xab\x77\x35\xfe\x5d\x34\x92\xd8\xf5\x9f\xdc\xf5\x9f\xdc\xf5\x9f\xdc\x75\x45\xdb\x75\x45\xdb\x56\x23\x8c\x17\x55\x59\xe8\x5e\xa5\xc6\x99\xef\x87\xf5\xfa\xec\xda\xdd\x63\xed\xd7\x67\xd7\x9d\xa5\xcd\x8b\xaf\xdf\xbc\x3e\xb7\xa8\xd7\xed\xf7\x44\xb3\xdd\xc1\xb6\xd9\x13\xcd\x4b\xca\xad\xf4\x44\x33\x52\x4a\xb2\xed\xf4\x44\x0b\x9a\x87\x6d\xd4\x13\xed\xe6\xa6\xa8\x75\x45\x63\xbf\x55\x4f\xb4\x9b\x9b\x82\xbb\x66\x6f\xbb\x9e\x68\xff\xb2\x3d\xd1\x6a\xdb\x69\x76\xb8\xf5\x43\xf2\xfe\xf0\xe0\x87\xe4\xfd\x41\xd2\x6a\xfd\xf0\x43\xd2\x1a\x73\x75\x7a\xc7\xf3\xd6\xb3\x21\xcf\x95\xf8\xf8\xe7\x64\x22\x34\x7f\xf6\xcb\x44\xa6\x55\x2e\x2e\xf8\x44\x3c\x6b\xc1\x69\xcf\x7e\x16\xfb\x53\x99\xaa\x7d\x8c\x80\x98\x1f\x91\x03\xf7\xb5\x98\x80\xa5\xdd\x1d\xf7\x55\xeb\xe3\xc7\xce\x17\xa2\x9b\x8a\x21\xaf\x72\xfd\x5c\x7f\xec\x24\x98\x0a\xd8\x5e\x3a\x0a\xa9\x21\xfb\x2e\xf9\xad\x6c\x25\xef\x5b\xe2\x83\xe1\x53\xd5\xfa\x21\xb1\x4e\xbf\xb6\xe8\xfc\x82\x68\xa6\x2e\x0e\x79\x59\xca\xa9\x28\xf5\xbc\x2d\x92\xd6\x3f\xff\x29\xd4\x6b\x98\x72\x2b\xf9\xe5\x8e\xe7\x95\x78\xf6\x6f\x07\x1f\x3b\x89\x9f\xca\x9d\xcc\x52\x76\xf0\xc5\x1d\x2f\x99\x7e\x7e\x3a\xe9\x8b\xb2\x7b\xec\xbe\xd8\x15\x1f\xb4\x28\xd2\xf6\x2f\x7c\x3a\x7d\x6d\xd6\x8f\x0f\x64\x05\x7c\x8e\x42\x4a\xed\xce\xa3\xd7\x56\xca\x4a\x8b\x70\x59\x49\x4b\x98\x2f\xec\x29\x63\xce\x88\x3d\x23\xcb\xf7\x27\xd9\x87\xac\x50\xfb\xe6\xdf\xc6\x26\x86\xe4\x9c\x3d\x78\x73\x0f\xfe\x14\xd1\x22\xd1\xdb\xa2\x46\x41\xd4\xb8\x32\x5f\xb2\x84\xd0\xf6\xc9\xe4\x1e\x92\x24\x4a\x80\x38\x5a\xf6\xe7\x51\x2e\xfb\x3c\x5f\xf6\xd7\xbe\x18\xca\x52\xbc\x96\xa9\xc8\xdb\x9d\x5f\x8c\x84\xeb\x8e\x84\x6e\xb7\x68\xd0\x6e\xa6\x8e\xd2\x49\x56\xb4\x3a\xff\xfd\xdf\xf0\x47\x40\x94\x82\xd0\xbc\x96\xed\x96\xa1\x54\x37\x97\x23\xf3\xc0\xc7\x64\x42\xa3\x7c\x4c\xf8\x40\x67\x77\x5c\x8b\x68\xc8\x7e\x29\x67\x4a\x94\xad\x4e\x57\x09\x7d\x9d\xe9\x5c\xb4\x5b\x97\x14\x19\x3c\x06\xec\x57\x2e\x47\xad\x4e\xcc\xbf\xc5\x03\xf6\xd8\x1e\x83\x5f\x8b\x7b\xbf\xbd\x7e\x7d\xfe\x82\x97\xaa\x6b\x3f\xdc\xfe\x25\x4b\x9f\xb5\xfe\x32\xce\xe5\x7f\x1e\x1f\xfd\x7b\x2b\xe9\xe7\x72\x70\xfb\xec\xcf\xbf\xb4\xd4\x7c\xd2\x97\xb9\x6a\x3d\x7b\xff\x43\xd2\x72\x70\x07\xf3\xf3\xfb\xc3\xe4\xfd\x93\xaf\x93\x56\xce\xe7\xb2\xd2\xfb\xb9\x1c\xc9\xbd\xb1\xe0\xe6\x02\x6e\x25\x45\x95\xe7\xc9\xfb\xf7\x2d\x6d\x88\xd5\x4a\x5a\xa9\x50\x83\x56\xd2\xca\x06\x12\xa4\x48\xeb\x84\x08\x12\x90\x0f\x47\x1b\xc8\x62\xc0\xb5\xa1\x83\x8d\x7b\x95\x55\x01\x0a\x86\x79\xe0\x69\xf2\xbe\x45\x3c\x65\x8e\x01\xde\x81\x20\x8a\xd8\x29\xfe\xd0\xf0\x18\xe5\xed\xe0\x63\xed\x7e\x95\xe5\x69\xc3\x53\x36\x2d\x0b\x1e\xeb\xb4\x7e\x80\x25\xfc\x40\x8f\x01\x82\x84\x17\x70\xf8\xce\xcc\x1a\x92\xd6\x51\x51\xc8\xaa\x18\x88\xd6\x0f\xe6\xbf\x04\x24\x20\x8a\x46\xbc\x0b\x41\x58\x26\xef\x9f\x7c\x99\xb4\xfc\x7e\x23\x50\x70\xcf\x2c\xd7\xbe\xb2\x99\x18\xad\x33\xd0\x23\xe5\xe8\xef\x59\xc6\x04\x72\xe0\x59\x78\x62\xfe\xd9\xcd\xd4\xe9\x4f\x15\xcf\xdb\xa2\xab\x8d\xee\xaa\x0d\x29\x83\xdd\xe8\x66\x45\x2a\x3e\xb4\x3a\x7f\xfa\x53\x83\x7c\xf0\x4f\x21\x2a\x2c\x7f\xcc\xf1\x56\x82\x97\x83\xf1\xe7\x71\x3b\xad\x16\xa6\x1c\xf3\xec\x9f\xfd\x52\x0a\xa0\x4a\xbb\xf3\x4b\x36\x6c\x37\x09\xd5\x57\x30\x0e\x89\xd6\x4e\x29\x74\x55\x22\x40\x07\x1f\xc4\xcf\xb4\x3a\x5d\x37\xd0\xc7\x87\xb3\x23\xd1\xed\xf7\xcc\x95\xbf\xed\xcd\x17\x6d\xd2\x03\xee\xbf\xe5\xdb\x89\x5b\xd2\xd3\x5c\x57\xaa\xdd\x79\xc0\x3d\xd9\x83\x17\xd9\x69\x31\xca\x0a\xb1\xc1\x21\xfa\x4c\xae\xc8\x93\x83\x51\xd6\xbb\xf8\xe9\xdd\xa7\xbf\x22\x91\x70\xad\xa4\x75\x25\xf0\xce\x02\xdf\x34\x52\x13\x25\xd7\xf2\xcb\x89\xde\xbd\xe7\x6a\xfa\x3a\xbc\x9a\x70\xe4\x3d\x1a\xd9\x4e\x2e\xdc\x76\xb8\x24\xf1\xef\x3f\x24\xef\xf1\xdb\xc0\x38\xe6\xca\x84\xd1\x50\x8a\xb4\xcc\x1f\xbf\x4a\x0e\x92\xf7\xe6\x72\xf3\xaf\xc0\x85\xba\x38\xa1\x4d\x2d\x89\x1a\x7f\x3c\xf2\x06\x54\x13\x3d\xfd\x5d\x09\x6a\xc5\xef\x44\xef\xf5\xf5\xe5\xe6\x92\xda\x8e\x74\x0c\x75\x17\x70\x28\xd8\xd7\xae\x21\x4a\xa7\x6b\x04\x6b\x5b\x3c\xff\x9f\xa2\x41\x94\x7f\xb1\x16\x5d\x77\x82\xfc\x37\x12\xe4\xb4\xb4\xde\x77\x97\xdd\x31\x57\xe3\xf6\x2f\x66\x3b\x9e\x35\xf0\xc0\x48\xe8\x80\x05\x3a\x1f\x1f\x24\xe1\x5f\x5f\x5f\xb2\x9e\xd0\x3a\x2b\x46\xea\x51\x12\xde\xf0\xc8\x67\x22\xdf\x7f\x3a\xbc\xfd\xee\x29\xaf\xfe\xf1\xe9\xe5\xfb\x6b\x9e\xe5\xac\x27\xca\x3b\x23\x6d\x5a\x3d\x08\x91\xcc\x21\x73\x1c\x70\xa8\x02\xa0\x7d\x3c\xcb\x6b\x98\x52\x25\x10\xc7\x5b\x29\xc0\xbd\xdd\x65\x04\x44\x2b\x64\x10\x0a\x17\x66\x18\xb5\xf2\x82\x28\xd2\x87\x5d\x0f\x13\x3d\xdd\x53\x76\x93\xdd\xe2\x50\xfe\x27\x2d\x2b\x43\x1e\x72\x33\x04\xef\x7c\xaa\xab\x21\x64\xac\x47\x5e\x0c\x9f\x09\x5f\x9e\x5c\x4f\x8e\x7f\xfc\xee\x6c\xb6\x1e\x5f\x3e\x75\x3c\x39\xe1\x4a\x8b\x72\xaf\xe0\x77\x04\x87\x6a\x25\xef\xcd\x1e\xb5\xfe\xa6\xa0\x5e\x81\x48\xcf\xb4\x98\x00\x43\xba\xdd\x35\x1b\xe1\x76\x20\x59\x1c\x4c\x4b\x99\xf7\x79\x49\x23\xfd\x00\xbb\xf9\x4b\x6d\x06\x96\x9b\xb4\x19\xe1\xaf\x49\x2b\xcd\xee\x80\xaf\x0e\x93\x16\x40\x47\x5a\x49\xeb\x67\x59\x88\xbd\x43\xf3\xdb\xaf\x03\xc7\xe2\x5a\x6f\x3d\xb1\x6f\xb9\x17\x56\xbe\x93\xf3\xbe\xc8\xd9\x40\xe6\xb2\xdc\x1b\x95\x7c\xbe\xf7\xd7\x83\x83\xa6\x11\x6e\x6e\xb4\x73\x4c\xd8\x53\xb0\xd4\xe5\x10\xb0\xaa\x77\x3e\x34\xbe\x14\x38\x20\xc2\x97\xac\x2b\xa2\xf1\x9d\xd0\x1d\x11\xbc\xd4\x89\x56\xbb\x48\xb3\x07\x51\xf1\xcb\x06\xda\xc3\x91\x9b\xf2\x92\x4f\x84\x16\x25\x30\xd7\xc7\xba\x70\xf0\x0c\x31\x2a\xb3\x74\xdf\x66\xb3\x3d\x80\x21\x6a\x23\xa8\x2c\x15\x6b\x33\xd4\xca\x75\xd1\x48\x7b\x84\x8d\x5f\xb2\xc9\x2b\xde\xc7\xd4\xf6\x25\xef\xad\x7c\x15\xe5\xbc\x7f\x91\x9b\x4b\x3b\x53\x1a\x4b\xfa\x2c\x6e\xce\x1a\x43\xe6\x99\xaa\x2d\xc1\xfc\xf4\x95\xf9\x43\x71\xbb\xa7\xa5\x97\xc3\x70\x59\x8b\x63\x7a\xcf\x4d\x89\x8f\x8c\x80\x34\xec\x04\x1a\x18\x9e\x72\x3c\xf6\xe6\x2a\x32\x27\x1f\x3f\x9c\x34\x38\x3c\x96\x6d\x82\xae\xfd\x3f\x9a\x7f\x06\xb3\x7f\xe2\xbe\x5e\x73\xe7\xa5\xe6\xe2\x63\x2b\xaf\xa4\x40\xfc\xe0\x85\xd0\x24\x19\x9a\x3f\xde\x40\xbc\xc2\xac\xdc\x13\xef\x95\x5d\xd5\xbd\xec\x6e\x3d\x7f\x9f\x9a\xce\x20\x95\xd4\xaf\x4d\xe6\xe3\xb1\x18\xdc\xf6\xe5\x87\x4f\x44\xe6\x73\x5a\xd4\x67\x43\xe5\xa1\xcc\x53\xf3\xcd\x5f\x99\xcc\xaf\xca\x2c\xfd\x44\x24\xee\x4d\xf9\x40\x7c\x4e\x24\x36\xaa\xe8\xaf\x4e\xe0\x4b\x88\xa8\x7f\x22\x12\xbf\x35\xca\xf5\x6b\x57\x86\xf2\x33\xa2\xf5\xa8\x94\xd5\xf4\x37\x20\xb6\x9c\xe6\xe2\x53\x12\xfb\x15\xad\xeb\xb3\x21\x74\x56\x68\x31\xa2\x72\x7c\xbf\x36\xb9\xcf\xe2\x6f\x7f\x0a\xa2\xc7\x9f\x78\x08\xd5\xb3\x61\xcb\xda\x78\xe4\xa7\x30\x44\x8c\x3c\x15\x76\xca\x0b\x44\xfb\xd4\x9b\x66\x0c\xbe\xb5\x37\x6b\x9b\xaa\x4b\xf1\x40\x61\xff\x90\xad\x0a\x1d\x05\x9f\xcf\xf9\xe0\x95\x1e\xff\x06\xa4\x3e\x97\x83\x5b\xf1\x09\x89\x7d\xe4\xdd\x8f\x8b\x5a\xfb\x6f\x49\x6f\x65\x5d\xfa\xbf\x3e\x73\xdb\x58\xc2\xa7\xa1\xb8\x1d\xff\x11\x32\xe8\xeb\xa4\x25\x7e\x72\xd2\xa8\xd1\x4a\x5f\x5c\x16\x01\x37\x5a\x49\xeb\xb4\xd0\xa2\x9c\x96\x99\x12\xa7\xee\x05\xb7\xc8\xdf\x44\x7e\xf1\x2a\xcd\xf4\x43\xf6\x78\x7b\xdb\xfc\xa2\xd2\x5a\x16\x47\x83\x3a\x1d\xd6\xda\xec\x87\x9d\xb0\x34\xd3\xec\x1c\x20\x10\xeb\x6d\xf9\x43\x7f\xff\xe9\x0f\x63\x9f\x0f\x6e\xab\xf5\x6f\x9a\x2d\x6d\xd1\x09\xd7\xbc\xcf\xd5\xa7\xd2\xc3\x5e\xc0\xa2\xd8\x9f\xd8\x95\x50\x5a\x96\x62\x77\x24\x61\xab\xb3\x3c\xcf\x8a\xd1\x6f\x20\x78\xbf\xe5\x45\xaa\xc6\xfc\xf6\x81\xfb\xfd\xa0\x2d\xb7\x8b\xdb\xf0\x24\x7e\xfa\x13\x47\x40\xa7\x5f\xfb\xc8\x85\x28\xaf\x4f\x70\xe4\x3c\xfa\x6d\xfd\xb3\x56\x5b\xee\x32\xc7\x62\xe3\xef\x9b\x5c\xc4\x2b\xfd\xbd\x4d\xde\x5a\xeb\x5b\x7d\x88\xb7\x96\x90\x70\xb2\xd2\xb9\xd0\xad\xc5\xa0\xd3\xea\x79\xdc\xff\xc7\x0d\x82\x44\x1b\xc6\x87\xc0\xf9\xf1\x79\x20\x07\xcc\x54\x7a\x18\x5c\x6e\x8e\x38\xb7\x2a\x88\xdd\x52\x54\xba\x77\x37\x58\xf2\x98\x0d\x0b\x27\x6a\x5e\x0c\xce\x8a\xcb\x52\x8e\x4a\xa1\xd4\xb3\x7f\x3b\x4c\xcc\x08\x50\xbd\xe3\xd9\x93\xa7\x49\x2e\x79\x6a\xac\x77\x65\x96\xe7\x83\xc4\xc1\x3c\x30\xb4\x7c\x2c\x27\xd3\x5c\x68\xd1\x16\x49\xfc\x14\x8c\xd4\xea\x78\x8c\x01\x8e\xa2\xcc\xdf\x29\xb4\x28\x5c\x30\x1a\x60\x0f\xb2\x38\x4a\xe1\x9b\xe6\x93\x0b\x98\x86\xf8\xcb\x3c\x4d\xdb\xa2\x3e\xf6\xc8\x8f\xdd\xe9\x4e\x2b\x35\xc6\x6d\x69\xe3\x77\xdc\xf0\x6a\xbd\xf1\x5f\x54\xf9\xad\xfb\x46\xbb\x63\x3f\xe2\x09\xd3\x6a\xd1\xb8\x27\x02\x29\xb0\x9c\x50\xa5\x98\xc8\x3b\xb1\xde\x68\x3d\x7e\xb7\x72\x2c\xc5\xd7\x1d\xe9\x92\x2b\x35\x93\x65\x8a\x98\x8a\x65\xe3\x55\xd3\x94\x6b\xe1\x9f\xed\x66\x69\xa2\xe1\xfd\x97\x59\xae\x71\x37\x6a\x5f\x10\x38\xd1\x79\x31\xf8\x87\x98\x0f\x72\xc9\x6f\x2d\x92\x00\xb6\x37\x66\xad\x56\xf2\x6f\x07\x9d\xa4\x0e\x4c\xe8\xdd\x0d\xcc\x5a\xa2\x21\xea\x4b\x6a\x1e\xec\x90\x06\x6b\x22\xdd\xbc\x18\x9c\x9f\x1c\x5d\x6e\x30\x1b\x7c\x7d\xb3\x99\x3c\x56\xd2\xfc\x9e\xb1\x34\x6b\x0b\xa8\x7b\x40\x37\x0d\xb8\x99\x1a\xea\xff\xe1\x50\x99\x42\xcc\x42\xb8\xcc\x65\x29\x27\x99\x12\x35\xb9\xb1\x5c\xb2\xb5\x5a\xc9\xe1\xc1\x01\xf1\x84\x7e\xfe\x3f\x7f\x11\x6d\x6d\xb6\xf9\x21\x40\x1a\x60\x8f\xc7\x00\x68\x90\x33\x3e\x13\xa4\xc2\xab\xc3\x2f\xb3\x9f\xae\xca\x37\x9f\x1e\x41\x53\xf7\xd2\x27\x2d\xfc\x81\xf5\xb9\xca\x06\x61\x6d\x8d\x84\x4d\x49\x74\x61\x52\x76\x90\xc6\xbf\x56\x88\x61\x6d\x98\x8c\xd9\x89\x3d\x88\xfc\xfa\xe9\x63\x78\x24\x69\xb9\xbb\x25\xfc\x37\x38\x5f\xd7\x45\xcc\xf8\x11\x7c\x7a\xc2\x7d\x8f\xaa\xe5\xf0\x9a\x95\x8b\x80\xd8\xf3\xc2\x1a\xea\xe2\x2d\xb8\xc5\xcd\x37\x43\x69\xef\x7e\x61\xa4\x25\xfc\x80\x57\x05\xfc\x13\x6f\x43\x7c\x84\xdf\xe1\x3f\xec\xed\xd2\x48\x11\x70\x37\xc7\x1f\x77\xbf\xf7\x73\x58\x4d\xbc\x68\x76\x6b\x50\xd0\x4d\x7e\x8d\x67\x69\x6d\x6b\x3c\x49\x4b\x5f\xe7\xfb\x86\x32\x6b\x3c\x17\x10\xee\x13\x01\xa9\x62\x01\xf3\x20\x4d\xd9\xa6\xfb\x7e\x1e\x2a\xf2\x43\x27\x0d\xd8\xe5\x25\x53\x4f\xfc\x4b\x74\xdf\x22\x06\x0f\xd8\xe0\x53\x5e\xaf\x8b\xeb\x0a\xee\x58\x3b\xf5\xd5\xf7\xac\x7d\xaa\xd5\x49\xec\xae\xae\x7e\xc1\x5d\x2e\x9d\x84\x30\x32\xab\x9f\xb7\x40\x9a\x4e\x92\x67\xc5\xed\xea\x67\xcd\x13\xe6\x41\x39\xe0\x79\x4f\xcb\x72\xe9\x73\xe6\x81\x3d\xa5\x65\xc9\x47\xe2\x7e\x2d\x01\xf4\x9d\x72\x29\x70\x17\x91\x42\xd7\xbc\xff\xac\xa5\xe5\xa0\x95\xfc\x54\x89\x72\x7e\x69\x8c\x4c\xf5\xec\x7d\x0b\x4a\x68\x15\xfa\x92\x8f\xc4\x59\x6a\x04\x1f\x54\x28\x69\xfd\x90\x0c\x82\x6a\x95\x88\x8b\x7f\xd6\x6a\x25\x50\x6f\xe9\xce\x4c\xdf\xfd\xc6\x5b\x2c\x3d\xfc\x14\x1a\xfb\x4e\x53\x46\x75\xd1\xcd\x02\x2c\x1d\xa3\x9e\x8e\xe5\xcc\x7c\x35\xd6\xee\x03\x75\x61\x60\xb6\xde\xa8\x33\xff\xc7\x94\x8f\xc4\x5e\xab\x8b\xee\x8c\xb6\xe8\x38\xcb\xe0\x84\x76\x37\x1e\xa3\xc6\x19\xcb\xad\x04\x60\xe3\x79\xaf\x1a\x0c\x84\x52\xed\x96\x19\x31\x35\x3a\x6b\xb2\x52\x7d\x11\xf8\x17\xf0\x70\x74\x96\x3e\x6b\x36\xec\xc4\x17\x8b\xb2\x6f\x89\x0f\x03\x51\x4e\x8d\x29\x68\xd6\x70\x2c\xa7\x73\xa4\x81\x39\x3c\xb9\xd0\xac\x78\xbe\xb8\x8e\x6e\x96\xb6\x3a\x89\x0c\xfe\x62\x08\xa2\x0c\x87\x3e\x7f\xff\xcb\x14\x76\xee\x99\xf8\xf8\x83\x25\xd0\x2a\x4a\x18\x55\x6e\x9c\xe5\x69\x29\x8a\xb6\x4c\x44\xa7\x93\x64\xcf\xdf\xff\xf0\x85\xea\x0e\x65\x79\xca\x07\xe3\x76\x5b\x24\xd2\x10\x28\x7b\x2f\x7f\x68\x98\x8b\x1f\x69\x60\xe7\x5e\x24\xa2\x8b\x93\x30\x96\x52\x27\x09\x94\x4b\x9e\xe7\xed\x2c\x24\x7b\xf1\xfc\xf9\x73\xfd\xa7\x3f\xb5\x3d\x63\x4c\x2d\xe3\xb5\x42\x52\x62\x1e\x5b\xf7\x9f\xc8\xda\xaf\x33\xc3\x0b\x59\x1f\x6c\xc7\x61\x29\xd4\xb8\x1d\x3e\x1c\x1c\x3c\x5c\xa1\x65\x8b\xf3\xac\xb8\x55\x0d\xe4\x00\x82\x36\xda\xe2\x66\x28\x85\xb6\x38\x59\x51\xaf\xe5\x9d\xf8\x97\xda\x22\x22\x46\x91\xb6\xe1\xc6\x1d\x09\xbc\xc7\xd3\x56\x62\xb4\x5e\x91\x0c\x68\x6e\x20\xbf\xbd\x91\x7e\x3f\x8d\x80\x40\x05\xfe\x0e\xc8\xa5\x82\x87\xbc\x56\xda\xf9\x22\x1b\xb6\xe9\xb1\x69\x29\xb5\x95\xaf\xcf\x9f\x3f\x57\xc6\x5a\xa1\x5f\x5c\xcf\xa7\xa2\x7b\x2e\x07\xb7\x94\xf0\x61\xde\x12\x7e\xf0\xe7\xcf\x9f\xd3\x4f\xa5\xc8\xa1\x22\xe4\x59\xea\x93\x43\xe0\xae\x99\x65\x45\x2a\x67\x5d\x23\x6c\xa1\xb0\x50\x29\x8c\xe9\xda\xee\x7c\x61\x16\x90\x3d\x87\x5d\x7b\x26\xba\x5a\xfe\xbd\xf7\xe6\xa2\xfd\x0b\x95\x8e\x38\x4b\xf1\xe2\x02\x9d\x42\x2f\xf9\xeb\xc7\x2f\x56\x6d\x8b\xf5\x31\x8c\x84\xd9\xdf\x80\x20\x8b\xfb\xd0\x2c\xa1\x92\x55\xa3\x0f\x85\x1e\x8c\xcd\xe0\xaa\x2d\x93\xc5\x54\x0b\xa3\xe1\x2c\xe7\x7f\xe4\xda\x44\x3c\xe0\x78\xc9\xfb\x0e\xd2\x47\xe7\x80\x71\xbc\x64\xe4\xb5\xa1\xb2\x5e\x7a\x94\x8a\xe7\xe0\x7a\x91\xcf\x45\xd7\x32\x5c\xc4\x2f\xf6\x78\x65\x2b\x0f\x40\x78\x94\x54\x52\x74\xbe\xf0\x13\xac\xdd\x7b\x46\x9f\xec\x24\xf2\x3f\xda\x19\xf8\xca\xda\xf6\xcc\x16\x1f\x57\x53\x3b\x85\x05\x21\xb9\x75\x52\x34\x6c\xe1\xfd\xdb\xb4\x8c\x06\x8f\xde\x3c\x43\xf1\xce\xb3\xf5\xa6\x6d\x66\xfd\xb9\xcc\xd9\x70\xc9\x59\xa1\x44\xa9\xa9\x1f\x76\xe0\x9b\x5c\xe2\xb6\xd0\xf7\x4c\x99\xa7\x29\xae\x72\xc9\x7c\x43\xb7\x69\x5d\x70\x61\x70\xb0\xd3\xc5\xb6\x16\xd9\xcf\x02\xa7\x6b\x66\xfb\xc5\xe2\x53\xc0\x36\x05\x51\xa0\x76\x6e\x71\x51\x0f\x39\xba\x8f\xa7\x6f\xd1\x44\x5f\x3b\x2f\x28\x38\xfd\xa2\x52\x5d\x2a\xfe\xe3\x87\x37\x9f\x3d\x4a\x53\x23\xe7\xcd\xc9\xeb\x24\x2d\xcd\xfb\x2d\x10\xa3\x66\x0c\x23\x6e\xff\x63\xc1\xd5\x04\xfe\xaf\x60\x8a\x56\x19\x0e\xa6\x89\xb0\xd4\xfa\xe4\xe9\xb7\x2a\xaf\x46\x8d\x34\xa9\x3f\xef\xbf\x80\x6f\xc0\x14\x9f\xb5\x97\x1e\x67\x5c\x82\x06\xff\x6d\x27\x90\x41\xf6\xa6\x3a\x52\x2f\x72\x39\xb8\x7d\x28\x7f\xc5\x16\x01\x79\xc6\x69\xa0\xf0\x0c\xb5\xdd\x07\xad\xac\x24\xaf\xf8\x6a\x35\x15\x4f\xa5\x53\x6a\x57\x2b\x2e\xfe\xb4\x36\xec\x08\xd2\xf7\x81\xfb\x10\xd0\xe8\xda\x7a\xba\x6a\xce\xf2\x9a\x0d\x45\xaa\xf5\x91\x72\xcf\x2f\x3d\x67\x89\xbe\xef\x72\xb3\x63\x30\x65\xf5\x70\x20\x60\x05\xb5\x38\xeb\x11\x85\x06\xe2\xb9\x07\xef\x5b\x74\xb3\x04\x58\x3a\x2f\x37\x83\xb4\x15\xdc\x64\x3d\xa8\x2b\x3e\x10\xd6\xd8\x71\x74\x6a\x64\xc7\xd5\xe7\x1e\xab\x65\x84\xa3\x2e\x3f\xff\x9f\x93\xac\x36\xc3\x9f\x8b\x3b\x91\x6f\x97\x08\x30\xe4\xef\x83\x02\xd7\x7c\xe4\xad\xdd\x65\x1a\x4d\xab\xf3\x85\xc6\xf7\x35\x1f\xd5\xb5\xab\x25\xc6\xea\xbd\xa7\xa5\x17\x1e\x92\xd3\x34\x03\x83\x33\x92\x2f\x81\xef\xb7\x6b\xbf\x62\x1e\x74\x85\x40\x50\x3d\x06\x0b\xab\xd5\xa9\x85\x10\x02\x91\x6e\x53\x21\x7f\x09\x1d\x07\xbf\x68\xde\x7f\xd6\xb2\x19\x34\x1f\x29\xa4\x08\xe5\xa6\xcd\x6b\x6f\xa7\xa8\x4b\xaf\xdc\xa0\x91\xd0\xfe\x8d\x87\xd9\x69\xdc\xbf\x67\x23\xa7\xe1\xe7\x9b\x62\x90\xcb\xc4\xad\x7f\xeb\x5e\x25\xe1\x5e\x96\xdb\xea\x8a\x3a\x1f\x13\x6b\xed\x6e\xac\x06\xc1\x59\x70\x77\x11\xd7\xfc\x9e\xb9\xc5\x4a\x84\x63\xe4\xa4\x70\x9c\x44\x3c\xac\xbc\x98\x35\x6a\x86\xcd\x42\x59\xfc\xab\xff\x63\xf8\xb7\x28\x3e\x51\x74\x83\x1f\xc3\xa7\x4a\x99\x83\x12\xd3\x85\x7f\x84\x7f\x21\x33\xa3\xe8\xc2\x3f\xc2\xbf\x50\x2e\x22\xfc\xd1\xfe\x3b\xfc\x7b\x44\xef\xa2\x1b\xfc\xf8\x5b\xeb\x68\xcd\x9a\xc6\x48\x68\xc8\x87\x01\x75\x43\x35\xdf\x71\x8d\x8c\x05\xc1\x29\xe2\xa9\x44\xfc\xc7\x32\xab\xf7\x99\x55\x5a\x50\xa0\x7c\x98\xf2\x22\x3d\xca\xf3\x36\x8a\x35\x11\x88\x35\xef\xbe\x74\xe6\x20\xa9\xeb\xdf\x66\xe9\xd2\x9b\x0b\xcc\xfa\x03\xd0\x27\x73\x51\x8c\xf4\x38\x12\x55\x68\xcd\x39\x0f\x07\xc4\x15\x51\xa3\xd6\xfe\x09\x1c\xe7\x63\xe7\xa3\xc8\x95\x60\xe2\xf9\xfb\x1f\xbe\x58\x32\x2b\xb5\xee\xac\x9c\x2c\x56\xe8\x9c\x33\xab\xee\x69\x88\x2d\x8a\x80\x10\xcd\x8e\x8d\xc7\x12\x42\xff\x47\xf1\xfc\x9f\x5d\xaa\xdd\xd9\x2e\x12\xd1\x79\x56\xe0\x62\x63\xbb\xfb\x71\x2b\x2a\xea\x21\xf7\xe5\x81\xd5\x9a\xf7\xff\xf7\x1c\x71\x7f\x70\x34\x60\x6d\x6f\x3d\x9e\xaf\xd5\x8f\x92\x88\xeb\x24\x6b\x07\xfe\x1f\x1c\x03\x58\xd7\x1d\x1f\x42\x06\x9c\x4e\x22\xba\x5a\x76\x83\xeb\xbb\x8b\x5e\xfe\x2f\xf0\x52\x69\xff\xb3\x9b\xa9\x8b\x2a\xcf\xdb\xba\xf3\xdf\xff\x6d\x7e\x78\x5b\xe0\x76\xa5\x6d\xdd\xe9\xfc\xe9\x4f\x6d\xfd\xbc\x65\x38\x6b\x1d\xe4\xc0\xfd\x12\x13\xf0\x6d\xea\xa5\x2c\xc3\xfd\x70\xf7\xca\x3f\xb3\x74\x95\x00\x75\xea\x9f\x6e\x12\xa1\xba\x93\x08\x6b\x7b\x59\xd8\x43\x20\xbe\xe0\x57\xcb\x3e\xfc\x45\x08\x82\x22\x57\xbe\x73\xfa\xbf\xc3\xc3\xda\xab\x86\xc3\xec\x43\x63\x04\x20\x78\xe3\x5e\xd7\x7f\xb2\x50\xae\x84\xae\xcd\x67\xcb\xa7\x49\x4f\x10\x3b\xde\xfb\x60\x62\x7f\xb3\xe2\x49\xfb\xcf\x04\xa8\xf7\x6c\xd1\xb9\x06\x97\xea\x8a\x01\xe0\xef\x36\x4c\xb6\xea\x41\xfb\x48\x12\x5c\xf0\x2b\x1e\x0f\x9e\x4a\xe0\xca\x5f\xf1\x2c\xfc\x1d\x11\x18\xab\x1e\xc3\x07\x12\xab\x09\xac\x78\xd2\x3e\x92\x04\x2a\xc1\x8a\xc7\x83\xa7\x0c\xd7\x29\xa1\xab\xa9\x8f\x5b\x06\x26\xd1\x3f\xa1\xe1\x20\xfc\x22\x11\x35\xbd\x49\x7b\xbd\x49\xc4\x4a\x93\x76\x4a\x93\xa8\xeb\x62\x3a\xd0\xc5\x44\x7c\x0c\xc0\x65\xe3\x07\x23\x2d\x49\x5b\x2d\x89\x7e\x6d\x77\xc5\xfc\xc5\xfe\xdb\x0f\x15\x6a\x66\x3a\xd6\xcc\x44\xa4\x96\x69\xab\x96\x89\x58\xe1\xd0\x44\x74\xf7\x07\xaf\x92\xe9\x40\x25\x13\x0d\xfa\x98\x8e\xf5\x31\xd1\x70\x3d\xaf\x7f\x0d\x77\x83\xfb\xb1\x13\xc0\x94\x7c\x11\xc5\x78\x87\xba\xdd\x2e\x2f\x47\x15\x7d\x9b\xf4\x25\x17\x8d\x3c\x48\x0e\xd6\x06\x2e\xd5\xee\xd7\xcf\x04\xb7\x54\x8c\x9e\x1e\x5f\xfe\xe5\xb6\xdc\x56\x85\x15\x00\x46\xff\x06\x85\x54\xea\xd0\xeb\xa7\x89\x3b\x1c\x8e\xf2\x8a\xe0\x3d\xb6\x14\x8c\xd1\xa0\x5b\x49\xeb\x6f\xa9\x1c\x9c\x11\xfe\xe6\xcb\xc4\x1e\x36\x0b\xb3\xf1\x47\xac\x95\xd9\xe2\x41\x1b\x54\x1f\x79\xd2\x50\x7d\xe4\x01\x35\x4b\x9a\x10\xe6\x5f\x37\x2c\xd5\x13\xd9\xc1\xc9\x78\x1f\x92\x0f\xe0\x94\x5a\xd9\xd0\xb2\x34\x50\x98\x5d\x9f\x84\xcb\xf5\x27\x34\x3e\xff\x2d\x32\x44\x1d\x8e\xe9\xda\xb1\x72\x2b\x8e\xc4\x23\xe8\xc9\x7a\xcc\xf0\xa7\xc8\x05\xea\x41\x4f\x66\x7a\x0e\xda\x84\xb3\x74\x3f\xe2\x64\xdd\x8f\x76\x83\xe2\x9f\x83\x07\xdc\x1a\xdc\x6f\xdc\x52\xfc\x98\xc1\x8a\x56\x17\xf2\xc3\xb5\xae\x09\x5c\x72\xa4\x58\xf3\x79\x47\xa9\x75\x20\x54\x8e\x90\xeb\x3c\x5c\xa7\xf3\x52\x34\xdc\x3a\x79\xfe\x7f\xc8\x5a\x38\xcd\x53\xd8\x1b\xc9\x3d\x2d\xa7\x8d\xe2\x6c\x9d\xd7\x11\x3e\xb6\xe7\x76\x65\xbd\xf5\xac\x4e\xdf\xf9\xf2\x60\x9d\xac\x1d\xb4\x4e\xb1\xe0\x33\xe5\xfc\xf8\xf4\xb4\x91\x76\xe9\x69\xd1\xcd\xd9\x42\xfb\xdb\xbc\x75\x60\xd9\xaa\x65\x6b\x46\x09\x51\xec\x3d\x85\xa2\x51\x8e\x7b\x96\x14\x08\xa2\xc9\x7f\x95\xd0\xd5\x0d\xf2\x47\x67\xd3\xa0\xa6\xe6\x58\xce\x4e\x44\xce\xe7\xb0\xc8\xa7\x07\xcd\x04\xc1\x35\xec\x0f\x64\x9e\xf3\x29\xe4\xfc\xad\xce\x08\x5a\x20\xdf\x97\xcb\x0e\x84\x73\x62\xc0\x71\x6f\xce\x1d\x5a\xcd\xf8\xf5\xdd\xaf\xb2\xfd\x2a\xdb\x03\xc9\x59\xfa\x4b\x25\xfb\x19\x93\xbb\x9e\x18\xba\xfd\xd0\xf8\xfe\x12\xd9\x6d\x39\x08\x70\x59\x96\x6c\x18\x63\x5c\x90\xdb\x56\x23\x0c\xe5\x75\x2c\xa4\xeb\x50\x2e\x8f\xb1\x22\xd8\x69\xe4\xad\x77\xbf\x8b\x23\x19\x5e\x3e\xc3\x3c\x1e\x29\xa0\x17\xe5\xf1\x82\xf4\x05\x96\x8e\x66\x7c\x0f\xa8\xd5\xae\x65\x2d\xa0\x68\xbc\xd4\x35\x5f\x59\xa0\xc4\x72\x09\xfa\x98\x1c\xb3\x2d\xa6\x99\x35\x0b\x42\xa7\x0a\x4c\x84\xe6\x2b\xc4\xe0\x3d\x6f\x5b\x5c\xfa\x7d\xb5\xc1\xc6\x87\xab\xb2\xfe\x0e\x17\xb5\x29\xfc\xb3\xa7\xe6\xea\x3a\x61\xe3\x27\x0b\x33\x14\x6a\xb0\x62\x78\x6b\x60\xaf\xfd\x85\x26\x22\x70\x8d\x25\x87\x56\x0a\x3d\x3a\xc7\x08\xbb\xd7\x22\xdd\x4b\x51\xad\x5f\x98\xd2\xa0\x14\x10\x38\x74\x59\x95\x0b\x78\xe5\x5a\x4e\x71\x21\xf5\x5e\x90\x57\xdc\x38\xd4\xe2\xca\xa1\x88\x5e\x5c\x2d\xa2\x31\x87\xb8\x31\x83\xf4\x7f\xff\x3f\xff\x2f\xa3\x01\xd8\x83\x16\xb7\xf0\xd5\x26\x30\xf6\xaf\x91\xdc\xb9\x8e\x76\x0c\x47\x62\x3b\xaa\x71\x64\xaa\xd6\x65\xf0\x82\x9b\xce\xbc\x10\x79\xe9\x7e\x3b\x0d\x38\x9c\xf8\x3d\x82\x79\x71\x19\x7e\x94\xda\x6a\x9a\x13\x2e\x1e\x70\x6f\x7e\xb9\xe4\xde\x6c\xda\xcf\xbb\x4c\xcc\x9c\xa2\xe7\xb6\x33\xd6\x6f\xec\xb6\x92\xdb\xc3\x6d\xaf\x75\x4c\xf8\xab\xd4\x39\x60\x02\x5f\xc8\xf2\xfb\x35\xde\xf7\xfa\x6d\x1b\x9a\x48\xa4\x97\x59\x95\xdf\x5d\xc1\x16\xef\x0b\x3f\x58\x64\x69\x90\x27\xe2\x7e\x8c\x50\x50\xd1\x38\x84\x5c\x79\xc8\x8d\x0e\x49\x32\xb5\xd0\x6c\xed\x97\x75\xdb\x2c\x24\xe8\x32\x0e\x45\xf2\x2e\x63\x58\x22\xf6\xfa\x0c\xec\x76\xe0\xa1\x4a\x44\x23\x57\xaf\xaf\x59\x3c\xc0\xdc\xb3\xea\xf6\x7a\x86\xde\xba\xca\x8a\x63\x8a\x35\x9e\x75\x3c\xb3\xa6\x46\x63\xb1\xbb\x6b\x3c\x1e\xb3\xdc\x03\xd6\x68\x39\xf2\xd7\xd6\xcb\x56\xe6\x84\xd5\xd9\xfd\x41\xef\xac\x65\x41\xff\xba\x69\xfc\x4b\x5c\x89\x8f\xcb\x50\xb2\x35\x77\x97\xa5\xf3\xff\x41\x12\x7e\xee\xc9\x8b\xa1\x52\x1c\x57\x44\x8c\x67\x70\x99\x04\xd9\x2c\x2f\xf8\xe0\x36\x42\xb0\xdc\x07\x95\xa1\x36\x3b\x1f\x13\x59\xd8\x41\x6b\x49\x30\xb5\x4f\xda\x20\xf3\x95\xcc\xf3\xbe\xf9\x5a\x0d\x6d\xb7\x18\x4b\x2b\xe9\xc9\xd5\x98\xd6\x65\x18\xa9\x75\x17\xf0\x88\x08\xb2\x67\xa9\xdf\x79\x14\x79\x79\xb1\x88\xcf\x27\x78\x1c\xa7\x85\xdf\x9f\xd7\x1d\x00\xd3\x56\x87\x40\x23\x8e\xc2\x32\x00\x01\xde\xdf\xb2\xad\xb2\xa0\x8c\x00\x73\x02\xe1\x58\x87\xdf\x30\x1f\xc5\xb9\x18\xbe\x17\xc6\x72\xa3\x1c\x12\x44\x80\x38\x6e\x71\xc9\x56\x18\x50\xb2\xbf\xa6\x48\xae\xae\x85\x72\x97\x35\x7b\xf8\x3c\xa3\xa7\x9f\x2a\xd6\xe9\xa8\x14\x7c\xd3\x53\xae\xf3\xd9\x46\x21\x1f\x1f\x51\x0c\xf9\x22\xe0\x9d\xf0\x07\x02\x15\xfd\xcf\x83\x3f\xfd\x49\x2c\x13\xb6\xc1\xe3\xef\x0f\x7e\x78\x68\x24\xf0\x8b\xb5\x81\x04\xbf\x02\x82\x60\x03\xf9\xfc\x99\x44\x21\x07\x4f\x5e\x0c\xe4\x93\xaf\x9a\xab\x27\x04\x5d\x01\x7e\x6f\xf1\x48\xf2\xe8\xa0\xc5\xbb\x10\x92\x4b\x79\x79\x0b\x96\xe9\x68\x0c\x1e\x14\x0e\x0e\x14\x33\xbd\x12\x0c\xb5\xbe\x2c\x53\x51\x82\xc2\xfe\x1e\x54\xc3\x64\xc9\xff\xbd\xa7\x3c\x58\x60\x3a\x47\x33\xd9\xeb\x43\xf5\xc3\xc0\x11\x32\x16\x13\x98\x41\x35\x9d\x8a\x72\xc0\x95\xb0\x85\x27\xa8\x9b\x04\xda\xad\x79\x06\x0a\xfe\x7b\x5d\x56\x76\x1a\xcb\x4b\x89\x95\xa5\x9c\x9d\x8b\xa1\x6e\x74\x55\x59\x1f\xe0\x0a\x45\xdc\x28\x5e\xf7\xa4\xf8\xaf\xf4\x2a\xfd\xda\x11\xda\x7f\xc5\x48\xda\x27\xef\x2a\x71\x75\xfa\xdd\x59\xef\xec\xcd\x45\x6f\x99\x6b\xf0\x71\x0d\x25\x04\x1f\x8c\x9d\x2f\xd3\xdf\x2b\x4b\x0b\x39\xaf\xaa\xb9\x67\xbf\x5b\x0f\xdb\x65\x5a\x4c\x16\xc3\x71\x81\x57\x77\xe1\x6a\x82\xf3\xf0\x55\x72\x88\x92\x8b\x42\x72\xae\x56\xe0\x5a\xb1\xb8\xad\x56\x03\xbc\x2e\x33\x5e\x8c\x72\xd1\x9b\xf0\x3c\xbf\x02\x61\xf5\x69\x4a\x33\x2e\xf7\x35\x03\x35\x56\xf8\xcf\xef\xad\x4b\xb8\x34\x2c\xe8\x15\x02\x4f\xf3\xfb\x4e\xf1\xe1\x6f\x54\x96\x70\xcb\x95\x09\x1f\x5b\x80\xe8\x18\xbf\xc7\xae\xbc\x22\xd6\x32\xff\x16\x33\x36\x35\x87\x48\x56\x8a\xd1\x9c\x18\xe6\xf1\x60\xf9\x21\xa3\x7e\x32\x63\xaf\x32\x91\x66\x7a\x55\x09\xa2\xeb\x6c\x22\x50\xee\xdf\xe7\x4e\x6e\xf4\x08\x3b\x7d\x21\x8a\xa2\xae\x17\x36\x0d\xb4\x4b\xaf\x77\x00\xa3\x90\xb1\x1d\x87\x44\x37\x8f\x7a\x86\x62\x27\x59\x25\x11\x96\xde\x90\xc1\xcc\x3e\x85\x8b\xca\xde\x55\x1b\x39\xaa\x16\x35\xce\x47\x3a\xab\x7e\xc7\xfe\x84\x07\x56\x90\x79\xb0\x87\xeb\x41\xee\x85\xb5\x9d\x16\x8d\xee\x85\x7a\x3e\xcf\x59\x4a\x18\xcc\x66\x38\x37\x3e\xf4\x4f\xc8\xc2\x5d\xc8\x23\xba\xe7\xdd\x00\x0a\xbe\x19\xe8\xfc\x9e\x84\xa7\xb3\x9a\xfb\xa2\x21\xdf\x49\xaf\xce\x77\xd2\xab\xf2\x9d\xf4\x7d\xf9\x4e\xfa\x9e\x7c\x27\xbd\x34\xdf\x49\xaf\xca\x77\xd2\xf7\xe7\x3b\xd5\xf1\xb5\x75\xcc\xfc\x5a\x8e\x96\x51\x48\x8a\x4e\xe4\x5a\x09\xfe\x14\xb0\x75\x43\x45\x82\x26\x37\x49\x3d\x79\x11\x3c\xb9\x79\xe4\x62\x41\x02\x45\x00\xf5\x91\x27\x4f\xa7\x06\xf3\x1e\x45\xf4\xe9\x2c\x02\xbb\x47\x75\x02\x75\x6a\xa0\xf6\xa5\x29\x59\x90\x21\x15\xa1\xcf\x37\xc8\xde\x8a\xea\xbf\x8a\xb2\x94\x50\x6d\x34\x1b\xb6\x45\xd4\xd4\x36\x76\xde\xee\x17\x52\xef\x0d\x65\x55\xa4\xad\x4e\xf2\x6f\x87\x0f\xf7\xdc\xd2\x5c\x3f\x8f\xb2\x65\xab\x5d\xf6\x0f\x96\x8f\x81\x37\xff\x98\x17\x03\x5f\x45\x73\x55\x11\x03\xea\x0c\xed\xf7\x08\x7b\x04\x37\xe7\x92\x47\x7f\x5b\x28\x67\x80\x7f\x5d\x96\x1d\x58\xfb\x2b\xbd\x1d\xa7\xd9\x52\x19\x92\xfa\x4b\x2e\x1d\xce\x66\xde\x06\x57\x1b\xa6\xa9\xfd\x2a\xe5\x6b\xc4\xa2\x40\x8d\x0a\xda\x14\xb5\xea\x1a\x7a\xb3\xea\x1a\x56\x08\xff\x6e\x76\x2f\x8a\x42\x3f\x0b\x28\xf3\xf1\xe3\x42\xce\xf2\x66\x29\xd3\x0d\x73\x5d\x5e\x6c\xba\xfb\xa9\xd3\xa7\x9b\x28\xb7\x79\x12\xf5\xba\x6b\x6c\x4a\xa5\x7e\xb0\xda\x69\xc5\xe2\xef\x59\xfd\xfc\xb4\xfa\xe4\xda\xe1\xaa\x89\x4d\x46\xfc\x4c\xe3\x37\x8d\x0a\x48\x44\x0a\xe4\xca\xba\x56\xb2\xfd\xf4\xb8\x07\xa7\x9c\x41\xf0\x69\x65\xa5\xa7\x91\xd0\x3e\x58\xbc\x92\x10\x81\xdc\xc6\x9a\x3f\xa0\x7f\xe3\x45\x71\xff\x07\xa0\xfc\xc4\x23\x3f\xf2\xf1\xe1\xf1\x0c\x7b\x3c\x3f\x93\x68\x46\x3e\xfb\xb2\x7c\xf1\x5f\x3f\xae\x59\x0b\x7a\x17\xc3\xf8\x1d\xc6\x30\x6c\x07\xf8\x87\xc5\x32\x50\xed\xfc\x97\x88\x66\x3c\x22\x90\xb1\x14\xad\x2b\xd2\x4c\xcb\x90\xe7\x3c\xd1\x9d\x43\x8f\xf2\x24\x10\xd8\x5b\x03\x67\x3a\xc2\x03\xb0\xcb\x05\x25\x96\xec\xe4\xc2\x1e\xd7\x1d\x7b\xf6\xf7\x71\x4a\x84\xfd\x2d\xa2\xed\xeb\xbf\x5d\x80\x25\xae\xc9\x23\x2b\x21\x6a\x11\x38\x6f\x99\xa3\xb4\x31\xd3\x04\xe5\xe5\x9e\x9f\x55\x50\xf3\x1c\x34\xcf\x73\x3a\x29\x86\xf4\xaf\x65\x2a\x3c\x85\x43\xe2\x67\x08\xad\x7d\x00\xa0\xb4\x85\x7f\x67\x47\x91\x03\xc2\x9c\xc1\x75\x68\xbb\x7c\x8f\xd6\xa7\xef\xa7\x05\x03\x7e\x4a\xb0\x5f\xfd\x96\x7b\x9c\x07\xd5\x96\x70\xfa\x5d\xa1\xfd\x56\x7b\x02\xee\xa9\x88\xfd\x20\x3d\xf6\xc1\x5a\xb2\x4b\x38\x37\xba\xd7\x8a\xea\x1d\x3d\x57\xbc\x23\x2e\xb9\x0d\xb0\xff\x24\x2a\xa0\xb5\x2d\xdc\xe1\x35\xef\xc7\x90\x43\x1d\x14\xdc\xfe\x03\x14\xcc\xbe\xb2\xe5\x9f\xc3\x9a\x84\xf7\xd6\x8a\x7e\x8c\x53\x8c\x8e\xcc\xce\xfc\xdb\x92\xf9\xf7\xb9\x5a\x7f\xff\xd2\x35\x4e\x1e\x65\x78\xd1\xc9\xf8\x4c\x2c\xaf\xf1\x3e\x7f\xfd\x62\x7a\x3a\xdd\x59\x5e\x3b\xcb\x6b\x87\x22\xdb\xa1\xc8\x62\x14\xd9\x9b\xa9\x6e\x68\xfc\xff\x58\x0c\xd9\x96\x61\x60\x94\xfe\xe9\x94\xc0\xc7\x23\xbf\xb6\x04\xfb\xea\xd9\x5a\xaf\x9f\xa8\x09\x2c\x21\x84\xfc\x67\x56\x8d\xbc\x12\xc3\x05\x7d\x64\x3c\xe1\xee\x1d\x68\x1b\xdb\x64\xd4\xba\x91\x2c\xe7\xbf\xfd\x3e\x1d\xbb\x99\x7c\x9a\x7d\xc2\xe1\x33\xb1\xf9\x0e\x79\x9a\xfd\x2a\x5b\xa4\xf9\xe8\xb7\xdf\x9d\x6b\x33\x89\x4f\xb2\x31\xd7\x7c\x0b\x87\x06\x68\x54\xbf\x6f\x7e\xeb\xce\xe6\xf4\xe9\xc8\x1f\x14\x81\xf4\xec\xdd\x7f\x04\xc9\xe7\xe2\x81\x80\xdd\x2d\xb2\x58\xd0\x92\x66\x23\xa4\xee\xf6\xf8\xed\x5c\x0e\x6e\xe3\xda\x0f\x6b\x01\x74\x1f\xde\xbe\x9b\x91\xc3\x66\x35\x0b\xae\xcd\x88\x21\x25\x1f\xd3\x81\xff\x7e\x66\xf9\x0e\xcd\x9c\xdf\x8e\x59\x7c\x09\x86\xcf\x83\x55\x8e\xe5\xf4\x81\x97\xc6\x03\x19\xe5\x3b\xbf\xe0\x6d\xb0\x48\x54\xc2\x62\xc3\xc6\xfd\xbf\x2f\xdc\xf6\x2a\x91\xbc\x44\x6f\x5c\x83\xc7\x9b\x23\x03\xa8\x8d\xed\x39\x5f\xa4\xab\xdf\x45\xe5\x50\x96\x22\xa7\x17\x0a\xda\xbd\x5f\x2f\x8c\xb2\xdc\xa9\xbf\x6e\x8d\xbe\xe6\x52\x7a\x8f\x30\xf3\xd6\x22\x74\x5d\xf3\xdb\x94\xd2\x6e\xbc\x1d\xa9\x57\x68\x70\x9b\x52\xd9\x0c\xb5\x23\xf0\xfd\xfa\xcb\xa6\x74\x0e\x46\x5c\x20\x77\x53\x25\xa5\x3a\xdd\xaf\x6a\xb5\x45\x1f\xbe\x07\x0b\xb5\x64\xb6\xb9\x39\x57\x0f\x2b\x07\xfa\x6b\xed\x63\x5d\xb5\x78\xd8\x2e\x0a\xa7\xa4\xfb\x7d\xa4\x11\x1f\xb3\x89\x41\x71\xac\xcf\x65\x3f\xc3\x3f\xc6\x95\xb0\x3e\xa3\x9d\xfe\xed\xca\xc8\x2c\xb8\xf1\x1f\x17\x5a\xfe\x4c\x82\x00\x7f\x3f\xf8\x30\x3b\xea\x3d\x99\xad\xdf\x8a\xff\xcb\xa4\x25\x2b\x9d\x0b\xb3\x7b\xdb\x68\x21\xbe\x40\x91\x07\xd1\x13\x19\x7e\x1f\x26\xff\x07\x8a\xd2\xdb\x34\x88\xa5\x25\x55\x7c\xea\xd3\x23\xe2\xdf\x16\xb6\x6d\xbd\x89\xd8\x51\x39\x82\xf9\x3f\xe4\xf5\xa6\xfe\x56\x54\xc4\x6c\x29\xc8\xbe\x8e\x4d\x86\xe7\x5b\x9d\x2f\x0a\x0a\xbe\x63\x3a\x25\x45\xb2\xf1\xa7\x4e\x27\xa1\xbf\xf6\x65\x3a\x77\x7f\x84\x1f\xfc\xdf\x6c\xd4\x3b\x59\xec\x1d\x41\x4f\x94\x7c\xf6\x02\x06\x20\x48\xa5\xfd\xd9\x3f\x31\x90\xc5\x30\x1b\xb9\x07\xe8\xc7\xf0\x1b\x5a\x94\x05\xcf\x7b\xd8\xf1\xdb\x3e\x57\xfb\x75\xa7\xa9\x2b\x11\x54\x86\xc1\x3c\x00\x6c\x7f\xb8\xa4\x85\xe8\x76\x48\xbf\x7e\xfc\x3e\x3a\x47\xbf\xe7\xd0\xfd\x03\x4e\xce\xbd\xe8\x6a\xb8\xbe\xeb\xc1\x60\x1b\xc6\xb7\x21\xf3\x15\x41\x6b\xf7\x68\x18\xb2\x46\x39\xbb\x84\x33\x46\x42\x53\x57\x4c\x3c\x11\x0f\xc3\xf8\x46\x9b\xf8\x99\x5c\x30\x6f\xff\xaf\xfc\xeb\xff\x54\x57\x3f\xef\xa2\xcc\x7f\xf8\x28\xb3\xd5\x7a\x7f\xfd\x10\xf3\x2e\xec\xbb\xad\xb0\x2f\xef\xcb\x6a\xa9\x87\x6f\xf5\x48\xe2\x43\x38\xf3\xd7\xfc\xff\x67\xef\x5d\x97\xe3\xb6\xb1\x45\xe1\xff\x7a\x0a\x8a\xa7\x4a\x69\x1e\xb3\x5b\x52\xec\x64\x92\xde\xd3\xf1\x96\x65\x7b\xe2\x19\xdf\xb6\x25\x4f\xf6\x6c\x59\x95\x42\x93\xe8\x6e\x44\x24\xc0\x21\x40\xc9\x1d\x59\x55\xdf\xaf\xf3\x00\xa7\xbe\x07\x38\x6f\xf1\xfd\x3f\x8f\xb2\x9f\xe4\x2b\xdc\x48\xf0\x4e\xf6\x45\x92\x33\x9a\xa9\x8a\xd5\x24\x08\x2c\x2c\x2c\x2c\x2c\xac\x2b\x06\x73\x68\xc5\x30\xa1\x60\x1a\x40\x8b\x62\x14\x45\x90\x51\x8b\xcc\xd2\x84\x07\x33\x12\x8b\xc0\x4c\x4b\x52\xce\xfd\xd6\x2b\x96\xb6\xde\x5a\xf9\x20\x9e\xe9\x8c\xba\xfa\x81\x3c\xb5\xad\x28\x26\x97\xc8\xe7\x78\x1b\x2a\xc4\x69\x64\xb1\x05\x60\x96\x07\xb0\x35\x85\x16\x52\x55\xb1\x2d\x84\x19\xb1\x00\x5e\x5a\xd9\x05\xb3\x76\xe7\xbe\xc2\x0c\xce\x63\xa0\x53\xc5\xf6\x4c\x16\x21\xe0\xeb\xe4\x5d\x3e\x4d\xb3\xec\xae\xe5\x49\xae\x68\xa2\xf8\x58\xf6\x7e\x7b\x6e\xe1\xb7\x7e\xd1\xac\x3c\xc4\x57\xb9\x13\xdd\x8b\xb0\xe4\x7e\x20\xcb\x14\xad\x7f\x9c\x6b\xdc\x96\xd3\x52\xf4\xf6\xa6\x56\x6e\xc3\xf5\xc2\x71\xea\x57\x9c\x81\xde\x25\xab\x67\xde\x4b\xdb\x50\xfa\xeb\x3f\xc7\xb6\xed\xce\x50\xc0\xb8\xf4\xf3\x9c\x78\x54\xa6\x8c\xa5\x24\x66\xcf\x96\xe3\x6b\x2e\x30\x8c\x77\x0f\x5c\x95\xb3\x68\xbc\x7b\xe8\xca\x2b\x92\xf8\x13\x50\x8f\xbf\xe4\x9c\x74\xbc\x7b\x78\xb3\xfa\x85\x97\xda\xeb\x78\x42\xbb\x32\x87\x74\xe6\x07\x9e\xbf\xcc\xba\x64\x72\x76\xee\xd2\xc9\xd9\xf9\x0e\x4c\xb3\x79\xe6\xc9\x92\x9c\xb1\xf3\x09\x6e\x88\x06\x34\x7c\xcc\x6f\x72\xa5\x0e\x41\x10\x0c\x88\x79\x51\x24\x55\x43\x10\xe7\x1a\x66\x51\xbd\x3a\x99\x23\x67\xa3\x22\x6d\x88\x51\xbd\x4e\x59\x52\xdd\xdd\x43\xc7\xa5\x67\xa4\x01\x2a\xe5\xce\x7e\x53\x01\x10\x35\x01\xe2\x37\x63\xec\x0f\x0c\x5d\x60\x56\xc8\x3f\x5f\x9b\x3f\x57\xee\xdb\xc5\xb5\x08\x23\xce\x35\xe6\xa0\xb1\xe6\x28\xea\x46\x9c\x95\x2f\xd7\x55\x50\xca\x62\xb5\x24\x66\x65\x18\xaf\x15\xfa\x4a\x69\x04\xcc\xa8\x78\x1f\x30\x30\x86\x8a\xbe\x4f\x97\x91\x66\xe9\x7c\x6f\x54\x26\x04\x10\x57\x3d\xc9\xd7\xd2\x72\xe5\xf9\xb4\x2c\xd9\x46\x15\x1e\xd7\x57\x38\x20\xc0\x7f\x89\x02\x51\x29\xbe\x29\x08\xff\x91\x3d\x5a\xb0\x30\xd0\xf1\xf6\x85\xb0\x03\x39\xcd\xac\xfa\xf9\x4b\xb5\x25\xab\x6a\xb0\x17\x58\x87\xa9\xb2\x91\xfb\xd6\x76\x76\xd2\xf2\xa7\xd0\xf9\xf2\x65\x80\x47\x7c\x23\xef\xed\x0d\xe0\x04\x8e\x64\x1b\x1d\xbb\xe0\xb2\x91\xc8\x47\x70\x22\xab\x92\xbe\x62\x30\x54\xa4\xa9\x1a\xea\x6b\x83\x50\xb2\x28\x3e\x50\xe8\x49\x67\x34\xeb\xd4\x59\xda\x98\xf7\xa7\x98\x49\xa1\x3f\x5d\x84\xa3\x53\x7f\xaa\x0b\xd9\x1f\x67\x45\x4f\x45\x5f\x31\xbc\x84\x31\x85\xf2\xc0\xa1\x83\xb6\xae\xde\xc5\x2a\xa3\x16\x97\x0a\x1d\x67\xdc\xad\x35\xe0\x8d\xcd\x34\x39\x06\x23\xb5\x5d\xe8\xf4\xd6\xf2\x7c\xfd\x45\x8b\xf5\xb9\xd2\x7c\x52\xa6\x07\x51\xff\xc4\xcf\x19\xb1\x17\x86\xd2\x19\x92\x44\x52\x9a\x2c\x3d\x52\xad\x7e\xa8\x3a\xdf\x73\xba\x96\x5e\xe6\x31\xe8\xb2\x91\x1e\xcb\x5c\xed\x74\xfc\x24\x0c\x41\x2c\xd4\x96\x54\xfe\x59\xd5\xea\x8d\x58\x42\xd1\x59\x28\xff\x5c\xa0\xa8\x2a\x23\x74\x63\xdc\x51\x97\x29\xa9\xed\xba\x53\x2c\x72\x9e\xdd\x3c\x1c\xb7\x94\x3a\xbb\xd0\x13\xdd\xc9\x67\xbe\xae\x3a\xa0\x6e\xe4\x10\xb8\xb6\x2b\xcd\x56\xe9\x0e\xee\xda\x19\x69\x81\x4b\x71\x40\x30\x85\xc1\x2b\xdf\x76\x76\x9a\x03\x70\x36\xad\x21\x14\xe3\x8e\x7f\x1d\xcd\x10\x27\xfa\x9a\x0f\x44\x23\xea\x5e\x23\x7f\x4c\x6e\x1c\xf9\x4d\x7d\xf7\xaa\xb5\xf8\x47\x50\x2e\x15\xfd\x73\x3e\x32\x60\xb9\x1b\x81\x9a\x2a\x2c\xa0\x60\x32\x99\xf0\x61\xd2\x88\xa3\x54\x3e\xa4\x63\x9c\xfd\xfd\x3c\x06\x33\x96\xf5\x8c\xb3\x9e\x59\x96\x0e\x4d\x27\x9c\x9a\x41\x6f\xe9\x05\x50\xf4\x0d\x47\xaf\xf5\xef\x91\xe8\xe4\x26\x93\x40\xe9\x6b\x74\x09\xd7\xed\x94\xf7\x71\xe3\xb8\xfa\x3e\x55\x8f\xa9\xb4\x85\x1b\x43\x0f\x62\x76\xe4\xfb\x95\x63\x97\x50\x05\x7c\xff\x83\xf8\x42\x84\xf5\xc9\x8f\x3f\x8a\x53\xa3\xdb\xf7\xf2\x84\x31\xba\xa0\x0b\x72\x75\xc2\x40\x26\x96\x70\x61\x38\x26\x84\xff\x3e\x26\x09\x66\xe3\x03\x37\x63\x1f\xe3\x12\xc7\x42\x22\xd1\x57\x81\x7d\x94\x9b\xa5\x8c\x25\x6b\xab\x98\x48\x45\x5b\xcd\x5e\x64\xc6\xad\x19\x97\x95\xa5\x12\x3d\x13\x86\x61\xb6\x21\x5d\x32\x81\xa3\xc2\xa7\x2e\x9d\x1c\xb8\x68\xf2\xeb\x28\x04\xd1\x80\xb8\xb9\x0c\x48\x85\x0d\x8c\x46\x2a\xb9\x12\x1d\x18\x09\x80\xb8\xa4\x41\x1f\x4d\xf8\x5e\x76\xe1\xc8\xc4\xc7\x84\xae\x74\x0e\xde\x13\x45\x39\xa5\x53\xf4\xfb\xb3\xff\x3a\xac\x4e\xeb\xad\x35\x64\x0f\xfa\xf2\xfb\xa6\x2f\x37\x02\xf2\xbb\xa9\xcb\xcd\x56\x3a\x75\x80\xe4\xc9\x7f\xb0\xb8\xac\x1a\xbd\xa9\xda\x7c\x82\xa2\xcb\x34\x91\xba\xcc\x68\x6b\x42\xde\x5f\x26\x65\xcf\x66\x88\x84\x9b\x13\xa3\x52\x96\x92\x77\xaa\xa9\xf1\xa1\xa9\x70\x7a\xa9\xcd\x61\xd1\xe4\x29\x93\x01\x96\x2d\xb4\x19\xc2\x91\x6b\x6c\x80\x9b\xa5\xc4\x35\xa5\xfa\x5e\xee\x36\xf7\xa7\x50\x71\xd5\x0a\xa7\x66\x92\xda\x15\x96\xc2\x49\x61\x71\xab\xfd\xd2\x73\x7f\x0b\x41\xc1\x7c\xc0\x0f\x79\x91\x8a\x58\x1d\xdc\xe9\xdf\xf2\x1c\x2e\xd2\x49\x49\xb2\x2e\x4b\xd1\xb6\x79\xbe\x18\x0d\xe4\xc5\x59\xd0\x97\xbe\x43\x6f\x98\xd8\x14\x52\xba\xd0\x59\x27\xfa\xcc\x30\x58\xff\x4a\x22\xb4\xfe\xbd\xc0\x6f\xe9\x75\x86\xee\x9a\x57\x0a\xfb\x9d\x76\x41\xe1\x5d\xba\x36\xb5\x0d\xf4\x52\x95\xc7\x36\x57\xae\x66\x4f\xd6\xee\xb0\x74\x51\x3b\xd8\x10\x3a\xec\xc6\xad\x3a\xb5\x17\x28\xc9\x4d\x85\x76\x0e\x5e\x4f\x27\xc7\x1a\xfb\xa2\xd8\xc8\xf2\x00\xcc\x78\xfb\x47\x2c\xde\xa3\x19\x92\x27\x74\x5b\x94\xc1\x46\xc6\x3e\xfc\x91\x8b\x40\x4b\x2e\x70\x55\xec\x17\x2e\x33\xcc\x8f\x49\x40\x62\x3b\x0d\x0f\x39\xac\x69\xd8\x50\x52\xb7\x84\x6d\xa3\x20\x78\xae\x9b\x13\xcd\xca\xb2\xc2\xe0\x87\xbd\xea\xc8\xd6\x45\xa7\x88\x60\x19\x63\xea\x43\x3f\x26\x91\x4f\xae\xb0\xd5\x1a\xa9\x22\x24\x0e\x51\x7e\xe0\x39\xb9\xc2\xca\xd0\x57\x16\xc9\x54\xe9\xf1\x88\x44\xe4\x12\x1a\xdc\x59\xe3\x7d\x81\x7c\xf8\x8e\xf7\xc7\xaf\x21\xe2\x0f\x44\x4f\x16\xbc\x47\xd7\x8e\x02\xe0\x41\xed\x98\xaa\x94\x46\xb2\x3f\x18\xf3\x1e\x23\x41\x86\x1e\x17\x93\x2c\xf1\x5f\x92\x30\xfd\xc0\x56\x72\x9b\x3d\x25\x8c\x91\x70\x18\x22\xdf\x0f\xc4\x42\xf4\x29\x20\x91\x04\x45\x3a\x09\x21\x4e\x2a\x65\xcf\x5c\xdd\x8a\xaa\xd5\xab\x8d\x71\xaa\x2b\x2f\x2c\x0b\x2c\xa0\x0a\x7e\x97\x6e\x41\xb4\x62\x45\xe1\xdc\x3c\x9f\xc8\x42\xac\x43\x46\xca\xcb\xa3\x94\x77\x72\x64\x11\x34\x24\x62\xab\x52\x18\x74\x36\x57\xc9\xb7\xe2\x18\x2c\x2b\x40\x97\xbf\x84\xe2\x38\x83\xb6\xbc\x10\x87\x69\xd3\xfc\x9e\x69\x77\xc6\xee\x1a\x6b\x54\x5f\x24\xa2\xd2\xda\xdf\x2e\xea\xf6\xff\xb2\x51\x3c\x5a\xc3\xf2\xaf\x0b\x8a\xd7\x10\x4a\xe6\x2b\x53\xf9\x5a\xd6\xed\xae\x27\x33\x8f\xe0\xce\xa6\x7c\x25\x95\xa5\xa7\xf9\x50\x84\xe9\x97\x4c\xf9\xd4\xf4\x5b\xd7\x22\x5a\xbd\x64\x96\x6a\xc8\x0b\x92\x50\xde\xa2\x62\x54\xea\xcd\x3d\x32\x2d\x6a\x19\x96\xca\xa2\xf0\x5a\xa2\x54\x5f\x91\x49\x4d\x69\x73\x12\x42\x01\x17\x1d\xbe\x28\xa0\xaa\x63\x7d\xdb\x76\xbf\xfa\xbb\xf3\x67\x58\xa3\xfa\xaa\xea\xe1\x6b\xb6\x57\x6c\xd7\x11\x40\x63\xb5\xb9\x79\xaa\xe7\x72\x5c\x2a\x0d\x4e\x35\x0d\x6d\xa5\x4e\xae\x37\xfd\x4b\x19\x6a\x8d\x7a\x17\x05\x15\x79\xf7\x7a\x15\x15\xc9\x85\x5f\x8a\x47\xa5\xca\x00\xb5\x35\x2a\xd2\x2a\x13\xa6\x7f\x76\xb1\x5f\x0a\xd9\xb1\x4c\x41\xae\xbb\xaf\xec\x2b\x5f\x95\x22\xab\x07\x91\x1a\x5a\x5a\x73\x37\x57\x95\x7d\xe8\x52\xd8\xa1\xae\xa0\x44\x45\x91\x85\x4c\x55\xdf\x96\x3c\x3c\x08\x9e\x2d\x85\x54\x34\x80\xb9\x3a\x24\x79\xad\xb9\xf4\x98\xc8\xd3\x9c\xaa\xd4\x00\x2e\xa1\x7f\xaa\x5b\xe7\x3b\x31\x2d\x14\x99\x6d\x21\x75\x7b\x16\xa0\xd6\xd6\x71\xe0\x72\x2e\x09\xe0\x28\x20\xf3\x01\x74\xdc\x6d\x94\x75\xd0\x4a\x8b\x3f\x5e\xca\xc7\x2d\x3b\x15\xb5\x64\x94\xdc\x4a\x06\xc7\x9c\x90\xdb\x9a\xbf\x71\x53\xb9\x0f\x77\xba\x51\xce\xd7\x7c\x50\x85\x15\xbc\x7c\x03\x56\x62\x77\x45\xd3\x69\x4d\x86\xc3\xa2\x19\xb9\xb7\x89\xb5\x8f\x1d\xb0\x93\x69\xb5\x77\x90\xc6\x7d\xcb\x06\x78\x04\xde\xc6\xb3\xef\xd8\xc5\x43\x9c\xc6\x57\x62\x77\x5a\x3d\x4e\xa3\xe2\xf2\xf9\x10\xa8\xf1\xb5\x05\x6a\x88\x9b\xb9\x15\x8a\x28\x0b\x7d\x7b\x7e\x48\xd4\x77\xd7\x89\xfa\xde\x28\x6d\xcf\xd7\x97\x9c\x4f\xe6\xac\x7b\x48\xcf\xd7\x71\x8d\x0a\xb6\xab\xed\x2f\x53\x4e\x53\x75\xd7\xeb\xb4\x4a\xe2\xb4\xce\xab\xf4\x3e\x37\xd3\xf5\x96\xa9\xa8\xdf\xdb\xfe\x3a\xa9\xe8\xeb\x3b\x5f\x22\x15\x60\xb6\xdd\x7c\xa4\x7a\x90\x35\x57\x49\xe3\xec\x5e\xe5\x56\x6c\x32\x3f\xad\x4d\x25\x20\xf6\x16\xe8\xd2\xd0\x1e\xdf\x65\xcd\xf2\x23\x09\xcc\x96\x0a\x95\x1f\xa4\x03\xf8\xd6\x71\x26\x37\xad\x5e\x85\x5c\xd2\x4c\x86\xc1\xcd\x66\x40\x14\x72\xd5\xbb\x2b\x0c\xe3\x5b\x2e\x6d\xaf\x49\x43\x84\xb5\xac\x9d\x24\x73\x43\xa4\xa1\x4b\xb8\x6c\x8b\x32\x9e\x67\x93\x5d\x9b\x22\x32\xc4\x6d\xca\x5a\xd8\xfc\xbc\xca\x9d\xee\x2b\x4f\x6d\x58\xd0\x4d\x94\x13\x1b\x56\xec\x15\xc3\x57\xa9\x69\x67\xf5\x77\x7c\xda\x5a\x1e\xb7\xb2\x24\xb5\x1e\x96\x72\x48\xa9\xc6\x54\x5a\xf7\x3a\xbb\x7c\x37\x38\x8b\x75\xc0\x5b\x0b\x42\x57\x77\x56\xda\x50\x32\xc2\xcc\xe4\xba\x09\x0c\x1b\xe6\xe7\x66\x4a\x34\xc7\xdd\x04\x31\x9a\xa6\xe3\x6d\xe1\x2a\x2f\x31\xae\x87\x28\xd5\x57\x23\x96\x56\xc4\xcc\xa6\xa7\x7f\xab\xe9\xb1\xbb\x49\x61\xdd\x7d\xb6\x2a\x92\x01\x0a\x67\xad\xb4\xc7\xa6\x15\x58\x7b\x29\x36\xb1\x44\x1b\xcc\xee\x8a\x36\xb5\xcd\xcb\xd9\x5d\xef\x2b\xf6\xfa\x60\xa9\x28\xd0\xad\x87\x23\x19\xf5\xfc\xd5\x60\xe8\xae\xdc\x4d\xd6\xcb\xd2\xa8\x3a\xb9\x27\xa6\x19\xdf\x0b\xfe\xcb\x3f\x7c\xf7\xb7\xbb\xcb\xd1\x58\xc0\xc7\x0a\xb8\xac\xb7\xa7\xff\x26\x0c\xc4\x15\x86\x75\x90\xb0\x45\xc5\xe3\x90\xf8\x42\xbc\x35\xad\xa3\x2e\x76\xc9\xa6\x16\x83\xd6\x1a\xdc\x71\x6a\x26\x25\x99\xc1\x74\x93\xf5\x14\x3d\x12\x2d\xb5\xf7\x84\xc8\x87\x41\xa2\x65\xa6\x0d\xd3\x4f\xcc\x70\xc0\x05\xa0\xc7\x01\xc1\xba\x67\x8f\x84\x51\xc2\xa0\x3f\xc2\x84\xbd\x08\x23\xb6\x1c\xd8\x1e\x7f\xed\x0b\xa7\x0e\x99\xad\xc0\x78\xa0\xb2\x70\xa8\xeb\xe5\xdf\x11\xbc\x1a\xdb\x20\x08\xec\xf4\x91\x0a\x15\x15\xcd\xa2\x64\x1a\x20\x2f\xf7\x44\xa6\x2f\x2e\x34\x83\x31\x25\x18\x04\xe6\x33\x99\x44\xc1\x23\x78\x6c\xdb\xf2\x87\x88\x7b\x4a\x7f\x3d\x87\xd4\x4b\x7f\x48\xfa\xcb\x79\x05\x9c\x2c\xc8\xd5\x1b\xbe\xec\xda\x82\x2f\x68\xe0\x5d\x04\xf1\xc0\xfe\x1f\xc0\xf7\x87\xf2\xf0\x95\x94\xe1\x5e\xd3\x05\xb9\xe2\x0b\xec\xda\xff\x03\xc3\x2b\xf5\x52\x1a\xa2\x45\xa2\x4b\x8e\x00\x01\xde\x89\x98\x66\xde\x6d\xc0\x40\x4f\x5a\xfe\x11\x32\x0e\x7c\xbe\x5d\x3a\x27\xa3\x95\x98\x55\x45\x33\x15\xe5\x25\xdb\x1d\xf9\xbe\x72\xb1\x71\xae\xe1\x28\x8a\xe1\xa5\x28\x95\x2a\xc8\x69\x90\x8b\x75\x9e\xa7\x1d\xbc\x95\x49\x14\x48\xf1\xf9\x73\x91\x47\xc0\xa5\xc5\xe7\x02\x2e\xc7\x45\xc5\xe7\xaf\x95\xdf\x16\x30\xe3\xb5\x0b\x04\xb2\x83\x66\x83\x5f\x47\x88\x4a\xfa\xc1\x8e\x72\xb5\x19\x1c\xb8\xa9\x9b\x80\x33\x28\x63\x76\x04\x7c\xff\x98\x5f\xf2\x07\x36\xa2\x43\x84\x2f\x41\xc0\x7b\x1b\xcd\x88\x97\xd0\x81\xe3\xee\x1e\x8a\xa9\x05\x13\x99\xed\x05\xcb\x7c\x2e\xc4\x45\x9c\x2c\x94\x91\xfd\x95\x3f\x46\x92\x3e\x5f\xf9\x63\x90\xdf\x0e\x66\x80\x79\xf6\x58\x6d\x1a\x63\x93\xe4\xdb\x65\x2f\x54\xcb\xe7\xb9\x02\x87\x69\xbb\xd4\x73\xd2\x51\x09\x3b\x68\x1e\xf7\xae\x9d\xcb\xc0\x90\x21\xbf\xea\x85\xd2\x9d\x94\x5f\xe8\x68\xbf\xdc\x9b\x1c\xc1\xf1\xed\xe2\xb8\xad\xb8\x8e\x61\x48\x2e\x61\x05\xba\xdd\x6c\x7b\x1c\x07\x84\xc2\x8a\xfd\xd1\xe4\xf5\x06\x7c\x7f\x10\x54\x26\x24\x69\xf5\x8f\x83\xaa\x5f\xd3\x4f\x47\x38\x99\x64\x0e\x77\x30\x57\xc2\x5e\x52\xa5\x48\x5a\xa2\xb2\x91\x64\xdb\x91\x5e\x21\xe6\x2d\x06\x06\xfa\x0c\x1e\xc5\x37\x92\x0b\x9d\x6b\x61\x26\xe7\xec\x6a\x5c\x6e\xa7\x03\x33\x8a\xb9\x52\x94\x7c\xe4\x38\x3b\xd3\x18\x82\x8b\x1d\xd1\x87\xe4\x6c\xdd\xba\x31\xb9\x60\xb1\x1b\xcd\x0e\x3b\xf6\x94\xe7\x9e\xc5\xce\x14\x1b\xed\xd8\x57\x8e\xe9\x66\x5d\x29\x1a\xea\xd2\x87\x4c\x23\x92\x3b\xd3\x69\xeb\x99\xfe\x35\x7b\x3a\x6d\xf2\xe0\xe6\x4c\xac\xde\x5b\x16\x49\x6e\xdc\xee\x59\xb7\xa2\xdf\x6d\x46\x07\x6a\x4e\x7c\xa9\x93\x48\x94\x22\x77\xf6\xf6\x06\x75\x39\x7d\x46\x5e\x00\x41\x2c\x7d\x44\x2b\x1c\x29\x45\x27\xa2\x7a\x70\x5b\x1d\x5a\xb9\xab\xba\xb8\xa2\x76\x75\x02\x15\x63\x67\x12\x98\xa4\x0b\xf1\xd5\xaf\x34\x89\xd4\x83\x62\x3e\xab\x94\xa6\xd5\x36\x2f\x35\x90\xdc\x43\xf0\x8c\xf2\x41\x6b\xe6\x2d\x49\x73\x79\xb9\x68\x72\x76\xbe\xf3\xeb\x08\x02\xce\x8e\x54\xbf\xae\xcc\x2e\x92\x1d\xab\xa7\xcb\x48\x66\x9c\xc0\xa3\x13\xfd\x7b\xf4\x5e\x70\x8a\xbd\x3d\x32\x8a\x12\xba\x90\x34\x2d\x7c\x57\x5b\x3f\x8c\xd1\x25\x60\x70\x6f\x0f\xf5\xff\x52\xb1\x94\xbd\x3d\x9a\xff\xf6\xc6\x71\xd3\x49\xa8\x5c\x20\x78\xf2\xd3\xb5\xcc\x85\x92\x65\x02\xd1\x13\xbc\xd6\xc7\x31\xce\x58\xf6\x4d\x9a\x9c\xdb\x93\xc1\xb0\x64\x24\xa3\xde\x34\x9a\x8d\xb6\x2e\x91\xd9\x19\xb2\xa3\xaf\x6a\x59\x74\xdc\xaf\x06\x29\x7d\x91\x63\xb2\x2e\xc9\x9e\x17\x58\xa6\x6b\x7c\x92\xe7\x80\x2e\x4a\xdf\xf0\xdd\xf7\x5a\x44\xba\x64\x6b\xad\xf6\xab\x72\x5a\xd6\x67\x36\x6f\x35\x70\x94\x0b\x32\x5f\x82\xb6\x34\x39\x3a\x6c\xbf\xa7\xef\xdf\xbd\xf1\xf9\xbb\x0c\x3f\x9f\x7a\x09\xaa\xbe\x58\xa6\x8e\x67\x39\x3f\xb4\x15\x3c\x01\xed\x7f\xd7\xfb\xef\x15\x83\xa1\x08\x55\xa3\x59\xe4\xdd\xad\x3b\x08\xde\x7e\x06\x84\x92\x92\x88\xc4\xa9\x92\x48\x45\x62\x88\xf0\xca\x17\x32\xb9\x6a\x16\x87\x64\xbc\x3b\xf2\x43\xd4\x49\xe1\x79\x07\x2e\x8f\x79\xb3\x6a\xe5\x8c\x3a\x1b\x52\x3b\xbb\x4c\x2a\xaa\xf4\x44\xb0\x6f\xa5\x97\x64\xad\x51\xf3\x7d\x90\xd0\x6a\x65\xf3\xb1\xea\xed\x2f\x31\x84\x35\xfa\xe8\x5c\xc6\x8e\x16\x63\x4b\x7a\x6f\x6d\x0c\xc8\xaa\x9a\xfe\xe3\xe2\xf4\x7d\x74\x89\x7c\x19\x64\xd0\x59\x01\x57\xbf\x2e\x79\x6a\x5a\x67\x59\xe4\x32\xd4\x2c\x0a\x6f\xc4\x50\x64\xcb\x38\xd6\x53\xd2\xb8\x2a\x86\x67\x5e\x97\x95\x91\x0b\x60\x65\x95\x10\x6c\x2f\xa1\x8c\x70\x5e\x6b\x6f\x42\x0f\xfe\xe0\xd8\x7a\x47\x8e\xad\x52\x16\xb9\x9f\xee\xac\x39\x41\x52\x58\x90\x82\x7b\xe0\xd3\x7a\xc4\x81\xd8\x8a\x9f\xd7\x51\x10\x58\x03\xbb\x22\x89\x02\x2d\x27\x3e\x30\x36\x9c\xb3\x86\x47\x98\x54\x02\x28\x29\x7d\xbb\x2e\x7b\xa5\xd5\x54\x8a\x80\x3b\x5f\xd0\x5f\x48\x1c\x6c\xcd\xbb\x52\xcc\x31\xbf\xaa\x79\x79\x7b\x8b\x6b\xaa\x11\xdc\xe4\xe8\x97\x3f\xab\x72\x5a\x83\x5b\xf6\xc8\x2a\xd3\x47\xaa\xe1\xb9\x0f\xbe\x59\xef\x21\x89\x82\x2d\xfa\x66\xa5\xb7\xc9\x02\xb1\x14\x2f\x61\x2b\xd1\x4b\x77\x92\xc9\x70\xde\x73\x0f\x6c\x60\xbd\xb5\x12\xee\x7e\x2c\x37\x07\x66\x8b\xcb\xad\x26\x5b\x58\xed\xc2\xbd\x7a\xcb\x8b\x9d\x22\x7c\xfb\x2e\x7c\xf9\x57\xdf\x69\xc1\x56\x9c\x6c\x71\x76\x75\x15\xf2\xa4\x7b\x66\x3f\x3e\x38\x30\xef\xab\xb7\x2e\x16\x65\x19\x90\x9a\x18\x67\xe6\x3c\xd7\x47\xb2\xef\x2a\x4d\xd9\x15\x19\x75\xda\x46\xac\xca\xa3\xf4\xc4\x7d\x2c\x68\x5c\x65\xe6\x3a\x58\x39\x51\xce\xa6\x77\xbc\x06\xcd\x4c\xdf\xb3\x72\xe5\xf1\x9e\x5b\x5f\xe6\x79\x12\x57\xa7\xc6\x10\x99\x05\xf4\x2e\xa6\xe4\x73\x8e\x11\xf0\xbe\xd3\xac\x58\x72\x0a\xd3\xf9\xac\x94\x09\xab\xbd\x5c\x79\x67\x86\x71\x98\x0e\x54\xcc\xa3\x75\xe0\xda\x19\x0b\x29\xac\x74\x2f\x96\xd1\x83\x71\xe4\xd7\x6d\xd5\x94\x3f\x8f\x9b\xb2\x10\x75\xb8\xef\xad\xb5\xdb\x60\x18\xb1\xa5\xb1\xdd\xde\x12\x2b\x73\xab\xed\x78\xd1\x6c\x62\x81\xe5\x87\xdb\xf6\x56\x36\xc6\xed\x9f\x36\x89\x37\xca\xd4\x05\x99\xaf\xa0\x62\x8b\x5a\x45\x90\xbd\x08\x21\xa5\x60\x2e\x5e\xb1\x38\x81\xdd\x52\x22\xc9\x6b\x8c\xf2\xdd\xcb\xa7\x43\xca\x6e\x38\x05\xe7\xe6\x82\xb5\x21\x05\xa5\xc1\x6f\xb9\xc3\x05\x5c\x7b\xb5\x88\x87\x0c\x4c\x55\xfa\x2e\x5b\xea\x2d\xf9\xc3\x98\x48\xfc\x20\x10\x90\xb9\x7e\x88\x7c\x2e\x23\x17\x2c\xbc\x7d\x2f\xef\xe2\xab\xa1\xec\xd8\x92\x3f\x82\x79\x71\x58\x23\x49\x53\xdf\xa3\x4c\x76\xd9\xac\x5a\xe8\xd6\x07\xa7\x1a\xa9\x1b\xd0\xbb\x04\x5e\x59\x27\x4d\xc5\xc3\xba\xf5\x2b\x6a\x88\x76\xbb\xdb\xcd\x48\x1c\x6a\x76\x4e\x30\x4d\xa6\x21\x62\x76\x63\x89\x29\xe5\xef\x61\xe7\xe5\xb6\x95\x44\x36\x3e\xf8\x70\x1e\x93\x24\x6a\x83\x36\xd7\x53\x26\x3b\x1c\x8a\x3e\x38\x2f\xcf\xbb\x14\x18\x18\x55\x3f\x3b\xb2\x66\xb5\x91\x10\x8e\x12\x63\xf3\xb0\x65\x04\x6d\x45\x9d\x1a\x76\x91\x34\x70\xa1\xbd\xdf\x85\xe5\x42\x08\x56\xa2\x6e\x5c\x09\x20\x35\x57\xe5\x34\x66\x85\x24\xa1\x90\xc5\x20\xd2\x9a\x57\x4b\xb6\x52\x5b\x32\xf5\xd3\xa8\xde\x7d\x8d\xc8\xa1\xa1\x54\xe2\x94\x11\xcd\x21\xb3\xf8\x7f\x86\x61\x22\x8f\xff\x34\xfe\x6d\x01\x62\xe0\x71\xae\x69\x01\xec\x5b\x38\x11\x39\x48\x2d\x82\x83\x65\x17\xdc\x35\xc8\xa2\xb7\x43\x07\x69\xf4\x0d\xf5\x62\x14\x75\x0a\xc0\x29\x2d\xb9\x70\xec\x19\x16\x16\x5e\xac\xb8\x5a\x7d\xb9\xc4\x75\x04\x00\x12\x46\x3c\x12\x46\x32\xbe\x28\xcd\x76\xa9\xd8\xbf\x24\x0a\x63\x75\x9f\xab\x44\x78\x39\xb2\x48\x89\xc1\x37\x26\xe2\xda\x64\x36\xab\x50\x01\xdf\xeb\x95\x78\xe5\xf5\x5a\x82\x6a\x58\x12\x24\xd4\xf1\xc3\x08\x79\x17\x39\x2e\xd9\x49\xe0\x2b\xa7\xd4\xec\x76\x01\x48\xed\xab\xfd\x94\x33\x35\x78\xa9\xce\x84\xda\x2e\xc8\xa7\x7e\x57\x4a\x8a\xff\x56\xa6\x1f\x59\x5b\x82\xaf\xa2\x7c\x79\x51\x14\xa8\x16\xd9\x1d\xf3\xe6\x8f\x73\xc9\xff\x25\x00\x9d\x99\x51\x6e\x9c\x06\x79\x97\xc9\x6b\x80\x31\x42\x8b\x74\xf8\x6d\x4b\x6a\xcd\xfa\xad\xb0\x7a\xb3\xfb\xb2\xab\x5e\x57\xdc\x99\x7b\xef\x02\x33\x0b\xef\x6a\x3b\xab\x86\xa8\x45\x97\x16\x26\x18\xb6\x93\xb6\x9a\x89\x91\xd0\xb9\x99\xa8\xdf\x12\x0c\xdb\x28\x29\xf5\x46\xac\x56\xc7\xf6\xba\xe5\xb7\x6e\xf1\x2e\xa8\xe8\x8e\x85\x5c\x22\xdb\x66\x84\x14\xae\xc6\x87\xe2\x6a\x6c\x5c\x8c\xf9\x7b\x75\xf7\x28\x64\xb9\xed\xc7\x22\xb2\x1b\x6f\x39\x51\x6e\xb7\x4e\x3a\xae\x57\x7e\xee\x6d\xdb\xbf\x2d\xb3\xee\x57\xb4\xa9\x33\xe1\x55\xb8\xcc\x2a\x69\x51\x27\xc6\x36\xa5\x33\xfe\xba\xcb\xb5\xa0\x9e\xb9\x53\xa5\x58\xc8\xc9\x35\xe9\xd5\xd7\x8e\x62\x12\x46\xc2\x48\xe5\x69\x99\x43\x08\x1f\x7f\xe7\x22\xcf\x7b\x20\xe2\x16\xe4\x13\xb1\x68\xea\x89\xec\x54\x09\x5b\xd5\x93\x30\x45\x1e\x71\xb7\x54\x1f\xa9\x0a\xc9\x8d\x45\x6f\x0b\x6e\xed\x19\xa3\x10\xc0\x9b\xf2\xb2\xe9\x72\xbc\xae\xc4\x2c\x3a\x87\x21\x40\xc1\xcf\x30\x88\xfa\xca\xd1\x24\x5a\x5a\x59\xa6\x35\xcb\x4c\xd1\x96\x96\x34\xa6\xd6\x2c\x26\xa1\x05\x3f\x23\xca\x10\x9e\x37\x17\x8b\xee\x4c\x8d\x21\x88\xe7\x08\x0f\x19\x89\x86\x87\x07\x76\x59\x43\x66\x97\x74\xab\x3a\xd6\x62\x55\x2e\x68\x9b\x39\xc9\x3c\xad\xc6\xcb\x14\x0e\x19\xf7\x4a\x9d\x24\x0c\x47\xf7\xf3\xaa\xcc\xdc\x25\x14\xb6\x47\xac\x6d\x1a\x40\xc3\xc3\xbe\x11\xc4\x42\xe4\xd9\xed\x02\x99\x25\x46\x6e\x02\x31\x57\x22\x63\xd5\xd4\xe6\xf5\x7c\xb6\x95\x64\xdb\x75\x18\xab\x6b\x38\x66\x84\xb0\x76\xc9\xa5\xc4\x07\x8b\x5e\x57\xa9\xbb\x95\xf2\x23\xd3\x6e\x57\x3e\xa2\x7c\x75\xed\x4a\x07\x9f\xcc\x77\x07\x2c\xb5\x7e\xae\xc1\xb3\x4a\x57\xef\xae\x57\xe4\xd5\x81\xfd\x38\x0f\xf6\x70\x0e\xa2\x92\xc3\xd4\x06\x27\xdd\xe8\x6b\x56\x72\x58\x6a\x99\x75\x5a\x3f\xa5\xbb\x22\xa9\x93\x33\x59\xbd\x0f\xcd\xb6\x12\x5d\x6c\x2d\xa8\x73\xc5\x60\xce\xdf\x92\x30\x62\xe4\xab\x2a\x87\xae\x40\xfe\x9a\xc3\x2b\x02\x84\x2f\x1a\x02\x19\x10\xbe\xb0\x1d\x97\xcf\xf3\x94\xbc\x46\xf8\x62\x6c\xdb\x66\x54\xc3\x38\x05\x59\x96\x15\x54\x05\x46\x8d\x0c\xe2\x12\x45\xb6\x33\xe2\x7f\xfc\x8a\xfc\x9d\xe6\x9a\xae\x2c\x17\xcd\xa4\x80\xd3\xb5\x5c\x39\x00\x1f\xe3\x60\x00\x8b\xa1\x4f\xc2\x81\x3c\x03\x52\x44\x1e\xb1\x81\x99\xe0\xbb\x06\xd0\x79\xe1\x43\x67\xe7\x0a\x61\x9f\x5c\x8d\x02\xe2\x09\xdf\xe8\xd1\x22\x86\xb3\x09\xec\xea\x38\xae\x08\xe2\x9e\xf8\x8d\x3f\xfa\x8f\xf8\xe4\xd1\x77\x87\xdf\x75\x0a\x48\x5e\x65\xbf\x17\xa6\xdb\x6b\xbb\xa7\xe9\xbf\xbf\xaa\x1d\x9f\x41\xfd\x35\x6f\xfa\x7c\x5c\x52\x16\x48\x61\xee\x12\x33\x8a\x67\x34\x1a\x81\x78\x2e\x85\x2e\x15\x83\xa4\xc2\x2c\xd2\x20\x8b\x5f\x10\x5b\x90\x84\x9d\x24\xb3\x19\xfa\x3c\xb0\x8f\xae\x5c\xeb\x04\x83\x68\xb7\x7b\xd0\x45\x86\xda\x7b\xb2\x7d\xd0\xfc\x9f\xcf\x3f\xfc\xf6\xd7\xcb\x6e\xf1\xfc\x35\xb6\xf8\x34\xc9\x7d\x51\xa4\x53\x92\xe0\xc2\xcc\x88\xfc\x8e\x44\x74\xd7\x3a\x5d\x00\x66\x45\x60\x0e\x2d\x8f\x24\x81\x8f\x3f\x7d\xc3\xac\x29\xb4\x44\x37\xa3\xaa\x43\x5e\x74\x64\xde\xd6\xdf\x80\xe5\x14\x5a\x6c\xc1\x7b\x90\x19\x00\x97\x24\xf9\xf4\x4d\x0c\xad\x80\x90\x0b\x7e\x39\x9b\x91\xd8\x42\xd4\xc2\xc4\x0a\x08\x9e\xc3\xd8\x02\x97\x00\x05\x60\x1a\xc0\xa7\x9d\x46\xf8\xbf\xff\xa7\xb6\x19\xd0\x38\xe0\xac\xd3\x76\xed\x7d\xe3\xb3\x0f\x2a\x5d\x39\xb1\x9e\xab\xb5\xb7\x16\x24\x84\x62\xb6\x76\xf9\x62\x57\xfc\xb9\x85\x94\x09\x65\xaa\xeb\xc5\xc5\xa2\x98\xcc\x50\x00\xef\x07\x0f\x4b\x68\x5b\x24\x64\x22\x22\xa3\x9a\xeb\x8a\x38\x59\x48\x3f\x05\x97\x22\xfe\x9d\x9f\x98\x6c\x02\x47\x11\xa0\xf4\x8a\xc4\xbe\x8b\x27\x70\xe4\x11\x3c\x43\x71\x28\x8e\xc9\x9d\x52\x1e\x7a\x03\x16\xdb\x19\x89\x8e\xb2\xcc\xec\xea\xfc\x1e\x38\x93\x9f\xae\x15\x0c\xf4\x7d\x0c\x29\xc4\x6c\xc0\x9c\xbd\xbd\xe2\x33\xec\xec\xed\xd5\x75\x2d\xeb\x31\xbf\x57\x90\x0d\x8a\x91\xc4\x32\xda\x3a\x0b\xb8\x86\xc1\x48\x66\x4b\x63\xf0\x15\x46\x0c\x81\x80\x0e\xcc\x50\x6b\xed\xd2\xea\x48\xa1\x42\x20\xcc\xf8\xb8\x2d\x7a\x5a\x96\x5c\xee\x4b\x3d\x5f\xf3\x59\xd2\x99\xe8\x7a\x45\xea\xb6\x50\x68\x8d\x08\x5a\x5a\xc6\x51\xde\x2f\xd9\xf9\xf2\xa5\x22\x80\x96\xb7\x19\x05\x64\x8e\xb0\x5d\x25\x2e\xb6\x90\xf6\x1c\xb2\x8f\x34\x57\xd7\x46\x8f\x5d\x09\xc3\x88\x7f\x2d\xa8\x32\x57\x99\x7b\x6c\x32\x8a\x0e\x07\xac\x8a\x31\x9d\x25\x41\xa0\x4a\x37\xf4\x0c\xc6\x55\x11\x02\xd9\x83\xb4\xdc\x4e\x75\x74\xf0\xc8\x33\xd3\x08\xf0\xf1\x3a\x1e\xeb\x9a\xc6\xef\xc9\xa1\x7e\xb8\x0c\xe2\xd3\x9f\x5f\xf9\x77\x5b\x3f\xc1\x54\xcf\xdb\x0f\x21\x47\x1d\x7d\x6b\xdf\x7f\x78\xf7\xf2\xd5\xeb\x17\x2d\xfa\x92\x9a\xbe\xe0\xe7\x66\x9f\xa6\x13\x28\xa4\xa4\xd8\xd2\xce\xcd\x16\xc2\x33\xa2\xce\x37\x8b\xc4\x16\x3f\x8b\x74\x13\x75\xda\x8c\x3a\xaa\x6b\xd6\x83\xec\x67\x70\x09\x2d\x60\x45\x32\xc3\x9e\x85\x7c\x08\x5c\x8b\x26\xf3\x39\xa4\x1a\x36\xca\x85\xa8\x19\x84\xfe\x14\x78\x17\x4f\xad\x1a\x49\x2c\x04\x28\x60\x64\x4c\x93\x88\x6f\xbf\x7f\xd7\xfb\x74\xe4\x91\xd0\x00\xe0\x2f\x90\x59\x88\xcb\x68\x89\xb7\xa8\x10\x37\x6f\x45\x37\x75\xa7\x3e\x8d\x99\x7b\x40\x3e\xc6\x45\xca\x02\x19\xcf\xe5\x13\x78\x23\x0a\x3b\x28\xaa\x90\x9c\x4e\xb8\x1a\x69\x0a\xe9\x14\x28\xd0\xc9\x07\x92\x8f\xbe\xcf\xff\x33\x54\xe3\x64\xf0\xa7\xd1\x5e\xe0\xb2\x94\x4b\xae\x49\x57\xa9\xda\xd7\x6b\x29\x6f\x5b\x7f\x58\x3c\x2b\x7a\x89\xe2\x14\x82\xd8\x5b\xdc\x0f\x49\xbc\x57\xad\xad\x99\x2e\x52\x1e\x02\xe6\x2d\x9e\x13\x4f\xff\x79\x9c\x1a\x32\xc5\xcf\x53\x30\xd7\x7f\xbe\x14\xeb\x6f\x53\xe9\x62\x2a\x3b\x18\xdb\xb6\xab\x7b\x18\xef\x1e\xb8\x66\x17\xe9\xef\x53\x30\x4f\xff\xe6\x9d\xf0\x1f\xbc\x97\xf1\xee\x61\x3f\x34\x7f\xcd\x22\xab\x9e\x3d\x47\x9a\xd8\x43\xa6\x3e\x24\xbd\xee\x5c\x67\xc8\xdc\xfd\x75\x84\xe8\x47\x2c\xc1\xf2\x07\x70\xc4\xc8\xc8\x58\xc3\x91\x6e\xe9\x7c\xf9\x62\xb3\x38\x81\xf6\x64\x52\xdb\xa6\xb0\x2e\x9d\xba\x56\xad\x5b\xbb\x57\xed\x8c\xa5\xee\xd4\xfd\x29\x98\xb7\x76\x7d\x0a\xe6\x26\xd5\x74\xea\x97\x37\x6d\xed\x98\x37\x52\x24\xd8\xd2\x27\x6f\xe4\xec\xed\xe9\xee\xca\xfd\xf1\x06\x66\x5e\x30\x63\x9d\xb9\xa4\x5b\x92\x90\xc7\x79\xe2\xeb\x2c\x2a\xe7\xfb\xcd\x2e\x9c\xc6\xe3\x7e\xe9\x49\xc4\x96\xea\xae\x29\x53\x5b\xf0\x9e\x48\xd4\x97\x9f\xff\xf3\xc3\x9b\x8f\x7f\xef\x98\xf6\x72\xb5\x3c\x24\x12\x41\x0f\x82\xf6\x2d\x09\xda\x6f\x38\x25\x5b\x2f\x6f\x2f\xc2\xdf\xf8\x14\xa9\x45\xef\x68\xff\x6e\x70\x6c\x16\x5e\x07\xd2\xc5\x40\x51\xd0\xf0\x50\x3f\x16\xce\x08\x4a\x4e\x32\x77\x73\x76\x06\x77\x73\xb8\xa9\x77\x7e\x4a\x47\x6c\x0e\xe7\xd4\x2e\x0f\x16\x6e\x75\xe8\x5f\xd5\xb3\x60\xab\x18\xfd\xb6\x1b\x46\xd3\x8a\x22\x9b\xc1\xea\xb7\x5d\xb1\xea\x75\xa9\x64\x72\x2f\x11\xfb\xb8\x1b\x62\xb9\x50\xb8\x21\xa4\x3e\x6e\x41\xea\x29\x98\x7f\xad\x54\xfa\xa4\x1b\x32\x85\x58\xbd\x21\x6c\x3e\x69\xc1\xe6\x11\x63\xc0\x5b\xac\xbf\xf5\x7b\x5d\xc3\xbb\x46\x51\x7f\x5b\x8c\xa2\xbe\xcd\xd3\x47\x88\x74\x16\xfc\x0c\xf8\x45\xa2\xa9\x6a\x55\x7d\x97\x97\x08\x5e\x0d\xb5\xd4\xd0\x98\xe3\xab\xb2\xd2\x01\x95\xa9\x17\xdf\xc7\x44\x65\x73\xaa\x4a\x75\x74\xc2\x48\x9c\x35\x71\xed\x37\xcb\x93\xff\x78\xbd\x91\x72\x55\x26\x5a\x97\x98\x81\xcf\x6d\xfb\xa2\x39\x62\x55\x22\xd2\xe8\x03\x44\x51\x00\xad\x29\xc0\x00\xb7\x54\x41\x6c\xef\x3b\x0a\x00\x32\x57\xfd\x64\x41\xae\xac\x18\xd2\x24\x60\xd4\x62\x0b\x20\x59\x30\x40\xd8\x02\xcc\x0a\x20\xa0\xcc\x22\x18\x5a\x64\x26\xcc\x93\xec\x8a\x58\x57\x24\xf6\x5b\x6a\x93\xf5\x9f\xe2\x23\x39\xc7\x47\xb7\x3d\xc9\x29\x61\x8b\xad\xce\x28\x04\x1e\xc2\x8c\xc8\x72\x34\xb7\x33\x27\xbe\x50\x7c\x4a\xd6\xa7\x4f\x92\x74\x3e\x7d\xb2\x5d\x6b\x9a\x30\x2b\x06\xf8\xc2\xe2\x17\x1a\x6b\x81\xe6\x0b\x18\x5b\x48\x2c\xeb\xd2\x02\x01\x25\xe9\xf7\x9f\x3e\xd9\x29\xd4\x9f\x3e\xd9\x5b\x42\xcc\xf0\x9e\x60\x46\x20\x06\x13\x76\x4b\xd3\x7e\x34\xf8\x89\x25\x31\x26\x97\x30\xb6\xfe\x4c\x59\x9c\xf8\x30\xe8\x14\xb3\xbf\x59\x0c\xd0\x1c\x0a\x00\x16\x28\xd1\x80\x09\x7a\x21\x71\x55\x13\x05\x31\x7f\x32\xe0\x3c\x02\x2f\x2d\x91\xe1\xd0\x31\x08\x4c\x7f\x66\x19\xfd\x69\x82\x63\x0b\x80\xb3\x06\x59\x6f\x9b\xc6\xb6\xe8\xff\x7f\xde\x1e\x5e\x25\x4e\x69\xe2\x2d\x2c\x40\xf3\x1b\x4f\xff\xa0\xf9\x5f\x20\xf1\x60\x11\xd1\x6c\x0b\x98\xe0\x8b\x46\x42\xb5\xea\x1b\xe8\xbf\x1f\xad\xc1\xcf\xc0\x63\x56\xb4\x88\x01\x85\x56\x11\x14\x6b\x30\x23\xb1\x16\x1c\x5c\xc9\x98\x72\x3d\xe4\x3e\xe0\x67\xd0\x15\xa2\x3e\x09\x0b\xbb\x56\x34\xc1\x04\xd1\xac\xe7\x6e\x89\x73\x7a\x97\x37\xdc\xa8\xfc\xf1\x9e\x50\x36\x8f\xe1\xd7\x25\x84\x7c\xb9\x0b\x31\x04\x22\xc6\x79\x87\xb0\xcf\x6c\x83\x4f\x58\x7b\xb7\x3e\xab\xed\xc9\x1d\x72\x46\xbb\xff\x62\xa7\xeb\x9c\x90\xb9\x58\xc8\x81\xa6\xd3\x10\x79\x31\xa1\x64\xc6\x1c\x6b\xcf\xda\x45\xd3\x70\xfb\x88\x58\x80\x4b\xc1\xe4\x24\x30\x82\xb9\x2b\xd2\x35\x31\x22\xf9\x7d\x0a\x5e\x01\x49\x68\x1a\x76\x41\xcf\xdd\xb3\xaf\x93\xff\x78\x7d\x02\xe3\x4b\xa3\x9e\x6b\x0d\xf7\xfa\xa3\x54\x09\x35\xc6\x5d\xdd\x46\xad\x6d\x07\xae\xfd\x12\x61\xdf\xca\x46\xaf\x4f\xdf\xab\x55\xe9\xdd\x32\xef\x48\x53\x83\xd2\x69\x5c\x8a\xc4\xfc\x1a\xa4\x59\x51\x77\xa2\xb4\xc5\x72\x6c\x9d\x1f\xf6\xbc\x42\xdd\x52\xa3\x62\xb9\x6d\x73\x73\xc1\x8e\xd2\xd3\xda\xcc\x92\xa8\xb6\x58\x56\xda\x36\x61\x28\xa0\xfb\x10\x7b\x44\x2c\xe7\x76\xed\x9d\x55\x86\xe8\xdf\xc0\xe7\x6e\x6e\x9e\x15\x8e\x6e\xfc\x63\x51\xc5\xe6\x9f\x09\xa4\x6c\x60\xcb\x49\xdb\xee\x75\x08\xd9\x82\xf8\x63\xfb\xfd\xbb\x93\x53\xdb\xf5\x01\x03\xe3\xcc\x45\x52\xfc\x3e\x5d\x46\x70\x2c\x5d\x5b\x6e\x4c\x6f\x4f\x15\x7b\xa1\x67\x31\x7a\x06\x28\xfc\xfe\xc9\x48\x20\x08\x0e\xec\xb1\xfd\xc8\x70\xd4\x14\xe1\xaa\x8f\x0a\x0f\xb5\x67\x45\x4d\xa8\x86\x2d\xac\xcd\xfb\x94\x92\x7d\xfb\x91\xec\xf6\xe3\x87\x57\xc7\x24\x8c\x08\x86\x98\x0d\xa0\xf3\xc8\x7e\x3a\x8b\x27\x87\x1c\x2e\x8f\xd3\xa4\x04\xac\xe4\xb5\xd9\x64\x7e\xe3\x4b\x5f\x61\x00\x57\x25\xd2\x6e\xd1\xa8\x5d\xf0\xe4\x97\xd8\xd5\xf1\x91\x23\xce\x44\xa4\x81\x54\x86\x1a\x93\x78\x60\x9f\x45\x0a\x80\x89\x3f\x5d\x00\xba\x38\xb7\x9d\x91\xe2\x1a\x3b\x07\xbb\x93\x09\x54\xd5\x22\xf6\xf6\xec\xeb\xeb\xd1\xf3\x67\xbc\xcd\xcd\x8d\xcd\xdf\x74\x75\x9e\x5c\x1f\x10\x49\x89\xd7\xfe\x54\xd4\xa0\xea\xdc\x0d\x6f\x6d\x74\xe3\xca\x8e\xc7\xd0\x15\xcc\x53\xf8\x47\xc8\xec\x63\x63\xfb\x74\x81\x68\xe6\x83\x8e\x04\x9b\xf4\xa0\x16\x3d\xa8\x05\x82\xc0\x22\x49\x6c\x31\x08\xc2\x34\xe0\x54\x59\x29\x41\x10\x90\xab\x23\x4c\xf0\x32\x24\x09\x3d\xf2\x3c\x48\xe9\x78\xf7\xd0\x9d\xa1\x98\x32\xac\xca\xa2\x05\x20\xfb\x5b\xd0\x31\xff\x43\xd3\xee\x18\x6a\xe3\x30\x22\xf8\x6f\x70\x29\x1a\xc9\x62\xa9\x5d\x67\xab\x9a\x1b\xd3\xbd\xc9\x59\x9c\x0b\xb5\xa9\x44\xe6\x2c\xb3\xf8\xd7\x14\x78\x17\xf3\x98\x24\xd8\x97\xb9\x0c\x87\x6c\x01\x43\x38\x3c\x3c\x38\xb0\x1d\x37\x85\x41\x20\x6e\x62\xff\x02\x03\x8f\x5f\x8a\x18\x11\x42\x59\x1e\x6f\x82\xfb\xdd\xb8\x3e\x6c\x1d\x3d\x57\x0e\xab\x09\x80\x7e\x3b\xf1\x9e\xd8\xc1\xff\xe6\x3f\xa6\x7f\xfb\xec\x7d\xee\x5e\xfe\x51\x9c\xaf\x7c\x06\x7a\x56\x43\xc5\x60\xb7\xeb\xd8\xb5\xea\x61\x69\xe2\xba\xd7\x59\xc9\x57\x16\xe1\x79\xfb\x69\xa9\xfc\x85\x30\x61\x68\x86\x64\x15\x85\x5b\x3d\x2e\xcd\xb2\x53\x46\x59\xc3\x44\x6c\x71\xed\xc6\x21\xa0\x5b\xea\x87\xf6\x09\xb8\x84\xbe\xac\x58\xf8\x0a\xcf\x48\xbe\x95\x78\x62\xff\x42\xe2\x0b\x7e\xfa\x8b\x46\xbf\x80\x18\xe7\x1b\x89\x27\xf6\x4b\x80\x02\xe8\xf3\x2d\x36\x87\x4c\x36\x7d\x11\xc7\x24\xce\xb7\x95\x8f\xec\x8f\x18\x4c\x03\xb1\x1f\xf9\x52\x5b\xde\x02\xe0\xb9\x28\x70\xe3\x12\xfc\x4c\x84\x45\x8b\x90\x67\x4e\xfb\x5c\x06\x24\x01\xe4\x3c\x7a\x20\x2b\x1b\x9e\x4a\x37\x89\xba\x16\x5d\x37\x9f\x5e\xd5\xd2\x41\xb8\xcd\xbd\x97\x3f\xfd\x7a\xd2\xdf\x3d\x61\x14\xe4\xb5\xf7\xe8\x1f\xfb\x7f\xfd\x7b\x37\x46\xf1\xa4\xe8\xe5\x92\x7a\x9c\x08\x2e\xd1\xa0\xdf\x51\xb9\x85\xfe\xe4\xda\xd3\x34\xa3\x40\xfe\x8a\xc3\xae\x48\x5b\x8b\x45\x0c\x61\x6d\x14\xd8\xb3\x18\xe1\xb9\x3e\x15\x98\x20\xc9\x2b\x84\x87\x57\x08\x5b\x34\x89\x2f\xd1\x25\x08\x2c\xca\x62\xc0\xe0\x1c\x41\xca\x1b\x42\x4c\x93\x18\x5a\x51\x4c\xc4\x69\x01\x2d\x9f\x84\x08\x4b\xf9\xcd\x3a\x62\x52\xc7\x87\x7d\x6d\x1f\xf2\xc1\xd2\xb5\xe6\x44\x45\xac\x5d\x81\xd8\x77\x2d\x20\x62\x87\x31\x89\x43\x10\xe8\x7b\x32\xb5\xe0\x25\x09\x2e\xa1\x2f\x73\x90\xa8\x08\x1f\x44\xb0\xf5\x9f\x16\xa2\x16\x91\xca\x84\x38\xc1\x57\x60\x69\xa9\xbb\x95\xc5\x08\xef\x90\x5a\x80\xc3\x08\x41\x18\x20\x0c\x7d\xcb\x0b\x48\xe2\x5b\x94\x04\x89\x04\xea\x23\x85\xb1\xee\x10\xa6\x37\x2c\x0b\x61\x2b\x86\x20\x18\x32\x14\xf2\x49\x07\x81\xbc\xad\x87\x49\xc0\x90\xd0\x55\x93\xc4\x5b\x44\x04\x89\xbc\x28\x24\xb6\xc8\x6c\x46\x17\x84\xe3\xab\x5b\x08\xdf\x03\x6a\x37\x80\xda\x16\x35\x46\x7e\x5f\xa5\x77\xe7\xb6\x7d\x65\xb7\x25\xa2\x10\x92\x8c\x5f\x9d\x81\xa2\x25\xbd\xc4\x89\x38\xb9\x1b\xf3\x4b\x18\xfc\xdd\x76\x0f\x9b\xdd\xb7\x7b\xe5\xdb\xe8\x31\xaf\xfa\x0c\x1b\x62\x7e\x2d\x93\xfc\x28\x42\xf6\xfa\x4c\xf3\xdb\x0d\x4f\xb3\x81\xe3\x75\x78\xdd\x2d\x0b\xc9\x4a\xd9\x47\xd6\xa2\x0c\x25\x93\xb4\xb8\xf4\x6f\x96\x26\x56\x9a\xee\x3f\x20\xbf\x42\x35\xcf\xb7\x13\x91\x70\xf9\xea\xfe\x4f\x57\x27\xd4\xe9\x92\x4b\xa7\x61\xb2\x5c\x4e\xbc\xff\x93\xfd\xa0\x4a\x80\xd4\xce\xf5\x39\x94\xb9\x64\x1b\xe7\x2a\xe4\xdc\x4d\x4f\xf6\x36\x76\xfd\x36\x73\x0f\xdd\x77\x16\xb0\xca\xdc\x33\x56\xb0\x89\x43\xe3\xee\xf8\xc1\x6a\xeb\xde\x33\xd1\xd6\xbd\x64\x0e\xab\xcc\x5c\x31\x89\x96\x89\xff\x4b\x70\x8a\x5c\xd9\xd6\x0d\x31\x8c\xd6\x02\x9a\x5f\x19\x47\x59\x05\x47\xad\x8c\xa5\x53\x3d\xcb\xaf\x8b\xfb\xac\x46\x4b\x8d\x4c\x48\x93\x52\x8c\x64\x69\x98\xaf\x9d\x4d\xad\x82\xa2\x66\x6e\xa5\x30\x64\x32\xab\x3f\x0c\x43\xb3\xcd\x2c\x9e\xb7\x5a\xac\x38\xb5\xe5\x97\x56\xb8\x53\x49\xdb\x2e\xf5\x85\x9b\x56\xac\x24\xcd\xd6\x2e\x97\xa9\x4d\x6d\xb9\x8f\x6f\x75\x36\x0d\x3b\xb4\xea\xda\xd5\x71\x3e\x8d\x17\xef\xde\xf3\xe9\x32\x8f\x3c\x3f\xee\x08\xe6\xe3\xfb\x8c\x76\xe3\x72\xdf\x71\x3a\x4f\x6e\x1d\xeb\x69\x32\x82\xee\x40\x7e\x77\x77\x38\xef\x53\x18\x7c\xed\xd9\xb4\xe7\x10\xbe\x47\x0c\x36\x53\xbf\x65\xbf\x1f\xb8\xeb\x03\x77\x7d\xe0\xae\x0f\xdc\xf5\x81\xbb\xae\xce\x5d\x0b\x2c\xf5\x81\xbb\x3e\x70\xd7\x07\xee\xfa\xc0\x5d\x1f\xb8\xeb\x96\x94\x03\x19\x93\x7d\xe0\xaf\x0f\xfc\xf5\x81\xbf\x3e\xf0\xd7\x07\xfe\xba\x39\xdd\x40\xfa\x9f\x07\xe6\xfa\xc0\x5c\x1f\x98\xeb\x03\x73\x7d\x60\xae\x9b\x53\x0d\x3c\x30\xd7\x07\xe6\xfa\xc0\x5c\x1f\x98\xab\x89\x73\xde\x88\xa1\x68\xf3\x6c\xd6\x7e\x0b\xaf\x3a\x14\x9d\xfd\x83\xb1\xdc\x7b\x26\xcf\xde\xee\xb1\xf8\x95\xb0\xa8\xad\x92\xd2\x43\xcc\xcc\x43\x38\xd2\x03\x6a\x1f\x50\xfb\x80\xda\x07\xd4\x3e\xa0\xf6\x01\xb5\x0f\xa8\x7d\x40\xed\x03\x6a\x1f\x50\xfb\x80\xda\x07\xd4\x3e\xa0\xf6\x01\xb5\x0f\xa8\x7d\x40\xed\x03\x6a\x1f\x50\xfb\x80\xda\xfb\x81\xda\x7a\x65\xf0\x2a\xa9\xe8\x8a\xf9\xbc\x7a\x25\xa3\x93\xf5\xe2\x69\x6d\x32\xba\x5b\x49\xe2\xd9\xbf\x64\x68\x4b\x41\x74\x0c\xaf\xa8\xae\x29\x69\xdb\x2e\xc2\x88\x0d\xf2\x15\x0d\x47\xa3\x11\x88\xe7\x22\xad\x23\x75\x76\x54\x1e\xd6\x2c\xd5\xab\x1c\x7d\x74\x09\x63\x59\xfe\xde\xc5\x15\x6f\x55\xd2\x49\xdb\x19\x31\xf2\x9a\x5c\xc1\xf8\x18\x50\x3e\x3a\x11\x6d\x5d\x3a\x79\xc4\xc9\xf6\x39\x60\x70\x27\x4b\xf1\x0a\x7e\x03\x9f\x07\xd7\x49\x1c\x8c\xed\x05\x63\x11\x1d\xef\xa7\xf9\x0e\x47\xf4\xf1\x10\x26\xc3\x2b\x48\xd9\xf0\x70\x04\x42\xf0\x3b\xc1\xe0\x8a\x8e\x3c\x12\xee\xf3\x19\xed\xdb\x23\x8f\x60\x0f\xb0\x01\x76\xed\x7d\x99\xea\x92\xff\x82\xae\x3d\x5a\xb0\x30\x78\xea\x4d\x27\xd9\x53\xea\xb8\x4c\xa4\x9d\xfd\xcb\x0b\x95\x95\x56\x66\xa1\xe5\x2d\x6d\x97\xca\x38\xf6\x5c\xa1\x75\x22\xa7\x87\xe8\x73\x48\x59\x4c\x96\xb2\x44\x7c\xf1\xa9\x48\xdd\xc7\x1f\x8b\xe2\x8f\x06\xa6\x6d\x17\x3a\x37\x37\x9d\xb3\x55\x6a\xca\xbb\xc3\x84\x79\x9d\x4b\x52\xbe\x57\xc5\xa6\xdf\xc2\x2b\x5a\xcc\xc7\xd9\xbe\xb7\xee\x49\xa2\xbd\x97\xd3\x77\xe8\x3f\xc3\x93\x1f\xef\xb6\xd6\x7b\x73\x39\xc9\xea\xec\xf0\xbf\x13\x0c\x65\xe9\xc0\x5a\xc3\x57\xdd\x57\xdf\xda\x15\x75\x1a\xea\xbf\x11\x81\xf0\x96\xcc\xc0\x3a\x8f\xc1\x72\xf8\xa7\x83\x83\xaa\x1e\x3e\x7d\x62\x69\xda\x57\x6d\x7b\xcc\x67\x7d\xd7\xcc\x21\x6f\x09\xb4\x5e\xc8\xc7\x35\x1f\x69\x7e\x53\xf8\x68\x30\x4d\x50\xe0\xd7\x7c\x13\xc3\x4b\x54\xf1\x91\xd3\x98\xcb\xbd\x27\x16\x1f\x57\xda\xaf\x9b\x13\xc2\xdb\x0f\xf5\x45\x3b\x56\x78\x3b\x7a\xf6\xee\xe3\x69\x79\x4d\xba\xf4\xd4\x56\x2c\x3f\x25\x52\x5d\x2e\x5f\xf1\x24\x0b\xc4\xd0\x8a\x61\x00\x01\x15\x12\x14\xfc\x67\x02\x31\x0b\x96\x42\x70\x99\x12\xb6\x28\x77\x25\xa5\x24\x80\x7d\x8b\xc2\x60\x36\x5c\x10\x2a\x84\xa3\x84\x32\x12\xc2\x98\xde\x66\xf1\x7f\xfc\x50\xf5\xff\xd6\x2a\x2a\xe4\x8e\x3e\xd7\x7e\xcd\xa9\x87\xa5\xe4\xc4\x8f\x7f\x41\x13\x8a\xae\x1a\x4a\x2d\x1c\x61\x4c\x12\xec\xd5\x55\x94\x6c\xdd\xb0\x6a\xc8\x21\x1f\xb2\x61\xb7\xaa\x4c\x20\xa6\x5c\x22\x73\x95\xf4\xd9\xdc\xa0\x65\x6f\x9b\x64\xf8\xd4\x3a\xc9\x91\xe1\x16\x28\x70\x77\x9b\x64\xb6\x85\x4a\x12\x45\xc1\xa7\xeb\x8d\x24\x86\x94\x5f\xe9\xe2\xaa\x42\xfa\xe9\xbb\x6d\x5d\x45\x52\x11\xbd\x4d\x7a\x15\x02\x6b\x5d\xce\x6e\x8f\xe0\x19\x9a\xef\x43\x7c\x89\x62\x82\x43\x49\x7e\x5b\x2f\x80\x90\xdd\x9b\x74\xf9\x87\x71\x76\xe3\xd0\x8f\xb8\xf8\xef\xc6\x84\xb0\x8f\x1f\x5e\x1b\xaf\xd5\x93\x1b\x67\x14\x82\x68\x90\x82\xaa\x44\x62\x31\xd9\x81\x3d\x23\x81\xcf\x89\xc3\xbd\x8e\x00\x5b\x8c\xed\x7d\xfb\xc6\x71\xcd\x06\xda\x3b\x4a\xbd\x57\x3f\x8b\x8d\x30\x08\x96\x0c\x79\x59\x3f\xd9\x93\x8a\xfe\x2e\x11\x5b\xe6\x7a\x14\x0f\x0a\x0d\x25\x64\x69\x33\xba\x3f\x96\x4f\x7e\x45\x7e\xfa\x27\x0d\x92\xb9\x7d\xe3\xd6\xcc\x8d\x6a\x4f\xaf\xb4\x0f\xfd\xa0\x30\x94\x10\x9b\xd3\x56\xe2\xd7\xfe\x58\xfc\xf3\x2b\xf2\xed\x1b\xa7\xd0\x5c\x97\x0d\x68\x87\x6d\xdf\xdf\x4f\x0b\x1d\x88\x77\xe9\x8f\x36\xc8\xf3\x58\x57\xbf\xf7\xc7\x11\x98\x43\x09\x93\xbb\xd2\x4c\xb5\x4c\x99\xb5\xcc\x9e\xf4\x58\xa8\x42\x53\x29\x2b\xa0\xdf\x61\xc5\xf8\x75\x53\x94\x6a\x98\x20\xfd\x42\xff\x2e\x74\x2d\xe4\xf6\x0c\x5a\xf5\xb3\xd0\x68\x1e\x93\x24\xca\x1a\xa9\x9f\x85\x46\x09\x35\xe9\x5c\xfe\xaa\x24\xb9\xac\x91\xfe\x5d\xc4\x76\xc8\xa2\x6c\xa6\xfc\x47\xa1\x81\x3a\xd1\xd2\x36\xfa\x77\xa1\x19\x26\x0c\x79\x19\xce\xd4\xcf\xe2\x32\x24\x6c\x91\x2d\x01\xff\x51\x6a\xe0\x23\x66\xb4\xe0\xbf\x4a\xe4\x21\x8b\x27\xa5\x8b\x23\x7e\x16\x1a\x21\xcc\xe0\x5c\x6a\xda\x32\x0c\xe4\x1e\x16\x77\x0d\xf0\x2e\x92\x0c\x11\xea\x67\xb1\x11\x0a\x02\x21\x8e\xe8\x56\xea\x77\x89\x86\x74\xcd\x9d\x94\x7e\xca\x7d\x51\xe8\x25\xb1\x49\x63\xfc\xe7\xfe\x98\x91\x0b\x58\xe2\x48\xbf\x25\x61\xc4\x48\x46\x37\x08\x5f\xec\x8f\xf9\xc3\x5f\xd9\x32\x82\xea\xcf\xf2\x46\xaa\xc0\x76\xed\x1e\xa5\x59\xf7\x94\x92\x1a\x38\x2e\xe0\xd2\x0b\x08\xc8\xb8\x4b\xfa\xa0\x48\xe8\xa2\xb6\x4c\x0a\xaf\xf8\x55\x22\xcf\x78\x4e\x98\x41\x9d\xe2\x67\x69\x87\x53\xc8\x8c\xdd\x4d\x21\xab\x01\x8d\x8b\x8b\x09\x33\x87\xe4\x3f\x8b\x38\x5f\x00\x13\xe5\xfc\xd7\xfe\x98\x73\x32\xc1\xde\xc6\x14\xc6\xa8\xbc\x69\x3d\x90\x51\x10\xff\xbb\xb4\xd8\x51\x4c\x66\x28\x80\xe6\x06\x11\xbf\x57\xa1\x5b\xe0\x79\x24\x11\x02\x69\xca\xa7\xd4\x83\x42\x43\xa5\x4e\x4d\xdb\xe9\xdf\x45\x3e\xa1\x05\x5e\xcd\x29\xd4\xef\xf2\xe6\x1d\xce\x48\x82\xfd\xec\xe8\xfc\x9f\x57\x28\xf0\x3d\x10\xcb\x23\xa3\x93\xb4\x41\xf7\x41\x14\x05\xc8\xd3\xea\x97\x92\x74\x44\x51\x18\x05\x70\x28\x8a\x3d\xa9\xb2\x21\xc6\x17\x43\xd1\xc9\x50\xbc\x28\x97\xe3\xc2\xb0\x28\xa3\xb8\x78\x53\x52\x0a\xa9\xd2\xbb\x99\x75\x45\xd6\x52\xf3\x46\x08\x63\xe8\xd7\xbd\xe5\x72\x4f\x70\x22\x8b\xef\xd5\xb5\x31\x0b\x46\xc1\x36\x0d\x31\x33\x74\xc0\x0a\xb2\x91\xfe\x97\x63\x1e\x62\xc6\x11\x4e\x62\xdb\xd9\x29\x57\x0f\x53\x0a\x1b\x67\x34\x25\x84\x0d\xe0\x88\x81\x78\x0e\x19\x17\x9f\x5d\xdb\x56\x45\xc1\xe0\xe4\xa7\x6b\x34\x93\xfc\x25\xed\x6d\xac\xd7\xcb\xde\x9d\x4c\xd8\xde\x5e\xe1\x6d\xca\x29\x2a\xdf\x06\x3e\x88\xaa\xdf\xf0\x1d\xb7\xcb\x9f\xc3\x51\x55\x09\xa7\xbd\xbd\xdd\xb2\xc6\x5b\xf0\x5b\x8e\x2d\xdb\xa9\x79\xcf\x79\xad\x6c\xe0\x94\x50\xa0\x70\x65\x3b\x26\xb6\x60\x71\xb6\x40\xc3\x21\xf4\xc9\xce\x8d\x26\x82\x23\xe3\x1b\x7f\xe0\x70\x3c\x35\x02\xa8\xea\x73\xb5\xc2\x27\xa8\x35\x6b\x6a\x52\x8d\xed\x8c\xbc\x00\x82\xf8\x28\x08\x06\x65\x23\x41\xa1\xe5\x1c\xb2\x13\x09\xe9\x2b\x06\xc3\x81\x0d\x31\x8b\x97\x1f\xe3\xc0\x76\x76\x7e\x1d\x21\xfa\x36\x09\x38\x89\x7d\xf9\xc2\x7f\x7c\xc4\x72\x5f\xf9\xe2\xc9\xa0\x79\xf4\x9a\x5e\xdd\x5f\x47\x08\x7b\x41\xe2\x43\xca\xb7\xa5\x2c\xf4\x66\x3b\xce\x4d\x56\xc9\xee\x0a\x05\xc1\x69\x5a\x9f\x6c\x6c\x9c\x50\x6f\x48\x42\x21\x8b\x41\x34\x12\xac\x7f\xe0\xdc\xb8\x50\xd4\xd2\x11\x37\x14\x89\x99\xdd\x01\xdc\xdb\x1b\xe4\xcb\xe1\xb8\xe6\x4f\xe6\xb8\x38\xbd\x46\x20\x7a\xf4\x1b\xf8\x2c\x69\x47\x96\xe5\x81\x75\x34\x92\x2e\x91\xd3\x3e\x79\x81\x7a\xb7\xa5\xd2\x5a\xb1\x4a\x0f\xb9\x71\x76\x4a\x8c\x54\x9e\x41\xe8\x77\x18\xb7\x72\x53\x1f\x30\x90\x6b\xff\x1b\x25\x78\x08\x22\xb4\xfd\xcb\x67\x7a\x91\x93\xd6\x4e\xf4\x3b\x1c\x8b\x91\x26\x3f\x0d\xae\x45\x65\xc1\x6b\xe4\x8f\xd9\x08\xf9\xd2\xb8\x03\x65\x19\x40\xc1\x45\x00\x63\x31\x9a\xf2\xd3\x62\xcc\x6e\xba\x1c\x2d\xe6\x0c\xf9\xae\x9a\x93\x78\x39\x8c\x60\x1c\x22\xb9\x4f\xab\x6f\xb8\x75\x78\xbc\x2f\xa8\xb9\x5a\x90\x57\xfe\x53\xf5\xef\xf8\x60\xc3\x78\xd2\x37\xb3\x07\x3c\x35\xe3\x89\xdf\x40\x87\xa6\xbe\xff\x6b\x44\x11\xe2\xf8\x41\x5b\x42\x4e\x28\xcc\x37\x5f\x35\x5e\xd8\x48\x6f\x87\x57\x9b\xe6\x47\x02\x45\x11\xc4\x52\x49\xfd\x55\x63\x69\x1b\xd4\xf3\x95\xa3\x64\x9b\x84\x13\x13\x06\x3d\x06\xfd\xa1\x54\xcb\x0c\x23\x10\x33\xe4\xa1\x08\x08\xa3\xc9\xd7\x8d\x35\x39\xa5\x57\xfe\x23\x36\x4a\x28\xff\x63\xc3\xc8\x13\xa1\xd3\x5f\xd5\xd1\x26\x07\xe2\xa2\x39\x9e\xd8\x07\x76\x7a\xef\x1a\x21\x7f\x6f\x6f\xc0\x3f\x45\xbe\xe3\x66\xd8\xc4\x6d\x18\xeb\xe0\xbe\x62\x4e\x9f\x2f\xc3\xfd\xc7\xd2\x6d\xf0\x27\x7e\xa3\xa6\xfb\xc3\x39\xa4\x2c\x89\x85\x25\xb0\xa3\x7d\x44\x4b\xdd\xfa\xcb\xaa\xce\xb6\xa1\x9f\x10\x36\xca\x54\x43\x01\x28\x45\x73\xfc\xe5\x8b\xfc\x15\xc2\x78\x0e\xc5\x8d\x8f\x4e\xc8\xe0\xfa\xc6\xbd\x4e\x28\x3c\x06\x11\x87\x66\xbc\x7b\x78\xe3\xec\xf0\xe7\x34\x2b\xeb\x3b\xd2\xa0\x3a\x62\x35\xd0\x04\x97\x56\xc3\xe8\x81\x8e\xb2\x1f\x39\xe4\xa2\x46\xe4\x8a\x0a\xe4\xbd\xf1\xca\xbf\x2a\xf4\xb1\x3d\x75\x4f\x79\xda\x2d\x3a\x9c\x2e\x5a\x9a\x16\x2d\xd1\x82\x50\x66\x18\xb4\x40\x84\x7e\x26\x94\xb9\x18\x84\x50\x30\xb4\xfc\xbb\xb7\xfa\xb1\xbb\x80\xc0\x87\x31\x55\xdd\x7a\x24\x8c\x12\x06\xfd\xb2\x6e\x47\x99\xdc\x73\x5a\x0b\x7f\x24\x95\xa5\xee\x35\xbf\xba\xea\x12\xdf\xd7\x37\x8a\xaa\x9a\x54\x45\x4d\xdd\x65\x8a\xa3\xbd\xbd\x01\x14\x4d\x48\x8c\x7e\x17\x8c\x63\xc2\x1c\x17\xde\xdc\x38\xee\x02\x60\x3f\x80\x1f\x20\x8d\x08\xa6\x8a\x03\xb2\x78\x29\x60\x20\xbd\x07\x16\x1c\xcc\x71\xe9\x84\x9d\xd9\x9f\x87\x59\xed\x65\x06\x58\xc2\x37\x1e\x2a\xbc\x48\x7d\x94\x76\xd0\x6c\xf0\xe4\xe0\x50\xd6\x42\xcf\x6b\x35\x90\xd4\x73\x68\xf5\x44\x55\x69\x7a\xa5\xb1\xb0\xbb\xaa\x00\xaa\xcb\xdb\x0b\xa5\x87\xd2\x02\xb8\x4f\x0e\xbe\xe5\xc0\xec\xed\xd9\xc2\x50\x2d\xd4\x5e\xf9\x39\x25\x53\xea\xc5\x28\x92\x6c\x58\x29\x88\x68\xce\xe1\x13\x04\xc8\xb7\xdd\xdd\x43\xa5\x73\xc8\xe1\x31\x87\x37\xa1\x01\xe3\xb3\x7e\x11\x46\x6c\x39\xa0\xfa\x67\x86\x04\xea\x68\xb2\xf8\xeb\xc9\xbb\xb7\xa3\x08\xc4\x14\x0e\x28\xdf\xed\xd2\x11\x7a\x6f\x8f\x08\x17\x52\x12\x4f\x26\x13\xa8\xfe\xe4\x0f\x81\x1f\x22\x2c\x9e\x89\xbf\xc4\x23\x6d\x27\x95\x8f\xf5\x2f\xfe\xea\x12\xc1\xab\x8f\x14\xc6\xf2\x55\xfa\x6b\x63\x68\xbd\xb9\xf1\x00\xf3\x16\x03\x9c\x2f\x8d\x8c\x9d\x1b\x53\xc1\x57\xa5\x34\x2d\x29\x65\x9a\x58\x5b\x14\x55\xdc\x88\x94\xf7\x71\x49\x65\x1d\x22\xe1\xa4\xd2\xdd\xea\xee\x62\x97\x6c\x8a\xc9\x51\x75\x62\x9c\x48\xd8\x33\x6f\xd2\xdf\xc0\xe7\x75\xb8\xdc\x85\x77\x94\xb0\x45\x03\x0f\xe4\x5c\x6d\x6c\xdb\xae\x62\x70\x63\x3b\xf5\x07\x26\x45\xe6\xe7\xb8\x10\xfb\xc2\x17\xbd\xa9\x55\xce\x8b\x98\x54\x32\x49\xa1\xf1\x53\x5b\xfe\x45\xd6\xa5\x4b\xe2\xf9\x2b\x9f\xff\x21\xfc\x86\xf8\x1f\xaa\x11\xff\x53\x1b\x8b\xc7\xf6\xe1\xc1\xc1\x81\xed\x86\x90\x52\x3e\x71\xa3\xae\xbf\x7d\x4c\xc2\x30\xc1\xc2\x70\x2c\x36\xdd\x78\xf7\xc0\xad\xd2\x43\x8f\x77\x0f\x5d\x4e\x8e\xef\x63\x72\x89\x7c\x18\x8f\x85\xc3\x12\x7f\x72\x2c\x16\x5d\xfe\x96\x04\x90\xc4\x50\xf4\x93\xaa\x18\xf9\xc7\x99\xce\x97\xff\x0a\xc1\xe7\x53\x30\xa7\xe3\xc7\x2e\x95\xab\x91\xf6\x6b\xdb\x6e\xea\x3c\x61\x53\x18\xcc\xf8\xb1\x62\xbb\xd2\xae\x73\x74\x09\x50\x00\xa6\x81\xe8\x43\x14\x7e\xe5\xed\xe7\x90\x3d\x03\x14\x7e\x8c\x85\xf1\x40\x6e\x87\xb3\x6c\xd7\xe9\x25\xb0\x1d\x17\x9e\x8f\x7e\x23\x08\x0f\x38\xc2\x6f\x5c\x69\x01\xe0\x14\x29\x24\x0c\xce\x62\xd3\x8f\x32\xcf\x29\x67\x47\xab\xb8\x25\x8b\x32\x90\x60\xbb\x68\x74\x64\xfc\x1e\x69\x3f\x3f\xa1\x15\x96\xba\x66\x7d\xc3\x1a\xf1\x63\x6e\x24\x36\xd2\x09\x0c\xa0\xc7\x48\x3c\xb0\xcf\x22\x45\xfd\x13\x7f\xba\x00\x74\x71\x6e\x0b\x5d\x2c\x9d\xf4\xfd\x4a\x1f\x2a\x8e\x4b\xf7\xf6\xec\xeb\xeb\xd1\xf3\x67\xfc\xcd\xcd\x0d\xe7\xbe\x54\x33\xc0\x8e\xbd\x2a\xe2\x38\x2f\xd8\x4f\x28\x64\x6a\xb3\x22\x48\x07\xd7\x92\xe2\xd4\x1e\x64\x22\xbe\x62\xc1\xc2\xe0\x04\xcc\xe0\xc0\x4e\x1d\x1e\x4f\x84\x69\xd8\xa9\xa1\xa9\x1c\x8d\x1c\xa4\x54\x69\x28\xea\x9f\x1a\x14\x3a\x86\x37\xe6\x79\x50\xcf\x4d\x95\xb1\xeb\xe4\xef\xef\x47\xca\x5f\x49\x2c\x60\xca\x2a\xe1\x04\xe6\x63\x05\x46\x2c\x46\xe1\xc0\xec\x5c\xc8\x67\xce\x48\x78\x64\x52\x36\xb0\xa3\x64\x1a\x20\x6f\x3f\x94\xb6\x23\x61\x25\xa2\xd2\x4a\x54\x81\x1b\xaa\x7a\x12\x04\xa3\x0f\x6a\xd7\xbe\xb4\x1f\x65\x03\xa4\x31\x0d\x66\x5b\xc5\x5d\xec\xf2\x79\x20\x98\x89\x6e\x78\xca\x29\xdf\x38\x57\xc4\x4e\xe0\x3d\x69\xa3\x3b\x3f\x83\x9c\x55\xd7\xee\x44\xf4\x61\x69\x62\xb1\xf8\x59\x26\xa2\x0d\x1a\x16\x31\xdb\xdb\x07\x6b\xae\xd1\x8e\x21\xb0\x90\xcc\x9e\x22\x45\x1b\x79\xc8\x93\x9c\x51\xa9\x30\x04\xe7\x27\xb0\xda\x56\xe3\x12\x69\x3d\x92\xfb\xdc\x05\x46\x60\x48\x7a\x5f\xcd\xee\x11\x8c\x8b\x0b\x83\xfe\xd1\x21\x9c\x44\x46\xbf\x51\x82\x45\x1c\x88\x66\xeb\xc0\xc9\x45\x1a\x48\x3b\x26\xa7\x08\xe1\x70\x28\x09\x5c\xc7\xb9\xb8\x44\xbd\x81\x98\xc1\x38\x8a\x11\x85\xe9\x2b\x3a\x41\x8a\xab\xe9\xa8\x17\x17\xe8\x47\x29\x49\xed\x20\x49\x4e\x69\xcf\xd2\x5d\xd4\x76\x99\xe3\xaa\x57\x59\xd7\xfa\x1d\x49\xdf\x15\x78\xad\x90\xc3\x04\xe2\x82\x89\x69\x68\x7a\x0b\xaf\xfe\x2e\x47\x1c\x00\x97\xb9\xbb\x07\x8e\x1b\xd7\x37\x20\xbc\xc1\x8e\xb1\x9b\x27\x93\x09\xdd\xdb\x0b\xf6\xf6\x6a\x47\x3d\x70\x5c\xfb\x45\x0a\xa7\xfa\x20\x6e\xfc\xe0\xc6\x71\xa9\x34\x56\xaa\x4d\x02\x85\x85\x72\x70\x90\x5d\x11\x9d\x81\xfd\x3f\xc4\x86\x19\x06\x08\x5f\x88\x3d\x1e\x92\x4b\x7e\xb6\x1f\x4c\x26\x93\x41\x99\x37\xc4\x30\x0a\x80\x07\x07\xb6\x65\xbb\xf6\xd0\x36\x1e\xa8\x1e\x6d\x69\x39\x16\x2c\xc4\x19\x05\x10\xcf\xd9\x42\xed\xbe\x1d\xa9\x12\x51\xdb\x19\x50\x0a\xd9\x1b\x10\x45\x08\xcf\x55\xe1\xf2\x94\x40\xa0\x73\xfe\x6f\x05\x30\x39\x97\xb6\x9d\x11\x88\x22\x2e\xd8\x7c\xf3\x67\x0e\xaf\x85\xfc\x89\x6d\x80\x6f\xc5\x30\x98\xd8\x94\x2d\x03\x48\x17\x10\x32\xdb\x92\xa2\xe3\x37\x59\x8c\xd2\x37\xf6\x4f\xdf\x38\xce\x0d\x3f\x26\x05\x4e\xe8\x40\x1f\x92\x56\x27\x7e\x27\x22\xdb\x84\x8b\x45\x08\xd9\x82\xf8\x32\x94\xe9\x26\xb3\x95\xc3\x82\x88\x49\x1b\x45\xcc\x29\xa0\xb7\x16\x82\x53\x94\x0d\x11\xa7\xa6\x4b\x10\xe8\xeb\xb6\xb8\x2c\xbb\xfc\xe4\x1f\x90\x09\x73\xe9\x04\x9b\xfe\x43\x68\x36\x90\x7d\x72\xca\xfb\xf2\x85\x0e\x87\xd6\x4f\x07\xce\xb5\x88\x47\x0a\x21\x49\xd8\x00\x71\x96\xc2\xef\x7c\x70\xe4\x81\x20\x18\x70\x21\xc8\x51\x82\x3a\xbf\x0d\x2e\x62\x72\x65\xd1\x09\x5f\x56\x46\x24\xa3\x1d\x48\x2b\x69\xae\x13\xd6\x25\x96\x29\x43\xa0\x8a\x8c\xba\xfd\x00\xc1\x22\x3a\xd5\x8d\x4c\x3d\xae\x16\x99\x33\x77\x83\xd6\xf8\xbf\xf4\x7c\xe3\x77\xc0\xe7\x30\xbd\x23\x0e\xd4\x86\x16\x41\x60\xd0\xb9\x4e\xc5\x18\x71\x8c\x4d\xe0\x23\xdb\xfa\x62\x99\x67\x6b\x1e\xae\x91\xbe\x55\x4a\xdf\x7a\xa3\xb3\x23\xfa\x7e\x11\xf3\x4d\x5e\xee\xb4\x6b\x67\x8f\x6c\xcb\x7e\x04\xb3\x2e\x7f\x41\x6c\x41\x12\x76\x92\xcc\x66\xe8\x73\x15\xb0\xa2\x69\x71\x82\xd0\xb9\x2e\xec\x7d\xbe\xf1\xce\x30\x08\xe1\xc4\xcf\xda\x9d\x9b\xdc\x6a\xd0\xe8\xce\xe0\xec\xed\x0d\x3a\xcc\x42\x5d\x09\x84\xbf\x02\xf5\x62\x12\x04\xa7\x84\x43\x23\x97\x32\x4e\xf0\x88\x7a\x0b\xc8\xc9\x64\x60\x83\x19\x83\xf1\x07\x88\x85\xe0\x3b\x70\x26\x3f\x29\x7d\x6f\x1e\x72\xe8\x8c\xc8\x6c\x26\x9c\x19\x76\xf2\x40\x61\x2e\xda\x16\x38\x1c\x0b\x03\xd7\x9a\x12\x7f\xc9\xf9\x1c\x46\xa1\x88\x92\xd3\x80\x44\x63\x3c\x62\x24\xba\x71\xbf\xfd\xee\x40\xb8\xa0\xf8\xe4\x0a\x07\x04\xf8\x2f\x51\x90\xd3\x38\xf3\x63\xfc\x59\x40\xa6\x83\x33\x78\xee\x5e\xcb\x70\x4b\x06\x3f\xb3\x7d\x11\x64\x79\x23\x24\x78\xc5\x82\x55\xf8\x1c\xbf\xe1\x17\x9f\x8c\x42\x7a\x02\x2e\xe1\xbb\xf8\x5d\x04\x31\xef\xce\x69\x6d\x31\xc0\x2e\x73\x76\x60\x40\x61\x51\xc2\xf6\x62\x08\x18\x7c\x11\x88\x68\x90\x81\x0d\x6c\xbe\xbf\x05\x9b\x9e\xd8\x3e\xa2\x51\x00\x96\x63\x0b\x13\x0c\xff\xcd\x76\xd3\x8f\x38\x22\x14\xbb\x3f\x5e\xa0\x80\xaf\xe3\x8e\xd4\x26\x29\x48\x3e\x7e\x78\xad\x7a\x96\x1b\xfb\xe3\x87\xd7\x03\xcc\x7b\x16\x4c\x9f\xf0\xdd\xab\x50\x34\x61\x2e\x1c\x79\x01\xf2\x2e\x32\xed\x02\xff\x3a\x86\x97\xe4\xc2\xf8\x9a\x38\x85\xe1\x25\x7d\xe9\xe1\x3b\xea\xe1\x25\x63\xd2\xce\x0b\xf5\x8a\x78\xe3\x04\xb8\x3d\xf5\x7b\x4f\x2e\xb5\xae\xfe\x40\x08\xa0\xb5\xea\x03\xdf\xcf\xee\xa8\xe5\xe3\x37\x22\xfc\xec\xcd\xf0\x78\xad\xae\x75\x32\x64\x98\x0b\x95\x32\x84\x78\x2c\x54\x59\x54\x1c\x28\x68\xb6\xe4\x0b\x65\xb8\xae\x95\x9c\xe4\x38\x44\xb6\x33\xca\xac\x35\xc6\x10\xb0\xc2\x49\x4e\x7f\x10\x25\x94\x9f\x63\x37\x52\x78\xf8\x48\x61\xfc\x77\x44\xd1\x54\x72\xe1\x56\x11\x42\x8f\x21\xcd\x59\xfb\x86\xa4\x53\x2b\x49\x28\xd0\xcf\xce\x35\x4c\x9c\x83\x1c\xc5\x31\x58\x4a\x0f\x2d\x38\x39\x3b\x77\x5c\x36\x81\x22\x48\x62\x4b\x73\x95\xb3\x3d\x0a\x82\xf5\x66\xe9\xda\x4f\x67\x28\x60\x30\x9e\x80\x20\xb0\xef\xff\x9c\x29\xb8\x84\xd9\xd5\x04\xaa\x70\x73\xbf\xd2\x89\xb2\x0e\x07\xe9\xec\x99\x31\xdf\xf7\x1f\x4f\x6d\xf7\xde\x10\xb2\x2f\x32\xd1\xf7\x5b\xda\x4a\xd2\x7d\xfe\xe2\xf5\x8b\xd3\x17\xb6\x22\x97\xf7\xa9\xb1\x96\xae\xda\xb7\x6b\xef\x1b\x26\xdf\x3b\x22\x98\x9c\xd5\xb9\xcf\x7e\x11\xda\xee\x35\xa6\xae\xec\x1f\xb7\x3a\x69\x69\x35\xee\xbe\x43\x20\xfb\x3b\x82\x57\x62\x9e\xf2\xfe\xb0\xca\xce\xc8\x2d\xf3\x53\xc1\x35\x8c\x74\x11\x70\xc5\x8d\x83\xf5\x3a\x9c\x24\x61\x08\xe2\xe5\xba\xbc\x6b\x9f\xca\x7e\x1a\x96\x04\x4a\x94\x1c\xab\x4e\xde\x08\x33\x27\x5d\xa0\xc8\xf4\x5e\xed\x32\x7a\x28\xbe\x7c\x1a\x12\x1f\x4e\xaa\x39\xc8\xbb\x93\x7e\x2c\x44\x60\xe2\xb9\x92\x6b\x14\x80\x08\xf6\x24\x4f\x2d\x17\x75\x3a\xb9\xa0\xc2\x3e\x47\x64\x15\x46\xfa\xe3\xa3\xc7\xb1\xc9\x07\x9f\x41\xe6\x2d\xc4\xf0\xcf\x01\x03\x9d\x06\x14\x9f\xec\xaf\x7e\x4c\x5f\xeb\x4f\xc7\x67\xe7\x6e\x98\x4e\x96\xff\x52\xd4\x23\x33\xea\x4c\xf8\xed\x58\xb6\xdc\xe2\x19\x96\xe9\xf0\xf4\x87\x13\xec\xb2\x51\x06\x17\xe7\x0d\xe9\x0f\x97\x8d\x14\x8c\x13\xa8\xff\x72\x59\xa7\xb4\x29\x99\xbc\x4b\xc8\x05\x2a\xba\x58\x48\x63\xbf\x7a\x55\x6e\x7b\xe7\x61\xb3\x29\x44\x59\x5c\x64\xa5\xb4\x2e\x2d\x7c\x72\x5b\xdd\x6f\xb5\x82\xb2\x20\x9d\x5c\x7a\x35\x4d\xf3\x1a\x62\x57\x7a\x6f\x35\xf7\xae\xc2\x59\x9b\x6f\x03\x8d\x92\xbe\xc1\x80\x3a\x6d\x46\xbd\x1c\xb4\xcf\x0e\x6c\xdc\x3f\xd9\x02\x77\xda\x3f\x23\xa9\xb6\x82\x93\x9f\x0c\xcb\x82\x0a\xb2\x76\x0a\x5e\xff\xfb\x59\x3c\x95\xe3\x42\x27\x95\x98\x9f\x2d\x05\x07\xea\x37\x61\x7d\x06\x76\x9f\xb6\x44\xb9\x38\xfd\xdf\xc7\xe4\xf3\x52\xdd\x89\x07\xfa\xba\xa4\xd6\xe4\x68\x70\x76\x6e\x30\x86\x4d\x48\x0c\x3d\x71\x6a\x62\x15\xae\x27\x63\x57\xd0\x47\x49\xc8\xae\x3f\x0e\xa5\xd4\x6b\x12\xa4\xb2\x40\x54\x92\x5d\x2b\x34\xac\x52\x0c\xf6\x13\xe9\x5d\x07\xb5\x78\x24\x75\x17\xd7\x62\x7d\x5f\xf9\x63\xe8\x66\xee\xa6\x63\x96\xfe\x10\xa9\x0b\xf0\x4d\x77\x14\xec\xa7\x03\xd9\x45\x19\xa1\x0a\x03\x44\x60\x00\xf8\xfe\x7b\x30\xcf\x3b\x2a\x56\x4d\x9e\x8b\x67\x60\x0e\x69\xc3\x9a\x88\x5b\x3a\x56\xde\x8c\x85\xc1\x98\x53\x21\xa7\xf0\xf1\xa5\xb5\x42\x83\x20\x1d\x21\xa4\x1b\x03\x79\x6a\x3f\x8d\x27\x2c\x4e\xa0\x3d\xe6\x7f\x49\xaf\x19\x65\xa9\x6a\x84\xd1\x70\x1b\x60\x46\xc2\x31\x0d\xb8\xdc\x05\x14\xb2\x01\x1e\x85\x90\x01\x97\x93\x9a\x2b\x1c\x60\x5e\x61\xfd\x70\x84\x7c\xa7\xc1\xf0\x89\x3a\x90\x18\xae\x9e\x73\x2f\x66\x25\xbd\xa9\x7b\x32\x2a\x25\x74\x71\xa4\x76\x93\xed\x9a\x17\xbc\x9e\xed\x54\xb1\x8e\x9d\xe2\x8d\xa4\x27\x2b\xe9\x31\xe3\x9b\x6c\x9e\x1d\x65\xeb\xce\x54\xb3\xd6\x09\xd3\x67\x0a\x7a\x02\x6f\x20\x97\x4e\x37\x3a\x09\xd7\x56\x76\xf9\xb5\x27\xa3\x7c\x9f\xfa\x90\xa1\x50\x84\x67\x2c\x56\xd1\xa2\xc9\xff\x56\x65\x33\x1a\x0f\xa4\x9a\xd3\x54\xee\x3a\xb7\x8a\x2d\xa7\x80\x75\x66\x7e\x39\x12\x69\x05\x10\xd7\x29\x45\x84\x16\x39\x86\xd8\x1c\xf7\xec\xdc\x25\x93\x5f\x47\x33\x84\xfd\x57\xd8\x87\x9f\x07\x30\x67\xff\xd3\x1e\x1a\x72\x20\x0e\xcc\x88\x9f\x8f\x93\x89\x30\x8a\xd1\x09\x3c\x23\xe7\x3b\x33\x12\x0f\xa4\x7b\x2f\x79\x74\xf8\x6f\xe8\xcf\xaa\xb5\xb4\xbc\xda\xce\xde\xde\x00\xed\x4e\xf8\xbb\x2f\x5f\xe0\x19\x3a\x37\xfa\x0a\xe0\x25\x0c\x6c\x67\x77\x32\xa1\xe5\xa7\xce\xde\xde\xee\xa0\xfa\x83\x3f\x57\xb6\xff\x37\xf4\xe8\x91\x83\x25\x49\x5c\xf3\x37\xfc\x90\xcb\x7f\xcf\x81\x77\x45\xfb\xe2\x1b\xd5\xc9\xf0\x30\x93\x50\x70\xee\xde\xfa\x41\xe7\xfa\x68\x39\xae\x5d\x7b\x3f\x4b\x0b\xd2\xeb\xec\x96\xbb\x24\xdd\x9a\xc6\x80\x2b\xd0\x49\x4f\x30\x70\x2b\x18\xcf\xd1\x6c\xd6\x63\x27\xd5\xc1\x62\x3c\xc7\x9d\x36\x9b\x09\x96\x91\xb0\x53\x24\x45\xcb\x5d\xba\x0d\x0e\x60\xdb\xce\x8d\x1b\x93\x20\x98\x02\xef\x22\x3b\xe4\xef\x06\x70\x21\x0a\x29\x84\x9e\x82\x69\x00\xdf\xcd\x54\x0e\xae\xf5\x4f\xc9\xa7\x8a\xe7\x4c\x0e\xee\xf9\x79\xe9\x2d\x00\x9e\x0b\xae\x77\x22\xb2\xea\x79\x3d\xb8\x1f\x55\x5f\x6c\x5a\x06\xcc\x60\x7a\xcd\x37\x7f\x77\x80\x14\xaf\xd8\x2c\x34\xfc\xca\xc6\x18\xf0\x16\xe1\xba\x94\x01\xb2\x6e\xfa\xa8\x70\xcb\x7c\x7f\x77\x17\xee\xed\xc1\x91\x70\xbe\x8c\x13\x4f\xfa\x64\x4b\x65\xc3\xcd\x00\x3a\x4f\xd9\xb8\x27\xd1\x64\x90\xf5\x20\x1d\x79\x60\x66\xb8\x59\x4f\x5c\x31\x90\x53\x23\x79\x15\x2c\x09\x5c\x48\x22\x97\xf0\x98\x44\xcb\x53\x91\x9c\xa2\x93\xc3\x8e\x4a\x3a\x45\xf7\x65\x42\x8b\x06\x77\x9d\xad\xec\xce\xde\x17\xe3\x1b\xd7\x23\xd1\xd2\x64\x95\x9b\x94\x07\x79\xdf\x39\xfe\x59\xe2\x8e\xdb\x13\x74\x43\x72\x09\xb7\x35\x2f\xde\xf7\x5d\xcd\xeb\x92\x88\x9b\x7d\x76\xa8\xd9\x3b\xb9\xe4\x1f\x45\x17\x93\x7c\x98\x86\x53\x11\x12\xa3\x9b\x26\x14\xc6\x42\x52\x32\x5d\x29\xf2\xb0\x48\x05\x5f\x45\x7e\x0f\x80\x09\x7e\xc5\x3f\x25\x93\x5d\xc3\x23\xa6\x14\x06\xc2\x1f\x41\xe5\x9c\xf7\xd3\xe4\xf0\xfb\xa7\xb9\x78\x24\x4c\xf0\x47\x11\xc9\x99\x73\x02\xce\x0d\x5c\x76\x2c\x55\x43\xbb\xc4\xb9\x91\x21\x6a\xd7\x32\x1a\x74\x4c\x04\xae\x9a\x74\x1a\xd2\xd0\xaf\x9c\xec\x2a\x0c\x0d\xae\xbd\xcf\xbb\xb0\x9d\x6a\x9e\x4e\xeb\x78\xba\x54\xe4\xb6\xbb\x18\xc8\x76\x76\x75\xef\xb0\xf2\x66\x51\x48\x5d\x6e\xfa\xe3\x98\xac\xb2\x7e\x64\xf9\x77\xda\x34\xaf\xe7\xbc\xd1\x26\x0c\x2d\xfd\xf6\xb4\x62\xf4\x32\xd6\x68\xfb\x85\xfe\x68\x7c\x7d\xe3\x66\x36\x39\xca\x7f\xc6\x24\x80\xe2\x0f\x95\x55\x6e\x7c\x76\xae\xfe\xe4\x0f\x03\x84\x2f\xc4\x23\xe5\x72\x2b\xfe\x36\x18\xbd\xb2\x7b\x74\xe5\x98\x69\x18\xb6\xb3\x53\xf5\x91\xd8\x83\x58\xbb\x02\x35\x76\x5a\x8e\x1c\x86\x23\x63\x66\x7c\x97\xd4\xf4\x4f\x4c\xc2\xcf\xa9\xc8\x65\x0a\xf6\x81\x6d\xf4\x93\xba\x52\xd3\x6e\x73\x2c\x40\x24\x90\xeb\xec\x54\x7d\x2c\x60\xa1\xda\x4f\x1b\xaa\x50\x6b\xda\xe7\x28\xd2\xa9\x28\x3b\xb1\x35\x17\x4c\xe0\xc8\x58\xb9\xad\x0a\x17\x86\x9b\xb9\x42\x8c\x30\x51\x19\x88\x9d\x10\x97\x49\xf4\x4c\xa8\xab\x03\xcd\xe9\x04\xa5\x7f\x4f\x90\xb8\x3a\x3f\x5b\x0a\xbd\xb1\x8b\xd5\x48\x52\xc3\x2a\x82\x09\x46\x82\x38\x27\x50\xfe\xeb\x32\xed\x3a\xce\x1f\xe9\x3f\x5d\x66\xce\x79\x02\x5c\x56\x54\xab\x89\x5d\x55\xa1\xcc\xa8\x8c\x90\x71\xe9\x64\xf7\xd0\x45\xfc\x3f\x80\xff\x27\xe0\xff\x89\xf9\x7f\xbc\xc9\xee\xa1\x9a\x75\xe6\xaf\x88\x4b\xfe\x8a\x58\xf8\x2b\xe2\x89\x6d\x37\xc5\x60\xc8\x9d\xce\xcf\xac\xbc\x9b\x0d\x25\x49\x9c\x33\xa2\xe3\x96\xad\xaf\x0d\x4f\xc2\x40\xb0\x93\xaa\x1c\x66\x24\x7e\x01\x24\x0a\xae\x9b\x67\xc4\x3b\xf1\x3b\x1d\xad\x23\xfe\xaf\xb3\x53\xd5\x58\x90\x85\x2f\x49\x3d\xe9\xae\x9b\x12\x5a\x5b\x67\xa7\xea\x0b\xd1\x63\x22\x7b\x0c\x73\x73\xe4\x5c\x40\x24\xf1\xc8\x4d\x52\xe2\xa2\xc7\x34\xda\xb8\x53\x07\x9c\x14\xa6\xd1\x8e\x18\x45\xe2\xf2\x68\x95\x9a\x20\x37\xd2\x4f\x55\x78\xac\xe3\x2e\x26\x22\xad\x40\x66\x51\x71\xf9\x60\x63\x2c\x93\x24\xfb\x2e\xb9\xc2\x30\x1e\xc3\x91\xf8\x57\x5f\xc4\x24\x4a\xc6\xd1\x64\x32\x21\xa3\x63\xf1\xec\x84\x01\x06\x47\xea\xcd\x97\x2f\xb5\xaf\xde\xc2\x2b\xd5\xcb\xd1\x15\x40\x0c\xe1\xf9\x07\x78\x89\xe0\x55\x45\x67\x9c\xcc\x63\xf9\x56\x7d\xf2\x01\xfe\x26\x72\x63\x54\x34\xd6\xaf\x5c\x3e\xdf\x9f\x01\x3d\xce\x41\x9a\xec\xed\x0d\x56\x84\xd6\xc9\xf7\x58\x80\x3a\xd9\xdb\x6b\x06\x3c\xf7\x71\x0a\x7f\xe5\x67\xfa\xed\x8d\x3b\xeb\x40\x0e\x69\x72\x99\x85\xb3\x53\xd5\x5e\x10\xc3\xcc\x71\x43\xf1\x97\xbc\x0b\xf2\xdf\x05\x02\xd8\xad\x99\xf9\xde\x5e\xc7\x86\x6f\xe1\x95\x88\xbc\xdb\x3d\x70\x83\x49\x52\xea\xbf\x09\x39\x7b\x7b\x03\xc4\xbf\x8b\xbb\x7c\xa7\xb1\xb3\xb7\x37\x00\x45\x2a\xae\xa7\x06\x6f\x02\xf6\xf6\x12\x7e\x84\xf0\x4d\x11\x09\x62\xf7\x8b\xc4\xee\x4b\x62\x4f\x5c\x85\xd3\x71\x58\x20\x74\x5a\x4d\xb2\xa8\x48\x96\xa0\x9a\xfa\x82\x46\x12\x8a\x6b\x68\xc4\xd3\xcf\xdf\xc2\x2b\x7e\xa0\xe8\xde\x7c\x19\x21\xc4\x1f\x71\xd1\x5b\x3d\xae\xbf\x4f\xa4\x97\x04\xe7\xc6\x5d\x74\x20\x2c\x23\xeb\x55\xe4\xec\x54\x7d\x21\x48\x6b\xc1\x97\xcc\x20\xad\x05\x17\x0a\x70\xe1\x38\xec\xe1\x14\x02\x2f\xb9\xbc\x33\x4d\xe8\x1d\xc5\xb8\xc8\x87\x2f\x38\x14\xd0\x77\xaf\xc5\x15\x83\x2e\xcc\xa4\x83\xa6\x9c\xc2\x62\x34\x9f\xc3\x78\x04\xa2\x28\x58\x0e\x64\x58\x5c\x16\x38\xee\xaa\x48\xfd\x29\xac\xfb\x9e\xe0\xba\x4f\x13\xdc\xfe\xf1\x6c\x56\xf3\x75\x8f\x68\x18\x2d\xed\x95\x7d\x70\x44\xc2\x0d\x91\x4e\xb1\xb3\x1b\xfa\xad\xa4\xe0\xb8\x17\x8e\xe8\x5e\x12\xc7\x10\xb3\x97\xf2\x4a\x23\x82\xb7\xcd\x1b\x90\x78\xd0\x2d\x5e\xc7\x94\x5e\xaf\x6f\x6e\xba\xb9\xb8\x0b\x81\x75\x8b\xfe\xed\xbd\xee\x00\x42\xed\x26\x31\xd1\xe9\xc6\xd9\xdb\x51\x6e\x73\xa0\x6e\xc2\x49\x27\x4d\x93\x62\x8c\x23\x96\x23\xb3\x43\x25\x41\xb0\x3b\x81\x4f\x31\xbc\xb2\x2a\xe2\x74\xa1\x33\x16\x9f\xc6\x90\x5f\xfe\x07\xeb\xf9\xb5\x14\x90\xb9\x8e\xe3\xf8\x8d\xab\x82\xa3\x4c\xbd\x7a\x85\x6b\x6b\x41\x89\xb6\xb2\x85\xb3\x87\x2b\x79\x03\xc9\x18\x1d\x12\x3c\x25\x20\xf6\x73\xf0\x2b\x1d\x91\xcc\xe5\xdd\xc5\x47\x47\xdb\x02\x72\x88\x33\x12\x5f\xed\x1b\x48\x64\x12\x69\x72\x19\x3b\xce\xa2\x41\xb1\xbc\x0d\x1f\xed\x7e\x3b\xd9\xdc\x20\x22\xd6\x0c\xd1\x97\x24\x9e\x22\xdf\x87\x58\xa4\xc3\x75\x84\x22\xb0\x7b\xb6\xdb\xa6\x0d\x96\xcb\x7d\x9b\xee\xb0\xbe\x91\x00\x15\x04\x6a\x6a\x5a\x36\xe9\x12\x0f\x47\xc8\xe7\x3b\x62\x68\x3f\xe2\x7f\x96\xb3\x69\x77\x52\x28\xf5\x09\x28\xc9\x21\xa3\x93\x15\xa5\x3b\x3a\xfa\xb0\x07\xc9\xe6\xc5\x26\x6a\x86\xc3\x38\x9e\xf2\x40\x20\x7c\x89\x18\x50\x21\xf7\x5d\xcf\x2d\xa6\xe3\x06\x8e\xcd\xe3\x56\x05\xa5\x97\x33\x50\x1b\xfa\x6b\x33\x7e\x3c\xcf\x51\x05\xc8\x32\xbc\xdf\xec\x94\x2f\x4c\x7d\xe2\x85\xb2\xf2\x5a\xef\x2b\xe6\xec\x94\xd4\x00\x75\xda\x79\xdb\x9e\x4c\x26\x58\x6a\x6a\x0e\x6c\xad\x90\x2c\xb1\xf0\xfc\x92\xa9\xc8\x8e\x76\x03\xb6\x41\xd9\x92\x50\x93\x35\xe9\xb4\x52\x03\xab\x48\xb4\x98\xd9\xa4\xa0\xde\xc4\xe2\x0e\x70\xe3\x86\x00\x83\x39\xec\xcc\x1b\xf7\x65\xfb\xfb\xcd\x22\x6f\xdc\x79\x0c\x30\x7b\x77\x85\xf9\xad\x4b\x4f\xba\x07\xaf\x92\x93\xdc\x17\xaa\x94\xea\x33\x4d\x7b\x20\xf4\xc8\x3c\x35\x0f\xc8\x14\x04\x77\x95\x18\x60\x83\xa2\x79\x4b\x96\x3c\x15\xbd\x5f\xef\xad\x9e\x16\x3e\x6d\x16\xe0\xe5\x99\xd4\xe0\x7d\x7e\xf2\xe6\xf4\xbd\xcc\xcd\x54\xcc\xd2\x5f\xd8\xdf\x88\xfe\x45\xe0\xfe\xc8\x0f\xc5\x49\xd6\x4a\x05\x72\xa9\xf6\x55\x61\x9d\xa6\xe8\x20\x70\x09\x0d\x30\xe0\xad\xc0\xd1\xe2\x09\x2d\x42\xa4\xa6\x46\x6e\x81\x16\x98\x3a\x43\x93\xcb\x6a\x57\xeb\x45\xc4\x61\xaa\x88\x1b\x7a\x8d\x3c\x88\x29\xdc\x1c\x34\x81\xec\xb0\x1e\x90\xb2\x3b\x93\x38\xa8\x34\x20\xad\x6b\xb5\x06\x24\xe9\x0a\x19\x90\xc8\x15\x83\xda\x2f\x25\xcd\x2b\xb6\x25\xda\x55\x95\x83\x5a\x68\xd7\x00\x63\x4b\xb4\x5b\x80\xa3\x85\x76\xe9\x12\x7b\x7f\x53\x75\x46\x36\x47\x2a\x7a\x1b\x2d\xb1\xb7\x6f\x14\x40\xaa\xc5\x4d\x21\xa4\x61\x89\xbd\xd7\xcf\x8f\xde\x6f\x1c\x9e\xc0\x07\x91\x00\xaa\x3b\x2c\x51\x2c\x54\x91\x02\x9c\xcd\x11\xb0\x09\x8f\x1a\xa1\x53\xdc\x41\x4e\x69\x51\x42\x9b\xa8\x8e\x74\x22\x14\xbf\xdb\xe2\xcf\x62\x88\x7d\xa5\x5c\x6e\x24\xf6\x18\x22\xe1\x8b\xbb\x55\x40\xd4\x20\x45\xdc\x71\xc2\x96\xd5\xc8\x0c\x11\xa4\xa0\x79\x78\x1f\x93\x10\x51\x38\x18\x30\x17\x3b\x93\x9f\xae\xbb\x82\x68\xe6\x09\xab\x23\x80\x2f\x5f\xf0\xa0\x6c\x5b\x4f\x8b\xcb\x67\xc9\x03\x69\xbd\x88\xdc\x29\xa7\xac\x8b\x26\x46\x12\x48\xd7\x56\x22\xcf\xbe\x9c\xfc\x53\xd1\x2a\x5f\x38\x1e\x88\xcc\x26\xff\xf9\xe6\xf5\xcf\x8c\x45\x1f\x24\x56\x77\xc0\x88\x44\x10\x0f\x14\xe1\x21\xc7\x15\xb5\x5c\xd4\xdb\x9f\x45\x2e\xdd\x81\xad\xfc\x3d\x87\x9c\xc3\xda\x6e\xf9\xfa\xcf\xbf\x8a\x55\xe6\x5a\xde\x66\x62\x4f\x03\x32\xb5\x5d\x30\x22\x32\x7d\x48\x3e\x0d\xd2\xb7\x07\x07\x93\x89\x9c\xbe\x24\xa7\x9c\x0a\x49\x77\xe4\xe2\xc6\xfc\x27\xb8\x32\xff\x49\x53\xfa\x93\xd4\xe7\x01\x70\xac\xeb\x4c\xbb\x7a\x8e\x46\x46\xd9\x19\x0a\x20\x06\x21\x34\x92\x73\x7d\x63\x7f\xe3\xda\x62\xd5\x1a\x72\xa7\x40\x0e\x95\xc8\x9d\x42\x5d\x9c\xe5\x4e\x21\x2e\xee\x92\x3b\x85\x36\xe5\x4e\xc1\x8e\xcb\xef\x34\x37\x30\xa0\xd0\x12\x29\x8c\x38\x6e\x85\x3a\xda\x44\xae\x7a\x43\xb9\x14\x5a\xe2\x1f\x4a\xa7\x25\xe4\xc0\x62\xbe\x9b\x97\x24\x0e\x9f\x03\x06\x52\x9d\x9d\xbc\xc5\xa8\xd6\x43\x59\xb0\x8d\x39\x6e\xfd\x4e\x22\x9b\xdf\x49\x64\x50\x76\x0b\xa9\xd8\x49\x68\xdd\x9d\x04\x8c\x9d\x44\xb3\x9d\xa4\x26\x5f\xda\x4a\xc8\xb5\xf7\x48\x3c\x37\xc3\xec\x47\xe4\x12\xc6\x57\x31\x62\xf0\x5d\x3c\x77\xed\x3d\x51\x61\x32\xd7\x20\x86\x92\x5a\x44\x62\x03\xc7\x0d\xaa\xf6\x62\x90\xdb\x8b\xc0\x71\x83\x8a\xfd\x53\xda\x3c\x4f\xd9\xc0\x19\x13\xbe\xf0\x41\x15\x49\xa8\x37\x82\x24\xb0\x72\x48\x15\xa9\x8a\x01\xdb\xa4\x5c\x96\x75\x5a\x3a\xcd\x72\xda\x8d\xa2\x78\xa6\x95\x94\x9d\x7c\x52\x59\x12\xed\xab\x0f\x2a\xf8\x7e\x0f\x33\x8f\xa8\x12\xfa\x90\x58\x68\xbd\xc4\x42\x0a\x89\x5b\xb3\xba\xa8\xfe\xbb\x1b\x5d\xa4\x35\xa2\x5d\x8e\x50\x70\xdf\xa6\x52\xa5\xd7\x5c\xd2\xf8\xce\x15\x8d\x20\x62\xb0\x3b\xc8\x9e\xd3\x6f\xc1\x7a\xd8\x3b\x0a\x13\xaa\xcf\x9b\xf3\x17\xde\x50\x25\xca\x58\xa9\x67\x11\xfc\x27\x3e\xef\xa3\x2a\x5f\x85\x18\x86\x72\x9c\x1e\x34\x21\x72\x4d\x77\x53\x7b\x57\x4c\x8b\x7f\x5d\x13\x31\x90\x0a\xce\x01\x04\x97\x5d\x63\x42\x2b\x86\x10\x9f\xb7\x46\x25\xf4\xf0\x7e\x40\x5e\xbe\x5a\xcd\x6d\xea\xf0\x74\xfa\x95\x57\x1e\xc1\xaf\x11\x65\x15\x76\x4e\xd3\x67\x91\x55\x39\x01\x32\xd3\x15\x04\x8e\x78\x57\x42\x78\x39\x61\x20\x76\xdc\xda\xb7\x49\xc4\xa7\x5b\xdf\xe0\x8d\x4c\xb3\x58\xdf\xe0\x28\x8a\x68\xfd\xdb\x67\xe4\x73\xfd\xcb\xbf\xa0\x59\xc3\xc8\xcf\x21\x45\x73\xdc\xd0\x75\x12\x4c\x9b\xe0\x66\x31\xf2\x1a\x20\x7b\x8f\xe0\xf1\x02\x34\x4d\xfd\x19\x88\x5b\x5a\xbc\x44\x18\x60\xaf\x01\x39\xaf\x41\x03\x88\xc7\xc4\x6f\xf8\xf4\x67\x18\x44\x0d\xd3\x03\x38\x01\x41\xc3\xf4\x5e\x06\xe4\xaa\xfe\xed\xbb\xa4\x61\x56\xaf\x1a\x90\xfe\x1e\xc4\x0c\xc3\x06\x82\x7a\x17\xcf\x1b\xe6\x44\xc2\x86\x19\xbf\xc2\x33\x84\x11\x6b\x68\x71\x4a\x7c\xd2\x00\x5b\x4c\x3c\xe8\x27\x71\x43\x07\xef\x12\x36\x27\x08\x37\x80\xf8\x0a\x7b\x24\x6c\x6c\x71\x1a\x83\x4b\x18\xd4\xbf\xff\x05\xe1\x46\x0c\x7d\x20\xc0\x0f\x41\xd3\xda\x12\x0c\x97\x0d\x5b\x16\x7a\x49\x8c\x58\x43\x8b\xd3\x04\x37\xe0\xe0\x2f\x09\x6a\xa2\xbb\x93\x10\x05\x0d\xaf\x3f\x10\xef\x02\x36\x10\xcf\x29\x6a\x5a\xe2\xe3\xa4\x91\xa6\xe3\x0b\xc8\x1a\x71\x7f\x84\x31\x49\x1a\x77\xdc\x73\x78\x49\x9a\x18\xd2\x2f\x24\x0e\xfc\x06\x1a\x0a\x40\x03\xf5\x1f\x93\x30\x22\x58\x79\x10\xd5\xf5\x00\x49\xd4\x84\xc0\xe3\x05\xf4\x2e\x02\x24\x92\xe2\xf7\xb9\x46\x5c\x78\x43\xa9\x72\x6d\xc8\x79\x54\x2e\xc4\x7d\xcf\x12\x1e\xad\x61\x7d\xd2\xfa\xdd\x3e\x0e\x5e\xb2\xa8\x87\xf0\xed\x12\x15\x33\x5a\x95\x74\xb2\xc8\x19\xbf\xa7\x16\x62\xb0\xb2\x83\x38\xd5\x33\x3b\x3a\x52\x4b\xd8\xbd\x2b\x1b\xe4\x2a\x44\xc3\xea\x36\x3b\x99\x62\x24\x55\x90\x1b\xe5\x7e\xca\xda\x88\xac\x72\x09\x1f\xc1\x30\xaa\x67\x1a\x70\x6c\xda\xd3\xb3\xb1\x46\x12\x6b\x23\x9a\x88\xfa\x07\x32\x01\x44\x0d\x58\x37\xce\x48\xd5\x73\x9e\xfc\x74\xcd\xa4\x16\x9f\x4b\x6d\x64\x8e\x70\x17\x3c\x66\xca\x4e\x89\x79\x29\xd0\x12\x25\xb4\xd2\x49\xae\x5e\xc1\x51\x14\x7d\x8c\x83\x41\xee\xd9\x49\x32\xf5\x49\x08\xf8\x68\xce\x23\x55\x4c\x41\xc3\x27\x13\xee\x49\xff\x95\x1d\x22\x1d\x59\x06\xd7\x31\xf4\x51\x0c\x3d\xf6\x31\x46\x63\x7a\x93\x9f\x26\x1c\x38\x7a\x42\xfc\x27\x1e\x08\xc8\xc5\x6f\x5b\x7c\x6e\xcd\x00\x0a\x44\xb4\x5f\x36\x53\x92\x74\x27\x99\xd2\x54\xf1\xe4\xa7\x6b\x3c\x52\xbd\xf4\x58\xd0\xfc\xea\x54\x2e\xa3\xf0\xf4\x39\x25\x17\x10\x0f\x1c\x17\x0e\x0a\x6b\xd5\xfa\x45\xba\x9a\x69\xb0\x4c\x4c\x66\x28\x80\xeb\xcf\x15\xf8\xc2\x1f\x5a\x77\x97\x4e\x85\x49\x3a\xab\x21\x2a\xe1\xac\x10\xe9\xaf\xd2\x9b\xd4\xb5\x5c\x7e\x51\x22\x88\x43\x3e\xae\x9c\x99\x78\x25\xbc\xe7\x18\x7c\xe5\x1b\xf5\x57\x46\xc8\x2f\x27\x17\xe7\x0f\x9f\xc2\x11\x0c\x01\x0a\xc6\xfc\x97\x2b\xff\x34\x3e\x13\x0f\x2a\xbe\x94\xcf\x9f\xda\xf6\x58\xfd\x2d\x9c\xc3\x31\x08\xa1\xf9\xb5\x7e\x56\xd1\x41\xfa\x4a\xf6\xa1\x7f\xba\x33\x14\x53\x56\xec\x47\x3c\x7c\x5b\xdd\x51\xf6\xee\x69\xd6\xcd\xd8\x78\xee\x06\xa0\xdc\x23\x7f\x56\xd3\x61\xfa\x2a\xdf\x9f\x7e\xec\x42\x0c\xa6\x01\xf4\xc7\xbb\x83\x5d\x13\x51\xf2\x69\x45\xbc\x6a\xfa\xca\xf9\xf2\x25\xfd\xd1\x2b\x1f\x77\x00\xa6\x30\xf8\xe3\xea\xcc\xd6\xd7\x87\x29\x04\x6d\x4d\x1f\xa6\xfa\xdf\xb8\x3e\x4c\xc3\xdd\x47\x1f\x96\xc6\x45\xaf\xa6\x0e\xeb\x35\x95\x75\xd5\x61\x62\xb0\x3b\x50\x87\xf5\x5b\xaf\x1e\xea\xb0\xc2\x84\xaa\xd5\x61\x7d\x76\x36\xc2\x17\x35\x1b\x3b\x44\x9f\x11\xa6\xfb\x98\x30\x34\x43\x30\xbe\x5d\x49\x36\xdd\xef\x6e\x73\xbd\xd1\xcd\x08\xb3\x8d\x0c\x40\xc4\xe1\x3c\x4b\x68\x87\xfc\x9c\xaf\x11\xbe\x58\x2b\xff\x89\x88\xb4\x2d\xab\x1f\x65\x0e\x2c\x80\x7d\xc4\xf7\x42\xf7\xa4\xd1\xa2\xbb\xfc\x08\xf9\x2c\x10\x9d\x22\x5d\xd3\x28\x5e\x3e\xbd\x5c\x6d\xbc\x96\xa1\xeb\x23\x1b\x5a\xdd\x87\x40\xec\x2d\xcc\x09\xa7\x79\xab\xc4\x94\x9e\x5e\xc0\xe5\x15\x89\x7d\x3a\xb1\x1f\x41\xec\x11\x1f\x7e\xfc\xf0\x2a\xbd\x0d\xf6\xcc\x3b\x59\x35\x5b\x84\x7d\x63\x4c\x09\xce\x16\x06\xbd\x71\xa7\x09\x0a\x7c\x8e\x57\x63\x38\xdb\xc5\xfc\x3f\x15\x4e\x04\x3a\xf7\x41\x8d\x2f\x41\xa1\x95\x28\xe9\x98\x72\x49\x9d\xd7\xc5\xde\x9d\xa8\x90\x6e\x8e\xff\xbd\x3d\x9b\x81\x69\xe9\x59\x9a\x52\x20\xf7\xe2\xcb\x97\x01\x9e\x48\x22\x35\x96\x36\x7d\x9d\xa3\x27\x21\xdb\xb9\x6c\x62\xff\x19\x58\x7c\xb1\x53\x13\xfb\xe4\x1b\x16\x27\xf0\x1b\xf9\x90\x7f\x3a\x94\x1e\xb7\xc8\x9f\x7c\x63\x74\xaa\x02\xd1\x5d\xdb\x6c\x29\xda\xe4\x86\xc8\xbf\x97\x19\x6b\x86\x69\xb2\x80\x62\x7b\xa3\x48\x7d\xd5\x77\xc5\xe6\xf2\x71\xa9\xf1\x32\x82\xf9\x76\x19\x02\xbe\x91\x45\xb3\x8c\xb7\xd8\xb5\xbf\xf9\x29\xd7\x29\x62\x01\x74\xed\x3f\xef\x83\x9f\x44\xa1\x3d\x61\x5f\x9f\xe4\xf1\x2f\x02\xd8\x4d\x07\x0f\x15\xbb\x61\xe6\xbc\x70\x4c\xb3\x75\x15\xd4\x0f\xd8\xef\x80\x7d\x0c\xd9\x15\x89\x2f\xaa\x16\x80\x2f\x0c\x23\xe3\x7d\x93\xd4\xf9\xe9\x14\x63\x10\xfc\x51\xb1\xab\xe7\x57\x6a\x9e\x4d\x7c\x9b\xcb\xc1\x94\x0b\x2b\xbe\xd0\x8a\xba\xcc\x55\xe5\x9a\x77\xfc\xca\x1f\x8b\x84\x13\xaa\x98\xfd\x99\x6d\xe2\xcf\x3e\x1f\x09\x69\xc3\xd5\x20\xd4\xb6\xe5\x50\xa7\xad\xcd\x54\xc2\x75\xed\x4b\xb8\x4f\xbf\xd6\x29\x89\xeb\x3e\xd5\x04\x90\x7e\xa0\x11\xdf\x36\x98\xf1\x49\x86\xfc\x71\x41\x0d\x56\xd3\x85\xb1\x8c\xf6\xb9\xb8\xe0\x76\x6a\xa9\x86\x4b\xe2\x20\xd7\x5e\xf8\x35\xa9\x77\x24\x8e\x16\x00\x8f\x77\x0f\x6f\x76\xf0\x48\xfe\x98\x64\xf5\x34\xf1\x48\x2e\x52\xae\xc8\x26\x36\x48\xb3\xf0\x42\x21\xaf\xf0\x34\x65\x60\x7b\x7b\xe6\x63\x63\xef\x29\x67\x2e\x58\xc8\x60\xa2\x06\x37\x2f\x2b\x19\xae\x88\xf3\x34\x85\x78\xf7\x60\x9c\xfe\x4d\xd4\x1f\x2e\x96\xd9\x78\x8e\x85\xbb\x96\x20\x3c\x34\x1b\x30\xf5\x36\x5f\x85\xb1\x1c\xd0\xe5\x56\xa6\xc3\x81\xf0\xe2\x03\xf4\x48\xec\x1b\x51\x32\xe9\xa4\xdd\xca\xac\x35\xc6\x27\x59\x5e\x1f\x66\xa2\xd0\x45\x93\xf4\x1a\x46\x9c\xa7\x36\xb5\xc7\x44\x75\x12\x24\xa2\xb8\x6a\xf6\x9e\x3a\x4f\x6d\xdf\x1e\x53\xf3\xfd\x0e\x9a\xa5\x49\xde\x38\xdf\x63\xc6\xf9\x2e\x84\x81\xdc\x33\xa3\x12\x7e\x9a\xde\x44\x26\x28\x9d\xb0\x8c\x89\x08\x81\x1e\x17\xa2\xda\x4c\xf8\x35\xcb\x43\xb9\xb9\xb8\xc0\xbd\x16\xe5\x06\xdf\x83\x18\x84\x54\xb8\x05\x71\xe8\x4c\xf1\xc3\x04\x85\xbf\xd3\xe7\x65\x19\x44\xdb\xae\xb8\x6d\x29\x2f\xb0\x05\xa0\xb2\x1a\xed\xa9\x74\xfc\x7a\x0a\x27\xf6\x53\x59\x6d\x76\x52\x51\xf0\x6f\x44\xcd\xc6\xe3\xf2\xfb\x52\xe9\xf8\x01\xef\x50\xb9\x8b\x55\xf4\xc7\xdb\xab\xde\x1c\x97\x8d\x92\x38\x98\x88\xff\x66\x25\x40\x73\xd9\xfd\xdc\x5c\x7a\x2b\x47\xe0\xb7\xb2\xea\xbe\xec\xe5\x11\x94\x78\x33\x4e\x33\x13\x3d\xc2\x58\xdd\x50\x53\x8e\x8b\xe0\x20\x86\xc0\x36\x52\xd8\x88\xed\x3e\x61\x26\xe3\x87\x23\x2a\x12\x3d\x4a\xb6\x30\xb0\x63\x08\x7c\x82\x83\xa5\xa8\x5a\xea\xaa\xa2\x74\xa3\x88\x48\x0a\x98\xd8\x60\x4a\x49\x90\x30\x91\xf5\x45\xbe\x0b\xe0\x8c\x4d\xec\xe1\x8f\x3f\xfe\xf8\x63\xf4\xb9\xb9\x5c\x9d\x18\x2d\xe0\x67\x80\xe1\x1b\x09\x3f\x43\xef\x98\x84\x21\xc0\xfe\xc0\xf6\x48\xb4\xb4\x9b\x8b\xce\x49\xba\x14\xab\x21\xae\xb1\xcb\x57\x78\x46\x06\xf6\x31\x89\x10\xf4\x2d\x8d\x48\x8b\x11\xcb\x0b\x50\x24\x9d\xcb\x9c\x1b\xe5\x69\xb9\x02\x35\xf7\xbb\x7a\x13\x0f\x04\x43\x95\x19\xee\xae\x5c\x1d\xb2\x28\xd5\x6b\xd3\x73\x4c\x6a\xa8\x45\x40\x76\x21\xde\x6f\x9c\x57\x02\x98\x1f\x9d\xc1\xf3\x89\x3c\xc1\xab\xdb\xa7\xb7\xc6\xc2\x47\x37\xae\x18\xad\xee\x23\xa9\x1d\x29\x7f\x24\xef\xdd\x27\x92\x91\xfd\x8c\x7c\x43\x47\x94\x6b\xcb\x51\x3f\x5c\x20\x1f\x0e\xcd\x12\xb9\xd5\x87\x04\xcb\x1d\x45\xcc\x79\x7a\x76\x3e\xfe\x75\x44\xa3\x00\x89\xfb\xf2\x17\x55\xf3\xb3\x38\x6e\x3e\xfb\x6a\x69\xb0\x9d\x03\xb9\x21\x45\xca\xc0\xa7\x55\xf3\xc1\xe7\xe3\xc2\xef\xc9\xaf\xb2\xc0\xbc\x31\xea\x4b\x14\x53\xf6\x21\xc1\xc5\xb5\x9a\xa9\xe7\x93\xdd\x83\x1b\x17\x51\xdd\x6c\x3c\x70\x26\x3f\x15\x74\xc1\x95\xdf\x39\x6e\x82\xf3\xdd\x57\x80\x98\xb6\xee\x63\x24\x0d\xc8\x7c\x9e\x4f\xa9\x71\x9b\xb4\x0d\xc4\x38\x39\x5a\xe2\x9c\x90\x70\x46\x44\xe6\x03\x7e\xd1\x17\xe6\x8f\xc6\x16\x08\xcf\x48\x53\x83\x1e\xd8\x20\xf1\x1c\x60\xf4\xbb\x0c\xfd\xfd\xc3\x87\x27\xb6\xd5\xb4\x79\x17\xcf\x3b\x29\x92\x4c\xac\x6d\x2c\x55\x46\x7e\x29\x3a\xaa\x69\x8b\xb9\x29\x90\x5f\xa1\xf1\x49\x55\x30\x85\x42\xf9\xaa\x3e\xee\x58\xa9\xaf\xd3\x72\xb9\xae\xac\xa0\xaf\x1e\xab\x5a\xc0\x6e\x08\x3e\x9f\x82\x39\x4d\x5b\xcb\x9f\xb6\x48\xa7\xa9\x52\xef\xbd\x50\x3a\x20\xdd\xa6\xfc\xc6\x76\x6e\x9a\x92\xe0\x55\x23\xb6\x47\x29\x18\xb9\x88\x27\x90\x31\x84\xe7\x1d\x5d\x07\x6b\x56\xd3\xb5\xf7\xa9\xec\xe7\xe9\x05\x5c\x4e\x3a\xd5\x95\x30\x8c\xb8\x22\x63\x02\x15\x05\x75\x4d\x78\x3a\xe9\x48\xd7\x81\xa8\x3e\x64\x2b\xad\xa2\x27\x63\x1f\x52\xa0\xfa\x02\x94\x83\xa1\x03\xf1\x57\x21\xa5\x00\x42\xff\x75\x6a\x05\xa2\x1e\x0f\x72\xe7\x24\x14\x3e\x97\x3c\xea\x35\x99\x93\x75\xb6\xbd\x6b\xf3\x43\x85\xd8\xd5\x83\xdb\x3d\x63\x01\x22\x84\x31\xf4\xef\x98\x17\xdf\x19\x13\x46\x18\x31\x24\x18\xa2\x3f\xde\x3d\xec\x9a\xa4\x09\x61\x3a\x39\x3b\x4f\x2b\x75\xbe\x47\x98\x56\xe5\x01\x52\xf7\x9e\x2c\xe5\x43\xed\xd5\xac\x70\x95\x7a\x9a\xb5\x30\x00\xb4\x9d\xba\x1c\x42\x59\x73\x0e\x9a\xed\x98\xb7\xb5\x22\x51\x45\xa8\xe3\x11\xd2\x90\xd8\x7c\xb5\x92\x61\x7d\x4b\x14\xa0\xae\xc7\x92\x9b\x39\x1c\x99\xe8\x72\x77\x0f\xcc\x57\x02\x35\xae\xf0\x71\x73\xc6\x35\x88\x34\xe0\x76\x6e\xdc\x08\xc9\xf4\x1e\xe9\x79\xd7\xb4\xb6\x3a\x90\xa8\x02\x8c\xc3\x5c\x1a\xec\xea\x25\x6f\x0f\x31\xca\x2d\x5c\x37\x0e\xdc\xdb\x66\xdb\x1d\xe7\x37\x6e\x82\xef\x33\x7e\xf2\x06\x81\xea\x88\x09\x69\x56\xcf\x2a\x5a\xf4\x99\xc6\x86\x61\xcd\x8a\x64\xf4\x5f\xd7\xaf\x72\xa3\x9a\xbb\x91\xdf\xd8\xb4\xf9\xf8\xbd\x38\x8e\xba\x07\x2f\x97\xd2\x78\xb7\x31\xdd\x8c\x61\x9b\x8e\x62\x3a\x91\xaf\xfc\x25\x7a\x32\x72\xe4\x92\x34\xf1\x69\xa6\xe9\x10\x2f\xe0\xde\x1e\x1b\x18\x79\x72\xc5\x1c\x07\xb6\xad\xfc\x36\x10\x15\x31\x14\xf7\x75\x4e\x32\x03\x51\x79\x62\x59\x9a\x57\x9d\x09\xbb\x75\xaa\x45\x81\x63\xa7\x5e\xe0\x90\x96\xe4\x3f\xc0\xe5\xaf\x51\xb0\xd0\xe6\xf3\x0e\x61\x9d\x12\x1d\x9d\xb6\x7d\x4b\x69\xc0\xbb\xe6\x04\x3e\xf1\x86\x72\x3e\xc3\x18\xd2\x24\x58\xb1\xb2\x67\x0f\xe9\x55\xeb\xf0\xff\x35\xfd\xf2\xba\x3b\xb9\xe9\x82\x36\xb7\x1c\xf7\x99\x2e\x4f\x67\x57\x37\xe1\x64\x93\xcf\x92\x0f\xcb\x1c\xca\xa5\x93\xec\xca\xaf\x37\x84\x4c\x0a\xa1\x67\xfa\x34\x6d\xff\x7c\x62\xfa\x11\xec\xa9\x06\x93\x9c\xf7\xc0\x9e\xc4\xca\xa4\x53\x22\x4b\xe1\xef\x88\xba\x15\x12\x2c\x25\x8b\x48\x27\x79\x0a\x3f\xb3\x3f\xf2\x44\xab\x6a\x9c\xc4\x70\x16\x43\xba\xc8\xf9\x15\xa9\x4a\x4b\xea\x55\xe5\x6c\xd6\x72\x66\xea\x46\xd8\xf9\x72\x37\x66\x13\xa3\xd2\xcd\xc1\xde\xde\x60\x7b\x85\xd6\x1c\xa3\x70\x44\x5a\x08\x13\xf8\xfe\xb3\x80\x78\x17\x1d\xb2\x00\x6b\x4c\x4e\x79\x7b\xda\xa7\x1c\x4d\xcf\x5b\x82\x18\xa0\x8f\x27\x6e\xeb\x0c\xca\x85\xb7\xe4\x24\x36\xa6\xec\xec\x0d\xb2\x10\xdc\x04\xdc\x1d\x13\x8f\x16\x00\xef\x9d\xd6\x78\xb3\x8c\xb7\xd7\x7c\xd3\xab\xd0\x26\xd6\x49\xf8\xbc\xf5\xab\xa4\x2d\x86\xcd\x19\x18\x8a\xcc\xa1\x4c\x0d\xab\x55\xd5\xee\x61\x9a\xd4\xc7\x73\x53\x70\x5b\x88\xa8\x97\x66\x48\xa7\x28\x8c\x02\x28\x22\xe2\xca\xbd\xdc\x66\x66\xf4\x35\x74\x65\x49\x63\x32\xc5\xa4\x43\x26\xc5\x2e\xb9\x37\xa4\x1f\xc8\xfb\x62\x86\xf4\x8a\x2c\xea\x86\x0b\xc2\xd8\xb6\xdd\xbc\x07\x83\xea\xde\x23\x61\x94\x30\xe8\x0b\xa2\x4c\x1d\x16\x5c\x23\x07\x4c\x59\x31\x67\x38\x36\x28\x42\xea\x5e\xee\x8c\xaf\xc5\x02\xd0\x23\xcf\x23\x09\x66\xb4\x04\x05\xa2\x47\x39\x75\x80\x6b\x37\xa7\xe1\x11\x58\x75\x4b\x59\xfd\x6d\xa3\x15\x89\xc7\x00\x13\xbc\x0c\x49\x42\x85\x3f\x48\x93\x06\x82\xc4\xfc\x06\x57\x6e\x52\x3f\xfa\x08\xa8\xb9\xd8\x8e\x39\x49\x50\x37\x43\x63\xf6\x15\x80\x57\xa8\x37\x3b\x0d\x7d\x23\xc9\x6f\xf3\xf8\xcc\xa9\x6c\x8a\xbd\xf1\xc5\x2e\xc7\xbf\x49\x0a\x79\x43\x7c\x68\x3b\xf5\x8a\xdd\x86\xf1\x9d\x2f\x5f\xae\x91\x3f\xb6\x0f\xec\x1b\xb7\x85\x55\x4b\x78\xbb\x70\x6a\xbe\x26\xe6\x50\x15\x1b\x60\x05\x42\xab\x0a\x18\xad\x21\xab\x76\x64\xed\xed\x0d\xd6\x24\x5c\xfb\xa0\xba\x61\x03\x0d\x69\x75\x84\xca\xd7\xb4\x19\xb4\xdc\xcd\x34\xf6\xf6\x76\xd3\xfc\x56\x9d\xb7\x90\x4c\x52\x25\x10\xf0\xc2\x47\x1c\xda\x7f\x31\x0c\x40\x31\x6b\x85\x02\x23\xd3\xda\xbf\x1a\x1e\x54\xda\x67\x8e\x87\x4b\x04\xaf\x8e\x30\x08\x96\x0c\x79\x65\x0e\xfe\x07\xc7\x03\xd0\x13\x4f\x51\xf1\x1c\xd0\x85\xf0\x6d\xfb\x57\x43\x05\x9f\xbc\x48\xba\x97\xa2\x42\xfc\xfa\xd7\x46\x43\xea\x89\xba\x19\x34\x58\x3d\x4e\x50\x33\xf5\x63\xd5\x01\xfa\xd4\xb6\xc7\xb5\x68\xad\x9c\x75\x61\x84\x2f\x5f\xec\x83\xea\x86\x2d\x68\x15\x2e\xf2\x1d\x3f\x52\xa9\x23\x6f\x9c\x56\x8b\xb9\x91\xb5\x20\xeb\xbc\xb6\x4c\xc8\x8d\x4b\x21\xc4\x6f\xe1\xd5\xdf\xa5\x1b\x4f\xee\xab\x92\xbf\x71\xf6\x2a\x9d\x44\x8e\x9e\xd2\x04\x55\xa3\x17\x97\x30\x5e\x12\x0c\x3f\x2a\xfb\x47\xf1\xdb\xb4\x1a\x32\x6f\x30\xa8\xe8\x37\x57\x4e\x41\x18\xb0\x02\x40\x99\x82\xd2\x76\xcb\x6b\xaa\xfc\x90\x84\xab\x73\xc5\x50\xca\x8f\x8a\xdf\x81\x17\x80\xfe\xb2\x00\x8c\xbe\x85\x57\xad\xe9\x0e\xe0\xe4\xa7\xdd\xc1\x6e\x2d\x4a\x4c\xe2\x4a\x41\x9f\x74\x43\xc9\xca\x38\xc1\x99\xc5\x2a\xbd\x8a\x8a\x62\x74\x7a\x0d\x95\xd1\xc8\x44\x98\xd3\x84\x31\x77\xf7\xd0\xd9\x81\x03\xe2\xdc\x38\xbd\x8a\x1e\x30\x18\x46\x81\xc8\xc0\xf9\xc7\x36\x2d\xa1\x90\xcf\xed\x04\x5c\x42\xff\x54\x4d\x79\x5c\xd4\x2e\xa8\x62\x22\x1a\x25\x34\x6f\x6d\x96\x17\x70\xd3\x40\xee\xda\x4f\x45\x18\x13\xa7\xcb\x2e\x51\xe5\xa4\xd2\x5e\x85\x7b\x6a\xe5\xfa\xd6\xb9\x17\x8a\x39\x73\xde\xdd\x74\x73\x15\x58\xb8\xcf\x8e\x2f\x2b\x54\xff\x17\xf9\xf5\xa9\xc6\x4a\x9e\x08\xae\x9f\xa7\x1a\xf5\x31\x74\xdf\x82\x10\x8e\x99\xfb\xe2\xb3\x07\xe3\x88\x35\x55\x55\x2f\xa3\xaf\x93\x91\x92\xa4\xbe\x09\x5a\x87\xdd\xc3\x9c\x27\x0f\xd8\x3f\xf6\xf6\x6d\x49\xa6\x91\xa2\x5d\x24\x51\xb6\xdd\x6b\x26\xf4\xf4\x6b\x58\x85\x3b\x90\x5c\x77\x1d\x84\x32\x49\x24\x41\x37\x3d\xb1\x98\xc4\xbe\xe4\x58\x55\x73\x81\x15\xe9\x91\x8b\xf4\xa3\xdd\xec\x0c\xc5\xb0\xec\xb6\xa7\x3a\x58\x0e\xbe\x82\xf1\xa0\x17\x76\xba\xdb\x64\xc5\x24\x9e\x8a\xbc\xd1\x70\x72\x68\x67\x30\x0d\x2a\x2d\x00\xbd\x78\x48\x0f\x90\x55\xa5\xb5\x63\x12\x46\x32\x05\x47\xe6\x1c\x3b\x80\x13\x38\x62\x31\x0a\x07\x8e\x63\xda\xc0\xe0\xa4\x32\xf8\xdf\x71\xb3\xb2\xe4\xac\x94\xd4\x87\x89\xb2\xe4\x6c\x72\x78\x70\xd0\xe4\x92\x9d\xc3\xca\xc1\xde\x0c\x05\x0c\xc6\x13\xd3\xfb\x75\x2f\x40\x21\x62\x39\x0b\xe6\x1d\xe3\x4e\x18\x8b\xc4\xf5\xa2\x44\xa3\x25\x3b\xd0\xd6\x2d\x99\x3d\x4f\x9b\x3e\xc4\x5d\x19\x00\xe0\xe2\xd2\x7e\xec\x56\x04\x52\x31\x83\x7a\x0b\x51\x25\x5f\xd3\xb6\xaa\xf7\x80\xd2\x2b\x52\xa8\xef\x58\xe4\x0b\xae\xbd\x1f\xa9\x76\x0d\x42\x8d\x2e\xf2\x68\x56\x71\x94\xa5\x2f\xd7\x63\x38\x25\xfb\x93\xc1\xd7\xea\xb1\x6d\x44\xbf\xca\xb5\xb1\x8d\x61\x9d\x91\x34\x99\xa9\x16\xd2\x65\x82\xc4\x73\xc2\x32\x7c\x08\x8d\xb7\x3a\x7c\x54\x14\x57\x5a\x02\x2f\xef\xf4\x2a\xe2\xcb\x6d\x84\x2f\x41\x20\xdc\xca\xe4\x64\x0b\xeb\x70\xad\x52\x93\xdd\x74\xc8\x35\xa4\x72\x34\x48\x88\x2a\xc5\x85\x52\x9a\x21\x85\x6f\x0a\x59\x7e\x45\xa5\x6f\x8d\xee\x51\x34\xa8\xc2\x7f\x71\x9e\x5f\xbe\xe4\x9f\x30\xe7\x69\xd3\x94\xeb\x1d\xa5\x71\xa5\xb0\xc3\x64\x6a\x38\xe6\x2d\xd4\x76\x37\x98\xe5\x86\x78\xdf\xbe\xe8\xfe\xa9\x62\x72\xcd\x0e\xbf\x26\x36\x1b\xea\x0c\xdc\x27\x0e\xd2\x45\x1a\x14\x32\x96\x08\x0b\x85\x74\xdf\x70\x2c\xa9\x2a\x4c\x9d\x37\xbb\xe6\xbf\xf4\x41\xc4\x8f\x91\xdb\xf3\xfc\x6a\x35\x2f\x67\x57\x91\x9a\x69\x6d\x53\xe2\xfd\xf9\xf4\xcd\xeb\x67\x20\xa6\x23\x0d\xc5\x40\xd8\xa8\xae\xe0\xcf\x2f\xd8\xc7\xcf\xc0\x76\x85\x99\x7d\xfc\xcd\xb5\x4d\x97\xe1\x94\x04\xd4\x1e\x9f\x9d\xbb\xa2\xa0\xbe\x88\x92\xe6\xbf\xcf\x0e\xdd\xb3\x6f\x1f\xbb\x36\x49\x58\x20\x53\xbb\x82\x80\xc2\x73\xf7\xec\xc0\xb5\x3f\x7d\xc2\xf6\xf9\xb9\x6b\x2f\x00\x7d\x71\x09\x02\x7b\x2c\xde\xdd\x7c\x23\x2b\xe9\x5f\x87\x02\x5e\x71\x01\x69\x41\xc8\x68\x31\xa5\x76\x07\x4a\xc9\x3e\xf6\xd2\x34\xb8\x2a\x41\xcc\x30\x22\x11\xb9\xac\xa9\x65\x2e\x5a\xc0\xb8\xd3\xf7\x6b\xd3\x4e\xed\x07\x6a\x6a\xb6\x7b\x0d\x71\x12\xc2\x18\x4c\x03\xfe\x09\x17\x28\xaa\x8a\xbc\x6b\x54\xdc\xf0\x6d\xd4\x11\x17\x5e\x42\x19\x11\xaf\xf9\xfe\x18\xaa\x20\xa6\x5b\xab\xa6\x5f\x43\x70\x1f\x0e\x3f\xbc\x79\xf4\xe4\xcd\x0f\x95\x04\x27\xd9\x49\x89\xec\xfe\xe4\xda\x3e\xba\xb4\xcf\xdd\xb3\xc3\x43\xd7\xf6\x02\x40\xf9\x7a\x5e\x22\x78\x35\x4c\x27\xc9\xdf\xfe\x98\x92\xe2\xa7\x4f\x9c\x3c\xf9\x87\x33\x12\x87\xa5\x77\xd9\xeb\x8a\x7e\xaf\x90\x3f\x87\x6c\x18\x20\xca\x86\x11\xf2\x2e\x60\x6c\x95\x1f\x0d\x17\x24\x46\xbf\x57\x75\x9c\xf5\x9d\x04\xc5\xae\x49\x24\x1d\x31\xab\x3f\xcb\xbe\x0c\x90\xf8\xf2\xdb\xf4\xcb\xb3\xc7\x07\xee\x99\xfa\xdc\xb2\xdd\xb3\x6f\x7f\x74\x6d\x34\xb3\xdd\xb3\xb3\x6f\xbf\x73\xcf\x6c\xe5\x42\x8f\x7e\xe7\xcb\x76\x89\x7c\x8e\x44\x8e\x45\x91\x40\x00\xfa\xf6\xb9\x8b\x93\x20\x38\x3f\x3f\xaf\x1d\xb8\x11\x23\xfc\x40\x19\x2e\x44\xb1\x28\x03\x74\x3d\xa4\x68\x7d\xb0\x5a\xaf\x46\x77\xcf\x12\x14\xb0\x21\xc2\x96\x10\x39\x32\xd1\x2d\xdf\x3b\xff\xf9\xa4\x7d\xee\x72\xc2\xee\x75\x81\x90\x44\x1f\xac\x1a\xc2\x6a\x94\xfb\xc8\x53\x18\xe7\x63\x65\x55\x0f\x5c\xfb\x95\x28\xd0\x60\x9f\x22\xef\x82\x0f\xa8\x51\x9b\x83\xf5\xdc\xb5\x23\x10\x83\x10\x32\x7e\x9d\x1f\x9f\x9d\xdf\xc8\x85\x70\x8b\x90\xf0\xb1\x1f\xbb\x36\xd0\x0e\xcd\x67\xdf\x3e\x71\x0f\xdc\x33\xde\x01\xc1\x19\xa2\xeb\x31\xbd\x32\xe1\xe8\x24\xcf\xb7\x48\x38\x7a\xc8\x0d\x11\xce\xdf\x11\xb0\x0c\x5d\x38\x9f\x28\x85\xb1\x64\xdf\x6d\xa4\x53\x31\xfb\x3f\x14\xe9\x64\xa8\xde\x02\xe9\xbc\x7e\x7e\xf4\xfe\x16\xc9\x86\x0f\xb7\x21\x92\x39\x26\x18\x43\x8f\x59\x8c\x58\xbc\xd7\x7d\xeb\x48\xa8\x1c\xac\xe7\x22\x61\x37\x89\x97\x1d\x48\xa7\x30\xfb\x3f\x14\xd9\x48\x54\xe7\xfb\xb6\x0a\xff\x5b\x99\x6c\x8e\x8f\x4e\xfa\x50\x4d\x71\x5c\x63\xec\xce\xa4\x73\x7c\x74\x62\x37\xcf\xa6\xbd\xd7\x0d\x71\x9c\xfc\xec\xeb\xa9\xa6\x0a\x40\x03\xc8\x5b\xa7\x9d\x2a\x38\x6a\xe9\x47\xe0\xbb\x66\xab\x56\x6e\xe1\xd2\x43\xe3\xf9\x77\xae\x9d\xa0\xfd\x04\xc9\x54\x72\x5c\xa8\x3f\x77\xcf\xce\xec\x7f\xa7\x4a\xf6\xb0\x1f\x1f\x1c\x08\x54\x66\x1f\x6f\x8e\xd5\xd7\xd3\x04\x17\x2c\x87\xb2\xec\x57\xab\x38\x27\xb2\x21\xab\xef\x67\x24\xb6\xdd\x34\x65\xfc\x30\x89\x83\x8a\xa3\xd1\x3a\x11\xf4\x64\x7d\xfc\xf0\xba\x81\xe5\x89\x57\x72\x87\xcd\x88\x97\xd0\x21\xc2\x51\xc2\x6c\x39\xab\xb3\x33\x91\x15\xce\x66\xb2\x70\xa9\x10\xdb\x6d\x0d\x3e\x47\x5b\x0e\x04\x45\xe3\x8a\x72\xf4\x2b\x55\x06\xc0\xb5\x05\x94\xe7\xa5\xcd\xac\xc1\xfd\x18\x07\xa2\x78\x81\xa0\x21\x81\x18\x8f\x60\x16\x93\xc0\x42\x1c\x28\xa9\x6f\xc9\xbf\x31\x77\x7b\xfe\x1a\x59\x81\x40\x1a\x82\xa0\x24\x4c\x8b\xde\x38\xd4\x96\xd8\xf4\x61\x22\x79\x88\x46\x25\x1c\xcd\x47\xd6\x82\xb1\x68\xbc\x2f\x53\x4d\x2d\x08\x65\xe3\x1f\x7e\xf8\xe1\x07\x59\x2b\xba\x0f\x79\xde\x06\x21\xc4\x10\x04\x61\x15\x29\x7c\xd0\x2f\xda\xa9\x60\xb5\xf5\x97\x23\xb7\x50\x80\x02\xaf\x9e\x06\x04\x98\xf7\x93\x0a\x42\x80\xf0\xbd\x5b\x6f\xa9\xdc\xfc\x1b\x5c\xd6\xae\xb9\xf5\x5e\x34\xb1\x54\x9b\xf6\xe5\x4f\xf3\xd8\x35\x52\x40\x4c\xae\x68\x35\x21\x64\x20\xb5\x10\x83\x01\xfb\xb9\xfb\xa7\x5a\x92\x78\xaf\x9b\xdd\x3b\xb2\x38\x26\xd1\xd2\x62\x0b\x68\x7d\x38\x39\x32\xd0\x6c\xcd\x62\x12\x2a\xe4\xab\x7c\x31\xd4\xfa\xef\xff\xf5\xbf\xf9\x3b\x7a\xef\x28\xc8\x0b\x90\x8c\x14\xac\x20\xa0\x77\xaf\x9e\x1f\x5b\xc7\xa2\x81\xf5\xea\xf9\x36\xb9\x47\x0a\x45\x0b\xcd\x64\xd0\xd6\xf3\x90\x63\xd5\xe6\xde\xd1\x8b\x60\x23\x2a\x5c\xe1\xde\xd1\x41\xb1\x87\x94\x08\x44\x49\x50\xeb\xd5\x73\x6b\xf0\x4e\x88\xe3\x20\x70\xb6\x49\x09\xaa\x06\x6a\x33\x19\x28\x60\xcf\x8b\x0b\xb8\xad\x95\x7b\x35\xb3\x96\x24\xb1\xae\x00\x16\xd7\x3d\xba\xc4\x9e\x25\x4c\x2d\x16\xc2\x16\xb0\x22\x10\x33\xe4\x25\x01\x88\x15\xb6\x06\x62\xa9\x3f\x7d\x4a\xd5\x5b\x96\x30\xf6\x7c\xfa\x64\x3b\xae\x15\x49\xd9\x51\x70\x8e\x0c\xb9\xe2\x8b\xef\x0e\x0f\xfd\x1f\xa6\xdf\x1f\x0e\x0f\xa1\xf7\xc3\xf0\xc9\x77\xb3\xef\x87\x53\xef\x07\x7f\xf8\x9d\x0f\xbf\x7f\xe2\x7f\xf7\xc4\xfb\xd1\xff\xb6\x16\xfb\x77\x46\x3a\x22\x7c\x60\xa8\xb4\xae\x25\xfa\xf9\xa8\x8a\xef\x6c\x93\x68\x0c\x08\x5a\x28\x47\xb4\xfc\x48\xe5\xad\xb1\x8e\x83\x1c\xe9\x46\xf7\x8e\x85\x7c\xa4\xd0\x17\x99\x56\x95\xee\xe1\x0a\xb1\x45\x5a\x62\xcd\x02\xd8\x37\x69\x53\xbc\x4c\x29\x70\x20\x3d\xcd\xc4\x3b\x2b\xc1\x3e\x8c\xad\x37\x80\x32\x18\xab\xa3\x8a\x7f\x0c\x28\x45\x73\x6c\x7d\xfa\x46\xa8\xc5\x45\x2f\x9f\xbe\xb1\x62\x12\xc0\xb2\x9e\x04\xcc\x01\xc2\x94\xa9\xaf\x69\x04\x3d\x34\x43\xd0\xb7\xc0\x94\x5c\xc2\xfb\x4a\xa4\xa6\x42\xb8\x48\xa8\xef\xab\x95\xc5\x5b\x20\xd4\x14\x0a\x7e\x57\xd6\x7f\x36\x11\x6c\x06\x5a\x0b\xd1\xea\x86\x7f\x20\xc2\xbd\x5b\x4a\xd2\x66\x0a\x44\xc1\x34\x80\xd6\x6b\xe1\x8a\xde\x8d\x42\x3e\x0f\x19\x99\xcf\x03\x98\x11\x89\x26\x0c\xa1\x74\x70\x6d\xb6\x80\x21\xff\x97\xe0\x53\xd9\xf0\x5c\xaf\x69\x89\x0a\x7c\x39\xbe\x1e\xfe\xdc\xb5\x43\xe8\xa3\x84\x5f\xb8\x02\x34\x5f\x30\xa5\x22\xab\x50\xa4\x88\xe7\x21\x27\xd5\xae\x7d\x6b\x52\x68\xa5\x88\xdb\xde\xcb\x81\x0f\xa2\xa1\x32\x16\x66\xb1\xbf\x47\xbe\x2f\xbc\xa7\x4c\xc1\x1c\x60\xeb\x58\x72\x3b\xf1\xaa\x56\xea\xde\xe2\x82\xd5\x83\xb9\xd9\xc5\x6b\x18\x67\xd5\x85\x6c\x55\x00\x6f\x48\x95\xbd\x55\x3a\x59\x10\x6a\x6a\x5b\x39\x74\x4a\x1f\xb6\x35\x5d\x58\x36\x6e\x5e\x08\xe1\xcf\xd3\x05\x93\x3a\xde\x9f\x05\x74\x65\x66\xce\x9b\x0a\xde\x7d\x92\x6b\x76\x5f\xb8\xf8\xab\xf7\x16\x89\x2d\x3e\x45\x0b\xf8\x7e\x0c\x29\x75\x2d\x21\xb8\x72\xb8\x47\xf0\x33\x08\xa3\x00\x8e\x48\x3c\x77\xad\xc3\x6f\xff\x34\x3a\x18\x1d\x8c\x0e\xef\x8b\x24\x20\x56\x47\x78\x11\x57\x52\x85\xf5\x5e\xbd\xda\xf0\xd1\x9f\x0d\xeb\xda\x38\x09\xa7\x42\xf7\x5c\x47\x16\x12\x86\x56\xb2\xd0\xcd\xee\x0b\x59\x70\x78\x2c\x39\x39\x45\x0f\x8f\x7f\xf8\xf1\x5e\xad\x3b\xc4\x5e\xbc\x14\xd7\x57\xa3\x8b\x17\xb9\x87\xcd\x86\x4d\x69\x5f\xb2\x95\xbd\x84\x60\x6f\x01\xb0\x28\x38\x50\xc3\xb9\x95\xfd\x2b\x3f\x84\x3e\x50\x38\x5d\xc8\xaa\x1f\x23\xf5\x40\x58\x1e\x4a\x73\xce\xd6\xaf\xd5\x00\x4a\xb2\x79\x7c\x9b\x92\x61\xd9\x82\x73\x94\xb0\x45\xca\xa4\x4d\x0c\x9c\x2e\x23\xf8\x96\x60\x79\x6c\x88\x3e\x52\x8b\x9a\xa2\x46\x3a\x84\xff\x4c\x40\x90\xa3\xc9\x94\x7c\x61\xae\x23\x49\xc2\xab\x8d\xad\x8e\xac\xfa\x09\x1b\x7b\x71\x95\x11\x1a\x76\x40\x03\x71\x6e\x1c\xd7\x27\x0c\xc4\xec\xf4\xf5\xc9\x5d\xe1\x3b\x37\xfe\xd6\x70\x6e\x8c\xb2\x32\xde\xef\x15\x1f\x99\x02\x0a\x9f\xbf\x35\x3e\x7f\x06\x28\xb4\xe4\x93\x6d\x1c\x1c\x6a\xbc\x06\x79\x42\x43\x74\x6b\xba\x30\xb1\xa6\x08\xcf\x2d\x91\x1e\xdf\x9a\x91\xd8\x92\x19\x1b\x2d\x19\x69\xa1\x45\x02\x92\x4c\xc4\x6d\xce\xf5\xbd\x89\x92\x0c\xf8\x9f\x1e\xa9\x35\x43\xdd\xcd\x8a\x22\xec\xe7\x57\x14\x61\x7f\x9b\x2b\x2a\xc7\x6b\x5a\x51\x05\x51\x83\x18\xf0\x2c\x6d\x72\x5f\x44\x00\x59\x6f\xde\x8b\xa1\x0f\x31\x43\x20\xa0\x82\x30\x84\x7c\x55\xe9\xd5\x70\xf7\x8b\xfe\xbe\xac\x0a\x12\x4b\xbf\x45\x35\x50\x79\xec\xb2\x02\xa8\x44\x0a\x4d\xba\x9f\x1c\x41\x98\x0d\x1f\xc8\x62\x15\xb2\xe0\xfc\xea\xa5\x60\x62\x79\xcd\x55\x6c\x65\x4f\xb7\x41\x12\xc6\xb8\x0d\x7c\xc1\x84\xae\x81\x14\xde\x92\xac\xd1\x7d\x21\x83\x13\xf3\x80\x10\x24\x30\x43\xd8\xe7\x87\x88\x3c\x22\xe4\x89\x31\xf8\x32\x20\xc2\x7b\xfc\x98\xf7\x3a\x89\x60\x4c\x09\x76\x72\xcf\x78\xf3\xfc\x13\x84\x45\x01\x95\xf7\xb2\x71\x9b\x69\xaa\x0f\xfc\xd6\x02\xcd\x17\x52\x41\x63\xcc\x44\xe8\xb9\x97\x96\x41\x15\x16\xc0\xfe\x3e\xd1\xa6\x9f\x66\x4a\xb9\x13\xb2\x16\x5f\x97\xe8\xba\x0b\xb8\xeb\x12\xb6\x39\x72\x03\x65\xe7\x00\xfc\x63\x91\xb6\x75\x89\x80\x25\xe6\x97\x52\xf9\x5e\x8e\x7e\xc5\x3b\x67\xf0\x65\xe0\xe1\x09\x5d\xa0\xe8\x57\x2f\x86\x57\x0e\xff\x25\x34\xff\xbf\x52\x06\x66\x33\xa7\x9e\xb0\x4b\xcf\x6f\x89\xa8\xd2\xca\xa6\x7c\x27\x7c\xc8\x49\x50\x62\x6f\xa4\x25\x0e\xad\x0f\xdb\x13\xa6\x4a\x40\x34\x10\x59\x19\xe0\x06\x4a\x3b\xaa\x68\x7c\x5f\x28\x4e\x1b\x54\xf7\xe5\xe1\x9a\xce\x4b\xd1\x57\x82\x7c\x0b\x61\x71\xc6\xba\x16\x3d\x7a\xa3\x12\x2d\xbe\x05\x21\xe4\xcf\x5b\x9c\x94\x37\xce\x30\xf3\xc4\x40\xf9\xae\x10\x86\xa0\x18\xb2\x18\x72\x48\x7c\xc0\x80\x75\xb5\x80\xd8\x4a\x28\xdf\x36\x1d\xce\xdb\x3b\xe1\xa2\x39\xfa\x11\x65\xfe\xb4\x55\xbb\x9a\xec\x73\x4d\xb6\x4e\xfc\xd9\x68\x5d\xb7\x80\x01\x5f\xd7\x8d\x90\xfb\xe4\xbe\x6c\x87\x14\xa8\xd2\x4e\x98\xa3\x4b\x88\xdf\x36\xac\xc0\xdd\xd3\xd1\x6b\xd0\x46\x46\x66\x8b\xad\x53\x51\x3a\x58\x57\x22\xca\xa0\xeb\x4a\x43\xe6\x17\xf7\x85\x84\x34\x4c\x25\x0a\xa2\xf7\xc6\xe3\xb3\xbc\x56\x2f\x42\x80\x82\x7a\xba\x49\x5f\x6f\x9d\x68\xe4\x48\x5d\x29\x46\xc1\xd5\x95\x5c\xd2\xe6\xf7\x85\x56\x04\x40\x25\x42\x69\x42\xf6\xdd\x92\x8a\x10\xf3\xdf\x88\xb0\xe5\x92\xf0\x9f\x51\x4b\xd6\x60\xab\xe4\x62\x02\xd3\x85\x60\x72\xc0\x77\x21\x99\xc2\x07\xf7\x85\x68\x32\x44\xb3\x05\x60\x16\x12\xda\x90\x19\x82\xd4\xe2\x77\x85\x4b\xe4\x27\x20\x90\xb7\x04\x2b\x84\x86\x19\x4d\xfe\xb0\x48\x6c\x25\x18\xfd\x33\x81\x9d\x96\x69\x6d\x91\xad\x40\x1c\x1d\x64\xb6\x7b\x7b\xf5\x2d\xf8\xb6\xdc\x95\x3f\x4f\x8e\xba\x37\xe8\xcb\xd3\xd8\xef\x83\x1f\xcf\xba\x0b\xb5\x1d\x1f\x9e\xce\x63\xdc\xef\x05\x04\x41\x40\xae\x5e\x92\x38\x14\xf9\xf0\xcd\xbd\xc5\x99\xd9\x6b\x7e\x37\xbd\xdd\xe5\x2a\x02\xb4\xb1\x35\x2a\x75\xdc\x79\x61\xd6\x14\x35\xb0\xe0\x51\xf2\x9a\x7f\x89\x80\xd4\x9b\x03\xec\x5b\x31\x9c\x0b\x6f\xf3\xd4\xb9\x37\x9f\xee\xc0\x1a\x24\x14\xce\x92\x40\xa8\xa3\x18\xa4\xc2\x5c\xc7\x3f\x5e\xc9\x2d\x57\x2d\x93\x0c\x9f\x9c\x26\x8c\x71\xe4\xe9\xa5\xf2\x48\x20\x49\x42\x22\x58\x51\x8b\x08\xdf\x0c\x44\x98\xa8\xc6\xa8\x69\x33\x3e\x56\x1f\xfd\x03\x72\xcc\xf2\x95\x62\x71\x02\x5d\xfb\x14\x52\x66\xfd\xf7\xff\xfa\xdf\xad\x6e\x15\xef\x63\x78\x89\xe0\x55\x87\x73\x5b\x4f\xe0\x71\x7e\x02\xc3\x39\x88\xaa\x53\xcf\xd4\xf8\xbd\x6d\x22\x02\xb7\xff\x76\xac\x0b\x97\x2e\x6f\x49\x0f\xd0\x42\x14\xe8\xf1\xd1\x49\x7d\x00\x68\x55\xc7\xab\x3b\xbe\xe9\xc1\xf3\x22\x9d\x07\x68\x5b\xe8\xa7\x07\xa8\x90\xdf\x3e\xc6\x9b\x91\xf1\x6b\xf0\xb5\xfd\xc8\xcf\x12\x2e\xeb\x5f\x6d\x93\x02\x62\xe8\x0b\xbd\x5e\x81\x14\x3e\xa8\xc7\xb7\x42\x08\x39\x18\xea\x29\x42\x37\xfb\xd8\x4c\x19\x1f\xf2\xcd\xbe\x12\x0a\xe9\x4e\x1d\x9d\x92\x2d\xf4\xe6\xc2\x48\x06\xea\xf7\x62\xc6\x7f\x89\x21\xc4\x29\x2f\xae\x0d\xfe\x7f\x4d\xbc\x0b\xe8\x57\x7b\x1c\xbd\x56\xe3\x09\x1d\x33\x60\x99\x56\xa8\x9a\x93\x9f\x00\x91\x59\xad\x9e\x85\x97\x4e\xa5\x82\xe3\xf1\x8f\xae\x3d\x2f\xfb\x46\xbf\x04\x28\x48\x62\x4e\x98\x32\xe1\x28\x87\xe2\x20\x77\x64\xd7\x7b\x25\x2b\x72\x88\x8a\xa4\x20\xe3\x36\x54\xf6\xab\xe1\x4c\x8e\x60\x85\xcb\xe1\x63\xbb\x22\x92\x44\x05\x39\x20\x82\x2d\xde\x14\xfa\x63\xcb\x38\x87\x8a\x70\x66\x13\xef\x48\x17\x65\x94\xe4\x79\x8a\xd8\x0e\xd2\xef\x54\x9e\x93\xc3\x90\xf8\xa0\x44\xde\xb9\x87\x0c\x4c\x11\xf6\xe1\x67\xdb\xb5\x87\x87\xfa\x61\x4c\xb8\x54\x66\xfb\x08\x04\x64\x5e\x12\x14\xeb\x99\x99\xe8\x79\x98\x7d\x66\xf6\xa5\x53\x53\xf7\xca\xa6\x25\x3b\x54\xf9\x09\x6b\x24\xd6\xb6\xaf\x2b\x53\xc1\x58\x99\x24\xd1\x53\x82\x96\x9d\x4e\x89\xbf\xcc\xc3\x63\x97\x84\x05\xbe\x12\x7a\x18\xd7\x46\x54\xc7\xe6\x74\x4e\xf6\x52\x47\x94\x82\x2b\xf9\x00\xcf\xb3\x69\x1d\xba\x55\x63\x86\x90\x52\x30\xcf\x79\x3f\xb6\x91\xda\x9a\x50\xd1\xc4\xf3\x20\x35\x73\x94\x1d\x67\x7b\x42\xbd\x9c\x25\x81\x6b\xcd\x48\x82\xfd\x74\x77\x94\x41\x57\xc1\xb2\x39\xe6\x20\x2d\xab\xa3\x12\x27\x15\x88\x87\x40\x94\x86\xae\xea\x4b\xe6\xc3\x5e\x29\xcb\x4e\x64\x22\xf8\x89\x7b\xe8\x9e\xd9\x33\xd3\x18\x62\x42\x67\xe7\x9a\x05\xa0\xba\xd5\x20\xdf\x0c\x6a\x3d\xa7\xd1\xa6\x28\xad\x97\x17\xea\x50\x33\x85\xf2\x0a\x9a\xe7\xc7\x4a\x57\x44\x49\xe0\x33\x42\xf2\x6e\x03\xf5\xf7\xb8\x7e\x17\x04\x1f\x51\x7e\xe3\x6d\x3b\x93\xc0\xb2\xe1\x48\xd2\xe7\xcd\x31\xc0\x1e\x0c\x74\xc3\xbe\x17\xe5\xf2\xc3\x0a\xca\x2a\x2e\xc3\x6a\x19\x2a\xdb\x13\x2b\xae\x95\xb8\x32\xeb\x73\x0a\xbc\x8b\x24\x1a\xc6\x50\x26\x50\xbd\xdb\x6c\x8d\xc9\x8f\xa7\x7f\x22\x8b\x47\x17\xdd\xd2\x83\xae\x93\xa7\xb1\xe2\xc3\x02\x26\x7a\x1d\x3b\xea\xdb\xdf\x85\xe7\x78\x33\x93\x4f\x8b\x7d\xda\xb9\xfa\x61\x9d\xb9\x4d\x91\xcf\x54\x7a\x49\xa7\xd7\x7d\x44\x2d\x60\x85\x49\xc0\xd0\x90\x41\x0c\x30\x83\xbe\x65\x64\x3f\xb5\x20\x06\xd3\x80\x5f\xfa\xa7\x84\x2d\xac\x4f\x9f\x6c\x06\xbd\xc5\x28\x5c\x72\x5a\x01\x78\x39\xf2\x48\xf8\xe9\x93\x2d\x54\x09\x9f\x3e\xd9\x14\x04\x90\x96\xdf\x32\x62\xc5\x89\xd6\xf0\xb2\x05\xb4\x28\x08\xa1\x05\x3f\x43\x2f\x61\x60\x1a\xc0\x7d\x1f\x30\x30\x05\x14\x8e\xca\x90\x1e\x71\x00\x53\x70\xd5\xe4\xa6\xc6\xe4\x24\x8e\x2c\x81\x24\x44\x59\x2c\x4a\x0f\x19\xfb\xcc\x95\x01\xf7\x28\x08\xac\x29\xb4\x22\x18\x73\x61\x9c\x03\x02\x2c\x4f\xe5\x99\xb7\xe8\x92\x32\x18\x0e\xaf\x90\x0f\x2d\xb9\x54\x16\xf0\x62\x42\xa9\x05\x82\xc0\x92\x88\xa1\x55\xc0\x35\x42\x76\x2a\xbe\xab\x87\xcc\xf2\x00\x56\x3a\x19\x46\x34\x64\x16\x50\xe3\x0d\x03\x78\x09\x03\x0d\xce\x40\x19\x87\xe2\x0b\xc8\x77\x77\x1e\xc7\x4e\x11\xb4\x2e\x57\x83\x7f\x31\x32\xba\xbf\x34\xd4\x46\xe0\xad\x64\xc4\x61\xe3\xa4\x74\xcb\x14\x54\x21\x17\x14\x08\xe6\x7d\x00\x01\x15\x79\x02\x2c\x60\xa9\x69\x3c\x93\xd0\x08\x93\x4f\x88\xe6\x31\x10\x2a\xc5\x29\x64\x57\x10\x62\x8b\xc2\x60\x36\x94\x51\x81\xd8\xcf\xb0\x72\x1c\x90\xc4\x17\xd1\x82\x1c\xf2\x16\x09\xc4\x84\xe0\x15\x13\x98\x61\xe0\xa2\x12\xb5\x14\x5e\xc2\x18\x04\x56\x88\x70\xc2\xf2\x46\x01\x19\x62\xae\xd6\x96\x13\x9b\x42\x63\x14\x13\x2e\x72\x5a\xff\xfd\xff\xfc\xbf\x56\x24\xe7\xc7\x49\x02\x30\x91\xdb\xe6\x6a\x81\x82\x5c\x73\x7e\x0e\xca\x2d\x80\x44\x8a\x8f\x28\x26\xf3\x18\xd2\x92\xcc\xd9\x51\x92\x02\xf1\x1c\xe1\x21\x23\xd1\xf0\xf1\x81\xa5\x7e\x4d\x09\x63\x24\x1c\x7e\x7b\x50\x79\xb2\x48\x59\xca\x5b\x40\xef\x62\x4a\x3e\x67\xd2\x94\x91\xe6\x50\x1d\x3c\x12\xe2\x93\x08\x7a\x42\xa9\xc2\x80\x3c\x74\xce\x3b\x88\xb7\x1f\x44\x6b\x3d\xe7\x19\xc7\x41\x9a\x84\xb0\x47\x1e\xc8\xb6\x5b\x7a\x06\xe5\x87\x04\x63\x84\xe7\x7d\x0f\xc5\xc5\xe3\x8e\x77\x0c\x45\xa5\xb1\x1c\xc6\xd5\x2b\x7d\x05\x10\x1b\x8d\xca\xf7\x85\xd5\xd8\xeb\xd6\x15\x31\x05\xad\x78\xad\x26\xe6\xb9\xe2\x9b\xa9\x96\x45\x26\xfa\xe7\xc2\xde\xb3\xa3\xe3\xbf\x7d\x7c\x6f\x9d\xbe\x78\x7b\xf4\xf6\xd4\x1a\x68\xfd\x9b\x2a\x94\x66\xbb\xfc\xaf\x34\xb6\xd8\xd1\x3a\x98\x26\x5d\x8d\x44\x6d\xbd\xb6\x66\xf3\x12\x51\x4f\xe5\x7d\xcd\xa7\xf7\x6e\xa5\xf4\xda\x9c\xfc\xe3\xe4\xf4\xc5\x9b\x46\x4b\xc7\x89\x38\x9b\xda\x31\x5f\xb7\x4d\x2b\x99\x7f\xd5\xbe\x7c\x29\x94\x54\x7d\xb7\x65\xbd\xc0\x3c\xcb\x7b\x26\xa9\x6d\x29\x55\x61\x26\x0b\x16\xfc\x4d\x31\x1c\x2e\x52\x15\xed\xbb\xdd\x0d\x32\x8a\x0b\x6a\x8e\xb0\xa9\x89\xd4\xb2\x98\x4c\x85\x91\x5d\xe4\x1f\xeb\xcf\x5e\xa2\x00\x2a\x97\xbd\x5e\xb7\xf9\x3a\xcd\x6f\xd3\xdd\x74\x9b\xd7\x1f\xf5\xd1\x5d\xdd\x7f\x3e\xc8\xe1\x65\x3a\x3d\x50\x29\x08\x88\x0d\xa2\x0e\xb0\x9c\x18\x40\x17\x24\x09\x7c\x8b\xe0\x60\x69\xc8\x7e\x90\x3f\xb1\x00\xae\xea\x0b\x86\x11\x5b\x66\xb2\x4b\x2a\x94\xa6\xdd\xae\x90\x21\xb9\x61\x52\x99\x84\x21\xe4\xd3\x0a\x80\x62\x38\x94\x19\x9b\x72\x13\x53\xf1\x32\x3a\xa2\x20\x4a\xfd\x06\xa8\x6b\x89\xd4\xb6\xd4\xb5\x3c\xc0\xe0\x9c\xc4\x08\x52\x21\x8f\xe9\x02\xac\x77\x23\x80\x29\x22\xea\x2c\x81\xc5\x25\x04\xdd\xb6\x08\xd6\x8d\x43\x48\x5d\xc4\x90\x4b\x4d\x8d\x97\x2d\xd5\x83\x34\xa3\xd5\xf7\x31\xcc\x35\x10\x1a\x7c\xbd\xfd\xf4\x10\xfc\x05\xf0\x3c\x18\x31\x79\x80\xeb\x6b\xda\xfe\xef\x28\x55\xc2\x8a\xcb\x5c\x24\x34\xed\x82\xf5\x88\xe7\xdd\x12\x16\x24\x51\x40\x40\x96\x3f\x5b\x99\x05\xa4\xa5\xcf\x9c\x65\x6b\x78\x7c\xce\x36\x59\x35\xd5\x0a\xe3\x65\x71\xae\x5a\x69\xbc\x20\x84\x42\x53\x42\xad\x23\xe2\xf6\x18\xf2\x56\xc2\xc8\xe8\xa0\x5b\x9c\x4d\x99\x09\xaa\x59\x6c\xec\x38\x4d\xb1\x92\x3f\x4f\x53\xc6\xb8\x99\x03\xb5\x08\x5e\xe5\x9c\x36\x77\xb4\xea\x49\x95\xcf\x56\x3d\x2f\xcd\x3f\xe4\xd4\x78\x7b\x10\x33\x7e\x5f\x8e\xad\x69\x4c\xae\xa8\x0c\xb9\xe3\xf3\xb3\x4a\x3e\x46\xab\xcf\xf0\xa3\xa0\xff\x0f\x10\xf8\xcb\x55\x64\xd4\xad\x0a\x9a\x1f\xa4\xc5\x55\x6c\xe9\xae\x17\x02\x63\x6a\xcf\x04\x48\x52\x5b\xde\x62\x92\x5d\x90\x2b\xb5\x0c\x6f\x94\x79\xb0\xb7\xd8\x59\x3c\x03\x2b\xc4\xd0\x66\xb5\x44\x5f\x85\x7c\xbd\x11\xd4\x23\x78\x86\xe2\x50\x8b\x3f\x0f\x76\xd0\x2a\x3b\xe8\xb1\x44\x92\xf5\x21\x93\x11\x37\x63\x0a\xad\xe0\x07\xba\x90\x92\x3c\x93\x68\x32\x0d\x51\x83\x5b\x9e\x4d\x70\x06\x54\x6b\x92\x92\x7a\x00\xbb\x78\x3b\xd6\x1f\x61\xf2\x84\x92\x55\x13\x65\xf9\x80\x61\x21\x64\x47\x69\xcc\xf8\x61\x69\x7d\x78\x71\x72\xfa\xee\xc3\x0b\x25\x07\x85\x10\x7b\x52\xae\x51\xf2\x4f\xc3\x21\x55\xe2\x27\x05\xd7\x1b\x75\x16\x4b\xc2\x56\x33\x8b\x02\xe0\xc1\x85\x28\xc6\x9d\x3a\xe4\x88\xec\x42\xc2\xeb\xa6\x48\xff\x05\x2f\x19\x2b\x24\x09\x85\x2c\x06\x91\x5d\x39\x07\x23\xa9\x0d\xef\x25\x5d\x8a\x16\x8f\xc7\x1c\x26\x57\x71\xac\xf9\x07\x49\x72\x02\xbc\x16\x09\x19\xe1\xb2\x7b\x41\x50\x47\x82\x0d\x7a\x1d\x0a\x48\x6d\x3d\xbf\xcc\x1f\xd1\x62\xba\x86\x16\x66\xe5\x89\xf6\x39\x12\x5b\xe6\x99\xd1\x6c\x1f\x26\xb3\x25\x03\xf2\x66\xcd\xc6\xf9\x9b\xfd\x86\xec\xc6\xf2\x96\x30\xe4\xe7\xd5\xdd\xda\x8c\xbf\x8f\x1e\x21\xe0\x2f\xdf\xae\x63\x33\x8e\x62\xe2\x27\x1e\x1b\xca\x72\xbf\x3d\xce\x6d\xf9\xc1\x90\x8f\x91\xd0\x36\xcd\x47\xa6\x54\x95\x9f\x1d\x5d\x02\x14\x80\x69\x00\x7b\x25\xc1\x04\x45\x18\x18\x62\xd9\xb5\x6f\x11\xc3\x99\xed\xda\x0b\xc6\x22\x3a\xde\xdf\xbf\xba\xba\x1a\xe9\x15\x1d\x79\x24\xdc\xf7\xc9\x15\xe6\xd2\xab\x09\x6c\xca\x21\x15\x1a\x2c\x09\x9e\x30\xfa\x69\x10\xad\x71\xa3\x47\x78\x95\x7b\x0f\xe7\xb7\x71\xe2\xb5\x94\x20\x3c\x25\x56\x12\xcd\x63\xe0\x43\xd7\x8a\xa1\x38\xa5\x2c\xf8\x19\x49\x4f\xf4\x29\xc2\x20\x5e\x2a\x47\x76\x29\xdc\x6b\x60\x47\xd6\x1b\x61\x5d\x82\xa9\x6d\xe9\x98\x84\x61\x82\x11\x93\xed\x5f\x60\x06\xe3\x28\x46\x14\x5a\xd0\x47\x02\x08\x8b\x42\x10\x06\x90\xd2\x60\x39\x6a\xd8\xaa\xbd\xd5\xfd\xf5\xe4\x91\x2e\x8d\x3e\xfe\x15\x82\x9f\x9b\xab\xd0\xc3\x0c\x57\x3f\x52\x80\xf0\x45\x1d\x96\x2b\xd4\x36\x35\xa1\x07\x11\xc0\xc5\x8e\x15\xf2\x8a\x82\x4c\x86\xec\x17\xb2\x41\xce\x33\x2b\xa3\x74\x4f\xb7\x7b\xcd\x59\x09\xab\x72\x2c\xfb\xbf\xff\x87\xff\xbf\x1a\xa2\x12\xb1\xf3\x79\xd6\xd0\x7a\x4a\xe7\xf4\xf1\x10\x26\xc3\x2b\x48\xd9\xf0\x70\x04\x42\xf0\x3b\xc1\xe0\x8a\xe6\xc9\x3f\x6d\x3d\x4c\x21\x1c\x5e\x21\xec\x93\x2b\x3a\x04\xa1\xff\xfd\x93\x11\xfc\x6c\xce\xf7\x17\xf9\xce\xce\xc3\xfd\xff\xdd\x03\xa8\x03\x84\x93\xcf\x12\x66\x03\xde\xd7\xfc\xe9\x3d\x84\xd6\x07\xf1\x15\xc2\x25\x70\x43\xe0\xbd\x3b\xc9\x83\xdb\x43\xc2\xda\x28\x65\x1b\x8c\xa3\x99\xb4\x61\xda\xf0\xde\xd2\x76\x06\xe2\x57\x45\xdc\x06\xd8\x5f\x03\x75\x1b\xe0\x6e\x85\xbc\x2b\x6f\x46\x42\x24\x1e\xce\x63\xb0\x1c\x7e\x77\x90\x2a\xaa\xf3\xda\xc9\xf2\x76\x48\x8f\xfa\x84\xa1\x00\xfd\x0e\xa9\xa5\xc4\x14\x8e\x95\x21\x23\x86\xc8\xad\x95\x70\x24\x91\x12\x91\x39\xe2\xf7\x07\x07\xa9\xa6\x96\xe3\x0b\x13\x86\x64\xb0\x63\xc5\x39\xc9\x16\x28\xf6\x45\xe5\x93\x65\x5b\xd1\x3f\x12\x41\x6c\x51\x92\xc4\x9e\xd4\xed\x49\xa9\x73\x7d\xb1\x5a\x3d\x69\x2d\xed\xf7\xa4\x58\xda\xaf\x49\xad\x9f\x09\xc0\x35\x9a\x19\x75\x15\x92\x0d\x65\x3b\x71\x87\xea\xac\xae\xda\xb4\xff\x68\x06\xf2\x86\x2e\x01\x73\x88\x61\x0c\x82\xfb\x52\xec\xfb\xc9\x7f\x79\xfe\x55\xf4\xb7\xe5\x9d\xb8\x8f\x36\xab\x8e\xea\xd5\x45\x14\x31\x78\x5a\x90\x13\x4f\x10\x83\x56\x6d\x3e\x1a\xe3\xba\xbc\x42\xe4\x55\x36\x5e\x3e\xe4\x2a\x24\xbe\xb8\x08\xab\x35\xcd\xa4\xd7\x72\xc8\xd5\x02\x50\xd1\xc3\x2b\x3e\xee\xa6\x0b\x88\xac\xa1\x0e\x52\x71\x96\x16\x5d\x90\x98\x59\x02\x7c\x19\xd8\xba\x40\xb4\x8b\x1e\xa8\xfa\xc9\xa6\x96\x5b\x60\x82\x63\xff\x8d\x0e\xb2\xc8\xaf\xb7\xf1\xb8\x69\xc9\x6b\xaa\xee\xa9\x32\x7b\xd5\xeb\xad\xbb\x76\xed\xc7\xf5\xcb\x6d\xc4\x7e\x54\x2c\xb8\xea\xe2\x7e\x2f\xb9\x9a\x82\x05\x3f\x47\x01\x40\x58\xfa\x91\xde\xf5\xda\x9b\x6b\x7c\x2a\x02\xd4\x5b\x56\x38\x41\xfb\x22\x90\x5d\xd5\xfe\xcf\x16\x9a\xe0\x63\x69\x9b\x3d\x57\x31\x6d\xd5\x4a\x2a\x31\x48\xda\xb2\x47\xd0\xdc\x56\xa6\xfc\x9a\xcc\x49\xed\x8c\xb3\xc1\x6a\xee\xad\x8d\x6a\x41\xad\x0e\x4c\xd5\x83\x65\xb5\x60\x8d\xd6\xaf\xa8\x04\xb5\x3f\x52\x68\x3d\x97\x07\x4e\xa3\x95\x41\xb5\x51\x93\xda\x64\x4c\xf9\xfa\xd3\x46\x7e\x87\x19\x67\x9e\x68\xb6\xb4\x63\x5a\xc7\xe2\xb0\xb3\xb5\x5d\x9f\x8b\x07\xa4\x36\x29\x78\xd3\x4a\xae\xaa\xc1\xf7\x00\xb6\x3c\x69\xbf\x67\xc4\x92\x50\x58\xc0\x12\xdd\x59\x1c\x1a\xe5\xdb\xfc\xfd\x93\xe8\xb3\xf5\x59\xfc\x53\xa1\x8c\xaa\x10\xa5\x72\xf1\x9f\xf0\x9f\x15\x8a\xb8\x80\x48\xcf\x08\x5d\x19\x7c\xa6\x8a\xc1\xf4\x09\x01\x5d\xc5\x8c\x54\x2f\x0e\x90\x78\xfe\x9c\xe8\x0a\xb2\xe6\x3e\xfa\xf8\xe1\xb5\x75\x92\x4c\x7d\xd2\x5a\x5e\xb6\x67\xf2\xa5\xbc\x6d\x88\x1f\x19\x19\x0c\x79\x11\x41\x8f\x5d\xcc\x20\xaf\x22\x9c\x7d\xe2\xd1\xa6\x6c\xf2\x6b\x90\x89\x2a\xab\x08\x62\xa8\xbd\xc4\x2d\x82\xad\x4f\x9f\xb8\xa4\x4a\xcd\x72\x32\x22\x8e\x60\x01\xb1\x8c\x1f\xd0\xe8\xb2\xc4\x8c\xb5\xa9\x68\x0a\x2d\x0a\x45\x79\x46\xd5\xc1\xa7\x4f\x76\x97\x7b\x45\x7b\xb5\xa3\xcd\xb3\x50\x55\x2c\x56\x26\xb5\xb1\xfe\x8e\xe0\x95\xd0\xc6\x3e\x5b\x5a\x47\x98\xe0\x65\x48\x12\x2a\x2b\x46\xb6\x1d\x2a\x6b\xe4\x4e\x29\x8b\x0a\x22\xcf\x49\x0a\xc0\x91\x76\xf8\x58\x23\x8d\x4a\xe7\x31\xba\x65\x54\x59\x83\xd4\x4e\x16\x40\x78\x96\x08\xcb\xb9\x2c\x30\x97\x60\xa3\xfc\x3e\xf4\x2d\x2e\x52\x59\x97\x88\x22\x46\xaa\x10\xbf\x5d\x31\x52\xe5\x70\x20\xf8\x12\xc6\x14\x11\xfc\x02\xfb\xa2\xbe\x82\x9d\xb3\xd3\xab\x97\x22\xaf\x07\xf2\x60\x6d\x65\xf7\x55\x18\x86\x54\x06\x94\xc6\x6f\xbb\x4e\x54\x81\x5c\x29\x6a\x1e\x97\x1a\xde\x37\xa9\xd3\xe4\x6a\x1a\x46\x71\xd3\x58\x00\xec\x8b\x38\x28\x14\xf2\x5b\xf0\xbe\xbc\x0c\xab\xf3\x4b\xab\x99\x40\x84\x72\x46\x19\xb7\x82\x49\x82\x7a\x15\x15\xcd\x5b\x74\xe8\xfe\x2f\x6f\x5f\x44\x11\xfb\xe5\xaf\x3f\x1e\x1d\x3d\xfb\x80\x17\x60\x1f\x64\xa1\x44\x88\x4b\x1b\x09\xf2\x21\xdd\xf7\xf7\x7f\x79\x77\x10\xb1\x5f\xdf\xfc\x27\x9a\x1f\x3d\xfb\x9e\xfe\xf5\x4f\xe9\xfd\x5d\xd6\xa9\x31\xed\x07\x31\x04\xbe\xe0\xa1\xda\xfd\x04\x14\xab\x1f\x39\xbd\xd5\x2f\x9b\xdd\x01\x21\xf8\x7c\x0a\xe6\x26\xcc\x6f\xc0\x67\x14\x26\xa1\xc5\x1f\x5b\xef\xa1\x4a\x7a\x04\x6b\x4a\x28\xeb\xe5\xcf\xca\x35\x35\x14\x55\x4a\xef\x6f\xe5\x51\x2b\x16\x2f\x5f\xf6\xa7\xbe\x5c\xcf\x63\xbd\x57\x74\xa7\xe7\x79\x9f\x4a\xbd\xed\xcc\xd4\x11\x8f\x9b\x8e\xfe\x1e\x63\x3f\xe9\x38\xb6\xa9\xc6\x7c\xb2\xa1\xb1\xbf\xeb\x38\xf6\x77\xc6\xd8\xdf\x6d\x68\xec\xef\x3b\x8e\xfd\xbd\x31\xf6\xf7\x1b\x1a\xfb\x4f\x1d\xc7\xfe\x93\x31\xf6\x9f\x36\x34\xf6\x0f\x1d\xc7\xfe\xc1\x18\xfb\x87\x0d\x8d\xfd\x63\xc7\xb1\x7f\x34\xc6\x6e\xac\x0a\xd7\x63\xec\xc3\x83\x8e\x83\x1f\x9a\x6a\x73\xf9\xa3\x92\x67\x3c\xae\xbe\x1a\x7a\xd9\xcd\xdc\x96\x70\xa5\x8f\xce\x37\x7c\x67\xfa\x99\x5c\x59\x21\xc0\x4b\x8b\x71\x46\xc7\x6f\x4f\x53\xa8\x0a\x32\xcb\xec\x9b\x20\xe5\xda\xd6\x40\x5b\xc7\x1f\x0b\xab\xf8\xe1\x81\xf8\xa8\xfd\xfa\x64\x3c\xbc\x27\xe9\x84\x4e\xb4\x8e\xb9\x31\xa1\x90\xcc\x14\xd4\xe0\xc3\x43\x1b\x53\x09\x29\x2c\x6c\x56\xed\x5e\xd4\x92\x6f\x48\xf9\x8e\x30\x83\x73\x75\xc4\xdf\x13\x05\xfc\x7f\xfd\xed\xf1\xeb\x6f\xc1\xc7\x9f\xb7\xaf\x80\xd7\xee\xa1\x35\xf2\xc2\xe2\x5b\xe3\xe5\x5f\x51\x0c\x9a\x44\x00\x53\xf0\x78\x8e\x68\x14\x80\x25\xb5\x10\xa5\x09\x94\x05\xa6\x11\xae\x97\x82\x3a\xb8\xe2\xae\xa1\x0c\xf8\x0d\xc5\xa0\x90\xa1\xad\x4e\x90\x5f\xdb\x2e\x90\x8e\x95\x97\xe3\xf9\xe3\xe3\x18\xfa\x34\xcb\xcd\xd7\xb9\x7c\xdc\x1a\x3c\xee\x65\x12\x04\x4b\x8b\xf3\x70\x59\x2b\x5e\xdd\xe3\x45\xee\x75\x2e\x68\x0b\x1f\x7f\xbe\xb0\xa9\x4a\xd7\x32\xb3\xac\x71\xa8\x4d\xb5\x40\x97\xeb\xfd\xd6\xd7\x51\x55\xe3\x30\x17\xd3\x78\xb4\x29\x75\x4e\xb6\x96\xba\xf3\x86\x05\x4d\xc7\xbf\x9d\x55\xfd\x47\xba\x6a\x32\x2d\x86\x1e\x7f\x1f\xd6\xa6\x45\xbf\xe5\x45\xa2\xd0\x8b\xa1\x79\x97\x6e\x2b\xf2\xb6\xd6\x12\xa9\xd1\xca\xb5\xdd\xcc\x45\xd2\x20\xdd\xce\x12\x69\x83\xca\xd1\xfb\x57\xd6\x29\xb9\x80\xd8\x42\x33\x95\x92\xe3\x88\xf1\x2e\x10\xc0\x2a\x5f\x03\x89\xd3\x12\x78\x32\xdf\x43\x9a\xdd\x81\xb7\x6e\xe4\xba\x6d\xf1\x51\x6b\x05\x89\x56\x9d\x01\xa7\x31\x0c\x82\x6a\x3b\x44\xcb\x41\x30\x25\x20\xf6\x7b\x1c\x04\x6b\xc7\x17\xd4\x53\x28\x13\x93\x18\x5e\x40\x33\x7c\xe2\x28\x8a\xac\xbf\xc1\xa6\xea\x3c\x6b\x50\xa9\x31\x62\x9e\x8b\xc8\x17\x9a\x44\x41\x14\x09\x10\x6e\xaf\xb4\x28\x4c\xc3\x4d\xeb\x34\x25\x12\x42\xa1\x22\x01\x51\x54\x40\x5a\x73\xa3\x62\x14\x6f\x9d\xf7\x49\x27\x85\xf0\x3d\x13\xa3\x5f\x65\x52\xe3\xba\xa2\x74\xff\xbc\x9c\x5b\x11\xaf\xab\xe4\xe0\x0d\x89\xd8\x01\xf2\x20\xa6\x50\xd2\xff\x9d\x4a\xd6\xff\x00\xec\xe5\xd5\x7f\x04\xef\xb6\x25\x59\xdb\x0d\xe6\x32\x9a\x4c\xa9\x17\x23\x79\xe1\x96\x43\x25\x74\x85\x5c\xa9\xe5\xec\x2c\xd2\xa5\x2c\x86\xbe\xf0\x28\x33\x7d\x30\x7f\x23\x4b\xa1\x7e\x4c\x2d\xf7\xb3\x18\x42\x2b\x0a\x00\xde\x6d\x92\x08\x80\x56\x08\x48\x66\x70\xf6\xf8\xc0\x3d\xab\x77\x86\x17\x41\xb0\x24\x61\x4f\x63\x38\x9b\x80\x28\xda\x0b\x26\xe5\x04\x28\x39\x13\xe1\x1e\xf2\xd3\x26\x05\xb4\x20\x59\x4e\x75\x8f\x54\xf4\x41\xe2\xf9\x2b\xf5\x3a\xa9\xfb\x9e\x42\xc0\xa4\x11\x65\x0f\xd4\xb5\x01\xa2\x24\x9b\xb2\xf7\xf0\x96\xb0\xae\xa5\xce\x12\x79\x5e\x13\x08\xd7\x9b\x25\xa5\xc7\x51\xf7\x24\xed\x1f\xa5\x5f\xbf\xf5\x56\x3c\xec\x64\x4f\xee\x96\xc7\xa3\x23\x79\x1e\x6e\x86\x3c\xe7\x9c\xb1\x16\x08\xf4\x2d\xf2\xa0\x4c\x1a\xb6\x00\x97\xd0\x02\xd8\x92\x4b\x93\x86\x50\x98\x40\x3d\x50\xec\xd7\x42\xb1\xd2\x69\xc6\x7a\x1f\x00\x7c\x27\x14\xfb\xed\xb6\x18\xea\xcf\x61\xe8\xca\x3b\x73\x15\x81\x5a\x0b\x40\x2d\xf8\x39\x42\x31\xac\xbe\xe7\x3c\xd0\xea\xfd\xa3\xd5\x0f\x10\xc3\xbb\xe1\xab\x8f\xb7\x4a\xa5\x1a\x77\xed\x0b\x64\x26\x49\x56\xec\x37\xa1\x30\xb6\x44\x26\x68\x0b\x7e\xf6\x20\xf4\xa9\x4c\x7c\xc3\x18\xf4\x9b\x7a\x4e\xc9\xa3\x98\x3c\xda\x0a\x50\x88\x1a\x95\x10\x0f\x9b\xe2\x1e\x6d\x0a\x25\x72\xdc\xc9\xb6\x78\x72\x47\xcc\x1b\x51\x0b\x13\x66\x49\x17\x88\x56\x42\xed\x10\x23\x1a\xc5\xc8\x43\x78\xae\x49\xb4\x41\x91\xf6\x15\x2d\xa7\x44\xbf\xbd\x52\x14\x48\x77\xbb\xc3\x66\x35\x92\x34\x99\x0e\x91\xa9\xf6\x90\xae\x9a\x30\xb6\x5e\x3d\xdf\xa4\x3e\x52\xba\x7b\x10\x1c\x08\xed\x87\x1e\x36\xaf\xf0\xa9\x66\x3d\x79\x37\xc0\x0e\x39\xd5\x57\xd4\xf7\xfc\x47\x42\x44\x96\x30\x44\xad\x57\xcf\xa5\xb2\x91\x8f\xca\x99\x93\xa8\x9f\x7e\xc7\xaa\x63\x8e\xb1\x62\x80\xac\x5e\xaa\xd6\xb2\xc2\xeb\x2f\x56\x85\x96\xbf\xb0\x5c\xd5\x4a\xfe\x2d\x2e\xd8\xe9\x02\x5a\xd3\x84\x22\x0c\x29\xb5\x48\xcc\x4f\x61\x4a\x30\x08\xa4\x05\x87\xcc\x2c\xce\xce\x3c\x85\xa3\x7b\xb0\x7a\xb0\x50\x23\xf7\x58\x52\x57\x73\x71\xdc\x0d\x2d\x1f\x54\x65\x71\xd5\xbf\x8d\x87\xeb\xed\xad\xe0\x2f\x0b\x18\x43\xeb\x0a\xca\xb4\x83\x14\x62\xbf\x98\x1f\x00\x60\xdf\x9a\xa2\x40\xf8\xbb\xc9\x08\xc0\xfb\xb0\x0f\x95\x50\x53\xf2\x0a\xab\xf7\x92\xdd\xdc\x4a\xca\xb1\x5d\x1b\x27\xb2\x70\x6d\x8b\xd4\x75\x5b\x4b\x29\xcc\x6e\x42\x9a\x8d\x80\x77\x61\xf1\x83\x4e\x24\x4c\x4b\xf5\x17\x6b\xcb\xdc\xd4\x02\x4c\xe8\xeb\x42\xd2\xe8\x70\xd7\x64\xf7\xd9\x8a\x8f\xfe\x16\xad\x31\x62\xc1\x19\x88\x4d\x6b\xe1\x89\xcc\x51\x51\xc8\xc5\x59\xd1\xe5\x26\x88\x4d\x8c\x9d\xb1\xfd\x1f\xe5\x84\x00\xbf\xeb\x0c\x45\x1e\x93\x7a\x91\x35\x36\xca\xbe\xf6\xa4\xc3\xb5\xb9\x0a\x16\x74\x37\x88\xa1\xa3\x3c\x96\xf2\x19\x59\x1b\xec\x2d\xb7\xb2\xa4\x10\x9b\xf0\x8a\x5b\x36\x08\x6e\x69\x49\xf9\xd8\x2b\x2c\xa8\x00\xf9\x4e\x96\xf3\x54\xe4\x61\x95\x28\x12\x67\x02\x99\xc9\x9b\x0a\xc0\x38\x01\x41\xee\xa2\x72\x9f\x16\x99\x5f\x71\x4c\x69\xed\x48\x82\xfb\x4c\x9e\x66\xdb\x5f\x68\x39\x7e\xcd\x52\xab\x97\xd5\x6b\xad\x20\xbf\xa3\xcd\x0b\x44\x76\x4d\x2b\x02\x4b\x0b\x02\x6f\x61\x2d\x21\xe8\x5a\xc6\x7b\x83\x69\x75\xb6\xc5\xb7\xc9\xec\xf6\x28\xe0\xeb\xe5\xde\x57\xd0\x12\x15\xcd\x2c\x6f\x01\xe2\x39\xf4\xe5\x86\xf7\x62\xe8\x23\x66\x79\x20\x96\xc9\x58\xf5\x4b\x78\x09\xe3\xa5\xf5\xf8\xc0\xf2\xc1\x92\x72\x11\x21\x86\x60\x76\x8f\x8a\xbf\x57\x71\x83\x37\x04\xb3\x45\xb0\xb4\x8e\x42\x59\x53\xee\x81\x1b\xb4\x72\x83\x84\x4a\x86\x10\x72\xd4\xad\xc1\x11\x6a\x0c\xd2\x15\x53\x67\x31\x02\x41\x2f\x87\xa0\xad\xd0\x8e\x02\xc3\x70\x34\x42\x20\x78\xba\x7d\x9a\x91\xe3\x6a\x9a\xb1\xff\x01\x4b\x61\x2b\x3d\x4b\xdc\xad\xa2\x0b\xfd\x3a\x84\x74\xe5\xc5\x61\x1e\xf7\xb2\xec\x2c\x22\xb8\xc5\x75\xca\x58\xac\x9a\xbc\x0b\x7a\xa1\x54\xfe\x05\x23\xef\x82\x31\xb2\x2e\x58\xa9\x01\x39\x17\x11\x06\xa5\xd8\x37\xf5\x7e\xd3\x81\x6e\x1b\x91\xf2\x40\x86\xb2\x0b\xb8\x14\xfb\x3e\x86\x1e\x44\x97\xd0\xb7\x04\x43\xb7\xb8\x34\x3f\xec\x2c\xcb\x6f\xa7\x9c\xf1\x1a\x1e\x53\x59\x2d\xe2\xe6\xe0\x81\xd7\x29\x35\xf5\x75\x7b\xea\x7d\xf3\x55\x19\xca\xaa\xdd\xb4\x54\x2e\x41\xdb\xcc\x58\xf6\x22\xfd\xa0\x79\xe7\xf5\xdc\xcf\x5e\x40\x12\xbf\x4f\x54\xfc\x0a\x89\x96\x1a\x79\x40\x4b\x4c\x40\xdb\xe7\x3e\xcc\xa8\xb7\xa2\x46\x49\xc5\x2e\x31\x79\xcd\x6b\xc8\xf8\xf1\x76\x81\xc9\x95\x85\x64\x1c\xfa\x95\x88\x23\x0f\xd0\x85\xc8\x58\xe0\x05\x84\x42\x75\xed\xf1\xa4\xf1\x91\xc4\x96\x27\x12\xe7\xca\xc7\xe6\xd1\x55\x5b\x5d\xa3\x7a\xf4\x0f\xf0\x9f\x09\xa4\x8c\x66\x65\x36\x92\x88\x0f\xfa\xed\x13\x6b\x41\x92\x98\x8a\xd2\x82\x32\x63\x74\x9f\x9e\x6b\x72\xe2\x4d\x49\xe0\x0f\xff\x94\xb3\x3e\xfd\x72\xf4\xe1\xed\xab\xb7\x7f\x19\xe7\xea\x91\x1f\x05\xe2\xbe\x07\xd2\x9a\x79\x32\xe9\xb5\x6f\x51\xa2\x2b\x0c\xe8\x44\x69\x66\x0d\x3d\x5d\x34\x6d\x26\x6a\xe6\x09\xd4\xf0\x5e\x2a\x2a\x75\xd8\x35\x69\xc9\x8c\x74\x64\x69\xf6\x31\x5d\xd5\xa5\x4b\x25\xb3\x15\x39\x4a\xf7\x4c\xca\xf6\x87\x04\x5b\xba\x12\xd3\xca\xb9\xf0\x0d\x48\xef\x6f\x32\x65\xfb\x58\x10\xfe\x91\xa4\xf9\x96\xe4\xec\x82\x8a\xf9\x07\xc9\xc6\xd2\x27\xf7\xa9\x67\x95\x77\xcb\x2d\xb3\x0a\x71\xa8\xe6\xf8\x44\x2c\x41\x7e\xa8\x04\x50\x55\x09\x40\xad\xa7\x5e\x7b\x2b\x5b\xd8\x95\x32\xa1\x97\x2b\x02\x58\x85\xff\xd9\x75\xe6\xd7\x62\x43\xa3\x71\x0f\x61\xb2\xaa\x17\xa3\xa7\x2a\x5f\xfc\x85\x4c\x6b\x0a\x0b\x99\x17\xc2\x0a\xfd\x77\x53\xef\xb9\x80\xad\x1a\x19\x33\xcb\xc5\x68\xe4\xf8\x12\x3c\x90\x6f\xc0\x14\x8c\x52\x56\x96\xef\xb2\xbc\xfc\x0a\xac\x8a\x2d\xd7\x32\xf5\x95\x6e\x86\xd0\x02\xc1\x15\xbf\xef\x5f\xc1\xc0\x23\x61\xe6\x16\x39\x83\xd0\xe7\xec\xba\x03\x82\x5a\x9a\xd8\xf5\xa1\xb8\x04\x73\x39\xc8\x58\x8a\x34\x22\x57\x95\x91\xa8\x8e\xc8\x5d\x49\xf9\xf0\x90\xc9\xff\xfe\x1f\x3e\xcf\x35\x5b\xdf\x7a\xde\xfe\x82\x00\xd3\x76\xc4\xa8\x72\x19\xf2\xc7\xc3\x39\x53\x71\xce\x3c\x37\xd0\x65\xa9\x43\xa7\xc6\x47\x75\xa5\x63\xa6\x45\xf8\x16\x86\x53\x25\x08\x08\x27\xd9\xa9\x2c\x62\x8c\x65\xfd\xe2\xb4\x60\xb4\x94\xbf\xb9\xf8\xbb\x20\x31\x0b\x96\x3d\x65\x7c\x95\xdd\x6a\x01\x2e\x21\xfe\xf4\xc9\x66\x16\x08\x62\x08\xfc\x65\x5a\x97\x36\x4e\xb0\x05\xb4\xf4\xcc\x88\x21\x5b\x37\x8b\xd1\xff\x0a\x6c\xed\xdd\xdf\x3a\xb0\xb4\x8d\xec\xea\x4d\xa7\xe3\x35\xa2\x8b\x36\x14\xaf\x44\x21\x88\xbd\xc5\x50\x71\x89\x3b\x0d\x58\x0a\x5f\xfc\x8e\xff\xfa\x8a\xac\x55\x96\x63\x23\xa9\x00\xd6\xf0\x30\xa9\x2b\x74\x29\x37\xe1\xe3\x03\x5d\xd6\x52\x54\xae\x87\xff\x3f\x7b\x7f\xbb\x1c\xb9\x8d\xe4\x0b\xe3\xdf\xcf\x55\x60\xb9\x71\xe6\x78\xfe\xae\x6a\xbd\x74\xb7\x3d\xf6\x1c\x9f\x59\xb5\xa4\x6e\xb7\xad\xee\x96\x5b\x6a\x7b\x6d\x4f\xc7\x09\x14\x09\x55\xc1\x62\x11\x34\xc0\x52\xa9\xbc\x31\x11\x7b\x0f\xff\xfd\xf8\x7c\x98\xbb\x78\xbe\xcf\xa5\xec\x95\x3c\x41\xbc\x90\x20\x09\x02\x20\x8b\xf5\x22\x8f\x76\x27\xda\xaa\x2a\xbe\x00\x99\x89\x44\x66\x22\xf3\x97\x93\x05\x8e\x05\x66\x92\x60\x03\xe0\x6c\xb0\x2f\xca\x7d\xe9\x3b\x7c\xc5\x47\x5c\x06\x9a\x26\x9e\x7d\xe0\x28\x12\xb2\xe6\x01\xb5\xb5\xcb\x95\xa6\xaf\x8b\xa1\x96\xda\x3c\x4b\xf7\x05\x76\xe3\x2a\xfc\x29\x7b\x75\x7e\xfc\xcd\x43\x5e\x6b\xa6\xd8\x7d\x4e\x62\x79\x8e\x50\x62\xdf\x30\xeb\x76\xb6\x06\x2e\x76\xf1\x36\x33\x90\x5d\xfe\x7b\x30\x0a\x66\xb2\x19\x7a\x3d\x76\x7f\xf5\xe6\xfa\x32\x1f\xdc\xf9\x3c\xcd\x56\x1b\x88\xe0\x7b\xb9\x63\x1a\xa1\x38\x1a\xc6\x7c\xf5\x24\x1f\xef\x93\x90\xcc\x3d\x77\xc0\x8d\xf2\x32\x5f\x20\xda\x9d\x97\xf2\xe3\x90\xb0\x0a\xe5\x7b\xac\x5c\x14\x23\x31\x73\x31\x1f\xd6\x4e\xb9\x68\x76\xaa\x39\x43\x9f\xff\xc9\x8c\x07\xb6\x65\x46\x2e\x18\xa2\x95\xc4\xf4\x4d\x01\x99\xe8\x6f\xb3\x32\x54\x8d\x68\x3b\x20\x19\x9c\x17\x17\x15\x08\x13\x8e\x4a\x93\x8b\x8f\x6c\xaa\xbb\x0f\x6c\x4a\x35\xec\x92\x0d\xc3\x99\x54\xdf\xd7\x04\x34\xa9\xaf\xbf\x62\x18\x5b\x67\x98\x7a\xf5\x3e\x32\x8c\xa1\xa4\xea\xff\x5e\xf1\x2f\x86\xcf\x42\x2f\x58\x26\xdf\x58\x4b\x3e\xaf\x71\x4b\x0d\xcb\xac\x2f\xc5\x18\xf7\x55\x63\xe6\xeb\xf3\xdf\x18\x99\xa3\xb1\x80\x90\xda\x97\xbd\x50\xd0\xf4\x6d\xb5\x68\x44\xb2\x7b\xe8\x92\x91\x1a\xb7\xdf\x36\xcb\x45\x8c\x0c\x7f\x2b\x8b\x46\xea\x4c\x2f\x7f\xdd\x43\x7e\x2b\xc0\x88\x7d\xe0\xf1\xcd\xaf\x51\xd2\xe4\xee\x95\x68\xba\x2e\x10\xce\xbe\x2b\x10\xce\x04\xe2\xfa\xe6\x78\xcf\x07\x63\xe5\xba\x18\xee\x76\x14\xf2\x27\x02\xbf\x13\xc6\x7f\x14\x3a\x38\xf7\xad\x29\xfa\x75\x81\x29\x12\x95\x8c\x3a\xe2\xdb\x08\x14\xf8\xf2\x3b\x07\x75\x2b\x12\x86\x15\xfa\xfa\x49\x09\x0d\x8e\x49\x02\x3e\x79\x3d\x4d\x08\x45\xe0\x94\xa2\x28\xff\x1a\xc6\x26\xb4\xcd\x06\x3f\x07\x80\x67\x97\x5c\x84\x6a\x64\xc3\x00\xb2\x1b\x9e\xea\x0f\xc1\xbe\x05\x46\xbc\x80\x0c\x7d\xf6\x0c\x9c\x27\x21\x89\x2a\x54\xdf\x2a\xd1\x27\x7c\x14\x21\x87\xc3\x1a\x92\xec\xd5\xe7\xee\x15\xe1\x3f\x30\x04\xae\xae\x7c\xc0\x28\x87\x23\xf3\x82\x21\xc6\xe2\x41\x29\x5c\x3c\x72\x4d\xe2\xee\x0b\xbe\xd7\x95\x28\x06\xa9\xc4\xf1\xae\x79\x68\xc0\x01\x8a\x9b\xab\xe1\x9d\x63\x79\x55\xa2\x6a\x43\x45\xea\x78\x23\x7e\x8e\x89\xbf\xe3\x38\xdd\xf5\x37\xdf\x30\xf6\xf5\x77\x2f\x8c\x71\xba\x80\x8f\x33\x68\x84\xeb\x6a\x49\xd0\xbc\x11\x88\x2b\xed\x79\x2b\x02\xe9\x1b\x5b\x3e\xbf\x57\xd1\x16\xf9\x27\x38\x89\x63\x70\x2a\x0f\x0a\x6d\x07\xb7\xea\x4e\x87\x50\x3a\xb3\x0d\x9f\x5a\x0a\xfa\x7b\x65\x1b\xca\x7b\x17\x0d\xab\x47\xc8\x5a\x8c\x59\xed\x04\x34\x10\xe9\x6c\x08\x86\xb3\x8e\xac\x6c\xa8\x61\x6c\x7c\x67\x8b\xee\x76\x29\x7f\x9c\xdc\x10\xe3\x48\x5b\x12\xef\x46\x42\x7d\x0a\xb3\xf2\x86\x77\x0c\x7a\xa2\x4e\x9b\x38\x1f\x29\x85\x2b\xc9\xc6\xa3\xd1\xcf\x12\x26\x40\x7d\x62\xf1\x62\xaa\x69\x5a\x9f\x7c\x3d\xd7\x04\x6a\x55\xf7\x96\xd4\x5a\x39\x84\x9c\x58\xd7\xb9\xa1\x6c\x4c\xaa\xbd\x2a\x7e\x56\xad\x77\x9c\xb9\xb4\x6d\x63\xae\x8c\x5c\x30\xed\xb8\x18\x37\x1f\x58\x48\x92\x10\xe6\x2b\x20\x88\xf2\xf5\x07\x82\xf6\x35\xf4\x03\xa1\x71\x54\x81\xae\x6f\x65\xb6\x61\x00\xcf\x46\x01\xcc\x32\x18\xce\xc6\x19\x21\x71\x86\xd3\x92\xad\x6c\x46\x96\x67\x28\x86\x32\x09\xfe\xf0\xd0\xcc\x15\xd9\x86\x48\x8a\x9a\x1f\xea\x65\xeb\x70\xd6\x28\x3a\xe8\xce\x44\x4a\x32\xd1\x19\x60\x2f\xf8\x78\x89\x48\xaa\xf5\xfb\xdf\x01\x23\x15\x3d\x1e\x24\x2f\x65\x12\xcf\x7e\x70\x92\xb2\x6a\xa6\xfd\xb6\x39\xa9\x10\x35\xb6\xca\x48\x0b\x6d\x95\xd1\x21\xf8\xaa\x10\x47\xda\x73\xc5\xda\x5e\xdf\x71\x07\x88\x10\x0b\xf5\x20\x0b\x99\x23\x90\x7f\xa7\xe0\x91\xb2\x19\xcc\x00\xe6\x67\xf4\x13\x04\x96\x98\xf2\x8a\xf3\xfc\x63\x36\x13\x19\xe9\xb2\xe2\x7b\x1d\x0a\x78\x99\x21\xc7\x55\x33\x44\x8a\x81\xb8\x27\x97\x82\x09\xd4\x7a\x7d\x46\x90\xde\x6a\x06\x1a\x85\x98\xa1\x88\x9b\x68\x94\x37\x72\x9d\x10\x1a\x21\x89\xd7\xc7\x69\x2c\xac\x30\xfe\x4f\xf9\xb9\xe3\x1e\x5b\xb1\x19\xe5\x90\xc6\xc2\x36\x2c\x22\x4d\x42\xfc\x95\x01\x59\x48\xaf\xdd\x66\x94\x8b\xe6\x24\x8a\x3e\x30\x15\x49\x76\x3a\x3a\xf9\xe5\x60\xbe\x62\x28\xbe\x01\x90\x01\xb2\x4c\x04\xa6\x46\xab\xbd\xf8\x4e\x5d\xa1\x19\x1f\x5e\xb5\x51\x5b\x25\xc2\x19\x2f\x95\xb0\xd3\x40\x66\x3a\xca\x6b\xe5\x12\xb7\x22\x31\xcf\xc8\xd2\x77\xe6\xdd\xa4\xdb\xb2\x3a\x9d\xab\xe6\xa8\xad\xa6\xcb\xaf\xf5\x8c\x21\x7f\x52\x18\xd8\xa2\xda\x64\x33\x29\x93\x9b\xc8\x9a\x5c\x3b\x71\xb2\x4f\xee\x24\xdf\x3a\x01\x97\x20\x0b\xfa\xc2\xda\x69\x93\xcd\xe4\x90\x7c\x57\x25\x89\xcc\xb5\xb6\x27\xe6\x8a\x95\xe0\xb5\x83\x06\xcd\x9c\xac\x13\xca\xcb\xae\x00\x5b\xc8\x3f\x96\x30\xe1\x7d\x3d\x85\x7c\x08\xbc\x30\x2e\x31\x3c\x5d\x13\xc6\x71\x81\xdf\xcf\x6c\x25\xba\x2e\xb2\xf8\x94\xa4\xd6\x1f\x63\x38\x23\x90\x52\x2c\x44\xba\xe6\xc8\x5c\x8a\xc4\xcf\x6c\x95\xca\xd5\x2f\x80\xb3\x32\x02\x64\xd2\xb0\xef\xa6\x69\x3e\x2f\x90\x47\x05\x95\xea\x02\xbd\x0b\xac\x5e\x64\x20\x2b\x8c\x9b\xa3\xad\x9d\xfa\xcc\xc9\x82\xa1\x8c\xc2\x54\x99\x6d\x40\x5c\x25\x7b\xc7\xf2\xdb\xaf\x84\x22\x53\xd6\x41\x07\xad\xdc\xbb\x74\x15\x33\x91\xa7\x2b\x65\xa2\x22\x04\x5c\x2c\x8a\xf0\x91\xea\xf1\x50\x8a\x8d\x19\xb9\xd9\xdf\x76\xf1\xd7\x9d\x5d\xd6\xa3\x2b\x2d\x77\x5f\x32\x73\xbb\x14\x1c\xac\x51\x73\xb0\xd5\xb2\x83\xf6\xd9\xea\xdb\xba\xaf\xc6\x73\xd7\x60\xf8\x66\x73\x3b\x77\xd5\x0e\xf0\x2b\x06\x4d\x7b\xcd\xc1\xe0\x20\x45\x20\x21\x80\xcd\x20\x55\x0e\x24\xb7\xab\xe7\x30\x81\xd3\xfa\xa9\xa5\x15\xdd\x61\x13\x39\x9e\x65\x98\x77\xd0\xc0\x31\x17\x95\x5d\x67\x78\x1e\x66\x3f\xc0\xaf\x8f\xaf\x9f\x99\x23\xc7\x6a\x6f\x19\x2a\xd1\xb3\x53\xf7\xf9\xf6\xd0\xb1\xb3\xf7\xbe\xb4\xf3\x5b\x2d\xe5\xd3\x19\x0a\x6f\x27\xe4\xde\xde\xa7\xe4\x24\x8a\x5c\x6d\x4a\x66\x64\x79\x12\x45\x6f\xa4\x65\xd8\xba\xf6\x06\x09\x28\xb7\x06\x85\x85\x1c\x39\xc3\xc2\xea\xba\x0e\xa8\x19\xcd\x98\x70\x69\x6d\x1c\xe7\x52\xb1\x8a\x51\xe9\x1c\x4c\xa6\x82\x03\x6d\x38\xcd\xd6\x1d\x68\x4a\x71\xc4\x77\x7c\x88\x13\x44\xc7\x9f\x8d\x9f\xf5\x8c\x3c\x8b\x07\xa1\x38\x1e\x1f\x81\xf2\xef\x39\x8e\xa2\xd8\x1e\xcc\xee\x17\x69\x70\xef\xd3\xae\x61\x1e\x6b\xc3\xa4\x7c\x0d\x98\x58\x39\xac\x37\x2f\xfe\xd4\xfe\xdd\x33\x7f\xfe\x3c\xc2\x99\xaf\x33\xff\x41\x80\x86\x4a\x3d\xe1\x58\xad\xe2\x62\xb1\x60\x15\xa3\x7f\x27\xbe\xbc\x1f\x01\xc4\xc5\xde\x04\xd8\x94\x4b\xbf\x86\xab\xdf\xb8\xc3\xb3\x42\x12\x46\x91\xd0\x95\xbb\xac\x88\x04\xe2\x43\xbc\xc7\xa5\x91\x27\x51\x04\x2e\x0a\x35\xbf\xa9\x6a\xc8\xfe\xde\x6f\xbb\xdf\x5b\x72\xb8\xe6\xf4\xda\x72\xdf\x36\xe0\xd1\xd6\xc6\x61\x71\x67\x39\x9d\x2b\xee\x2c\xbf\xef\xad\x8f\x17\xdb\xcb\xd1\xeb\x49\xe3\x02\x85\x80\xef\xef\x9e\x84\x5c\xe0\x03\x41\x05\xd1\x7f\x20\xc5\xe1\x2d\xd2\xb6\x2e\x92\x9c\x96\xad\xad\x2d\x4a\x0b\x65\xea\xb5\x43\xfb\x36\x03\xb8\xc4\x0f\xce\x1f\xee\xeb\x0c\x6f\xd6\x13\x76\xe5\x20\xf9\x9b\xe4\xfc\x8a\x5d\x17\xe3\xa3\x08\x67\x8f\x7b\x8d\xc7\x5e\x23\x6d\xb7\x87\xb9\xdd\x68\x5c\xde\xed\x7e\x53\x1f\xc8\xe3\x86\xf3\xb8\xe1\x3c\x6e\x38\x83\x6c\x38\x1e\xbd\x6a\x85\x0e\xdb\xf2\xa6\x53\x44\x04\xe4\x0e\x51\xaa\x0f\x9c\x71\x25\x2f\x4f\x73\x4e\xa1\x82\xb5\x15\xe4\x53\xf3\x67\xfc\x58\x37\xdf\x2f\x43\x75\x88\xa7\xfc\xc8\x5a\xdc\xd9\xed\x80\xca\xac\xc3\xc2\xb9\x3c\x93\x9b\x56\xa7\x80\xb5\x7f\xc8\xd8\x7d\x38\x27\x7d\x61\x85\x34\x35\x51\x37\x1f\x55\x8e\x8c\xd4\x3c\x0d\x61\x9e\xf2\x0c\xcf\x17\x15\x6e\xf0\x78\xb3\x88\xd6\x0d\x14\x70\x5e\x30\x44\xf7\x22\x51\x19\x2f\x92\x77\xab\x1f\x93\x0f\x5b\xeb\x36\x9c\xcb\xa9\x54\x03\x98\x9d\x2c\xb2\x99\x6c\x43\x4f\xcb\x72\x2e\x25\xc0\x98\x9d\x2d\x60\x9c\x5f\xe3\x9f\x08\xd6\x59\x49\x6d\x30\x41\xbf\x48\x1c\x5b\xcb\x7e\x7e\x97\xa2\xe4\x03\x43\xd4\x19\xd3\x36\x6f\x66\x45\xa4\x85\x8b\xdc\xa6\xf2\x28\x36\x6a\x02\x0f\x61\x08\xaf\x11\x7a\xb1\xb6\x13\x1a\xc2\x22\xae\x3c\xa3\x73\x6a\x45\x91\x69\xe5\x9b\x9d\xe8\x30\x0d\x29\x59\xba\x86\xea\x7a\x4e\x48\x62\xbf\x47\x58\xad\xf9\x04\x2d\xf3\x89\xbd\xc4\x94\x65\x35\x73\xbe\xf2\x9d\x2b\x37\xc2\x65\xdf\xeb\x15\x95\x2e\xfb\xbe\x31\xa6\x02\x96\xbd\x06\xc8\xa8\x5d\x21\x16\xbf\xbc\x33\xbf\xb2\x1c\xbc\x6f\x80\xdb\x33\x75\x72\x7b\x4c\xb9\x80\x0d\x9e\xe8\x5f\xed\x80\x25\xc5\xeb\xdb\x38\x52\x5e\x50\x67\x48\x0c\x1f\x3c\x3f\xce\x6b\x4d\xed\xac\x30\x02\x1b\xe6\xc4\x79\xb5\xc9\x5d\x9d\x0f\xe7\x3a\xfc\x40\xc9\x04\xbd\xa7\xec\x70\x1c\xf0\xbd\xa6\x6b\x46\xaf\x8b\x8a\x76\xdb\x43\xd9\x1c\x6b\xf9\x49\x1e\x66\xc7\x10\xb1\xbb\xca\xde\xe2\x7f\x1c\xd7\xfd\x60\xbd\x33\xeb\xf6\x65\xc3\xf4\x4d\x0f\x74\x87\xae\xf8\x93\xc6\xb5\x34\xf7\x17\x8b\xf8\x16\x7c\x48\x63\x02\x5b\xa1\x5c\xda\xe5\xd0\xd1\xca\xa2\x06\x37\xac\x2f\xec\x8f\xbc\xa6\x34\xbe\x15\xd6\x4f\x51\x64\xaa\xbe\x68\x36\x35\x0c\x9e\xeb\x7b\xdb\x08\x28\xad\x3a\x02\xc5\xd2\xee\xb0\xb0\x7b\x26\x01\x9e\x92\xf9\x1c\x8e\x23\xc4\x7b\x79\xa3\x08\xc4\x98\x65\x5f\x02\xdb\xa8\x86\xd3\x21\x7b\xb1\xf4\x65\xd1\xd1\x60\x4b\x9f\x75\x59\xfb\x1e\x71\xc1\xde\x26\xb4\x47\x2a\xe4\xde\x04\xe3\x62\xc2\x50\xb7\x64\xc8\xb5\x8e\xe8\x8d\x5f\xda\xf2\x04\x36\x88\xbf\x58\x06\x36\x86\x8c\x94\x70\xc5\xb8\xeb\xcc\xbc\x5f\x5e\x7e\x76\x3e\xff\xe9\x47\x64\xce\xcc\x5b\x08\x33\x66\x8e\x44\x3f\xd8\x40\xed\x0a\x5b\xc9\xd4\xdb\x6a\x50\x43\xa9\x98\x01\xf2\xf4\x5e\xe5\x44\x72\x07\x36\x2c\x51\x0d\xb1\x65\x3e\x96\x87\xb8\x82\x18\xaf\x94\x91\xb2\x6f\x95\x21\x4a\x0a\xba\xd5\x86\x6c\xae\x54\x23\x41\x4b\x29\x54\x9d\x8f\x10\x1b\x5b\x90\x13\x9b\xd4\xc3\xa3\xd2\x07\x63\x74\x6d\x2b\xa7\x89\xbc\x41\x14\xe0\xb7\x80\x9a\xb3\x2b\xa8\xbc\xc5\x82\x0c\x8e\xe4\xf4\x86\x27\x8c\x53\x36\x02\x67\xe8\x0e\xc5\xb9\x66\x66\x23\x70\x12\xce\x11\xb8\x46\xd0\x5d\xdb\xe2\xeb\x05\x6c\x43\x20\x6a\x86\xf9\x99\x56\x7a\x5a\x82\x5c\x75\x14\x91\x2e\x06\x7a\x55\x22\xf8\x68\x9a\xec\x4d\x17\x34\x95\xe6\x47\xdd\x40\x7f\xea\x65\x83\xf7\x36\xe2\xd6\xd0\x2e\x0f\xa6\xce\xa5\xbb\x65\xf7\x70\xcb\x5c\xbc\x7c\x84\xaa\xee\xde\x62\x95\xcb\x40\x39\xfc\xc6\x44\xf0\xdc\xd8\xf4\x84\x76\x91\x96\xe9\x9a\xcd\x49\xfd\x9a\x5e\x7a\x81\xa2\xb4\x08\xd2\xb3\xd1\x53\x73\x02\x3d\xf8\xa4\x7a\x89\x30\x60\x59\xed\xaa\x3f\x0e\xb1\xd6\x75\xfd\x59\xbe\x50\x53\x58\xea\x85\x96\x27\x3f\xd8\xd2\xfb\xc6\x8a\xde\x5d\xd1\xbd\x50\x75\xa2\xe6\x5e\x72\xdb\xa7\xa6\x86\x5f\xaa\xe5\xa9\x3f\xf5\x28\x3f\xaf\x1d\xfe\x4e\x33\xf9\xf0\x9a\xa4\x1d\xf6\x80\xf9\xd8\x06\x41\xdf\xa3\x39\xb9\x43\x1d\x68\x2a\x6e\xf0\x26\xab\xb8\xbc\x17\x65\x3b\x57\x01\xec\x41\x81\x88\x24\x52\x7e\xa9\xb0\x51\x9d\x04\xca\x2f\xed\x44\x98\x1d\xcc\xbc\x47\x65\x88\xdf\xe4\x1b\x95\x21\xc3\xc9\x85\x33\x58\xf4\xd4\x51\xe4\x61\x75\xcc\x65\x01\xf9\xa3\x6f\xee\xd3\xf6\x8a\x0b\xc4\xde\xba\xe7\x62\x7c\x3d\x3c\xf4\xce\xe8\x0d\x5c\x5a\xf6\x07\xab\xc1\x18\x03\xd0\xb1\x1a\x4a\x27\x7b\x30\xac\x86\x2e\xa1\x81\xe6\x30\xdd\xd1\x81\x57\x8d\xb8\x40\xa4\xb1\x77\x27\x58\x0d\x54\x6c\x98\x82\x98\x72\xdb\x9c\xe1\x14\xe0\x24\x7f\x84\x00\x5a\xe6\x88\x1e\x8c\x91\x10\xc3\x0c\x45\x20\x45\x34\x77\xe8\x30\x49\xd8\x23\x6a\xc3\xa3\x37\x3b\x3c\x68\xc3\x1e\xf8\xb4\x6d\x25\x2c\x8f\x5b\xaa\x7b\x4b\xe5\xe6\xe5\xde\x6e\xa8\xf9\xe8\xf6\x2a\xe0\xad\xc9\xd5\xfa\x11\xef\x35\x36\xb4\xfa\x38\xfa\x07\xbb\x51\x41\xe2\xc7\x68\xf7\x1a\xd2\xb0\x0f\xe1\xee\xfa\x70\x0c\x1c\x7e\x0c\x78\x3f\x9a\x08\x5b\x2c\x2e\x6a\xea\xef\x7d\x31\x10\xc4\x32\x11\x06\xf5\x58\x98\xd2\x3b\xb6\x14\x7a\x26\xfb\x6f\xdf\x64\x90\x61\x3b\x11\x88\x03\xff\xfd\x9f\xff\x55\x34\xec\x7f\x5e\x06\x2a\x6b\x5b\x8a\x39\x88\xae\x5d\x9f\x0b\x29\x4a\xa6\xbc\x7a\xa5\x12\x4b\xdf\x82\x59\xd2\x0b\xeb\xde\xef\x39\x42\xcc\x16\x0c\x51\x36\x2e\x42\xb8\xae\x63\x92\x32\xd6\xdb\x1d\xc9\xb9\x7d\x28\x38\x43\x73\xe3\xbb\x77\x1f\xee\x77\xa9\xb7\x1d\x06\xab\x55\x2c\xb2\x12\xab\xb6\xda\xac\x17\x08\xde\xa9\x20\x41\xfe\xc3\xf1\x48\xe4\x3b\xbd\xee\x0e\xbb\xeb\xa6\x88\x54\xec\x0d\xbd\xdf\x4d\xdf\x8b\xdd\x4d\x0d\xf6\x66\x11\xc7\x89\xde\xe3\x6c\xc8\x79\xae\x03\xa2\x6d\x0b\xc1\x1e\x7b\x20\x51\x3f\xda\x2d\x6b\xdb\x2d\x5b\xdf\xa1\x61\x14\x3d\x6e\xcf\x9d\x13\xd8\x7e\xd7\x7b\xb3\xbf\xf3\xd6\xee\xb9\xc9\xd0\x90\x98\xdf\x98\xc9\x36\xef\x5a\xc9\x5c\x12\xf1\x16\x99\x8e\x52\xc6\x41\xfc\xf9\x51\x70\x8b\x56\x63\x31\x1b\xf3\xc0\xdc\xde\xbd\x68\x54\xaf\x62\xc2\x3c\x08\xcc\x87\xff\xe4\xc9\x13\xe5\x06\x8a\x67\x39\x7b\x5e\x91\x44\x35\xbd\xef\x96\xca\xde\x33\x12\xd0\xb7\xda\xc0\xfd\xeb\x66\x0d\x3b\x3e\x99\x10\x25\x0d\x05\x3f\x90\x51\x55\xda\x33\x85\x79\xa5\xff\xab\x59\x59\xc1\x1b\x78\x8f\xe7\x8b\xb9\x60\x38\x3f\x28\xc2\x2c\x8d\x85\xe6\xef\x68\x39\xf6\xb1\x31\x18\x8a\x45\x27\x99\x8e\xe6\x46\xf0\x5c\x9a\x51\xb2\xef\xc9\x73\x69\x3f\x5c\xe0\xb9\x38\x1c\x7f\xfe\x51\xed\xe8\x16\x23\x84\x5f\x5c\x5c\xda\xb1\x1e\x6e\x9b\xb3\x3d\x3a\x74\x4c\xf7\xe8\xd0\x7f\xbe\xc5\xb5\x7b\x3c\xe1\x63\x17\x7f\x8f\x3b\x30\xf8\xf8\x01\x70\xf8\xb9\x8b\xc3\xcf\x3b\x70\xf8\xf9\x03\xe0\xf0\xd1\xa1\x5b\xa6\x3b\x09\xf5\x03\x98\xf3\xb1\x93\xcb\xc7\x5d\xd8\x7c\xfc\x10\xf8\xfc\xdc\xc9\xe7\xe7\x5d\xf8\xfc\xfc\x21\xf0\xf9\x68\x74\xe8\x23\xdd\xdd\xc4\xfb\x01\xcc\xfb\xe4\xe2\xc2\x31\xeb\x2f\xf2\xff\xf3\x9f\xb6\x7e\xf9\x00\xe1\x00\x2f\x7b\x7c\x98\x7a\xea\x01\x23\x7a\xd2\x95\xf8\x7d\xc6\xf3\xca\xa4\x55\xd9\x65\x89\x09\xf7\xb3\xd7\x7c\xdd\x92\xff\x20\x83\x80\x3d\xbb\x4f\xed\x2b\xe1\xfa\x34\x2c\x73\x13\xed\x1b\x82\x93\x4e\x34\xeb\x4f\x8b\x61\xe3\xa6\x7a\x8b\x44\x35\x72\x1d\xb8\x66\x14\x80\x72\x4a\x3a\x80\x8a\x5b\x8b\x76\xa6\x89\xb1\xbf\xc8\x66\x62\xae\xa6\x36\x66\xfe\xba\xfa\x31\xe6\xba\x93\x98\xab\x89\xab\x43\x97\xb4\x8b\x3a\x9f\x21\x6b\xda\x79\x7d\xd1\x6e\x2b\xda\x6f\xdf\xe0\x24\xfa\xd3\xc9\x6b\x73\x45\xbb\x4c\x52\x57\x95\xed\x83\x15\xb4\x07\x95\xaa\x90\x26\x10\xe0\xb7\x68\x15\xc6\x04\xde\x7a\x6c\xb6\x7d\x2c\xa3\xe6\xeb\xd9\x2a\x09\x5f\x27\x97\x94\x4c\x29\x62\x1d\x6a\xb9\xfa\x97\xe4\xaf\xb3\xdc\xe4\x7e\x75\x41\xc2\x5b\xb9\x87\x2b\x82\xf1\x70\x19\xc8\x67\x03\xe8\x22\x49\x70\x32\x7d\xf2\xe4\x89\x21\x05\xa6\xf3\xbe\xbc\xde\x64\x07\x6e\x32\xaf\x4d\xfc\x2a\x9f\xea\x12\x67\x33\x50\xc8\x8c\x35\x0a\xbc\x4a\xc2\x52\xb8\x86\xdc\x6d\x3a\xc0\x5c\x5e\x9c\x9d\x5c\x6a\x46\x46\x37\x64\xcb\x47\x59\xcf\xc9\xf7\x4f\x2c\xe7\x5c\x7a\x5c\x32\x2e\x44\x6c\x50\xf9\xee\xef\x85\xb6\x5b\x37\xe8\x3e\x8d\x21\x4e\x04\x30\x69\x8a\xe8\x9c\x75\x3b\xca\x14\xc0\xca\x66\xb3\xe8\xb2\xac\x11\x00\xe7\xe2\x3d\x28\x32\x2f\x88\x19\x59\xe6\x57\xcb\xab\xbc\x3d\xbc\xa0\xa5\xb9\xf8\xd3\x43\x9f\x9e\xe2\x27\x94\x92\xe5\xd5\x1c\xc6\xf1\x87\x54\xa6\xa7\x8a\xb2\xd8\x5e\x6d\xfc\x06\x1f\xd4\x19\x59\x26\x1d\x86\xa5\x5b\xcb\xf9\xab\x9f\x9a\xa5\x33\x23\xd3\x69\x8c\x2e\x05\xa7\xdb\x2c\x3d\x33\xaf\x5b\xc5\xc3\x79\x57\x3d\xa9\x99\xf7\x25\x6d\x3d\x03\x75\x3c\xab\x96\x12\x7b\x0a\x13\x00\x23\xd5\x1f\x71\x04\x26\x24\x9b\x81\x54\x75\x6b\x87\x49\xa4\x1a\x28\xf2\xb5\x4b\xb2\x99\xe5\xf4\xb5\xdb\x2c\xbe\xc7\x0c\x4f\xe2\xd6\xec\xec\xee\xd3\x60\x48\x34\x71\x65\x80\xdc\xc8\x63\xb7\x7c\xfc\xc2\xec\x1d\x81\x10\x26\x20\xc2\x0c\x4e\x62\x04\x6e\x08\x05\xe8\x3e\x43\x34\x9f\xa4\xb8\x34\xc6\xb7\x08\x08\x73\x0f\x51\x76\x90\x42\x9a\x25\x83\xcd\xf5\x84\xc3\x64\x0f\x36\x53\xd1\xc2\x92\x77\x87\x85\x2c\x45\x61\xc6\xa7\xac\xd0\xa7\x47\x62\x2e\xa2\x31\x6c\x28\xdc\xfd\x41\x26\x91\xc0\x78\x95\xe1\x70\x40\xc9\xcb\x6d\x6c\x00\xe5\x73\x61\x0c\x28\x52\x8e\xc4\x10\xe3\x0d\x33\x7c\x37\xa0\x7c\xc5\x64\x8a\x13\x75\x88\x0f\x4a\xac\xef\x7e\x39\x36\x3d\x37\x23\xfb\x7e\x64\x4f\xc2\xd0\x6c\x03\x23\xac\x4f\xd7\xac\x08\x33\x48\xed\x0d\x8e\x33\x44\x65\x9e\x86\xd4\xd4\xe2\x3b\x47\x86\xc3\x4b\x7e\x51\xd1\x4e\xc3\x07\x24\xbc\x4f\x6e\x83\xc8\xb8\xe8\x04\xa8\xd8\xf8\xc6\xce\x85\xdf\x41\x16\xc2\xd6\x4f\x38\xb6\x9b\x76\xb0\xf5\xe9\x6d\x3d\xcf\x60\xeb\x33\xdc\x7a\x62\xc1\xf6\x45\x74\xdb\x99\x04\x3b\x90\xd2\xed\xa7\x0e\xec\x40\x50\xb7\x9f\x2b\xb0\x03\x59\xdd\x7e\x72\xc0\xf6\xc5\x75\x47\xd9\x00\x5b\x9f\xe8\xde\x1d\xff\xdb\x0c\xa2\x0c\x2a\xaf\x4e\x37\x89\xb8\xdb\xc5\xff\x1d\x53\xc4\x52\x92\x30\x7c\xa7\xbe\x10\x86\x4d\x8c\x18\xe3\x76\xca\xb8\x78\x42\x4b\x20\x25\x9b\x21\x18\xd9\x3d\xe9\xcc\xd1\xed\x8c\x3f\xa5\x3e\xc8\x84\x8c\x97\x38\xca\x8a\x94\x63\xfb\x61\x57\x36\x73\x9d\x09\xcc\x20\xbb\x92\x2c\xff\xd0\x23\xd5\xc0\x19\xca\x13\xed\xfc\xbc\xe3\x79\x1c\xfa\x7c\x2c\x41\x37\x2a\xe6\xb9\xe5\x74\x5d\xd8\x91\x1e\xc0\x41\x0a\x06\x46\x09\x79\xe9\x00\x78\x00\x04\xbd\x58\xc4\x1d\xc3\xd9\x2d\x47\x9c\x6d\xde\x5e\x17\xb6\x3b\x23\x2c\x1d\x1f\xe6\x08\x74\x74\x7c\x9a\xd3\x0b\xef\xfa\x3c\x5b\x68\xa2\xeb\xb3\xac\x1e\xf7\xba\x4b\xcf\xd3\xd3\xd6\x5e\xd3\x2c\x67\x08\xac\x69\x40\x3f\xff\x9c\xbb\xb7\x7c\xad\xf0\xe3\x7c\xcf\x58\xa5\x4d\xd9\x68\x57\x45\x6d\x93\x06\x9a\xc3\x08\x60\x8c\xa7\xc9\x78\x8e\xa3\xa8\xae\x03\xab\x0a\x46\x94\x76\x69\x09\x0b\x9d\x7a\xed\xb7\x46\x58\xb9\x02\x0e\x67\x28\xbc\x9d\x90\x7b\xe0\x8c\xb7\xbe\x25\xd9\x49\x1c\x93\x25\x57\x16\xbd\x43\xc0\xf5\x59\x15\x1b\xe5\x4e\xe7\x76\x2a\xaf\xe4\xff\xad\x4e\xd0\x1a\x1d\x16\x3a\xbf\x28\xbf\x13\x77\xad\x19\x15\xdf\xe8\x04\x07\x9b\x99\x69\xb8\x5e\x27\x35\xc6\x5c\x15\x8b\x1e\x69\xac\xaa\x1a\x25\xc4\xa6\x99\xe4\x26\x85\x26\x56\x50\xaa\xa7\x8f\xa3\x00\x27\xe2\x03\xdf\x07\xd5\xce\x23\x13\x82\xbe\xa8\x49\xa3\xe8\x71\x98\xdf\xc5\xff\xaa\xdc\xf2\xb1\x3f\xf6\x89\x13\xf7\xb4\x6a\x05\x34\xab\x40\xfd\xc1\x40\x4c\x27\x57\x7a\xb7\xa5\xf2\xf9\xaa\xcf\x89\x0b\xc7\xb4\x7c\x7c\x8b\xc0\x94\xd8\x87\x65\x1d\xaa\x48\x91\xf2\x79\xa8\x0d\xd5\xd6\xae\xd0\xc5\x9b\xba\x40\xda\x9a\x5f\xcf\x52\x98\x18\xdf\xef\xc1\xb2\x3a\xe3\x4c\xb0\xb5\x95\x93\xf6\x84\x64\x63\x69\xd9\xf3\xab\xb5\xb2\x5f\xd5\x36\x82\x27\xa8\x89\x8c\x1a\x9f\xf3\xf6\x11\x70\x1a\x4d\xf6\xec\x66\x17\xb0\xe2\x66\x28\xfa\xbf\x13\x22\xcf\x6b\xfe\x8f\x73\x14\x2d\x5a\xc3\x47\x2c\x79\xea\x1e\xd3\x50\x29\x3d\xa5\xb3\x8b\x46\x1a\x76\x9f\x47\x11\xce\x48\x8f\xdc\xdd\x7d\xd8\x0f\xcf\xc5\xd8\xad\x84\x7e\xb8\x7b\x62\xdf\xd9\xad\xbd\xe5\x0d\x2b\x60\x77\x58\xb4\xb1\xeb\xa1\x34\xf7\x41\xc6\x8a\x16\x5f\xbf\x47\x11\xeb\x39\xb9\x3d\x93\x30\x58\x3a\xae\x0f\x51\xc2\x4a\xbf\xfb\x77\x2a\x65\x6b\x4c\x70\xcf\x24\xed\xf7\xe9\x14\x2b\x37\xe4\x21\xae\x1d\xd9\x25\xfe\xf7\xb9\x6e\xdc\x93\x33\x8d\x78\x3b\x7e\xf1\xe3\xc2\xf2\x58\x58\x2a\x2c\xf0\x10\x57\x96\x18\xfb\xef\x75\x69\x79\xcc\xee\x01\xaf\xad\x7d\x81\x78\x6b\x1c\x34\xed\x41\x6f\x0d\x51\xb1\xe3\xd1\x5a\xa3\x2e\x1d\x9d\xaa\x12\xb7\x31\xf3\x8e\x1d\x6d\x18\xc3\xd3\x44\x94\x07\x14\x2d\x43\xed\x54\xb0\x44\x33\xda\x4f\xd4\x84\x00\xd6\x23\xa4\x7d\x14\xfc\x96\xc8\xd8\xa3\x45\x89\x97\x0c\xc9\xe7\x7a\x13\xae\x2d\xaa\xd6\xb9\x99\x8d\x57\x91\xa5\x1f\xa4\x5e\xf3\x79\x8d\xc7\xd4\xcf\xeb\x2b\x2a\x48\xa2\xb0\x95\x89\xa0\xbc\x2c\x81\x97\xcf\xde\x60\x3a\x3f\x85\xa9\xa0\x5e\x20\x4e\xa0\x15\xb9\xd9\x8c\x2c\x39\xf7\x4e\x04\x75\x3f\x8e\x7e\x56\xa4\x97\x1d\xf1\x4b\xe2\x3a\x58\x56\x16\x32\x88\x5b\xce\x24\x2e\x9c\x07\xd4\x7d\x19\x8a\x6f\x11\xd9\xa0\x7b\x37\x0f\x25\xd0\x65\x7f\x09\x39\xa1\x96\xf8\x7b\xbd\xe7\x87\x3b\xf8\xda\x8c\x72\x97\x08\xf9\x7c\x5b\xdd\x08\xae\x5e\x7b\x6c\xbd\x27\x3a\xbe\xeb\x81\x76\x20\x3d\xd7\xdd\x0d\x14\xbd\x9c\x0b\x15\xe6\xe4\xf4\x52\xac\xd1\x4b\xbb\x75\xf0\xbc\x96\xeb\xb5\x8a\x6f\xeb\x69\x87\x6b\x90\x76\xcc\xbc\xa0\x8a\xb1\xbf\x23\x60\x3d\x2e\x56\x1a\x81\x34\x48\x3d\xed\xbb\x75\x10\xf5\x8a\x44\x1f\x91\x43\x5e\xc3\xc4\x2f\x5f\xdd\x48\x17\x17\x49\xe4\x56\x6e\xae\xd3\x7f\x7c\x3b\xa4\x2d\x65\xa9\x78\xcc\x05\x1c\x86\xb0\xb5\xa4\xfc\x1a\x61\x8b\x17\x1b\xc1\x08\x0d\x74\xd5\x71\x0e\xf6\x9e\xac\x95\x43\xca\xc3\x51\x70\xee\x46\x20\x5c\x97\xa0\xe2\x95\xbe\xd4\x54\xc7\xa5\x5d\x49\x19\x78\xd7\xda\x96\x65\x26\x6a\x93\xc4\xec\x6c\x01\xe3\xfc\x1a\xff\xc2\xdb\xa1\xf9\xe6\x66\x5d\x0a\x19\x5b\x12\xaa\xa7\xe9\x5d\x6a\x5f\x0d\xdb\x8f\xa3\xc6\xc3\xe2\xdd\xf9\x1e\x5c\xfc\x69\x62\xa5\xe9\xca\x6d\x74\xda\x78\x27\x7b\x4f\x80\x04\x2d\x41\xea\x4b\x17\xaf\x0b\x36\xcf\x5a\x69\x15\x5e\x36\x39\x7c\x2a\x7e\x01\x5b\xe3\x74\x7d\x28\x5d\x18\x2e\xef\x85\xc2\x74\xdd\x02\xd3\x15\x75\xd6\xe1\xf9\x00\xa9\x90\xb6\xef\xd7\xc1\x70\x69\x38\x81\x0f\x01\xc0\xa5\x47\xa7\x8f\xde\xf3\x1c\xb4\xcd\xc7\x87\x34\x82\xce\x5e\x60\xea\x22\xbf\x8c\xf6\x75\x41\x6b\xda\xbd\x9a\x32\x6f\x4a\xa5\x1f\x3f\x7a\x37\xed\x8d\x34\x3f\xd8\x10\xae\x07\xf1\x46\xba\xb8\xc2\xd5\x7c\xee\xd6\xe6\x96\x8f\x5a\x65\x9f\xb5\xca\x80\xfd\x05\x5f\x2c\xe2\xdb\x7a\xe0\x65\x57\x7a\x45\x87\x65\xdf\xa5\x4a\xe9\xd3\x85\x60\x9b\xba\xe5\xa8\x00\x9b\x2f\xab\x51\x5a\x82\x59\xc3\xe8\x9c\xc0\x90\x66\xdf\x3d\x27\xb3\xfd\xbd\x53\x8a\x23\x4e\x21\x88\x13\x44\xc7\x7f\x1a\x1f\x7b\x7a\x9a\xad\xcf\x42\x71\x2c\x64\xc2\xcf\x36\x5e\x1b\xc3\xde\x3d\x2a\xad\xe3\xc0\x0c\x77\x4b\x3b\xf5\x85\x26\xb5\x3c\xc6\x63\x70\x7a\xc0\xe3\xa8\xc0\x41\x34\x67\x27\x07\xb5\xd3\xe4\xfc\xca\xb2\xeb\xdd\x1a\x80\xa4\x1e\xf9\xa5\xe3\xe2\x45\xc5\xdc\xff\xf1\xf7\xff\xfe\xcf\xff\xfa\xc7\xdf\x83\xca\xc8\xb5\x2e\x7c\x86\xd5\xd0\x19\x13\xd7\xc7\x16\xef\x7d\xa5\xb7\x67\xb5\x21\x7f\xb2\x5c\x34\xc7\xa0\xfc\x9b\xf2\xbd\xe9\x9f\x6c\x11\x99\x44\x7b\x43\x60\xbb\x3b\xb0\x09\x38\x64\xae\xc3\x24\xd8\x27\x58\xdd\x9d\x38\x63\xdf\x10\x51\x20\xb2\x71\xc4\x58\x97\xaa\xd9\x1f\xed\xe1\x8c\x5b\xb4\xc0\xd4\x3e\xfa\x11\x43\x99\xcd\x1b\xc1\x90\x8d\x31\xcb\xd6\x42\x90\x55\x26\xf1\x01\x8c\xa2\x31\x43\x6a\xad\xec\x12\x42\xf6\xdd\xcb\x97\xbf\x7d\x9e\xbe\x7a\x69\x86\x90\xe5\xdf\xf1\xe2\x7d\x75\xc8\x6d\x45\x8f\x95\xf1\x8e\x62\x6e\x7b\xe0\x96\x7c\x76\xb8\xa7\x6e\xc9\xe1\x28\x78\x9d\x30\x44\x33\x70\x55\x10\x77\x73\x41\x8f\x3a\x93\x12\xb4\x2c\x98\xb4\xc4\xbf\x41\xda\xcc\xea\x32\x5e\xb1\xf1\x23\x5c\x0f\x88\x2e\x63\xc7\xe9\x2a\x5e\x17\x5c\x64\x24\x5f\x77\xd2\x53\x2f\xd0\xba\xf4\x49\xe9\x1d\xc7\x13\xb4\x94\x5c\x78\xab\x77\x99\xd4\xe0\x0c\xaa\x57\xbc\xc1\x8c\xe1\x84\xa7\x68\x04\x45\xcf\x33\x50\x69\x85\xa6\x7f\x18\xc7\xd3\xbf\xfe\x35\xc3\xf9\x84\xee\x60\xcc\xc7\xef\x77\x57\x59\x9c\x29\x7a\xa5\xcb\xb1\xcb\x6e\xe9\x01\xb9\xb9\x71\x77\xc8\x6e\x06\x14\xcc\xac\x5b\x34\x16\xaa\x68\x12\xee\xd1\x4b\x42\x0e\xcb\xe2\xdf\x9a\xf2\xad\x28\xca\x30\xed\x53\xe7\xac\x9d\xd2\xe0\xfa\x98\x53\x8a\x18\xca\xc6\x62\xe8\x43\x98\xbc\x61\x87\xc7\x68\x29\xa3\xf3\x69\xe3\x49\xf2\xab\xe3\x51\xc0\x68\xa8\xb2\x48\x0f\x14\xed\x0e\xca\x2c\x2c\xa9\x66\xae\x73\x71\xcf\x25\xec\x49\xca\x45\xad\xbc\x99\xa1\xac\xcb\xfd\xff\x76\x7c\x5f\x3e\xc2\x82\xed\xd1\xcf\x9e\xb2\x92\xaf\xe9\x26\xe7\x03\x94\xc8\xaf\x9e\x85\xb6\xe5\x3b\x5a\xeb\x1a\x85\x26\xbd\x2a\x76\xd4\x2e\xc5\xe7\xc6\x04\x36\x2d\xd1\xac\x01\x6b\xf2\x22\xdf\x14\xfb\x17\xf2\x4c\xca\xc8\x94\x87\x15\xda\x76\x83\xcd\x23\xaf\x2f\xcf\xc9\x7a\x03\x6e\x2e\x32\xfe\xc0\x4e\x6b\xac\x8b\x84\x1c\xad\x21\x21\xe6\x77\xe8\x78\x96\xe5\x3b\xd0\x7d\x88\x68\x9a\xb5\x86\x3c\x38\x21\x61\x96\xc1\x70\x36\x2e\xd2\x35\xd5\x5e\x24\xb3\xf5\xe0\x4a\xac\x92\xc3\xc3\xce\x5d\xa5\x03\xd7\x60\x3a\xc9\x8a\xf8\xdf\xe5\x62\x12\x63\x36\x43\x11\x98\xac\x40\xf5\x05\xce\x0c\xb1\x46\x2b\x10\xfd\xaa\x11\xd0\x36\xe7\x0c\xcf\xd1\x18\x4e\x89\xe6\xf3\x87\x14\x41\x1d\xb3\x62\x88\x1e\xcb\x1e\x2b\xfe\x85\xb0\x4f\xe5\x28\x3c\xd6\xbb\xb5\x3f\x88\x45\xe1\xd9\x8c\xb3\xdf\xaf\xc7\x06\x93\x10\xc5\x0f\xcb\x65\x33\xb9\x58\xc3\xf8\x6c\x42\xe9\x21\x55\xf1\xbc\x4b\xa7\xed\xea\xd9\xfb\xd7\xb3\x1f\xce\xe6\x46\xa7\xcd\xb3\xc3\x47\x65\x3a\x26\x17\xeb\x48\x75\x11\x92\xa4\x28\xb6\x13\x71\x8f\xb4\x2e\x38\x6e\x50\xe1\x53\xf1\x40\x74\x88\x78\x2a\x0a\x2f\xd7\xc8\xd9\xa7\x5e\xf6\x86\x44\x48\x04\x9f\x84\x5c\x55\x93\xa7\x65\xbe\x71\xe1\x9d\x15\x69\xd1\xfc\x81\xc5\x47\xfe\xdc\xe2\x13\x7f\x7c\x29\xc8\xad\x01\x28\x25\xc9\x6e\x8c\xb8\x62\x40\x96\xe2\x81\xcd\x09\xad\xce\x94\x61\xa4\x56\xda\x82\xe3\x18\x27\xb7\x68\xd7\x72\xcb\x56\xbf\x7d\x3e\xbb\x38\x4b\xcc\xc1\x06\x1e\x5d\x1e\x99\xfe\x63\x13\xe9\x63\xe1\x10\x56\x3b\x5e\x05\xd5\x69\x8b\x38\xc4\x38\xd0\x65\x68\x54\x0d\x41\x3e\x26\x63\x18\x22\x13\x17\x38\xb9\xdd\x68\x58\xa2\xe9\x73\x66\x70\x92\xc0\xbb\xc2\x1f\x76\xa1\x49\xd7\x01\x07\x5d\x7e\xa8\x2d\x29\x34\x36\xd7\xf9\x65\x70\x52\x43\x46\x7a\x2e\xbe\x3d\xba\x2a\x91\xba\x34\x7c\x4b\x03\x38\x92\x16\xe1\x69\x35\x68\xae\xe1\x44\x21\x4c\x1d\x79\xbb\x2d\x06\x1a\x9c\x70\x83\x55\x4c\x78\x2b\x64\x38\xf6\x26\x43\x39\x34\x5f\x4a\x1c\x77\xa0\x44\xeb\x11\x7a\xd7\x09\x3d\xed\xc0\x57\xd5\xa4\xdf\x67\x32\x4f\xdd\xf8\x3a\x3d\x46\xfb\xcc\x7b\xb4\x6f\x51\xb6\x24\xf4\xd6\x77\xb8\xcf\x2c\xc3\x6d\xc6\x94\x9a\xeb\x31\xf7\x90\xfa\x2c\xc8\x76\xc5\x62\x54\xea\x45\x22\x84\x4f\x74\xb1\x96\xfe\x95\xeb\x37\x90\x11\x20\x1f\xcc\xdb\x7c\xe0\x44\x34\x8f\xd0\xb5\xb1\x6f\xc6\xbd\x30\xd5\x63\xcc\xb2\x71\x8a\x43\xbe\xdf\x16\xf9\xbc\x19\x9a\x2b\x77\xf7\x25\x46\x71\x94\xdb\x4a\x38\xd1\x70\xe5\x02\x92\xc8\x3f\x4b\xdb\x1d\x26\x11\x8e\xf2\xbd\x5d\x5a\x54\xbc\xef\x8a\xaa\x50\xb3\x1b\x3d\x0c\x65\xe2\x71\x56\x73\xc6\xee\x01\xf9\x55\x72\x35\xd9\xde\x53\x07\xed\x80\xf3\x30\x01\xb0\x18\x6c\x7f\xfe\x9b\x47\xbd\xc4\xd1\x14\x65\x15\x79\xf0\x4e\x0f\x58\x23\x1a\x5b\x91\x1a\xd8\x7b\x3b\xf0\x54\x4c\x62\x58\x0d\xec\xc0\x67\x55\x24\x4b\xbb\x66\x5a\x23\x1b\xa7\xcc\x38\xcf\xe8\x22\xb7\xfe\x3c\xf3\x26\xea\x8f\x36\x05\x6c\x65\xe8\xb7\x1e\xb1\x85\x8c\xa1\x8c\x1d\xe0\xf9\xf4\x40\xa3\xee\x81\xa4\x40\x61\x79\xdf\xe0\x18\xc9\x1a\xe0\x82\x22\x5c\x8e\xef\xb3\xea\xd1\x77\x87\xf8\x4e\x55\xe3\x88\x67\x36\x42\x65\xbe\x04\x6d\x2d\xc9\x69\x70\x6f\xcd\x34\x8e\xfe\x1d\xad\xae\x79\x96\x82\x3f\xda\x85\x57\x4a\x92\x65\x03\xac\x28\x4d\x45\x61\x8f\xb0\xd2\x33\xbf\x68\xd6\x26\x53\x0a\xfc\x34\xb3\xb2\x58\xf6\x46\x29\x0f\x5d\xae\xd3\xb0\xcc\x3a\x94\xe0\x18\x0f\x1d\xdb\x0b\x71\xac\x87\x8e\x95\x5e\x41\x35\x4a\x89\x26\x3c\x41\x51\xf3\x63\x2c\xd6\xb9\x45\xab\x25\xa1\x91\xd8\xf1\xe5\x07\x50\xdc\x49\x6e\x6e\xec\xc5\xfd\x6a\xfe\x5d\x01\x21\x7a\x96\xf7\x9c\x49\xad\x07\x44\x2b\x21\x39\xe1\x91\xbe\xb9\xfa\xd7\x83\x36\xf4\x92\x76\x74\x28\xbd\x9c\x37\x30\x0b\x67\xa8\xff\x99\x46\xda\x38\x86\x20\xf9\xd6\xaf\x7b\xf2\x6f\xc5\x37\xe0\x86\x2c\x92\xe8\x49\xd7\xf5\xb7\xf7\x56\xc2\x5c\x52\xb0\xdc\xb1\xb6\x6b\x20\x3c\x7d\x48\x06\x42\x09\x65\xdb\xd8\x6d\x9b\xa7\x34\xe5\xc5\xe5\x76\x3f\xe4\xe6\xfc\xf4\x71\x73\x96\x9b\xf3\x53\xaf\xcd\xf9\x69\xfb\xc9\x68\xb9\x08\x94\x77\xb5\xbd\x05\x70\xfc\xf0\x16\x80\xf1\xec\xbe\x6d\x01\x1c\x6f\x6c\x01\xac\x87\x92\xff\x7b\x5a\x00\x7e\x49\x0e\xc7\x3e\x0b\x60\x57\x8e\xe2\xd1\x43\x5a\x06\x5b\x71\x14\x8f\x36\xe0\x28\x1a\x73\x2a\x06\x58\x8a\x47\x8f\x4b\x31\x19\x2c\xff\xc0\x48\xf1\xae\x17\x0c\xe4\x28\x16\xc1\xe2\xbd\xf1\x14\x75\x6f\xf0\x2a\x45\x21\xbe\x59\x81\x44\x8c\x12\x44\x14\xdf\xa1\x03\xde\xac\xf9\xe0\x86\xfb\x63\x20\x26\x21\xb4\xa5\xd5\x7a\x0c\xbb\xb3\x23\xba\x01\x3f\xd2\xe0\x3e\xca\x49\x17\x13\xb4\xfb\x91\xf2\xea\x8b\x82\x1c\x1f\x47\x01\x7a\x32\x7d\x02\x0e\x2a\xf4\xf2\xcd\x26\xad\xd0\xac\xb3\xa7\xb8\x45\xb9\x76\x3c\xb4\x9d\xeb\x0f\x29\x41\xe7\xa1\x97\x66\xfb\xd6\x18\x89\xf3\x68\x47\x95\x91\xb8\x48\x9e\x59\x6f\xa5\x38\x7b\xe0\xec\x8f\xea\x3a\x1f\x26\xff\x43\xfd\xb1\x1f\x89\x4b\xf4\xdf\xcf\x7f\xb8\x9d\x4e\xcc\x09\x20\x8d\x2c\x8f\x7e\x19\x48\x85\x3e\xab\xa6\x20\xe9\xf6\x6d\xe7\x24\x24\xf9\x4c\x47\x16\x92\xf8\x54\x35\xa4\xb7\x95\x95\x34\xa8\x20\xd6\x84\x66\x60\x49\x14\x0c\xd9\xa9\x1c\xde\x7d\x87\xf0\x74\xf9\xa7\xef\xcc\x89\x48\xb9\x14\x85\x30\x73\x55\x3b\x15\xd9\xc5\xfa\xc4\x40\x42\x92\x71\x4a\x71\x62\xee\xe3\x69\xf1\x4f\x84\x75\x5e\x9a\x38\xd7\x27\xd7\x1f\xae\xcc\x1a\xa9\x9a\xfe\xd4\xe8\xfd\x55\x22\xab\x69\x1d\x53\xb5\x15\x12\xe3\x1b\x14\xae\xc2\xb8\x05\x50\xf6\xa2\xf8\x79\x14\x9c\x51\x78\xa3\x79\x21\x52\xbd\x8f\x23\xf1\xb5\xfa\xb2\x54\xa0\xa3\xa1\x07\x70\xa1\xa3\x93\x17\xef\x8f\x45\xa7\xc5\xcd\xbf\xfe\x84\x86\x33\x7c\x57\x49\x6c\x96\x43\x80\xc5\x2f\x16\x37\x55\xed\x9e\x6d\x03\x10\xfb\x9b\xa5\xcd\xff\xfa\x19\xe8\xc5\x6c\xbe\x04\x9c\x99\xe0\x1f\xff\x2f\xc8\x89\x9a\xff\x57\x9b\x9d\xbb\x5d\x56\x43\x14\x9b\x40\x7e\x66\x72\xa7\x94\x64\x2a\x0f\xc1\x44\xef\xcb\xe2\xf7\x6b\x61\x1e\xbf\x25\x09\xf2\x87\xf7\x6b\x5f\x52\x82\x51\x24\x45\x6d\x45\x0a\xef\x2e\xcf\xdf\xd6\x8d\x82\xf5\x29\x7e\x3a\x83\xc9\x14\x81\x53\x61\x87\x7f\x09\xde\xa5\x28\xc9\xa9\x2d\xe7\x89\x22\xce\x02\x22\xa1\xee\xbd\xfa\x94\x75\x30\x7e\x37\xc1\x90\xf7\xe8\x0e\xa3\xe5\x70\x2c\x49\x15\x25\x5a\xf8\x72\xf9\xfe\xdd\xf5\xf9\xe9\xf5\xf9\xd9\x23\x73\xdc\xcc\xc9\x07\x3b\x1c\x6b\x62\x39\x75\x23\x5f\x2e\xde\x9d\x7e\xfb\xfb\x63\x4a\x5b\x18\x84\x3b\xd2\x78\xb2\xc8\x69\x7d\x95\xc1\x6c\xe1\x13\x18\x75\xd1\x37\xf7\xc5\x6f\x62\xb2\x1c\x33\xf9\xc4\xd6\x84\x5d\xe9\xad\x99\x46\xd1\xba\x5d\xf4\xef\x06\xc2\x2d\xd7\x34\xa5\xe4\x0e\xc6\xde\x93\x1d\x6c\xbe\xd5\x29\xd7\xc7\xe1\xe9\xc3\x75\x81\xa7\xb7\xb0\x5d\x5b\x8b\xca\x68\x1c\x86\x14\xea\x69\x0e\x13\x51\xfc\xef\x5a\x5e\x3c\xfc\x62\xbb\x9e\x61\x06\x30\x03\x10\x68\xd3\xdb\xcc\x9a\x92\xf7\x3c\x57\xb1\x03\x5e\xcb\x91\xfb\xa0\xdc\x67\xfb\x37\x26\x51\x6e\x82\xe3\xc3\x43\xe1\xc8\x15\xa6\x45\x27\x53\xf9\xf4\xe4\xfa\xfc\xd5\xbb\xf7\x3f\x82\x03\x70\x7d\xf2\xca\x1c\xb1\xae\xd5\x2b\x8b\x88\xf5\x29\xcc\xd0\x94\x50\xec\x75\xf2\x67\x89\x18\xa1\x0c\x8e\xeb\x19\x28\x86\x60\x53\xcf\xd8\xb6\x1c\xe5\xaa\x25\xbe\xdd\x58\x41\xf2\xe8\xad\xbc\xcb\xb6\x7e\x06\x50\xde\xda\x8b\x06\x91\x22\xcb\x71\x55\x06\xa7\xbf\xed\x33\xab\xae\xe1\xd4\x9f\x4b\xfc\xc4\x60\xb3\xbc\x11\xe3\x19\x86\x2d\x47\x6d\x45\x07\x8b\x04\xf2\xbe\x2d\xb6\x13\xa0\xea\x1d\x29\xa2\x73\xcc\x18\x4f\x54\x91\x25\x63\x6f\x60\x22\x62\x2a\x6b\x29\x5a\x34\x4f\xb3\x15\x08\x17\x94\x11\x3a\x4e\x09\xae\xd5\x8d\x7c\xd0\x46\x6a\x49\x82\x3f\x8f\x70\xa6\x4b\x75\xe7\x6d\xb5\xc3\x60\x5b\x47\xe7\x78\xa7\x85\xab\x4d\x27\xed\xa8\x76\xe2\xc8\x70\x84\x26\x90\x8e\xcb\x50\x95\xd6\x80\x49\x33\x45\x35\x36\x59\x82\x63\x95\xcb\x8c\x31\xd7\xa4\xcf\x2e\xb0\xa9\x98\x56\xfe\x84\x81\x23\x5a\x22\xd2\xb8\xd3\x88\xd6\x8b\xdb\x4f\x67\xc7\x57\xb7\x2f\x3a\x97\x84\xaa\xfa\x39\xae\xe0\xf2\x89\x98\xcb\xe4\x14\xfa\x44\x04\x33\x38\x16\x05\x77\xcd\x52\xba\xf2\x0a\x71\xd0\x55\xb9\xa6\x8a\x4a\xe1\x28\xe6\x42\x11\xce\x78\xbd\xe8\x3a\xca\x7e\xb9\x62\x78\xb9\x6a\x56\xe7\x35\x4e\x36\xda\xa3\xe5\x86\x55\xb1\x8d\xf8\x72\xfe\xfa\xcb\x4a\x8c\x99\x13\x64\xad\x38\xb3\x68\x42\xe6\x8e\x35\x5f\xc1\x3b\x24\xde\x6d\x3f\x44\xe9\xe3\x6f\xb4\x31\x4d\xdb\x68\x75\x91\xc9\x48\xf8\x3a\x89\x50\x92\x9d\x32\x56\x97\x19\x2b\x1f\xb9\x1c\xcf\x10\x8c\x70\xa2\x75\x76\x42\xf7\x29\x4c\x22\x14\x35\x78\x27\x92\xbf\x44\x21\x26\xd3\x59\x2c\xfe\x28\xca\xa5\x65\x81\xa2\x2c\x64\x4e\x51\x22\x9e\xdf\xa6\x33\x47\x41\xb8\xa0\x14\x25\x9c\x95\xaf\xa3\x40\xed\x2d\xf9\x9b\xd0\x0d\x45\x6c\x26\xbe\xe2\xc3\x12\x42\x43\xd2\xd5\xa5\x18\x1a\x49\xde\x10\xc9\x88\xb2\xdd\x53\xf1\x51\x31\xe9\x84\x49\x08\x84\x80\x24\xf9\xe7\x0b\x74\x87\x62\xe1\x4e\x17\xdf\x5d\xa1\x5f\x17\x28\x09\x91\xf6\xf5\x55\x59\x9b\xf5\x43\x81\xed\x24\x05\x4d\x11\xc9\xeb\xb0\xa3\x28\x4a\x12\x1f\x05\x01\x5b\xc5\x5a\x91\xb3\xf8\xa2\x40\x26\x19\x15\xf5\x6c\x72\xd5\x17\x7b\x8b\xa0\x71\xf1\x85\x6b\xfb\x51\xb6\x59\x85\xf0\xf6\xe5\xe1\xb5\x30\xe4\xfc\x24\xdb\xca\x68\xb0\xfd\xfa\x82\xb9\xee\x1b\x74\xee\x7b\x5c\x5b\x08\x87\xc7\xb5\x9a\xec\x74\x58\xff\x4a\xb4\x7c\x67\x5a\x17\x3f\x7f\x1a\x19\x84\xd4\xff\x66\x83\x28\xdb\xfa\x20\x9a\xf6\x9a\x52\xe2\xfd\x72\x5d\xfa\xee\x38\x0d\x7d\x25\xf1\x29\x0e\x26\x90\xa1\x31\x45\x49\x84\xa8\x5e\x33\x28\x16\x5e\x61\x34\x4b\xfb\xd8\x7d\xcc\xdf\x31\x4b\xc2\xc7\xda\xac\x9f\x03\xd4\x0d\x4a\x89\xa9\x66\x32\x28\x17\x69\x4c\x60\xa4\x4e\xf2\x8b\x8d\xbd\xd0\xc1\xfa\xd6\x8a\x85\xfe\x25\x49\x59\x41\xf8\x81\xdf\x5e\xfb\xb2\xc0\x60\xff\x39\x10\xbf\x03\xbd\xe4\x70\xd4\xb0\x21\x8c\x9a\xac\xa9\x4a\x3c\xb7\x54\x25\x7a\x8d\x41\xfa\x4b\x6d\x73\x2a\xf6\x7e\x95\x9b\x4b\x3a\xa8\x18\xb1\x03\xdb\xc5\x45\x77\xd7\x9d\x9a\xc6\x5f\x1c\xbe\x3d\xfe\xe9\xed\xe4\xc8\x82\x3a\xd1\x30\x90\x87\x6c\x50\xdb\xf2\xaf\xc1\x63\x6f\x3b\x1e\x80\x69\xfa\x46\x58\x2a\xb9\x4c\xdb\x8e\x06\xa2\x05\x2f\x25\xe6\x68\x81\x29\xc5\x0c\x9d\x17\x37\xd8\x0f\x08\x6c\x0e\xba\xe2\xa7\x6c\x63\x6b\x81\xf8\xab\xf4\x3f\x8d\x28\x49\x23\xb2\xd4\x72\x85\x54\x6e\x10\xa4\x94\x2c\xf9\xea\x3d\x91\xf5\xe1\x6d\x5d\x7b\xcb\x10\x48\x4a\x52\x72\xa7\x6b\x47\xa5\x73\x67\x38\x42\xef\x12\xd9\x91\x93\xff\x81\x59\xbe\x29\x88\x96\x9c\xa2\x3d\x82\x78\x06\xa2\xf9\x53\x52\x6e\xd9\x85\x31\x0e\x6f\x01\xff\x97\xf0\xdc\x39\xfe\x67\xd0\xca\x9a\xd6\x74\xc7\x66\x09\xce\x1c\x25\x0b\xeb\x0e\xd0\x48\x95\x6e\x87\xd8\x7e\x9f\x6f\x8b\x2c\x03\xfa\x29\x80\x35\x76\x91\xcf\x5c\xde\x74\xaa\xdd\x23\x1a\xe4\x7a\x74\x8f\xee\x36\xac\x1b\x84\xa2\x09\x0c\xed\x98\x02\xda\x90\x5e\xca\xeb\x37\x34\x1c\x8a\xa0\x3d\xb2\xa3\x0d\xe5\x3d\x82\x91\x71\x18\x9e\xa7\xda\xfd\x93\x28\x86\x42\xe1\x8b\x30\x6f\x92\x17\x74\x43\x13\xf4\x26\x66\xba\x98\xc4\xb8\xcc\xa1\xb5\xd2\x54\xe2\xce\xb5\xd0\xb3\x5f\xa9\xdc\x7a\x13\xf6\x9d\xed\xd5\x0c\x52\x04\xee\x30\x04\x0c\x85\x0b\x8a\x00\xba\xcf\x10\x4d\x60\x0c\x62\x09\x7e\x63\x99\x38\xa4\xc8\x47\x92\xd7\x38\xa7\xea\xf7\x7d\x4d\x94\xbb\xab\xe5\x53\x09\x27\xf4\xa0\xd4\x72\x07\x85\xdc\x74\x02\x52\xcc\x4f\x57\x79\x30\x8b\x5d\xe2\xc4\x1a\xcd\x6e\xdd\x0c\x3c\x16\xd7\x9c\xdc\x21\x30\x21\xe4\x76\x0e\x1d\x58\x2c\x1f\x92\x54\x22\xeb\xfb\x82\xc6\x78\xad\x95\x1e\x07\xc3\x0c\x71\x5b\x40\xe4\xa6\xcf\x50\x92\xe5\x7a\x61\x33\x04\x7a\xe1\x43\x99\xcb\x4d\xd0\xa5\x7a\x7b\xf7\xa3\xe4\xee\x73\xbd\xa4\xd8\x01\x85\xc4\x75\x6b\x7e\x95\x53\xcd\xf8\xbe\xf3\x8c\x2c\x13\xe1\xab\xd8\x0e\x40\xb8\xb1\xee\xdc\x18\xb5\xbe\xad\x66\x83\xf1\x24\x8a\xcc\x71\x9a\xf2\x92\x53\x92\xae\x7a\x6c\x8d\xbd\xe4\xbe\xb1\xe6\x2d\x83\xee\x0f\x9c\xd5\x4e\xfb\xeb\xe2\xbc\xdd\xc1\x72\x75\x61\xe7\xfd\xd4\x67\x7e\x15\x8a\x0f\x3b\x41\xf1\x68\xc7\xe4\xce\x16\x29\xb7\x2b\xba\xce\x6e\xbd\x59\xd7\xdc\xec\xcd\x88\x58\x17\xb2\x01\x5a\x05\x50\x28\x22\x1a\x76\xe2\xf1\xcb\xd6\xb2\xb3\xd6\xb6\x46\x7c\xf4\x01\x47\x81\x0a\x33\x7c\x87\xb3\x95\x86\xe5\xc9\xcd\xef\x3b\xcc\x2a\x98\x60\x83\x3a\x94\x5f\x63\x96\x11\xba\x7a\x58\x96\xcb\xba\xc6\x4b\x8d\xda\x5d\x97\xf6\xb3\x5c\x46\x93\xdb\x71\x46\x9a\xc4\xa0\x64\x21\x03\x6d\x12\x90\x53\x2d\xa8\x27\x50\x63\xaf\xe1\x55\x3a\xf7\x5d\x72\xe4\xbb\xb4\xcd\xf2\xb3\xe9\x89\x52\xed\x8d\xa6\x77\xe9\x23\x5a\x63\xaa\x06\x81\xd8\x88\xd3\xd0\x75\x3f\xb4\x47\x7d\xaa\x51\x64\xbd\x50\x4c\xad\x5a\x51\xd9\x5c\x94\x41\x8a\x44\x19\x55\x35\x56\x24\xb6\x70\xc6\x5c\x93\xc0\x58\x2e\x26\xb3\x6b\xae\x50\x96\xe1\x64\xca\xcc\x1e\x77\xa3\xa6\x2c\x78\x8f\x04\x1a\x4d\x99\xe6\x35\x02\xd7\x70\x3a\x02\x22\xb1\x70\x04\x7e\x90\xc9\x89\x3a\xb7\x59\xf9\x12\x7f\x10\x73\x1f\x5a\x1b\xba\xb0\x94\x81\x52\xb9\xe1\x3f\xb6\x06\x36\xa1\xd1\x5e\xc1\x3b\x04\x20\x03\xba\xfd\xb4\x31\x48\xda\x1b\x42\xb9\x49\x73\x74\x9c\xef\xb9\x6c\x31\x99\xe3\xcc\x0e\xb5\x04\xef\x90\x36\x32\x29\x0f\x9b\xef\x94\x63\x6e\x52\x9f\xa0\x65\x29\x4d\x7a\x6f\x85\xc3\x51\xf0\xd6\x1b\x81\xa9\xbd\x25\xbd\x2a\x59\xae\x55\x32\xeb\x15\xcc\x1f\x45\xbb\x9c\xda\x30\x94\x09\xa0\x53\x6b\x54\x34\xcc\x0c\xd0\x1c\xe2\xb8\x56\xc2\x0c\x8a\x26\x39\x41\x69\x3c\x4b\x1c\x29\x8f\x3a\xe5\xa0\x3f\x9c\xd5\x2b\x42\x22\x90\xe9\x6f\x04\x21\x49\xee\xd0\xaa\xc4\x85\x04\x9c\x02\x5d\xe2\x3e\xbb\x93\x03\xbd\xff\x05\xb7\x35\x59\x48\x71\xea\x5d\x1d\xaf\xda\x3e\xa0\xfb\x0c\x52\x04\x5b\x24\xa2\xdc\x48\x97\xac\x29\x03\x7c\x08\x66\x19\x88\xf4\xe1\x7c\xac\x57\xb1\x07\xcf\x37\xcd\xec\xf3\xfb\x34\x86\x38\x01\x0b\x86\x40\x08\x19\x02\x37\x84\x0a\x0c\xd0\xcc\xa1\x70\x9c\x6c\xb6\x69\xaa\xdf\x6f\x55\xba\x6f\xdb\x88\x07\x5f\x96\x7e\xe5\x6e\x0f\x6a\xdc\x1d\x76\xd6\x33\xbc\x3c\xec\xa5\x38\xc9\x1e\xad\x0d\x93\xb5\x51\x44\xe5\x36\x66\x62\xa4\xf5\xb7\x01\x18\xc7\x05\x08\x35\xa1\x40\xd4\x27\xa8\x6e\x6f\xac\x09\x3e\xd8\xcc\x8c\x77\xe0\x97\x15\xbe\x74\x38\x43\xe1\xed\x84\xdc\x6b\xa9\xe4\x25\xde\x52\xd9\x9d\x3a\x1f\x95\x06\x2c\xee\xdb\xdc\x28\xf8\x58\xe9\x29\x2d\x12\x3c\x92\x45\xee\x32\xcb\x2c\x2e\x4d\xee\x9f\x00\xe3\xe5\x2d\x30\x45\xfe\xc6\xf7\x3f\x65\x73\xd5\x7f\x1a\x9d\x2b\x97\xa7\x55\xe9\x5e\x96\xe2\xeb\x87\x7e\xbe\x2d\xb5\x1b\xf1\xf0\xdd\xa3\xde\x35\xe9\x5d\x11\xda\x04\x67\x0e\xdc\xf5\xc1\x35\xf0\x09\x45\x60\x45\x16\x80\x2d\xe4\x1f\x4b\x98\x5b\xf7\x04\x08\x66\x55\xd1\xe0\xff\xf2\x68\xd1\x3d\x48\xed\xe2\xd7\xef\xbd\x38\x24\xb0\x66\xd3\xd6\x4e\x14\xf6\x47\xb9\xa8\x83\x95\x47\xfd\x62\xd4\x2f\x8a\x3c\x1b\xd5\x2c\x9d\xc3\x47\xfa\xb0\x76\x1c\x3b\x2a\x05\x68\x77\x81\xa3\xda\x18\x54\xaa\xae\xfa\xf6\xad\x77\xbc\xe8\xed\x16\xc2\x44\xa7\x45\xdf\x98\x38\x06\x13\x04\x8a\x61\x46\x95\x56\x22\xb2\x85\xdd\x63\x0c\xe1\x9f\x69\xc7\xf1\xb5\x67\xb5\xf5\x6f\xdf\x76\x1a\x7a\xe2\x61\x81\xdb\xd5\x93\xc2\x87\x4d\x35\x67\x1c\x3f\x7f\xc7\x89\xe6\x0b\xf4\xec\xe6\xe5\xab\x5c\xdb\x99\x12\xcd\x23\x12\xee\x4b\x9e\xb9\x70\x8b\x1b\xf2\xaf\x4e\xec\xea\xeb\x20\x9b\xa1\x39\x7f\xf7\x22\x4d\x11\x0d\x21\x43\x0a\xf4\xd8\xb8\x26\xb8\xc0\x8b\x01\xb4\x1e\xe5\x9d\x50\x4a\x96\x17\xe8\xa6\xd1\xe8\xb3\x3c\x12\xb0\x05\xd5\xa4\x42\xb5\x14\x4c\x34\x30\x3d\x7c\x82\x23\x96\x23\x4b\xdb\xb9\x24\x9f\xcc\x55\xbe\x7f\x9c\xf1\x2c\x01\x53\xb8\x64\xad\xbc\x03\xb9\x4d\x2a\x43\xaa\x5f\x0e\x42\x2e\x32\x59\x46\xe6\xe3\x39\x8e\x22\x11\x61\x19\x3c\x27\xa1\x12\x92\x72\x12\xbd\xcc\x1c\x49\x48\x36\x96\x69\xd6\x22\x16\x84\xa3\x4a\x9d\xce\xeb\x68\xad\xf4\x69\xf7\xb9\x3f\xdf\x1c\x51\x2c\x0e\x2e\xea\x09\x00\xd2\x52\x16\x02\x49\xf3\x0d\x4c\x03\xbf\xce\x45\x51\x95\x18\xb6\x7e\x85\xab\x17\xc4\x8b\xa9\x5e\xf0\xd3\x98\x4b\x19\x13\xab\xb6\xe2\xee\x9f\x5e\xe0\x8f\x43\x6d\xda\x05\x36\x9a\xac\xbc\x91\x5d\x46\xec\x07\xc3\xec\x31\xd5\x62\xe2\xdd\xe2\xa7\x7e\xfb\xcb\xc9\x0f\xff\xfe\xed\xf1\x3a\x8d\x9f\xa7\x14\x47\x25\xf8\xf6\xf8\x4f\xe3\xe3\x0e\xae\x9e\xb8\x19\xc5\xf1\xf8\x08\x94\x7f\x2b\x8d\xd2\xc5\xc7\x53\x25\x83\x8a\xb0\x5d\xbd\xbc\x82\x2b\x2e\x5b\xf6\x73\x8e\x30\x92\x18\xef\x17\xa1\x69\x75\xff\x51\xb5\xfa\xdc\x18\xb7\xb6\xa7\xdf\xb6\xbe\xa8\x02\x59\x54\x7b\x4f\x23\xe0\xed\x6d\xed\x3b\x4d\x3a\x4f\x5e\x1e\x6b\xbc\xa4\xb9\xc1\x31\x2c\x6f\x41\x42\xc4\x81\x93\x72\x8c\x6b\x80\x13\x6a\xdb\x6d\x05\x9e\xe8\x24\x18\xea\xe5\xca\xa2\x72\xe4\xce\x85\x30\xf1\xcc\x70\xaa\xbf\xdb\x8c\x11\xa4\xf5\x9d\x07\x4e\xbc\xa0\xcb\x78\xc1\x2c\x93\xac\x6f\x62\x6b\xa2\x01\xc9\xae\xce\x6a\x74\x70\x42\xee\xbc\xb1\xbf\x2a\x43\xb1\xa6\xa8\x56\x8b\xb1\x47\xb5\xe2\xe5\x7e\x19\x11\xc2\x95\xf3\x4b\xb7\xed\x09\xdd\xa4\x84\x40\xb1\xc2\x8a\x0e\xe4\x57\x7d\xe0\x3d\x91\x8e\x69\x81\xfd\x27\xa9\x65\xd0\x99\x21\x58\x36\x98\x1b\x4b\x16\x19\x90\xf6\x68\xf7\x62\x4b\x7b\x5c\xc3\xa3\xe0\xb2\x7c\x00\xac\xdf\xae\x92\xd8\xf3\xef\x66\x14\xdd\x04\xa3\xe0\x5f\x5b\x34\x55\x48\xd2\x15\x87\x67\x77\xea\xaa\x53\x92\xae\xdc\x25\x64\xf9\x55\x02\xb0\xde\x78\xc2\x6b\x4c\xad\x2e\x15\x96\x4f\x61\x85\xf5\x9a\x37\xe4\x0e\xb9\xae\xb9\xae\x63\x20\xf6\x68\xf2\xd2\xce\xba\x8e\x65\x4a\xc6\xac\xe0\x1e\x1a\x7c\x7d\x99\x10\xc0\xf4\x49\x08\x45\xd0\x21\xc2\xa2\x80\x5e\xc5\x9e\xcc\xf8\x48\xb5\xf8\xae\x04\x1e\xe9\xa6\x6a\x76\x50\xfe\x31\x28\xa9\xf8\x12\xea\x4c\x2a\xaf\xca\x92\xfc\xa2\x8d\x94\xcc\xc8\x75\xb2\x33\x9a\xcd\xc9\x1d\xea\x4e\x33\x31\x6a\x07\xcd\xf2\x8b\x36\x42\xb3\x86\xde\xd8\x01\xdd\x52\x51\x96\xdc\x9d\x74\xb2\x9e\xd9\x49\xbd\xbe\x75\xcf\x9b\xa9\x58\x5a\x4b\xdf\xf6\x61\x85\xaa\x61\xf2\x64\x87\xcc\x7e\xf0\xe7\x46\xfe\x5c\x01\x27\x47\xa6\xd3\x18\x55\x0e\x31\x0b\xa4\x39\x48\xa7\x28\x6b\xbc\xeb\x5f\xf5\x97\x89\x83\x0f\xcf\x77\x4d\x60\x78\x1b\x51\x92\x06\xc2\x9d\xc6\xd5\xcc\x59\x55\xa5\xd5\x07\xf0\x9b\xa3\x7c\xb5\xed\xe2\x4c\x56\x1f\x0b\x61\x83\x93\x58\x02\x36\x6d\x7b\xd7\x35\x35\xdc\x55\x63\xc3\x1c\x8c\xed\x0c\xb3\x7c\x78\xbd\xfb\xbd\x0d\xb4\xb8\x33\x12\x8e\xc5\x80\x3a\x2d\x6d\x01\x28\x67\x59\xd9\xf9\xdd\xea\xa2\x4e\x8c\x6e\x21\x1a\x59\x64\x7b\x46\x35\x39\xa2\x4e\x64\x7b\x27\xee\x71\xd0\xad\xb8\x6a\x08\xc2\x2d\xd2\x3d\xa2\xd9\x22\xed\xbc\xf7\x02\x71\x16\x6f\x21\xd7\x87\x74\x18\x4a\x45\x64\x99\xec\x11\xad\xf2\xe1\x74\xa7\x56\x24\xbd\x48\x0b\xbd\xe4\xf1\xca\x30\xf5\xab\x26\x02\xf4\xf7\xc9\xed\x71\xc1\x5e\x21\x8d\x35\xe3\x19\x0a\x78\x70\x14\xa8\x9e\xab\x35\xe9\xd1\x91\x1e\xe5\x07\xbf\x9e\xab\xc3\x44\xa3\x72\xfb\xe9\x60\x86\xa3\x8e\x21\x28\xbb\xc3\x54\x4c\x7a\xc0\x20\x6a\xe3\x02\xef\xd2\x49\x1f\x5f\x2b\x68\x20\xa1\x5a\x9d\x26\x5f\x53\x66\xa8\xac\x2f\xef\xc4\x2f\x20\x3e\x3c\x3f\xac\x3f\xd7\x92\x01\xb6\x76\x12\x58\x9f\x3c\x30\x1e\x99\x39\x43\x2c\xc3\x89\xab\x41\xa8\xeb\xd9\xf6\x8c\x30\x73\xba\x29\x6f\xbf\x50\x84\x60\x93\x88\xe7\xfe\x27\x88\x65\x28\x2a\x12\xfe\x8b\x84\xa2\x90\xa4\x18\x45\x20\x23\x20\x9b\x21\xa0\x32\xf5\x8b\x6c\xd4\x7a\x61\x80\xe1\xed\x4e\xd4\xed\xa3\x7a\xef\x05\x4f\x1b\xb2\x7f\xc2\x59\xd1\xc3\xd5\x99\x15\x65\x4a\x52\x10\x44\xd0\x93\x74\x24\x54\x91\x6c\x30\xfd\x3d\x8c\x17\xe8\x12\x66\xb3\xe2\x1b\x9e\x69\x23\xbf\x61\x65\xd3\x5e\xa5\x42\x8a\x93\x7d\x0d\x9d\x56\xa4\xac\xe9\x19\x68\xc2\xcd\x90\x63\xb6\x27\x27\xf0\x57\x38\x52\x14\xec\x7b\xcf\xf6\x98\xe0\xca\xb6\xde\x05\x1f\x04\xa9\xcf\x44\xf6\x40\x2b\x2b\xce\x48\xe8\xc5\x08\x7e\xdd\xfa\x6c\x58\x43\x4b\xb8\x12\xee\x1e\x62\xce\xdd\x1a\x69\x77\x7b\x93\x79\x57\x46\xc8\xbd\x11\x99\x3b\x81\xef\xae\x6d\x76\x0c\x85\xe0\xe0\x13\xbe\xf4\x32\x43\xca\x38\xe4\xa3\x19\xb2\xae\x19\xc2\x7d\x9e\x07\x62\x86\xe4\x7c\x7f\xb4\x42\x1e\xad\x90\x47\x2b\xe4\xd1\x0a\x79\xb4\x42\x86\xb5\x42\xca\x33\x78\xef\x5e\x0f\x0f\xd3\x0a\xf1\x3b\xcf\xf2\xb2\x43\xfa\x9c\xed\x6c\xdd\x12\xd9\x77\x03\x44\xd6\xdb\x5e\x15\x45\xd2\xdb\x34\x3f\xbc\x8a\x6e\xa5\x1d\xd2\x5a\x73\x3b\xf8\xbe\xd4\xf6\x0c\x0e\x9a\xe0\x7a\x86\xb5\x04\xae\x56\xf5\xc6\x1f\xc8\x4b\x2a\x30\x3f\x40\x0d\x4a\x58\x06\xed\x8d\x63\xf9\x10\x99\x06\xcf\x29\x73\x3a\xc3\x71\x44\x51\x52\xa8\x0c\xf3\xaa\x10\xf7\xdb\x56\x85\x47\x65\x5c\x4b\xb1\x60\x93\x34\x65\x47\xc5\x7c\xc1\xf2\x62\xc2\xb5\xc6\xe6\x24\xf4\x5f\xff\x9a\x9d\xc4\xac\x90\x96\x30\x27\x4a\x61\xb6\x5a\xb9\xe3\xb4\x2e\x86\x2c\xd1\x7b\xdc\x96\xf7\x6e\x5b\x1e\xb2\x10\xbc\xd1\x56\xe9\x61\x6e\xcc\xbe\x99\x3a\x5e\x5b\x73\x25\xe5\xe6\x71\x6f\xee\xb9\x37\xcb\xbc\x22\xf0\x1e\x2d\xf8\xa9\x2e\x50\x95\xc6\xaa\x25\xd7\xa6\xf7\xea\x61\x2b\xcc\x8b\x4d\x81\x1f\x5d\xf2\xd2\x15\x51\x11\xe1\x4c\xa3\x1d\xa2\xf2\xdc\x52\x71\xae\xca\xd2\x3f\xca\x0c\x9d\x52\x8e\x9d\x83\x94\x6b\x8d\xa3\xe2\xd9\xea\xd0\x79\x2b\x1e\xa0\x7b\x8e\xfc\xd1\xd7\xb2\xe8\x63\xc3\x15\xea\x97\x94\xdc\xe1\x08\x01\x08\xd8\x8c\xd0\x0c\xf0\x09\x49\x80\x3b\x04\xa8\x12\x2f\x85\x3d\x35\x71\x88\xd7\x4e\x82\x04\x46\xf1\x89\x10\x0b\x9d\xd2\x33\x2c\xd0\x21\x07\x36\xec\x27\x47\xed\xa3\x55\x62\xf4\xd4\x2d\x43\x3a\x4e\xa2\x2e\x4a\xe7\xf7\x21\xa2\x69\xb6\x79\x61\xba\xe2\x22\xa4\x0d\x23\x37\xd8\x67\x28\x4e\x01\xc9\x66\x88\x32\xb0\x48\x22\x44\xf3\xcd\x34\xda\x84\x78\x3d\x5a\x59\x0f\xc6\xca\xf2\x06\xf3\x52\x79\xb6\x7d\x3a\x52\xee\x87\xb5\x35\x68\xf9\xaa\x5e\x6a\x6a\x2e\x5e\xfd\x1f\x1d\x8b\x57\x4d\x9d\x19\x77\x5a\xc2\xba\x5c\x3d\x45\xb7\x07\x37\xe7\x66\x90\x84\x1b\xcc\x6b\x0d\xad\xdd\x68\x7c\x7b\x43\x07\x3d\x9a\x8e\x77\x5a\x19\x52\x88\x71\xe4\xb7\xf6\xc5\x15\x7a\x3b\xcc\xda\x97\xaf\x23\xa3\x0e\xf7\xb3\xf4\x8d\x85\xfa\x4d\xee\xb3\xc0\x59\xb7\x2f\xba\x70\x72\xa2\xfc\x1c\xdc\x22\x6e\x2f\xca\x0a\x76\x9f\x86\x85\x25\x98\xe3\xeb\x7a\x13\xe1\xba\xf1\xef\x4c\x53\x0c\xda\x3a\x68\x48\x39\xb1\xdb\xdb\x50\x59\x0f\x22\x6f\x91\x9b\x0f\x8d\x86\x8a\x49\x94\x12\x89\x28\x18\x1c\x88\x9e\x67\x07\x25\xb9\x0e\xd4\x4e\x5b\xde\x41\xe8\x54\x4c\x2c\xe0\x3f\x56\x0b\xfc\x9f\x8a\x64\xcc\x9c\x9b\xdf\x2d\x10\x5d\x05\x1e\xa9\x74\x65\xb5\x7f\x3e\xab\x6a\xc5\xbf\x87\x66\x6b\xba\x79\x1d\x9a\xa7\xfb\xec\xa0\x6d\x60\x0f\xbb\x69\x90\xe9\xdd\x5c\xc0\x86\xd8\xa1\xfb\xf7\xf6\x48\xc1\x36\x5b\x88\x20\x16\xc2\x14\xdd\xa2\xd5\x68\xad\xc6\x94\xfe\xf6\xb8\x47\x48\xb3\xfe\xa4\xce\x41\xdc\x5c\xa6\x1d\x11\x5c\xc3\x9b\xd6\x3c\x30\xee\x6a\xec\xd4\x8d\x1c\xa5\xe2\x35\x63\xa7\x0d\xd0\xc6\x14\x32\x72\x04\x9f\x9c\x31\xa5\x42\xaf\x74\x0d\xd7\xb6\x28\x88\x81\x5b\x87\xf4\x7b\xd9\xa8\xa1\xd9\x7b\x8d\x51\x43\x2e\x31\x26\xe5\x0a\x06\xcb\x30\x4f\x19\x7f\xe7\xee\x36\x77\xcc\x6e\x30\x9d\x9f\x42\xe9\x46\x05\x42\x12\x14\x83\xf2\xe5\x2a\x5a\x4d\x17\x87\x22\xea\x9c\xe4\x44\x33\xa0\x82\x92\x4d\x4e\x56\xab\xbe\x35\x67\x32\xf0\xe4\xc3\xfe\x76\x64\x98\x4a\x24\xae\xf3\x5a\x2c\xf7\xb5\xfa\x8a\xdc\x92\x7d\xdb\xb4\x47\x86\x81\x68\x51\x4d\x5b\xc6\xa1\x68\xf5\xb2\xda\xb1\x91\xfb\xed\xf4\xd9\xf9\xc9\xcd\x49\xea\x87\xd3\x22\x55\x53\x0c\x57\x64\x91\x1d\xc4\x64\x4a\x4a\xb8\x99\xba\x00\x8b\x3e\x0a\x05\x26\x55\x50\xf6\xb6\x09\x46\xc1\x09\x63\x78\x9a\x00\x92\x20\x40\x28\x98\x13\x8a\x40\x58\xfc\x5e\x3a\xeb\x74\x0a\x13\xfc\x5b\xe9\x96\x37\xb1\x0a\xdb\xcb\x0a\x4e\x15\x81\xcd\xd1\x06\x23\xc0\x46\x31\x42\x0f\x83\xbd\xa2\xa6\x63\xcc\xb2\x71\x8a\xc3\x5b\x7d\x8f\xc5\x19\x9a\x33\x99\x8c\xf1\x12\xa3\x38\xb7\x2d\x18\x4e\xa6\x31\x12\xa9\x16\xda\xc6\xaf\xbf\x79\x14\x94\xb2\x21\xf7\x52\xc3\xf0\x7d\xb7\x9f\xa7\xf5\xed\xa7\x93\xe7\x50\xc3\x4e\x53\xbb\x4f\x37\xd7\xda\x87\x45\x1e\xbd\x0b\xa4\x87\x6e\x75\xbe\x6d\x50\x6b\x1e\xcd\x44\x9b\x4a\x4b\x37\x44\x38\x51\xc6\xd3\x7c\x5a\xe3\xcf\x0f\x0f\x83\x7a\x8e\x5a\xce\x01\x30\x83\x0c\x24\x44\x97\xe6\x15\xf2\xd9\x43\x86\x56\x5f\x35\x35\x33\xb0\xf6\x9a\xa2\x04\x51\x18\xef\x58\x79\xdd\xfd\xb8\x98\xd0\x9f\x6e\xcf\xb6\xa0\xbc\xa4\x02\x2a\x60\x49\x38\x42\x09\x10\x5d\xbb\xf4\x38\x23\x4c\x22\x50\x34\xdc\x06\x2c\xe3\xce\xa4\x2f\xca\x89\x51\x47\xe9\x50\xbd\x9a\x30\xde\x61\xb4\x1c\xb7\x1e\x07\xf5\x8d\x6e\x37\x22\xda\x25\xe4\xae\x42\xc5\xf4\x45\xdc\xd5\x74\xcc\x0d\x09\x17\x6c\x6c\x39\xf1\xa8\x77\xe6\xa9\x46\xac\xe1\x22\x23\xb9\x34\xaa\x8a\xe6\xda\x58\xd4\xc9\x46\x81\xc1\xf7\x56\xc7\x65\xd4\xf4\xfb\x0c\xb2\xfc\xa7\x73\x4a\x73\xa7\xeb\x63\x5b\x18\x1b\xe0\x7c\xac\x77\x30\xe6\x23\x6c\x09\x75\x17\xe1\xf0\x6b\x29\x31\xe4\xe6\xc6\x0c\xe2\xdb\x20\xce\x86\xf9\x83\x54\x90\xdd\xfb\x70\xc1\xfb\x40\xa1\x2f\x9b\xd4\x90\x46\xc1\x33\x8d\x4d\xe5\x69\x80\xed\x40\xa1\xb8\xb5\x95\xc0\xeb\x1d\x15\xbc\xe3\x74\x81\x71\x65\x15\x23\xd1\x68\x09\x27\x53\xa0\x1d\x99\x3a\x00\xcc\xf6\x68\x63\xb5\xf7\x1f\x1c\x7a\x63\xdd\x24\x18\x6f\x7d\xc7\x19\x78\x1f\xcb\xe0\xae\x81\x12\x4f\x5e\xff\x98\x3d\xcf\x4e\x5a\xa0\x78\xf3\xf1\x0d\xba\x91\x5d\xc3\x7c\xf3\xaa\x1d\xfd\x5d\xa5\x28\xc4\x37\x2b\xb0\x48\x73\xd3\xbb\x19\x48\x9c\xc3\x7b\x7e\x1f\x2f\xd1\xcd\xe0\x94\x81\xff\xfe\xcf\xff\x02\x31\x59\x0a\x8c\xdd\x11\x08\x67\x90\xc2\x30\xb7\x65\x46\x40\x80\x11\xb2\x11\x98\xad\xd2\x19\x4a\x18\x20\x49\xbc\x2a\xf4\xe5\xba\xe6\x7a\x25\xfe\x9b\xc1\xe9\x6f\x1d\x73\x41\xf4\x7a\xf1\x7c\x3f\x72\xaa\x5a\xfb\x8d\xe3\x94\xa2\x14\x25\x51\x4b\x7c\x2a\x68\x07\x5b\xd4\x1f\xc2\xf7\x2f\x57\x8c\xb8\x67\x75\xf5\x35\x9c\xea\x67\xcd\x6b\x1c\x34\xf9\xa4\x0d\xf2\xdd\xc2\x71\xee\x5c\x6c\xd7\x15\x19\x84\x51\x94\xaf\xc6\xf1\x4d\xee\x28\x8d\xcb\x78\xb5\x02\xbe\x2c\x0f\xa0\x5b\x76\xed\xfc\x66\x39\xa8\x7c\xd2\x45\x22\x83\x78\x8c\x7c\xbb\x39\x3c\x65\x56\xee\x5d\x4f\x64\x9a\x56\x7d\x1d\xbb\x36\xe9\xe9\xb1\xed\xc9\xae\x22\x44\x69\x3b\x9e\xda\x06\x76\x90\x0c\xb6\x9c\x54\x76\xde\x3d\x70\x84\x26\x90\xee\xcf\x49\xe5\x37\xb7\x1f\x5e\xde\x7d\xfa\xfd\x8b\x7e\x27\x95\x55\xd0\xbe\x19\x64\x27\xfa\x19\x5c\xc1\xef\x1a\x76\xdd\xc6\x4e\x34\xcd\x3a\xb7\x02\x4b\x7b\xa8\xce\x35\x8a\x73\x42\x5f\x24\xd9\xc2\x24\x35\xf0\xb0\x7d\x0f\x68\x1e\x57\xca\x93\xc7\x2d\x1f\x50\x06\x41\x57\x88\xa5\x9e\xc7\x92\x0f\xed\x70\xb2\xff\x11\xa5\xe7\x41\x65\x6f\xe4\xc6\x2e\xa7\x95\x8e\x03\xad\x9e\x06\xc0\x29\x25\x6c\xdb\x30\xaa\x1b\x38\x1f\x1c\xf4\x88\x70\xab\xa7\x84\x1b\x39\x28\xfc\xe7\x3b\x2b\xec\x7f\x82\x67\x7f\xca\xf0\x6f\x1a\xe2\xc4\x70\x3d\xf5\xd3\x50\xfb\x58\x34\x45\xc9\x15\x6a\x11\x34\x1c\x1b\x36\xb1\x41\x35\x4f\x1d\x33\xdc\x2f\x5b\xd2\x8b\xd6\xce\x70\x4c\x0f\x15\xde\x44\x2d\x6b\xd8\x42\x9e\x89\x40\x5d\x97\xfa\xa0\xad\x2b\x06\xb4\x9c\x1b\x36\xd2\xb0\xf6\x73\x46\xc2\x1d\x1b\xce\x5f\x2c\x66\x5f\x2f\xc3\xdb\x95\xd9\x70\x96\x80\x72\x5e\xbd\x2a\x44\xba\x7a\x88\x92\x6a\xf6\x6e\xc6\xb3\x8a\xc9\x8d\x0a\x23\xd6\x8d\xd5\xde\x96\x46\x07\x13\x37\x23\xa1\x47\x7c\xa3\xbe\xba\xa5\x83\xcd\x14\x24\x9b\x36\xc4\x56\x00\xd0\x51\x10\x2e\x28\xe5\x5d\xbb\x6b\xb5\x46\x7e\xc5\x2a\xe2\x48\x40\xc7\x30\x34\x0e\x0d\x52\x4a\x96\x96\x71\x55\xe0\x18\x79\xda\xb3\xfc\xe0\x84\x8c\x5b\x4f\xdf\x95\xdd\x95\x38\x5c\xa2\x33\xe6\xd2\x09\x6f\xd1\x87\x6c\x1a\x9c\x61\x2f\xc2\xd5\xd0\x19\x77\x42\xba\xa2\x31\x55\x7f\xe2\x99\xc0\x17\x7d\xc8\x57\x45\x1b\xed\x45\xc1\x26\x84\xea\x4e\x88\x28\xfb\x95\xad\x43\xc4\x16\x80\x54\x1f\x3a\x56\xb0\x6e\x7b\x91\xb1\x01\xdf\xbb\x13\x2a\xbe\xe7\xf6\xf3\x7a\x64\x34\xe3\xf3\x7a\x1b\x31\x9d\x72\x16\x86\x30\x3b\xea\x99\xda\x7d\x37\x98\xd6\xc8\x09\xaf\x94\x14\x3d\x10\x9d\xe1\x93\x9c\x80\x9e\xe1\x13\xaf\x5c\x6c\x85\x10\xeb\x97\x8b\x5d\x76\xd4\x10\x63\x0e\xea\xfd\xff\xcb\x2a\xae\x86\x94\xc5\x38\xb9\x05\x6a\x2d\xdc\x8f\x39\x04\x79\xe3\xfe\x8c\x84\x42\x3c\x4e\x19\xab\xc0\x9f\x5a\x02\x41\xea\xb5\x35\x2c\xee\x22\x46\x54\x44\xc9\x15\xf8\x51\x65\xbd\xe4\xe3\x94\x27\x43\xf5\xb1\xa8\x2a\x3f\xb7\x37\x60\x3a\xcd\xd0\x3a\x50\x95\x9d\xa3\x2a\x2f\x70\xf5\xa8\x0a\x5a\x1a\x89\x88\x87\x2c\x18\xa2\x5f\x43\x76\x3a\x83\xc9\x14\x5d\xa2\x24\x92\x0f\x92\x45\x09\xe2\xd7\xb7\x68\x99\x1b\x22\xe5\xcf\x3d\x00\xc9\x2d\x73\x14\xe9\x3f\x14\x45\xe3\xcf\x2a\xc9\x3f\x3f\xff\xff\x3e\xfe\xe3\xef\x4e\xa7\x32\x18\x04\x8a\x56\xce\x0d\x84\x9c\x10\xcc\xa7\xe0\xc2\x13\xf2\x5d\x0b\x01\x9b\x8b\xaf\x4f\xd2\x94\x56\xba\xb0\x50\x12\x23\xf3\x05\x76\xba\x97\xaf\x15\xbc\x15\x73\x39\x59\x42\x9c\xe1\x64\xfa\x1e\xdd\x61\xb4\xec\x1d\x68\x6b\x67\x9c\x29\x6f\xcb\x8f\x75\x83\x71\x4f\xcd\x11\x40\x4e\x2a\xd1\x89\x61\xa8\x46\x89\xce\x88\x44\xdb\x92\x77\x14\x70\xb4\x42\x18\xbf\x22\x19\xb9\x94\xf9\x4d\x26\xbd\xe8\x75\xd8\xe8\x3e\x34\x33\x79\xf6\x1b\xcc\x37\x28\xf7\xb4\x61\x9c\x5d\x9e\xa7\x55\x80\x7d\xed\xd4\xdb\xfd\x8e\xbc\x3d\x59\xfe\xf4\x63\xcb\x31\x91\xd9\xdb\x7d\x56\xcf\xa0\xba\x2c\xf6\xe4\xb6\xc5\xbd\xf6\x16\x6e\xb6\x65\x7e\x3e\x7a\x6a\xc6\x71\x80\x53\x24\xaf\x6a\xdb\xa2\x8b\x24\x75\x77\xbc\x55\x0b\xaa\x36\x1b\x42\x8b\x87\xaa\x45\x2f\x80\xc8\xaf\xe4\x0e\xac\xb4\xa1\x98\xf0\x48\xa2\xe3\x15\x7f\xf0\x18\x01\xe1\x9e\xfd\x48\x14\x43\xab\x8b\xf9\x51\x00\x3f\x12\x29\xb2\xf9\x46\x41\x2a\xf7\xb0\x51\x4d\x19\xeb\xc7\x5e\x85\xb7\x7d\x29\x36\xff\x51\x40\xd1\x0d\x45\x8c\x23\xc8\x29\x80\x71\x5e\x22\x50\xdc\xf4\x81\x47\x00\x6b\x5f\xaa\xe8\xac\x56\xbf\x1a\x54\x20\x45\x2b\xc8\x5e\x35\x3c\x11\x53\xd5\x6b\xfe\x5d\xfe\xf9\x02\xdd\xa1\x58\x6c\xd9\xc5\x77\x57\xe8\xd7\x05\x4a\x42\xa4\x7d\xdd\x6c\xc5\xf7\xb1\x0a\xfc\x2e\x48\x5c\xdb\x77\x2a\xf5\x7a\xda\x47\x49\xf7\xda\x67\xed\x02\xc9\x85\xe2\xb3\x64\x86\xd6\xf5\x56\xb6\x00\x2c\x3e\x73\xf6\xe8\x4d\x7e\x65\xce\xa5\x76\x47\xdd\x22\xd1\xb9\x56\x7c\x09\x8d\xe7\xaa\x15\x1e\x5a\xe2\xe8\x72\xf2\x92\xc5\xa5\xa5\x67\xbf\x5e\x43\x9a\xf7\xbd\xa1\x21\x2e\x7d\x6e\xad\x61\xa8\x79\x55\x4d\x07\x1e\xd7\xd6\x71\x6e\xbb\xa0\xd1\x75\x83\xc8\xe9\x51\xe7\xed\xa4\x4f\x7d\x55\xf8\x53\xd6\xb0\x76\xfc\x68\x6b\x58\x5c\xde\x19\xf2\x47\x9e\xb6\xc6\x26\xc2\x98\x2c\x83\x34\x53\xfd\x49\x2d\xf1\xcb\x81\xce\x26\x0c\x56\xca\xe0\x6d\x4c\x67\x88\x7a\xb7\x90\xb0\x5a\x5e\x06\xa6\xf6\x87\x05\x68\xe7\x61\x3e\xcb\x0b\x7c\xeb\x57\x0e\x63\xe6\xe2\x1d\xc9\xd0\x78\x42\xee\x2b\x8d\x75\x6d\x4d\x6e\xf3\x1b\xae\x67\x30\xb9\xed\x70\xdc\xd2\x12\x91\x97\x4f\xd1\x8a\x34\xf2\x2f\x0a\x48\x99\x1b\x84\xa2\x09\x0c\x6f\xff\xa5\x7f\xd0\xc5\x35\x84\x94\x92\x79\x99\x89\x7d\x54\xdd\xa1\x46\x41\x2c\x69\xeb\x6c\xa7\xdc\x23\x93\xc6\x35\x34\x11\x9c\xb3\x9c\xfe\x39\x4f\x97\xd7\x82\xdd\xf8\x11\xc5\x31\x59\x16\xb9\x62\xc1\x8f\x88\x8d\x80\xe0\xd8\xbf\x04\x36\x7d\xf6\x3d\xc9\x4d\x95\x23\x7f\x60\x8d\x1e\xa0\x23\xdb\x9d\xfa\x5b\x92\x01\x8a\x60\x1c\xaf\x3c\x26\x7e\xec\x9e\xb8\x87\x38\xb7\xbb\x56\x1b\x55\xf4\x75\xbb\x5a\x6b\x40\x5d\xd2\x56\xd9\xcf\x85\x8d\x5c\x2c\x97\xc2\x7c\x2e\x2d\x6a\x05\xa4\x58\x37\x9e\x75\x93\x59\x56\xca\x4e\xd0\x0d\xa1\xa5\xcd\x2a\x54\xb3\x06\x29\x6a\x34\x26\x75\xdb\xd0\x64\x5c\xd6\x6d\xc9\x86\xb1\x59\x0c\xb0\xc5\x7c\x6c\xb5\x15\xf3\x51\x57\xc6\x58\x76\x6e\xe4\xbf\x27\x48\xed\x00\x17\x24\x94\xb0\xec\x6e\x2b\xa2\x36\xeb\xf6\x3c\x8c\x2d\x55\xd9\xea\xce\xf1\x80\xee\x36\x45\x77\x98\x09\x1a\xec\xd2\xdf\xfe\xfc\xfc\xf4\x97\xd3\x93\x2f\x26\x7e\xe5\x69\xcd\xf4\x03\x35\x0d\xdf\xfd\x57\xcf\x65\x7a\x4b\x40\x71\x3b\x98\xc3\xa8\x4b\x2b\x48\xd7\x01\x40\x95\xc6\x8e\x0d\x7d\x06\xd9\x19\x96\xa5\x3b\xf6\xdd\x5c\xbe\x70\x76\x54\xdf\x30\x4b\x76\x36\x63\x56\xc6\x43\x95\xfc\x29\xc7\xda\xc0\x84\xc1\x1c\x81\xc9\x0a\x04\xe6\xe7\xde\x60\xca\x32\x43\xb6\x60\xdb\xf5\x31\x6c\x5e\x6e\x1c\x4a\xbf\xad\xdb\x72\xf8\x82\x6f\x6e\xc6\xbf\x91\x04\x81\xe5\x8a\xe1\xe5\xca\x08\x2d\x59\xdd\xfb\x22\x4e\x7e\x81\xd3\x65\x3d\x80\xb2\xc9\x84\xab\xad\x58\x08\x93\xf7\x24\x8e\x73\x83\x6a\x10\xb4\xa3\x67\xfd\xd1\x8e\x54\x12\xfc\x1a\xa0\xab\xed\x29\xf0\x78\x8e\x5e\x88\x39\xba\x10\xc3\xde\x23\x96\x11\xea\xec\x7e\xc0\x3b\x1b\x0b\x30\xd1\xce\xba\xb8\x7d\xa9\xf2\xb3\xd8\x22\x6e\x45\x25\x67\xc6\x15\xd8\xd2\xa1\xb0\x4c\xdb\x85\xb5\x27\x90\xa9\xeb\x81\x76\x14\x53\xd7\xdd\x0d\x08\x53\xc9\x28\x17\xbe\xb8\xeb\xb9\x76\xc0\x52\x83\x8a\x6e\x4d\x37\xa5\x72\x40\x3c\xdf\x54\x29\x9d\xd6\x9c\xd3\xbe\xe3\x75\x21\x0d\xf6\xb6\x82\x77\x05\x33\xb8\x59\xb3\xdd\x0f\x8e\xd9\x6f\xd1\x97\x9a\xb2\xab\x35\xdf\x21\xfb\x71\x73\x67\x24\x95\xfd\x7f\x2d\xb3\x4d\xe4\x8f\x8b\xb4\x71\xd9\x1f\x1b\x27\xd3\x71\x0a\x69\xed\xb4\x64\x14\xe8\x97\xf6\x79\x98\x6e\xff\x8d\xb2\x1e\x16\x60\xeb\x0d\x72\xda\xc1\xe8\x3f\x50\xb2\x98\x23\x0a\x27\x71\x7e\xcb\x68\x8a\xb2\x2f\x8b\x77\xfe\xf1\x3f\x28\xca\x16\x34\x01\x99\x22\xd3\xdf\xfe\xf6\xc7\x5e\x74\x5a\x87\x2c\x0f\x9b\x0a\xc2\xbb\x2a\x8f\x63\x34\xd4\x94\xdd\x1a\xfa\xcf\x16\xef\x7e\x79\xf1\xf5\xb3\x2f\xcc\x07\x6b\x21\xcc\x5c\xe7\x6a\x3e\xc8\x33\xf5\x93\x35\xcf\x7b\xf4\xa3\xf6\x35\x23\x6a\x05\x2c\xcd\x86\x32\xaf\x6a\x25\xc0\x1e\x1d\x87\x0d\x83\xd4\xe1\x29\x8e\xca\x8a\x03\x67\x8c\x6d\xbd\x84\xfd\x4d\x7a\xcb\xed\x62\xbf\x96\xee\xad\x3f\x36\x13\x95\xe1\xbb\x5c\x47\x1f\x2e\x4f\x7f\x39\xba\x9f\xdd\xb6\xd4\xc2\x1b\x4a\xe1\xbb\x55\x84\x3f\x1b\xf1\xc4\xac\x71\x46\x9a\x85\x4e\xbf\xf2\x3a\xb3\xdc\x3e\x5d\x48\xf8\x8a\x19\x64\x33\x81\x0f\x90\xef\xe4\xf9\xa7\xf2\xae\x1b\x1c\x67\x3c\x28\x35\x87\x59\x38\xbb\xce\xaf\x12\x7f\x9e\x16\x6d\xbd\xf8\xc7\x97\x98\x5b\xbb\xfc\x6f\xd1\x59\xab\x5c\x8b\xc2\x96\x30\x80\x49\xf2\xec\x2d\x48\xc3\x99\xf3\x94\x7c\x73\x65\xe1\x83\x2c\xb0\x7e\x0b\x69\xf0\x05\x93\x4b\xf6\x90\x4b\x85\x89\xf4\xc5\x1d\x27\x73\xa4\xf0\xfe\xe5\xfb\xec\x53\xf3\x5a\xd1\xa2\xa1\xaa\x3a\xcf\xb7\x92\x81\x5b\x77\x4c\x35\x1b\xd4\xf5\xbc\xa3\x42\x17\xdd\x67\x63\x2a\x52\x66\xf7\x03\x83\xb5\xbe\xab\x55\x9c\x03\x0f\x5c\xd6\x51\x50\x1c\xfc\x95\xe9\x94\x0e\x77\x41\x2e\xaf\x17\xb5\xc0\xb1\xcd\x05\x0a\x4e\x15\x68\xce\x48\xcf\xf9\xe4\xa7\x61\x18\x2d\xcf\x50\xc2\x70\x26\xae\x3c\xf2\x3a\x9c\x5e\xe2\x2c\x9c\x7d\x8f\xd1\x32\xd0\xee\x68\x03\x91\xdb\x09\x79\x4e\xe2\xd8\x9f\x36\x37\x84\x66\x6e\xd2\x1c\x77\x26\xcd\xf1\x9a\xa4\x91\xee\x63\x51\x6d\x59\xab\xb2\x74\x11\x27\xf8\xef\xff\xfc\x2f\x1b\x2e\x67\x45\x3c\x60\xe8\x41\x82\xa7\x9d\x49\xf0\xd4\x4a\x02\xd3\xca\xf5\x13\x08\x1b\xef\xaf\x72\x76\xfa\x31\x5f\x5d\x3a\x28\xae\xb1\xc4\x25\x51\xc1\xa7\xd6\x1a\x66\x59\xad\x5c\xa9\x5a\xce\xf5\x51\x96\x91\xf9\x98\x43\xbe\xf8\x94\x30\xaf\x69\x11\xcb\xda\xed\x51\x00\xc2\x98\x30\x89\x83\xc2\x95\xab\x39\x39\x20\xff\xeb\x38\xb7\x5d\xb0\x00\xd5\xb6\xa6\xb6\x5a\x2c\x7d\x92\x64\x10\x27\x8e\x46\x14\xbd\x0b\x9b\xdb\xb1\x06\xda\xf6\x95\x46\x61\x9d\x2d\x51\xd7\x58\x77\xb0\xc0\x63\xd1\x56\x55\xc2\x74\x82\xfa\x17\xe3\x19\xa1\xf8\x37\x8f\x57\x34\x2a\x0c\xea\x6c\x15\x8f\x35\x95\xb7\x10\x9a\xbd\x58\x15\x36\x54\x5b\x96\xbe\x57\x15\xbb\x9d\x60\x41\xc7\xc6\x44\x3e\x49\x27\x28\xe3\xeb\xb1\x1c\xbd\xef\x23\xd7\xa1\x54\x48\x11\xcc\x64\x09\xd0\x16\x88\x75\x2a\x5e\x07\x22\x98\x0d\x4c\x34\x6d\x22\xdb\xa0\xdb\x22\x8d\xb6\x49\xb7\x0b\xc8\x32\x50\xbc\x73\x48\xba\x69\x13\xe9\x5a\xb5\xef\x71\xc1\xa3\x4a\x1b\x4a\xe0\x20\x0b\xb7\x25\x6c\x27\x2c\x54\xf9\xb6\x43\x4a\x9a\x9c\xc1\x36\x56\x27\x47\xe5\xdb\x12\xb5\xce\xd0\x66\xc8\xa5\xe6\xb0\x47\xab\xd2\x88\x75\x6d\x7a\x99\x0f\x6a\x4a\xbd\x79\x8e\x66\xba\xb7\x1c\x02\x35\x33\xbc\x2c\x50\x69\x85\x15\xdc\x6e\xa9\x4b\x69\x91\x36\x9d\x3f\x6a\x8a\x33\x9c\x79\xbc\x6e\x5b\x05\x23\xc7\xbc\x58\xd4\x48\x77\xb0\x16\x8b\x16\x11\x17\x63\x48\xa1\x12\xf9\xd3\x2e\x5d\xaf\x5e\xb4\x61\xa4\xcb\x07\xd7\xd6\xb3\x48\xfc\x2f\xd7\xaf\xad\xe4\xb2\xac\x24\x2d\x62\x52\x35\xcc\x2b\x33\x38\x53\x6b\xb0\x52\x04\x29\xf9\x49\x2e\x8a\x99\x98\x66\x72\x43\x34\x8a\x3d\x91\xa7\xf8\x42\xbe\x68\xee\x51\x15\x5a\x48\x00\xe7\x57\xeb\x48\xe5\x77\x2c\x5e\x4c\xf5\xc2\x06\x75\x8d\x9c\xad\xf8\xd5\xd5\xf4\xc1\x4f\x4d\x19\xe3\x88\x81\x25\xa9\x26\xa8\x97\x2c\x26\x24\x1b\xfb\xb8\xc3\x3d\xea\x3f\x4d\x99\x37\x5c\xdf\xd5\xc7\x8b\x4a\x10\xe3\x4e\x01\xd0\x91\x11\xf0\xcd\x1a\xf3\x19\x66\x1a\xa2\x98\xc5\xd7\xe8\x30\x3c\xa0\x40\x37\xef\x64\x57\xb4\xc0\x8c\xd8\xca\x9d\xb5\x17\x19\x35\x69\xf1\xf3\x28\x38\xa3\xf0\x26\xd3\xab\x9f\x23\xf1\x85\xfa\x68\x1b\x9f\xb5\xe4\xba\xc3\x18\x2e\xb0\x5e\xfb\x9a\xd3\xa9\x04\xb9\xdc\xce\x08\x4e\x68\x38\xc3\x77\xa8\x52\x06\x0e\x8b\xef\xfa\x18\x18\xa5\x9c\x17\xc3\x28\xfa\xc1\xf9\x01\x77\xf9\xd8\x1c\xde\xd7\x28\x34\xf9\xf6\x63\xe0\x42\x51\x6a\x87\xa3\x5a\xa5\xb1\x1d\x63\xb8\xdb\x6b\xc5\x79\x59\x11\xc7\x56\x2d\xaa\x39\x4e\x72\xf9\xca\x0c\xb6\xa2\xfb\x3b\xc8\xd0\xbb\xf2\xb7\x25\x09\x53\x55\x69\x17\x09\xc9\x03\x74\x5c\xe3\x0d\xf2\x27\xe4\xde\xb8\x3d\xb7\x6d\x94\xfd\x0a\xbb\xfb\x46\xd0\xe4\x08\xf9\x7f\x51\xd4\x72\xe6\xd5\xb9\xe6\x63\xf8\x01\x76\x18\x59\x6b\x89\x77\x8b\xd5\x2e\x68\x7f\x56\x1c\x09\xd5\x2c\x0f\xcb\x26\xbb\x16\xef\xda\xc5\x06\x2a\x19\xdc\xe4\x39\x11\x37\xd2\xb5\x23\x56\x91\x40\xd6\x05\x75\x72\xdd\x43\x11\x9f\x93\x90\x73\x7e\x82\xe8\x19\x0f\x17\x17\x83\xb2\x9a\xbc\xdd\x79\x50\xcf\x6d\x4f\x2a\xf5\x6b\xb9\xff\x46\x47\x74\xe8\xd1\xd2\x6f\x3b\xf4\x3b\xf6\x24\x60\x3e\x1b\x90\x11\x00\x13\xde\x07\xba\xec\x21\xe5\xc8\xcf\xbd\x43\x67\x9a\x27\xd2\x23\x4f\xd7\x87\xd4\xb5\x92\xd9\x3d\x24\x76\x07\x34\x50\xad\xf1\x9c\x95\xb6\xe2\xb2\xb5\xa8\xdb\x11\x04\x74\xb0\x6d\xd6\xff\x89\x1d\x21\x2d\x36\xdf\x22\xb0\xa4\x77\xbf\x0e\x81\x82\x69\xfe\x7d\x02\x0d\xfc\x1d\xae\x61\x60\xa0\x95\x68\xa8\xad\x4a\x9f\x60\x8c\x92\x69\x36\x6b\x2b\xec\x78\x5a\xfa\xed\x8a\x90\x95\x0b\xfd\xfb\x0f\x1a\x37\xb2\x01\x79\xc7\x95\x97\x3e\x31\xae\x9b\xad\x6a\xaf\x82\xe8\xcf\x94\x2a\xf3\xe1\x5b\x8b\xce\xf3\xe7\x9a\x68\x71\x27\x9b\xa2\xdd\x10\xba\x49\x36\x19\x72\xa1\x07\x6c\xce\x37\x27\x77\x48\x74\x09\x12\x47\xb1\xa2\xb1\x84\x39\x1f\xbd\x6f\x99\xf5\x49\xe4\xb4\xae\xaa\xd3\x42\xf3\x34\x5b\x8d\x25\xfc\x57\x4d\xb9\xcf\x11\x63\x02\xc8\xc0\x92\x81\x41\x29\x59\x0a\x94\xc9\xe0\x24\x8a\x40\x11\x3e\x03\x77\x18\x82\x4f\xc1\xe9\xbb\xb7\xd7\xe7\x6f\xaf\x0d\x1d\x97\x7a\x57\x92\x13\x81\x03\xbe\xd5\x69\x5e\x52\x05\x27\x35\x0a\xae\xb8\x28\x6a\x7b\x2f\x80\x14\x81\x94\xa2\x3b\x94\x70\x54\xa6\x5c\xb7\xdc\x50\x32\x07\xf9\x2d\x1c\xa6\x29\x89\x00\x3f\xb7\xcb\x3f\x54\x03\x8c\xdb\x2c\x97\x34\xa6\x9f\x0d\x91\xd0\x56\xb4\xc6\x50\xc5\xb6\xbb\xcd\xfe\xfc\xe5\xe5\xf5\xf3\xe4\x7c\x61\xce\x68\x9b\x48\xa0\x8d\x0d\x34\xf5\x7b\xa1\x4a\x8d\xd5\x17\x82\x1c\x20\xa5\xe4\x0e\x47\x08\x50\x34\x5e\x70\xf0\xc9\xa2\x0f\x69\x36\x83\x19\x08\x61\x02\x26\x08\x60\x5e\x53\x8b\x22\x80\x13\x6e\x59\xae\x40\xa4\x79\x5a\xae\xfc\x30\x5b\xdb\x3f\x13\x2a\x46\x2e\xc3\x63\x18\xcd\x71\x13\x13\xa3\xfd\x2e\x55\xc6\xec\x8a\xa1\x17\xe5\xce\x6b\xa5\x89\x2b\x4e\xd9\x73\xc4\xbd\x23\xc2\xee\x92\x4f\xd7\x73\xfb\x45\x6e\xf7\xc4\x1b\xdd\x8a\x13\x55\x29\x62\xb7\xbb\xa0\x11\x96\xeb\xc3\xee\x7e\xf2\x4a\xfd\x6a\xa0\xa1\xcb\xe9\xd5\xde\x39\x32\x1e\x73\xbe\xaa\x5b\xc6\x9e\xf3\x77\x6e\xa8\x1b\x77\x33\xb4\x9d\x1a\x33\xbe\x4d\x9e\x08\x0d\x63\x51\x04\xff\xf8\xbb\xf8\xff\x0d\x7b\x2a\x15\x1d\xbd\x25\x6f\xa5\x82\xe9\x64\x5e\xa4\x6a\xf6\x3a\x15\xfa\x74\x13\x69\x6e\x2d\x5c\xce\xea\x4e\x47\xf9\x9a\x5d\x34\x04\x30\x5b\x0b\x83\x1a\x20\x7b\xd2\x0d\xfd\xee\x97\xeb\x93\x9f\x4e\xcf\x5b\x10\x12\x4b\xd3\x51\x14\x43\x0d\x6c\x8d\x18\xfa\xa3\x57\x7b\xa2\x97\x36\x7a\x6e\x98\x46\x28\xcc\x8d\x93\xe5\x8c\x70\x4b\x24\xb7\x59\x41\x36\x43\xf3\x35\x5b\xa2\x0f\x69\x77\x54\x4f\x61\x5a\xca\xbc\x4d\xcd\x8d\x8b\xef\x8e\xf3\x55\xc9\x16\x93\x39\xb6\x87\x3b\xb9\xff\xa4\x24\xbe\x5b\x55\xb8\xbd\xe1\xae\xe1\x18\xc8\xd1\xcb\xd8\xd5\xfd\x30\x41\xcb\x42\xdc\xab\x0d\x8c\xdb\xbb\xe0\x2a\xc6\x15\x4d\x0d\x25\x04\x8c\x83\xa1\x8e\xf3\xb5\xc6\x4e\xeb\x5b\x30\x2d\xf7\xde\x6e\x6d\x05\x1d\x95\xd3\xc2\x03\xf6\xed\x15\xef\x25\x08\x96\x66\xc1\x5d\xaa\xa7\x7d\xfb\x36\x36\x20\x2b\xb6\xb6\x9e\x4c\xb6\xbc\x7e\xd6\xb9\x95\xa2\x4f\x63\xa3\xd4\x1b\x62\xcd\x12\xe8\xe2\x0b\x1c\x57\x27\xe5\x72\x07\xbc\x3d\x82\xb6\xe3\x58\xa1\x82\x51\xc4\x5b\xe2\x56\x46\xa1\x47\x02\x8c\xc1\x2a\xf3\x69\x7e\xe3\xd6\xa3\x32\x5d\xa1\x2c\xd7\x8a\xea\x41\x37\xe7\xb9\x71\xbe\x19\xe4\xda\x9f\x9b\x11\x1a\xc4\x8d\x78\xe3\x82\x49\x40\x2a\x7d\xa0\xfc\xcb\x03\xae\xf4\x98\x47\xfe\xd8\xa8\x06\x4e\x24\x9e\x0c\xc3\x10\xb1\x4e\x07\xc9\xb5\x48\x61\x2b\xb8\x3a\x98\x90\x38\x1a\x3f\xaf\x40\x75\xff\x48\x16\x60\x06\xef\x10\x48\x88\xd8\xeb\xca\xdd\x58\x42\xfa\x61\x06\x74\x61\xed\xd7\xbe\xab\x4d\x57\x3e\xec\xf3\xcc\x6d\xf8\x54\x17\x44\x1e\xb0\x7b\x55\xf6\xa0\xac\xce\x45\xe6\x74\xae\x4e\xb8\xc0\x5d\xca\x40\xae\x12\xc3\x4e\xce\xe5\x9e\x3a\xd4\x9a\xf9\x6b\x27\x41\xe9\x57\xef\xeb\xd4\x7b\xb8\xd6\xde\xb3\xd7\xfb\x08\xba\xe7\x3f\xc0\xaa\x77\xea\x91\xe3\x5e\x2e\xb7\x01\xab\xa9\xb0\x08\x51\x84\xb3\x47\x9c\x26\x13\x4e\x13\x5f\x29\xa7\x66\x0d\xef\xfd\x54\x2f\x94\xa6\x9e\x5e\xc2\xc0\x8e\x02\x97\x84\x41\x3c\x85\xfc\x49\xa2\x0c\xcc\x07\x31\xf5\x9f\x0e\x63\x2a\x26\x0c\x75\x83\x98\xda\x2f\x44\x59\x5f\x17\x4b\xb5\x67\xef\xdd\x99\xdd\x2e\x0f\x3d\xfd\x2a\x9b\x32\x14\xa1\xb2\x47\x75\x68\x52\x87\x2a\x40\xba\x0d\x85\xd8\x39\xae\xa9\x38\xf8\x4f\x8a\x5a\xf7\xd0\x35\x8a\x1f\xd8\x9d\x6e\xea\xb9\x7a\x3f\x6f\x57\xa7\x6c\xe2\x40\x22\x77\x59\x8a\xdd\x55\xb8\x22\x4a\xa7\x76\xcb\xc1\x51\x0f\x39\x51\xfe\xb3\x8d\x7c\xaf\x28\x4c\x32\x75\x65\xef\x2c\x9c\x4a\x90\xb8\x0c\x23\x2f\x71\x36\xc3\x49\x9b\xd7\x6c\x5d\x8d\x4b\x1c\x4d\x51\x56\x49\xad\x69\x57\x89\xcd\xc2\x2e\x92\xb6\x7b\xcc\xc6\x30\xd6\x65\x05\x24\xbb\x4f\x17\x6c\xaf\x2a\x4d\xdf\xaa\x2e\xa7\x01\x68\xae\x66\x32\xe5\xc7\xd4\x0b\x3e\x96\x33\xf2\x5a\x3f\xc1\x42\xea\xc4\x61\xc1\xb8\x81\x58\x71\x7a\xba\x47\x5e\xd8\x1c\xc6\x0d\x76\x70\x73\x32\x37\x2d\x01\x2f\x4d\x9e\x2f\x78\x0d\xfc\x18\x27\x31\x4e\xd0\xb8\x7e\xa0\xff\xc9\x8a\x2c\xfe\xd8\x21\xc4\x32\x6c\x3e\x79\x5f\xc0\x2b\x2c\x90\x89\x7d\xb3\xff\xdb\x1d\xc5\xd6\xda\xd8\x6b\x32\x9d\xc6\x95\x36\xf7\x9d\x4f\x6c\xfd\x54\xde\x36\x0f\xfb\xd4\x02\x1c\xf4\xb8\x2f\x52\x8e\xfc\x2e\x0f\xfb\x0e\x56\x84\xbe\xfb\xfe\x15\xf3\x83\x67\x5f\xe7\x68\x4f\x9a\x6a\x57\xb2\xc8\xf2\x92\x92\x10\xa1\x88\xab\x5f\x10\xc2\x05\xd7\x43\x90\x81\x6c\x86\x28\x02\x98\x81\x84\x80\x45\x12\x11\x8b\x34\x97\xb9\xe2\x96\x73\x3c\x75\x8a\xe6\x69\xf6\xda\x5d\x5c\xa5\x4c\x45\xf9\x57\xf1\xfb\x65\x8c\x20\x43\x20\x77\x69\x65\xae\x67\xae\xf3\x72\x73\x50\x6e\xb1\xed\xdb\xba\xa7\x9b\x2c\x1c\xe2\x36\x77\x19\x2e\x32\x12\x2a\xfc\xac\x9c\xd6\xd2\x65\x10\x07\x2c\x15\xa7\x59\xd6\x09\xf3\xdf\x39\x2b\xde\x2a\x14\x96\x56\x6f\xfa\xaa\x98\x51\xbe\x67\x49\x14\xfb\xb6\x33\xa5\x2e\xca\x35\xd0\xdb\xd2\xe0\x7c\x27\x8e\x63\x65\x40\xc3\xfc\xcf\xca\x51\x6f\xb1\xa6\xd4\x8e\xcd\x6d\x6c\x3e\xc5\x7a\xf7\x1a\x5f\x0b\xa9\x13\x92\xba\xb4\xf7\x94\x29\x39\x08\x92\xba\x2d\x4e\xd8\x34\x30\xa5\x25\xda\xdb\xca\x1c\x06\x01\xd9\xac\xc6\x06\xd5\x8c\x53\x94\x20\x0a\xe3\x1d\xab\xc6\x97\x6f\x7e\x9d\x2e\xc3\x5f\xbe\x36\xe7\x41\x54\x8e\x81\x07\x55\x94\x62\xbd\xbd\x11\xed\x10\x73\x83\x5b\xa8\x94\x3b\xcc\xf0\x04\xc7\x38\x5b\x8d\x00\xdf\xe7\xf3\x45\x21\x47\xd1\x8e\x33\x26\x49\xba\x07\x4a\xb2\x15\x82\x69\x83\x7a\xb0\x55\x01\x32\x5d\xf5\xd5\x11\x4a\x66\x90\xe5\x3f\x9d\x53\x4a\x68\x53\x35\xe2\x7c\x80\x77\x30\xe6\xc3\xd2\x7f\x29\xeb\x9c\xfd\x34\x66\x53\x27\x0d\x4f\xf4\x33\xc4\x42\x8a\xd3\x56\x48\xff\x8d\xd3\x5e\x0a\x77\x83\xf6\x67\x0a\xfc\xa5\x42\x41\x45\xba\x48\x1b\xf6\x8e\x29\xf8\x7d\xb1\xec\x5c\x04\x94\x89\x11\xa2\x70\xa2\x4a\xc1\xa2\x58\x51\x3a\x5c\xdf\xe7\xa4\xbc\x84\xd9\xac\xf8\x86\x6b\x7b\xf9\x8d\x78\x84\x98\x3b\x2c\x7d\x6f\x4e\xb7\x9c\x17\x6c\x1c\x51\x92\x46\x1c\xc7\x4f\x23\xe9\xf5\x2a\xad\x94\x68\xe0\xa8\xdc\xb6\x6a\x97\xb9\x02\xa0\x28\xbb\x2a\x2f\xb5\x04\x2d\xb6\xc1\x80\xd7\xa1\x45\x76\xcd\xef\x59\x60\x7e\x98\x67\xf1\xc9\x6d\x6e\xb9\x5f\x5b\xfe\xfc\x05\x17\xfc\xca\xce\x35\xe4\x2d\xbe\x78\xd1\x1f\xdf\x94\x39\x51\xb0\x4f\x90\xe3\x63\x03\x10\xa7\x07\x8c\x52\x43\x76\x39\xd1\x44\x1f\xde\xca\x31\xe8\xc7\x22\xdf\xc1\xa3\x88\xdf\xea\x1d\x5e\xa1\x4c\xec\x4c\xda\xf3\xba\x9e\x2e\xae\x13\x29\xdb\x88\x84\x5e\xa8\xcf\x6d\x22\xda\x94\x31\xa1\x1c\xf9\x83\xbc\xa4\xb4\x45\x64\xf8\x03\x40\x42\x12\xe4\x16\x9c\x02\xb3\x22\x08\xbc\x44\xe6\x2d\x49\x90\x8b\x97\xca\x46\xad\x43\x60\x99\x16\x0c\x1f\xeb\x50\x71\x2b\x31\x71\xff\x39\x9b\x92\xd0\x2d\x58\x45\x2c\x5b\x69\x31\x8c\x60\x32\x15\x06\x7d\xf1\xbb\x34\xdd\x6a\x11\xae\x75\x43\x62\x5d\x56\xd1\x85\xd2\xeb\x36\x14\x83\x41\x22\x2d\x1b\x59\x32\xe7\x09\x4f\xd4\x7a\x29\xdb\x8f\xba\xb6\xd6\xfb\x71\x26\xc3\x4a\x4a\x2f\x29\x63\x84\x27\x1e\x8e\x82\x6c\x86\x84\xb1\xa5\xe2\x4f\x85\x5b\x06\xe3\xb8\x6c\xe0\x3a\x0a\xe6\x28\xc2\x8b\x79\xe9\xc7\xb5\x37\x0b\xfc\x62\x14\xcc\x73\x53\xc8\xf4\x9c\x4a\xe4\xd1\x77\x6b\x0c\x1a\x75\x06\x86\x67\x3a\xa1\xee\xfb\x1c\xcb\xb7\x30\x41\x51\x1f\x5c\x16\x2d\x5a\x2d\x59\x5f\x2a\xa7\xaf\x6a\x20\x4a\xdb\x50\x58\x39\x8e\xb3\x7c\x79\x6c\x2f\x75\x5f\x3e\xed\xb1\x6c\x0e\xdb\x30\x03\xcf\x93\x0c\x51\x20\x7e\x05\x90\xdd\xe2\x64\xca\x13\xdc\x16\x0c\xd1\xa2\x69\xad\x32\x6b\x54\x0b\x59\xf7\x21\x53\xcf\xe8\xc4\x55\x8a\x42\x7c\xb3\xe2\x1d\x73\xc5\x98\x46\x00\x3d\x99\x3e\x01\x67\x38\x12\x61\x88\x19\x8a\x53\xb0\x22\x8b\xbf\x80\x1f\x78\x0c\x4b\x7e\x75\xb3\x88\xff\xc2\x2f\xe2\x55\x95\x38\x89\xc0\x72\x06\x33\xfe\x29\x41\x28\x42\x91\xf9\x68\xb0\x43\x58\x79\x07\x41\x8d\xda\x69\x8e\xdd\xeb\xf4\x38\x89\x77\x85\x35\xec\xc7\xf1\x9b\x09\x6a\xc8\x08\xc4\xa0\x51\x8d\x6a\x96\xdf\x2e\x23\x1b\xd9\xd7\x47\x6f\xd1\x87\x17\xa9\x39\xb2\x21\x8f\x58\xb4\x42\x8f\x0d\x84\x37\x2e\x2b\xe8\x1f\xb2\xd2\x43\x2f\x4b\xce\x88\x48\xd0\x05\x84\x02\x91\xa3\xcb\x03\x1e\x38\xb9\xc3\x19\x02\x09\x5a\xca\x9f\x33\xa2\x05\x02\x2d\x91\x90\x22\x33\xb3\x63\xd1\x87\xe8\xce\xba\x60\x19\x99\xcb\x1c\x77\xcf\x20\x09\xba\x4f\x63\x88\x93\x71\x3e\x4c\xce\x7b\x5b\xfd\x87\x09\xc1\x54\x94\x7c\x1a\x15\x7a\x83\x86\xe0\x5c\xbc\x0d\x45\xad\xa5\xe7\xfc\x9e\xfc\x16\x79\xa9\x75\xcb\x01\xb5\xff\x0b\xd6\x3a\x76\xe2\x75\xf6\x57\xb9\xe2\xe5\xc5\xf6\x43\x81\x4f\x0d\x35\xa8\xb3\xdc\x93\xee\x87\x3c\x65\x31\xd3\x84\xc5\x52\x50\x9d\x99\x61\x62\xdb\xf9\xcf\x45\x46\x88\x75\xbb\xf8\x38\x9f\x30\xd6\x6b\x08\x78\x38\x03\x2d\xdb\x36\x7a\xc7\x93\x6a\xf5\x02\x57\xa8\xac\xd7\x6b\x44\xe4\x7b\xbe\xa2\x36\xd8\x37\x30\x91\xd8\x06\xeb\x0f\x57\x3c\x8b\x9f\x2b\x40\x96\xa2\x30\x63\x80\xdc\xc8\xd0\x2a\xba\x0f\x51\x9a\x89\xa3\x87\x5e\xcd\x2f\x4d\x83\x7f\xb7\x94\xad\x03\x86\x1b\x3b\x2f\x78\xe3\xc7\x23\xed\x44\x36\x5a\xef\xf2\xfb\x7e\xc0\xb4\xbd\xb5\x94\x02\x36\xe9\xa8\xa8\xd4\x6d\xbe\xba\x6a\x13\x2a\xe1\x9f\x4e\x4f\xe9\x44\xef\xa9\xaa\x0a\x50\xc8\xe1\xb4\x95\xe8\x44\x30\xcc\x22\x3a\x85\x89\xc0\x31\x11\xd6\x43\x79\xb8\x88\x93\x21\x75\x96\xa8\x7a\x18\x6c\xc0\xbc\x69\x77\x31\x58\xa5\x70\xd9\x30\x63\x2d\x0e\x0c\x07\x1a\x2d\x45\x73\x72\x87\x34\xd2\x72\x20\x99\x21\x37\x04\x0e\xc4\x37\xd4\x70\x4d\x83\x2d\xb7\xb0\x26\x44\xde\x20\x53\x38\x25\x69\x8f\x34\xd5\xb6\x29\x44\x8b\x34\xc6\x61\x2e\xd3\x15\x94\xf0\xf5\x87\x79\xad\x3c\x9a\xc1\x17\x5f\xbe\x8b\xa5\x8b\x49\x8c\xd9\xac\x94\xeb\x6c\xcd\xd7\xd5\x46\x7f\x92\xa6\x94\xdc\x41\x73\x50\xb6\xd7\xe0\x3f\x39\xfa\x23\x80\xfc\xa9\x28\xf7\x48\x28\xca\xdd\x34\x6d\x5d\xf2\x75\xca\xfe\x0c\x3e\x39\xfe\xa3\x51\xae\x38\x16\x73\x2e\x52\x12\x11\x79\x88\xd5\x9b\x3f\x72\x40\xfe\xf0\xbc\xc8\x9c\x3b\x4b\x42\x6f\x01\x49\xb4\x29\xcc\x21\xbd\x45\x11\x80\x0c\x28\x4c\xe9\x01\xc6\xff\x3d\xa2\x4c\xe5\x3f\x0e\x2a\x61\x05\x57\xee\xc4\x1b\xc4\x49\x39\x4e\x6e\x39\x34\x00\xc8\xc8\x14\x65\xb3\x16\xdb\xac\xf9\x65\xe0\x93\x49\xd2\xa3\x2b\x83\xc5\xa6\xb2\x74\x46\x09\x7c\x23\x3c\x2a\xa4\x53\x8b\xf4\x78\x46\x78\xac\x19\xde\x0a\x56\x0c\x51\x26\xce\xa2\x38\x78\xda\xf9\x3d\x66\x1c\x23\xec\x03\x13\x95\x89\xf6\x32\xc6\x28\x72\x76\xfc\x6f\xc2\xb2\x9c\x2c\xb2\xd9\xa5\x00\xa4\xa2\x67\x32\xf8\xe2\xe5\xc7\x2a\xb2\xf9\x64\x98\xd7\xef\xd9\x07\x52\xc7\x0b\x11\xbe\x7e\x2d\xc2\x1f\x6f\xd1\xd2\x8f\xcc\xe2\x7a\x27\xa5\xbb\xc4\x17\x07\x15\x75\x0d\x02\x00\x64\x70\x12\xa3\x31\x45\x2c\x25\x09\x93\x5a\xd2\x14\x6b\xe1\xd7\x35\xd6\x0c\x3f\x4f\x10\x8f\x98\x91\x3b\x44\xb5\x60\xd2\xb8\xb8\xa3\x25\xfa\x92\xcd\x10\x8c\xec\x06\x6b\xe6\x28\xb7\xe0\x4f\x09\x9a\x86\x79\xeb\x75\x7c\xf0\x24\x66\x29\x4c\x64\x0f\xc2\xa6\x0e\x58\x42\x9a\xc8\x96\x35\x45\x24\x1a\x86\xed\x9b\xa4\xfd\x1d\x5f\x18\xdf\x51\x83\x27\x38\xf3\x31\x23\x2c\xda\x7a\x33\x74\xb2\x13\xc5\x16\xd3\xe8\xf1\x38\x7b\xd4\xa1\xc7\x03\xad\x91\x00\xe7\xf3\x6a\x0c\xb2\xbb\x44\x5d\x9f\x66\xf3\x56\xba\x3e\xcb\xee\x4d\x74\x7d\x9a\xcd\xd4\xef\x4c\x33\x8b\xcd\xdd\xf5\x59\x4e\xc3\xb8\xeb\x03\x5d\xb6\x6a\x67\x36\x58\xcd\xc2\xae\x4f\xf3\x31\xd2\x3c\x8c\x28\xed\xb5\xcd\x5a\xbb\xc0\x90\x2d\xc0\x54\xdc\xb4\x67\xbd\x8b\x4d\x0f\x69\x57\x45\x75\x1a\x24\x64\xbc\xa4\x30\x05\xf9\x7f\x71\x54\xaa\x2a\x5b\x0e\xcd\x1a\xf5\x18\x14\x43\x8e\xb6\xab\x85\x77\x46\x01\x08\x17\x94\x11\x3a\x4e\x09\x16\x36\xa0\x31\xe0\x33\x5a\xaf\x03\xac\xb3\xeb\x2b\xe0\xff\x92\x45\x56\x6b\xff\xda\xa1\x7d\x40\xfb\xbe\x3f\x47\xc9\xc2\x45\xda\xca\x33\x60\xfd\x09\x38\x43\x05\x62\xd6\x8c\xa2\x9b\x60\x14\xfc\xab\xf6\x44\x5e\x32\x06\xe4\x51\x6f\x6b\x22\xc5\x8b\x45\x7c\x7b\xa9\x01\x9a\x15\x59\x49\x0a\x58\xc4\x02\xac\xb3\xee\x08\xdf\xa3\x3b\x72\x8b\xd6\x18\xa2\xe2\x86\x73\x8c\x0d\x0f\xa6\x5b\x3f\x26\x01\x33\xb1\x9c\x11\x7e\x23\xaf\x01\xee\x51\x79\xb5\xf6\x5a\xb9\x44\x24\x8d\x91\xb5\x5f\xbf\xf9\x7d\xdc\xfc\xf9\x68\x42\xda\x99\x52\xb8\x1a\x7f\x5e\x41\xd8\x11\x28\x86\x25\x72\x90\x21\x53\x07\x7c\x52\xbd\x64\xce\x97\x51\x1d\x5e\xc8\xab\x36\xcc\xd0\xd3\xb9\x9d\xfc\xaf\x5b\x6a\x09\xce\xef\x10\x5d\x91\x04\xe5\x0e\xc1\xeb\x9e\x75\x71\x43\x30\xe8\x07\x42\xe3\xb6\xde\x32\x8e\x37\xda\x58\x84\x50\xd2\x91\x47\x6b\x86\xeb\x87\x14\x59\xe9\x21\xaf\x41\x12\x7f\xb9\xb4\x16\x55\x1a\x64\x68\xb0\xa2\x4a\xfd\x7f\xff\xf8\x3b\x2f\x8c\xec\x56\x50\xd8\x51\x59\x75\xe9\x06\xe4\x04\x46\xcb\x0a\xc7\xcf\x99\x6b\x56\x4d\x2e\x13\x34\xe5\x76\xca\xf7\x12\x5d\xdd\x2b\x99\xac\x79\x5f\x7b\x36\xd9\x56\x46\xaf\xfc\x9d\xee\xe3\x2f\xee\xdc\xf2\x0c\x38\x50\x41\xee\xd3\x47\x8d\xc9\x48\x5f\xab\xfb\x5c\xd4\x8d\xd5\xa9\x8c\x54\xe4\xe9\x2d\x11\x49\x17\xc5\x65\x5b\xe4\x92\x8a\x67\x16\xe8\x90\xde\x33\xab\xde\xb9\x3b\x39\x53\xe3\x28\x21\xc1\x3a\x4f\x41\xde\xba\xfb\x39\xb8\x01\x1f\x2c\xb3\xa8\xb5\x37\xda\xe5\x3c\x64\x53\xab\x3e\xb3\xa8\xf4\xc3\xda\xe5\x1c\x84\x63\xdf\x6b\x0e\xf2\xd6\xdd\xcf\x41\x05\x14\x7a\xce\x43\xbb\x7d\xf7\x73\x11\xb1\x8c\xbe\x53\x29\xef\xde\xfd\x4c\x2e\xaa\x1d\x47\x3b\xcf\x45\xbf\x7f\xf7\xb3\x91\x51\x9c\x9e\x73\x29\xef\xee\x3c\x13\xa7\x35\x67\xaa\xee\x69\xda\x6d\x8d\xc7\xf4\x3a\x98\x68\x66\x37\x05\xdb\x39\xe2\xb1\x23\x93\x79\x40\x87\x0e\x08\x5e\xd6\x06\x37\xa6\x4e\x62\x22\x91\xb0\xba\x43\xb4\x31\x20\x3e\xc4\x7b\x0c\x3b\x76\x12\x45\xc6\xf4\xe3\xce\x27\xd9\xbe\xf0\x63\xe6\xe2\x0b\x5f\x20\xc5\x51\x70\x8b\x56\x63\x51\x1e\xc2\x9d\xbd\x31\x43\x90\x86\x33\x0f\x28\xc5\x2b\x7e\x61\x51\x7b\xc1\xc0\x64\x05\x6e\x30\x65\x59\xee\x80\x8e\x40\x0c\xd5\x5f\x68\x0e\x71\x59\x68\xca\xef\xba\xce\x9f\xed\xaa\x34\xe5\xe3\xf0\x82\x6f\xed\xb7\xc6\x1b\x2a\xb5\x23\x10\xb9\xdf\x13\xd4\xba\xf1\x00\x73\xba\xc1\x71\x86\x28\x8a\x3e\x48\x4c\xea\x7e\x41\x34\x13\xd0\xb8\x8c\x37\x36\x5e\xbf\x17\xe8\xcb\x26\x71\xde\x18\xfe\xee\x49\xc4\xc9\xeb\x42\x1f\x96\x7a\x39\x78\x2f\xf2\xd6\x44\x20\xcf\xd9\x62\x41\x83\x36\xf2\x47\x1d\x76\x4f\x5f\xee\x29\x8d\x9d\xa7\x4f\x36\x81\x2a\x0b\xbc\x59\xc4\x71\xa2\xa3\x1c\xac\x35\xab\x3e\x11\x1d\xa7\x01\x60\xaa\x49\xf4\x89\xe0\xd8\x74\xed\x80\x98\x8a\xa0\x9d\x71\xfb\x0c\xaa\x68\xa4\x42\x4f\xbb\xaa\xd5\x58\x10\xb5\x38\x8f\xf6\x82\xdb\x5e\x90\x69\x3b\x5b\x35\x19\x6a\x20\x88\xe7\xf9\xfe\xac\xca\xa7\x62\x04\x23\x3e\x10\x08\xd8\x9c\x90\x6c\x06\x48\x32\x21\x90\x46\x38\x99\x82\x94\x12\x89\xb4\xe8\x38\x41\xee\xdc\xa0\x86\x47\xd0\x04\x2d\xec\x8d\x6a\x5c\x34\xf0\x04\xa2\x36\x94\xbe\xe6\x4f\xb9\x11\xf0\x96\xba\x0c\x0b\xeb\xa5\x46\x2d\x0b\x05\x86\xb2\xcc\x4a\xa0\x94\xca\x40\x46\x81\xfa\x6f\xab\x61\x26\x2a\x64\x2b\x56\x97\x78\x84\x1c\xba\x37\x16\x7e\xcf\x9a\xd8\x53\x32\x9f\x43\xc0\x50\xae\xcc\x33\x04\xe6\x8b\x7c\x7b\x8e\x91\x18\x11\x80\x51\x44\x11\x63\xd6\x2c\x09\xdf\x08\xfd\x36\xf8\x3f\x67\x95\x0c\xa0\xb2\xa9\xaa\x2f\xff\x73\x1a\x41\x8a\x60\x4d\x04\xea\x98\x39\x94\x2c\x59\x93\xe9\xf9\xdb\x2b\x3c\x2c\x06\xd0\x04\xc8\x79\xde\x0a\xbf\xb6\x47\xbb\xe6\xc3\xdc\x34\xb5\xf1\xee\x17\x12\xb1\x2f\xb6\xb9\x52\xad\x76\x97\xcb\xa0\x84\x37\x6c\x48\x6c\xa6\x46\x5b\xab\x16\x1e\xa4\x4e\x9b\xaf\x48\x86\x23\xc4\xbd\xa4\x9d\x16\x68\x4f\x62\x74\xf5\xe9\x37\xc9\x1b\x73\x81\xb6\xb1\xeb\x5e\x8b\x67\x2b\xa6\xd3\x6a\xcf\x58\x7c\x62\x54\x20\x4f\xf5\xaf\x59\x16\xbe\x6e\xab\x0c\x99\x1f\xd2\xc4\x5f\x6a\x53\x47\xdd\x11\x94\x24\xe0\xcb\x4b\x39\xae\x8f\x72\x1b\xf0\x43\xc4\x31\x5b\x41\x8d\xdc\x80\xfc\x9d\x21\x49\x72\x2e\xf9\x24\x09\x14\x63\xa9\x5a\x44\x76\xd3\xcb\xd1\x2c\xec\x70\x14\x9c\xc4\x71\x99\xa8\xf2\xbc\xd2\x75\xab\xa5\xcd\x7c\x3d\x63\xa5\xf2\xce\xd6\xfc\x24\x95\x30\x2c\xa7\xa1\x08\xaa\x23\x8e\x15\xa9\x05\xc6\x14\xb6\x2a\xf0\x9e\xd6\x00\xb2\x35\x34\x52\xc9\x70\x98\x96\x10\x2d\x94\x90\xec\x8c\x84\xa7\x64\x91\xf0\xb8\xd3\x61\xd7\x5c\x86\x0d\x88\xd7\x22\x51\xfd\xea\x7e\x2b\x85\xaa\x27\x56\xd7\xd6\x85\xad\xa3\xc8\x7d\xd0\xe7\x5a\x0a\xdf\xd3\x51\x8d\x33\x5e\x42\xd7\x47\xf4\xaa\xc4\xf6\x12\xc1\xae\xad\x64\xeb\x22\x5b\x01\xf5\x68\x3f\x94\xf3\xcc\x5a\x1d\x52\xf2\xb2\x62\x0c\xfd\x84\x6e\x57\x12\xe7\x2d\x6e\x45\x26\x76\x55\xcf\x95\xa5\x84\x5d\xf5\x5c\x67\x79\x2b\x48\xbc\x96\xa8\xf9\x89\x54\xf3\x40\x71\x07\x32\xa5\xaa\xff\x7e\x9f\x02\x25\x32\xe7\x5b\x76\x4d\xfe\xe3\xe6\x45\x4a\x50\xd8\x43\x9e\x36\xcc\x69\x59\xa6\xfa\xfb\x64\xf4\x05\xbe\x43\x2d\x6c\xce\x7f\xda\x3c\x97\x39\x75\xd7\x54\x1a\xfa\x6a\xdf\x80\x00\xc0\xa8\x9f\xb9\xb2\xe7\x56\x71\x14\xa1\x08\x50\x14\xa2\x24\x8b\x57\x55\x19\x10\xdf\xf2\xb3\x90\x8d\x1a\xc8\x30\xf2\xb2\x4d\x36\x6a\x95\xa6\x51\x5f\xcb\x60\xbf\xf9\xfb\x81\x4f\xcc\xce\x61\x71\xcd\x86\x99\x2c\x29\xec\xcd\x67\x67\x48\xa5\xfc\xb2\x1f\x8a\xcf\x86\x3d\xfd\xf6\xf6\x49\x1d\x7d\xfd\xa6\x57\x18\xfa\xb9\x84\xa6\x8e\x49\xd6\x7b\x86\xf0\xff\xd6\x6e\x95\x34\xdc\x8a\x3a\xad\xf7\x3a\x1f\xd0\xb9\x2b\x91\x6b\x4d\xcd\xc7\x6b\x35\x31\x47\x62\x3f\x2d\xdc\xf0\x4d\x79\x7b\x7a\xc7\xdc\x5e\x28\xb8\xee\xd2\x10\x37\xa8\xd2\xee\xc2\xa0\x7a\xb8\x72\xb8\xf8\x67\x91\x25\xb2\xd3\xf8\xe7\x77\xd3\x25\x7c\x7d\x7b\x8e\xda\xe3\x9f\x22\xfc\xb9\xd0\xf2\x5e\x9a\x1a\x61\xb0\xbc\x97\x96\x7f\x0d\xa9\x2f\x95\xd0\x14\xa1\x7a\x64\xeb\x4c\xef\x7a\x2f\x3d\x3d\x9c\x5c\x65\x62\x2f\xc2\xec\x12\x27\x09\x32\x96\xe7\xc0\x45\x36\x43\x49\xc6\x71\x7e\xdc\x25\x3a\xf5\x89\x6b\xcd\x02\x14\x05\xd4\xe1\x03\xa4\x94\xf0\xca\xf9\xe0\x54\x35\x28\x68\x49\xe9\xd9\xd7\x52\x53\xcb\xf9\x54\xa3\xc2\xb4\xb9\xb3\x98\xe9\xdf\xa3\x1d\x9b\x44\x29\x6f\x4f\xc6\x92\x19\x46\x13\x42\x6e\xe7\xb9\xf8\xd9\x14\xdd\x87\x24\xc5\x49\x13\x51\xbd\x53\xf9\xa0\x8f\x00\x0d\x3b\xc3\x17\x3e\x53\xbb\x6c\x4e\xac\xf1\x3a\xff\x88\x9c\x29\x7e\xac\xaf\xb2\x4d\x4c\xf3\x8c\x2c\x93\x98\x08\xb4\x90\x76\x7c\xf6\x19\x59\x9e\x73\xed\xe9\xc5\x46\x73\xfa\x93\x69\xf3\xe8\x14\xaa\x74\xbc\xc9\xb4\x1e\x8c\x91\x27\xbd\x78\x68\x18\x6d\xf3\x16\x2d\x7f\xd7\x9a\xa6\xef\x12\x8a\x61\x72\x0b\x42\x98\xdc\x41\xe6\x96\xaf\x79\x9a\xad\xce\x48\x28\xb1\x7d\x3c\x8e\x56\x34\xe4\x8a\x8d\x2c\x8d\x97\x1c\x3f\xaf\x8c\x3a\xdb\xc7\xaf\x46\xd3\x3e\x85\x2e\xc9\x86\xbe\x63\x7c\x3d\xcf\x57\x25\xb8\xc1\x31\x72\x93\x58\x5c\xdc\x36\xc0\x1d\xae\xd5\xaa\x6d\x51\x5d\xb5\xf5\x2a\xc8\x96\x2b\xcc\xa5\x9b\xf6\xee\x03\xeb\x64\xed\xc6\x38\xb9\xbd\xe6\xc0\x22\x3d\x51\xe3\x9b\x59\xbb\x02\x04\x5b\xa5\x03\xf0\xac\xa0\xdc\x90\x7d\xc2\xb4\x9e\x67\xde\x19\xac\x3e\x0c\x30\x24\x42\xa2\x7c\x15\x8e\x23\x12\x3e\xb6\x67\x37\xe5\x3d\x0a\x8d\x76\x5a\x68\xb4\x8d\x65\x3a\x76\x4e\x45\x3c\x89\x22\xa5\x41\x77\x9f\x8a\x58\x4a\x51\xfd\x44\x42\x21\x19\xb6\x36\xcf\x6b\x68\x21\x67\x3a\xa2\x4a\x49\xab\xa6\x23\x16\x85\x0c\xf5\x36\x6e\xb5\xb1\x55\x5b\xb9\x21\x49\xc2\xa2\x89\xa8\xc8\x4a\x14\x57\xd6\xdb\xea\xe9\x17\xb7\xf4\xd6\x2b\x12\x1c\xdb\xbb\xec\x69\x49\x90\x45\xf8\xd2\xd6\x94\xb4\x4d\x47\xfb\xfc\xd4\x57\x64\x1f\x46\x56\x1c\x4c\x42\xd1\x1c\xe9\xf7\x9e\x16\xe7\xa8\x9b\x6f\xd1\x06\x1b\xcf\x89\x33\x6e\x28\xca\x7e\x7a\xdc\x53\xda\xf6\x14\x6e\x66\x5e\x6b\x66\xe6\x5e\x6d\x2a\x9a\x59\xbb\xfb\x7d\xa5\x22\x4c\xfb\xb7\xb5\x34\x87\x57\xdd\x5d\xb2\x92\x96\x5e\x1b\x4c\xed\xfa\xfd\xda\x63\xac\xcc\x5e\xe2\x68\x8a\xb2\x71\x8c\x59\x66\x6f\x07\x58\x7f\x56\xb3\xb3\x20\x51\x1d\x40\x5d\x75\x88\x59\x4f\x77\xd0\xe4\x70\xd5\x4f\x4a\xc4\x20\x1a\x67\x25\x4f\xd7\x3e\x2b\xf1\xa0\x65\x59\xb2\x90\x51\x91\x10\xe6\xa2\xa5\x49\xd0\xc5\x60\xeb\x28\x4b\x9f\x8f\x82\x49\xc1\x1a\xce\xe8\xf2\x5a\x74\x1f\x22\x9a\xd6\x4f\x3c\x3c\x8a\x01\xdb\xdc\xf6\x06\xbd\xfa\x62\x32\x05\xeb\x61\x14\xf2\x7d\xd8\xbf\x19\x86\xa3\x20\xd0\x75\xcc\x73\xc5\xe7\x7b\xad\x65\x56\x71\x3a\x78\x9c\xeb\x3c\x75\xbc\xdc\xbd\x38\x1f\xcd\xc3\x47\xf3\xb0\xc3\xbe\xbe\x1b\x0b\x11\xf3\xa8\xd4\xa3\x7d\xd8\x5a\x6b\x29\x42\x7c\x2f\x55\x88\x6f\x63\xe6\xa1\xa9\x04\x5f\xf0\xe6\x37\xd9\x3a\xd7\x65\xf6\x49\x71\x37\x73\x57\xf4\xd2\xa9\x5e\xa2\xde\x13\xcd\x7f\x53\x6b\x6c\x85\xe2\x98\x2c\xc7\x7c\x85\x80\x5a\xe7\x00\x2e\x01\xc2\x34\x2b\x9f\xe3\x61\x55\xd4\xf6\xb8\xb6\xab\xf9\x1a\x04\x19\x01\x62\x8f\x12\x51\x55\x40\x28\x88\x28\x9c\xf2\x83\x00\xf1\x55\x87\x57\xf9\xbf\xfc\x49\x44\xc2\x11\xc8\xff\xbd\x1f\x81\x27\xf3\x28\xff\x07\xd2\xdb\x88\x2c\x93\xe1\xdf\xd7\xd7\xae\x93\xdc\x94\x47\xd5\x4e\x93\x4c\x5c\x7e\x25\xaf\xee\x89\x0c\x51\xf8\x0b\x47\x0d\xac\xd8\x1e\x58\x3c\x8f\xfb\xe3\xba\xfb\xe3\x20\x7b\x81\xab\x14\x5f\xe4\x6a\x3c\x6e\x08\xa6\x0d\x41\x9c\xc4\x02\xc8\xc0\xd7\xd7\x6f\x2e\x86\xdb\x12\x82\xbe\xf5\x4b\xad\xc7\x57\xa9\x61\xd4\x71\x2c\xdb\x51\xa9\x5e\x8b\x72\x1e\xb9\x9e\x95\x7a\xb7\x4c\x76\x7b\x62\x76\x28\x06\x48\x8d\x93\x83\x2c\x8e\x7b\xc3\x19\x0a\x6f\x27\xe4\xbe\x5c\x74\x9a\x2f\x57\x24\xc6\x09\xb1\xbc\xd2\x5c\x98\xe6\x39\xab\x2d\xb7\xcc\x7d\x2a\xb3\x46\x72\x97\x1f\x1f\x4e\x1a\x0c\x58\xe2\x38\x06\x13\x04\xc4\xe4\x44\x5b\x24\x08\x18\x4e\xa6\x31\xca\x59\x72\x33\x46\x49\x18\x13\x86\x22\xc1\xa8\x7c\x0f\x6c\x32\xc6\x89\x61\xfb\xa8\x3d\x7f\x17\xde\x85\x96\x07\xd2\xee\x60\xa8\x8b\x1e\x62\x39\xb6\x9e\x36\xb8\x56\x1e\xa2\xec\x26\x9d\x2f\x33\x88\x13\xb4\xeb\x1c\x44\x0a\xc9\x71\xfa\x2c\xf9\xc1\x9c\x83\xf8\x07\xf9\x40\x43\x6f\xec\xe7\xa3\xa3\xea\xbe\x3d\x04\xb5\xeb\xc4\x19\x82\xd2\x53\x8a\xa3\xbd\x21\xf7\xc5\xe4\xe8\x53\xf4\xea\xe2\xf5\x5e\x91\xbb\x4a\xa1\x41\x69\xce\xb3\x2d\x77\x4a\xf1\xab\x0f\xd3\x7f\x0f\x97\xc7\x3f\xad\x45\xf1\xcd\x90\x1b\x25\xd9\x60\xc4\x2e\x20\x10\x78\x0f\xf7\x71\xa1\x80\x77\x49\xfa\xa7\xc9\x17\xbf\x1e\x5c\x7d\x77\xb8\x67\xa4\x37\x92\x6a\x70\x46\x4c\xc9\x38\x23\xe9\x8e\x39\x30\x4b\xde\x9d\x7d\x76\xfa\xfe\x33\x23\x07\x4c\xe0\x1a\x3d\xa3\xe7\xaf\xc8\x35\xa9\xf4\x92\x16\xbc\x53\xfd\x05\xcb\x6c\xc7\x22\x55\xaa\xb0\xa7\x67\x64\x79\x86\x62\xc8\xbd\x8e\xcf\x9f\x1f\x9a\x53\x14\x5f\x11\x90\xf1\x17\x78\xe4\x2f\xb5\xc6\xdc\xa5\xb9\xb3\x09\x2b\xa1\x5d\x00\x86\x96\xab\x1d\x0b\x54\x1a\x87\x77\x17\xe7\x77\x74\x3f\x97\xf4\x10\xc4\x8e\xc9\x94\x70\xef\x1a\x27\xd3\x1d\x13\x1b\x91\xf3\xf9\x37\xbf\xbc\x7c\xea\xbd\x7a\x4d\xa5\x67\xfa\x74\x1c\x8e\x3d\x4f\x6b\x74\x7b\xcb\x96\x40\x60\xd8\x1a\x7c\xf5\x3c\x9d\x7b\x3a\x2a\x46\xd1\x16\xae\xf4\xf0\x31\x1d\x25\x03\xb9\xa4\xad\x35\xcf\xfc\x01\x63\xc7\x64\x2b\x3e\x59\x7e\xed\x98\xbf\xb6\x9a\x43\xfa\xb1\x3e\xa4\x16\x9f\x68\xfd\x39\xe7\x72\xb0\xfe\x9c\xc5\x53\xac\x0c\x9e\x4f\x15\x8b\x19\x0d\x25\x83\xc5\x10\x60\x9a\xbe\xe1\x24\x08\x50\x12\xf1\xae\x6f\x7c\x1e\x07\xbc\x4d\x76\xc8\x17\xde\x5f\xc2\xc9\x57\x52\x0c\x42\x18\xce\xd0\x8b\x05\x93\xf5\xb3\x72\x34\x2c\x5b\xf1\xc0\xdb\x1c\xde\x8b\xce\x75\x5f\x82\xe3\xc3\xc3\xf4\xfe\xcf\x20\xff\x66\x86\x72\x1f\xf7\x4b\x70\xc4\xbf\x6a\x0d\x78\x9b\x3c\xc9\x0e\xf5\x18\x96\x98\x46\x3b\xf9\x78\xc6\x47\x4b\x94\x50\x8a\x8a\x54\x40\x29\x9c\xa2\x52\x01\x29\x71\x29\x2a\x51\x65\x5a\x83\xf8\x68\x17\x98\xe6\x63\x79\x37\xe9\xb2\x44\x4c\xf6\x96\x96\xe0\x00\xfc\x93\xf9\x89\x2e\x4f\xbb\x7b\xb9\xee\xa0\x7b\x80\xae\xe4\x86\xd8\x03\xe6\x30\x17\xbb\x71\x02\xef\xf0\x14\xee\x81\x21\xfd\x29\x7c\x11\xfe\x72\xb1\xb8\x37\xef\xba\x29\xce\x4d\x30\x5e\x4d\xe5\xb7\x27\x24\xf0\x2e\xb7\x24\xfc\x23\xe0\xa5\xf7\x6c\x04\xde\x4e\x62\xc4\x75\xb9\x0c\x0f\xe3\x08\xbd\x2d\x29\xe7\x15\x7d\x6d\x7f\xb5\x2d\xd1\x27\xc6\xc9\xed\x38\x23\xcd\xd2\x19\x4a\x16\x99\x5c\x2c\x2e\xb8\x80\xd7\xbc\x72\x42\x21\xa4\x31\x2d\x13\x4a\x24\xf7\x14\xf1\x5e\xf5\x4d\x79\x85\x08\x0d\xf1\x44\x7e\xef\x98\xeb\xba\xe5\xcf\xaf\x68\xb5\x7d\x99\xf3\x9c\xd3\xd7\xf4\x3e\x3a\x3c\x6c\xb1\xbd\x55\x33\x66\x97\xed\x6d\x3f\x49\xeb\xda\x8e\xb1\xb6\x61\x44\x38\x2b\x3a\x7b\xd4\x49\x73\x49\x49\xb4\x08\x33\x85\x16\x9b\x52\xcc\xd0\x79\x71\x83\xb3\x8c\xd4\x58\x4b\x78\x87\xd1\xf2\x0c\xb2\x19\x87\x0b\xb6\xd6\x85\x0d\x2a\x84\xc2\x71\xe9\x24\x85\xd2\xd7\xe9\xde\xaf\x74\x5d\x51\xbc\xc0\x2c\x7b\xb1\x88\x63\x94\x79\x0b\xe4\x90\x62\x79\xa2\x48\xd5\x51\x2e\xfb\x48\xe7\xe0\x3c\xbe\xc3\xd9\xaa\x2b\x93\xc5\x3d\x5b\x67\xf3\xe5\x22\x66\x68\x67\x1c\x56\x93\xde\x24\x8b\x7d\x11\xcb\xaa\xda\xe1\x24\x81\xf1\x2a\xc3\xa1\x1d\xae\x63\x58\xc9\x29\x5f\xd9\x41\x74\xb4\x71\x6e\x5b\x76\x5e\x40\x7a\x3a\x83\x74\x37\x0a\xe2\x3d\x92\xf6\xda\x6e\xa4\x67\x7b\x0a\x85\x55\xba\xcb\xf8\xc8\x84\xba\x63\x8b\x86\x8b\x6a\x81\xb3\x5d\xd3\xa5\x98\xe7\xa6\x4c\x17\xeb\x51\xb6\xcf\x69\xb6\xcd\xbe\x35\xea\x1e\xcc\x4e\x44\x07\x1f\x5b\xad\x7a\xd5\x22\x2f\xed\x28\x51\x06\xd0\xab\x30\xba\x75\xec\x40\x56\x17\x8c\xd3\x18\x3a\x53\xef\x86\x13\xa8\x93\x24\x21\x8b\x24\x6c\x6e\x4d\xd6\x7c\x3a\x87\x68\xb5\x51\xe5\x0d\x66\x0c\x27\x53\xc0\xf7\x61\xee\xd7\x80\x5b\xd4\x6b\x63\xb2\x46\xa8\x5f\xe0\x38\xe6\x71\xba\x4e\xd6\x49\x2b\xb7\x43\x92\xdc\xe0\xe9\x82\xf6\x45\xc3\x78\x64\x79\x32\x05\xbc\xd1\x03\x43\xf4\x0e\x51\xa0\xd5\x5c\x0f\xcb\xf8\x53\x9d\x53\x1b\x33\x5b\x3c\x01\x52\x1a\xd9\x5e\x97\x38\xe9\x89\xa6\xd0\x2a\x41\x81\x9e\xdc\xc7\x5b\xeb\xa4\x38\x61\x63\xbf\xfc\xdd\x01\x0d\x14\x09\xe7\x72\x45\x62\x83\x5f\xdd\x4c\x31\xdb\x20\x66\x07\x59\x64\x40\x62\x75\x74\xc4\xec\xf0\xa3\xbb\x0f\x52\xd0\x0c\x32\xee\xed\xf7\x60\xb8\x61\x10\x66\x98\x0a\xd0\xc8\x5c\x54\x01\x06\x67\x4e\x1f\x1b\x60\x6c\xe5\xf0\xa0\x69\x74\xea\xbb\x19\x45\x37\xc1\x28\xf8\x57\x25\x5f\x11\xcc\xe0\x18\xcb\xfe\x61\xc7\x05\x08\x9b\xf8\x91\x7f\xcf\x0f\x32\x52\x9c\x8c\xeb\xd7\x7c\xac\x27\x2a\x07\x12\xf8\x48\x45\x59\x5b\xb4\xc2\x2f\x8b\x79\x7a\x4d\x2e\x71\x12\x94\x19\xce\x4e\xe5\x70\xdc\x55\x3b\x68\x60\x42\xdb\xe5\xfa\x69\x99\xfe\xea\x60\x7b\x34\xcc\xf8\x86\xe0\xfc\x91\x07\xe7\x8f\x5a\x38\x7f\xd4\x97\xf3\x47\x5e\x9c\xb7\xa5\x84\xfa\x15\xab\xad\x53\xf2\xb6\xd6\xfd\xed\x4a\x8b\xef\x0c\x53\x0a\xef\x60\x26\xdb\x7b\x18\xc2\xd0\x5d\xb4\x60\xe5\x81\x95\x4d\x28\xa5\xe4\x06\xc7\xa8\xdb\x16\x74\xd4\x40\xb1\xcb\x5f\x90\x4b\x54\x82\x33\x0c\x63\xd6\xac\x93\x34\x6a\xdd\x1f\x66\x30\x63\x6f\xd1\x72\x9d\x22\x55\x53\xc1\x6d\xfe\xd8\x71\x82\x96\xe3\x88\x64\x86\xe3\x30\x7f\xb4\x76\xdd\xff\x78\x15\x93\x09\x8c\xdd\x5e\x88\x76\x7b\x69\x93\x0a\xc4\xd8\x93\x3b\x88\x63\x38\xe9\x00\xf3\xee\xcf\x61\xfe\x82\x31\x54\x6f\xe8\x3c\x75\x2b\x49\x7e\x57\x06\x80\x83\xbe\x5e\x71\x0a\xa1\x3b\x8b\xe5\xd3\x12\x53\xb8\x2c\x7f\xed\x8a\xd6\xd6\xc1\xf3\xf5\xdd\xa2\x0c\xc4\x89\xf0\x1d\xd6\xf6\x27\x97\x43\xd1\x9f\x4e\x22\xe9\x0c\xff\x86\x9e\x4c\x51\x82\xa8\x00\xdc\x32\x86\x2e\x7c\x5d\x0d\xf3\x29\xdc\x7a\x3e\xff\x5a\xb3\x04\x13\x12\x47\x80\xf2\xc8\x53\x39\xdd\x49\xe9\xdb\x1a\x86\x20\xd0\xaa\x81\xe6\x00\x77\x2d\x89\xe8\xef\x16\xed\x87\x46\xeb\x4f\x69\x51\x1b\x59\x21\x76\x2a\x8f\xc4\xac\xc4\x86\xda\x90\x37\x40\xee\xbe\x0a\xbc\xd7\x52\xac\x58\x76\x35\x7f\xb0\x75\xab\x1d\x35\xc4\x55\x1a\x82\xca\x09\xac\xdb\x83\x52\x75\xe6\x8f\xf8\xeb\xff\x62\x80\x3f\xc5\xe2\xd5\xcb\xb7\xf4\x99\x42\xf9\xe2\x59\x96\xa5\xec\xcb\x83\x83\x88\x84\xec\x89\xca\x5e\x78\x12\x92\xc2\x60\xcd\x20\x9d\xa2\x2c\x18\x05\xff\x77\x12\xc3\xe4\xb6\xcd\xb6\x95\x63\xff\x1a\xc5\xa9\xd9\xe6\xd6\x31\xac\x92\x5c\x2c\x2e\xc8\x94\x2c\xb2\x87\xad\x6e\xe1\x22\x9b\x3d\x89\xd5\x44\x4c\x53\x28\x66\xd9\x7b\x09\x6c\xd3\xb0\xee\xf1\xf4\x5e\xa7\x52\x2a\x4c\x53\x52\x10\xfb\x9f\x31\xeb\x96\xb1\xa9\x58\xe8\x42\x3d\xad\x3f\x6c\xa1\x3d\xf4\xee\xa6\xb2\x61\x09\xd4\xeb\x50\x07\xcc\x4f\x6a\xe4\x13\x0d\x98\xa4\xb4\x1f\x50\xe6\xf7\xdf\xbf\x5b\x5c\xad\x26\x49\xd7\xbc\xe0\x96\x64\x39\x39\xa7\xb5\x33\x94\x34\xe9\xa8\x16\xd0\x6c\xa5\x76\xcc\xc8\xa8\x21\x58\xaf\xe5\xf2\xed\xb6\xc0\xe3\xf4\x9b\xdb\x77\x21\x79\xe6\x97\xa0\x2c\xab\x1b\x65\xd6\x61\x51\xfa\x3a\x14\x99\x0b\xa2\x98\x29\xfc\x3f\xba\x53\x78\x3f\xb2\xc0\xcf\xae\x66\xc7\x8b\x5f\xc2\x2f\x3a\x11\x59\xa5\x8b\x6e\x86\xca\x43\xa4\x5a\xca\x56\xec\x07\x6c\x06\x29\x1a\xdf\x48\x18\xb5\xdd\xd6\x42\xde\x2f\xf0\x8f\x2f\xb2\xdf\xd6\xc9\xb7\x2f\x3b\xcc\x5b\xc2\x55\xed\x7a\x8c\x65\x39\x7d\x8f\xda\xb4\x58\x4f\x10\xbd\xa0\xbd\x3d\xb8\x78\xdf\xf8\x06\x53\x96\xd5\xb0\xf3\x5e\xe6\xdf\x81\xc4\x02\x9c\xa7\x4e\x61\x38\x56\x9e\x1e\x4c\x33\x3e\x36\xff\x55\x61\xe7\x19\xa7\xa0\x70\xe9\xf4\x0f\xe3\xb8\xc0\x5c\x90\x18\x2f\x7a\x26\xb5\x47\x6a\xf7\xa6\x29\x17\xc3\x06\xe1\x2e\xe0\xba\x74\xd3\x1f\xba\x53\xb2\x39\xd3\xba\x9f\xd6\xbb\x30\x65\x3e\x35\xe9\x7c\xb2\xf5\xc2\x74\x89\xaa\x5d\xd0\xba\xa0\x46\xa2\xa1\x25\xf6\x29\x52\x57\xc7\xc7\x94\x92\xe5\x7b\xfe\x32\x63\x1e\xa9\x32\x4f\xdf\x72\x4a\x79\x25\xc2\xfb\x2d\xe7\xe3\x2d\x2f\xe7\xe3\x71\x0a\x19\x5b\x12\x1a\xe9\xe7\x2d\x33\x42\x18\x02\x97\xda\x2f\x3d\x44\xb3\xfa\xe8\x81\x44\xb3\x3e\x5a\xcb\xb8\xd8\x1c\xc6\x0d\xe8\x17\xfe\xf4\x12\x10\x71\xbe\x90\xf8\x1c\x0a\x9e\x1b\x65\x4b\x84\x12\xf0\x19\x80\x49\x04\x9e\x1f\x82\x70\x06\x29\x0c\xb9\x67\xd0\x92\xb2\xb3\x6d\x35\x52\x92\x75\xcc\x93\x36\xa8\xee\xb2\x9f\x8a\x6f\x86\x63\x9d\xfe\x8e\x87\xc1\xc2\xf7\x68\x9c\xbf\x08\xac\xc8\x82\x82\x70\x46\x18\x4a\x40\x6a\x23\xc7\x3e\x2b\xb4\xe3\x6d\x2b\xb4\x2b\x3c\x4d\x5e\x27\x83\xaa\xb4\xa7\x16\x95\x96\xd6\x6f\x59\x42\xac\xd7\x3e\x5d\xc6\x08\x32\x04\xf2\x6f\x9f\x3c\xa9\x43\xc6\x6c\xcf\x37\x37\x19\xa0\x6b\x59\xb4\x22\xab\x52\xfe\x67\x4c\x11\x5b\xc4\x39\x1b\x76\x6a\xd2\xfe\xf8\xec\xdb\x6f\x2e\x10\xbc\x36\xfb\xe5\x62\x8c\x81\x3a\xd6\xe2\x96\xaa\x97\x95\x7b\x87\xd1\x72\x5c\xe4\x9d\x56\x04\xc1\x10\x4e\x8c\x3a\x74\x2b\x6a\x17\x3c\xae\x18\xa8\x90\x76\x53\x15\xd2\x4e\xda\xa0\xf5\xe8\x12\x62\x6d\x0e\x52\x80\xe8\xb8\x90\x87\x8a\x4b\x07\xed\x2c\x24\x41\xad\x15\xa4\x99\xfd\xc0\xb2\x76\x4e\x99\xd3\x32\xcb\xc8\x7c\x8c\x92\xa8\x53\xa8\xb0\x3f\xec\xc0\x29\x25\x4c\x9c\x90\x01\x0e\x45\x25\x3a\xad\x72\xd9\x30\x07\xe5\x55\x06\x4e\x4e\x01\x7b\xb3\x69\x97\x34\x7a\xe7\x22\xf8\xee\x3b\x47\xa6\x76\xa6\x5d\x46\x54\x43\xc5\xf4\x4b\xb3\x37\x82\x6b\x2f\xf0\x58\x84\x7f\x25\x4a\x37\xa8\x7f\x31\x9e\x11\x8a\x7f\xf3\x7b\x4b\x23\x33\xc8\x0b\x45\x9b\x9f\xd0\x11\x9a\xbd\x58\x15\x3d\x3a\xd7\x02\xd2\xee\x52\x9b\xeb\x05\x15\x5f\x79\xac\x05\xe6\x39\xe3\xeb\xb4\x9c\x43\xb7\xc3\xa0\xde\x24\x0b\x29\x82\xeb\xc3\x8f\x77\xa1\xda\xa9\x78\x23\x88\x2c\xfd\x0a\x7a\x53\x4f\x9b\xce\x96\x08\x28\x4e\x75\xb7\x49\x40\x1e\x35\x28\x5e\x3b\x30\x01\xb5\xe9\xf8\x3c\xd8\xe7\xfd\x6d\xbe\xd3\xa3\xf2\x1b\x54\x10\x21\xaf\xca\xdf\x96\x10\x9e\xb0\x10\x25\x0a\x2b\x64\x50\x09\x94\xf3\xd8\xd2\xf2\x95\x60\x06\xdb\x22\xdb\x19\xda\x18\xdd\xd4\x4c\xf6\x71\xd9\x36\x7c\x65\x7b\xa6\x64\xab\xf7\xac\xac\xf3\xc2\x81\x6e\x42\x54\xb6\x78\xc2\xca\x2c\xfe\x51\xe4\xc0\xd8\xdd\x60\x37\x42\xe5\x95\x94\x9f\x32\xe1\xda\x89\x55\xd9\x46\xd8\x1e\xb9\xd9\x1e\xa9\x01\xb6\x80\x55\x2f\x08\x0e\x57\x15\x4b\xfb\x12\x10\xce\xe3\x98\x2d\xe6\x73\x48\x0b\xd0\x60\x79\xfe\x24\x7e\xbc\x9c\x51\xc8\x50\x60\x04\xe6\xb6\xe9\x60\xcd\x61\x74\x81\x89\x57\x7d\xcb\x9f\x7f\x0e\x78\x5d\x96\x4a\xc1\xf6\x01\x9d\x68\x26\xac\x9b\x51\x9d\x03\x47\xee\xc9\xaf\x0b\x44\x57\x45\x0e\x05\xc7\xa9\x45\x31\x9f\x01\xbf\x47\x2a\xab\x19\x64\x33\xed\xde\x05\xa5\x28\xc9\x2e\xe1\x14\xbd\xe6\x91\x3a\xb2\xa0\xa1\xac\xff\x94\x99\xe4\x19\x9a\xbf\xae\xf4\xcb\xce\x9d\xee\xef\xf8\xbb\x44\x40\xa7\x18\xee\x13\x09\x79\x2d\xe4\x9b\xe6\x8e\xa2\xd6\xbc\x3f\x97\x09\xf5\x20\xed\xab\xab\x78\x31\xd5\xbf\x54\x0f\xab\x5e\xaa\xbe\x95\x57\x17\xab\xc2\xbf\x7e\xd4\xa4\x43\x15\xa4\x8d\x2b\x95\xfb\xa8\x31\x0e\x57\x5a\xf5\x17\xa3\x60\x9a\x69\xb3\xbf\x43\x94\x61\x92\x70\x1a\xc7\x28\x99\x66\xbc\x28\xf4\xd0\xb3\x2b\xa8\x79\x46\x2c\x85\x8d\x8e\x05\xf2\x3d\xda\xa4\xfe\xf1\xf7\x7f\xfc\xbd\x3a\x87\x72\x2c\xbe\x88\xf5\x3d\x01\xeb\xed\x61\xbc\x9c\xf9\x41\xa3\x40\x41\x7e\xdd\xb6\x62\x3d\x9f\x9d\xe0\x34\x45\x59\xf3\xe9\x86\xe6\x41\x96\xbe\x40\x47\x5a\xfb\xa6\xc1\xca\xcf\xf4\xce\xbd\x92\x45\x2d\x5d\xd6\x7a\xf0\x41\x2c\x3d\x09\x19\x5c\x34\xb7\xc8\xe0\x94\x69\x01\x29\xf9\xf5\x75\xfe\xad\xb6\xd0\xf9\x55\xa6\x10\x6d\xcf\xf2\x63\x4b\x85\x48\x4b\x12\xd4\xa6\xd2\x60\x8c\x71\xd1\x01\x23\xad\x77\x18\x2d\x77\x1c\x66\x7d\x76\x77\xf9\x45\xfc\x43\x12\xaf\x93\x39\x60\x89\xa9\x2a\x79\xee\xdc\xaa\xef\xaa\x02\x0d\x60\x3a\x73\xc1\x49\x8c\xcd\x6d\x5c\xda\xd7\x90\xd7\x71\x57\xb1\x18\xc2\x05\x1b\xd7\xba\xe9\xd5\x1a\xe9\xa9\xe7\xea\x0d\xf5\x44\xe7\xbc\xf2\x98\xe4\x16\xad\x96\x84\x46\x22\xda\x57\xed\x62\x47\xc7\x4f\x81\x14\x05\x0e\xd5\x5f\x5c\x3b\x02\x6a\x51\xf9\x80\xea\x0d\x39\xeb\x1d\x22\xb1\x97\x98\x07\xfe\x72\xe1\x4d\xa0\x86\x7e\xa8\x87\xfa\x79\xb1\x41\x0d\xeb\xc1\xab\xdd\x76\xcb\xe1\x89\x22\x5d\xf1\x85\x26\x08\xea\x9d\xea\xb7\xc2\x46\xd2\x64\xc5\x53\x9d\x5a\x47\xd8\xff\xc8\xd0\x74\x18\xc6\x85\x60\x4c\x51\x34\xfe\x3c\xbf\xad\x90\xa4\x1f\xc9\x82\x4a\x31\x06\xdc\x94\x04\x98\x81\x8c\x10\xc0\x66\x02\x34\xdf\xa3\xb1\xc2\x86\x55\x77\xae\xa1\xd6\xd4\xdb\x5c\x1a\x0f\x20\xa6\x19\x9c\xc4\xe8\x20\x57\x04\x63\x14\xe1\x8c\xec\x3a\xf7\xeb\xf8\xf5\x75\xba\x78\xcb\x9e\xfb\x67\xd9\x95\xd0\x8a\x55\xc8\xd8\xa4\x82\xd8\x28\x1d\xf8\x12\x1b\x35\x38\x91\x93\x0f\x46\xc1\x25\xa4\x19\x60\x29\x45\x30\x62\x33\x84\xb2\x11\x48\xf3\x6f\x22\x98\xc1\x09\x64\x68\xc4\x13\x16\x50\x92\x61\x8a\xe2\x15\xb8\x89\xd1\x3d\x9e\xc4\x08\x7c\xa2\x6a\x02\x14\x1d\x9f\x84\x64\xfe\x47\xcb\x39\xc9\xeb\x24\x43\x53\x0a\x15\x60\x96\x69\xbd\xab\xb5\xac\x58\x94\xbf\xbf\xe0\x4c\xdd\x76\x29\xba\xd0\xf3\x93\x7f\x7e\x8e\x86\xd9\x19\xa6\xd9\x4a\x68\x33\xd1\xf6\x82\xf7\x94\x0b\x55\xb5\x7f\xd5\x5d\x2b\x17\xab\x7c\x50\xd9\xc5\x5f\x34\xec\x6f\xd7\x5e\xea\x4d\x0a\xcd\xc6\xa2\xe6\x54\xff\x0d\xf7\x95\xc5\x38\xed\x8e\x4d\xdf\xdd\x21\x68\xcd\xff\x50\x2c\x1c\xa3\xf9\x04\x45\xe3\x90\x44\xfa\x66\xac\x64\x05\xf0\x5f\x81\xfa\xd5\x9c\xee\x20\xe6\x97\x6f\x9a\x90\x22\x0d\x69\x56\x6d\xb3\x94\x2c\x79\x41\x48\xd4\xb2\xe5\xd6\x7a\xd7\xaa\x8f\x94\x22\x0e\xae\xc7\x3f\xc1\x14\x67\x30\xce\x15\x5f\xee\x42\xa0\x38\xe6\x1d\x72\x34\xfe\x42\x8e\x63\x3b\x0a\x9e\xb6\xcc\xad\xb5\x05\xad\x6a\x7a\x2b\xaf\x22\x37\x37\xb5\x7f\xb9\xc4\x5a\x37\xf3\x9e\xc9\x25\x97\x90\x65\x08\x64\x33\x04\x0c\xe4\x06\x9a\x33\xe3\xd8\x0b\x2d\x61\x9d\x01\x14\x71\xbb\xe6\xdc\x80\x4a\xa6\x28\x89\x10\xdd\x79\x42\xee\x31\xbb\x3f\xb9\xfc\xe5\xdb\xf9\x3a\x66\x75\x42\x92\x71\x4a\x71\x22\x74\xae\xc9\xb0\x3e\xd2\x35\xcf\x28\x10\x2d\xb0\x64\xcb\x9e\x8d\xd6\x07\xd8\x69\x3f\x08\x5b\x35\x35\xae\x4c\xfd\xdd\xb2\xf4\xee\x6b\x06\xdf\xbe\xff\xe9\xdd\x1a\x85\x22\x15\xdc\x05\x39\x51\x35\x47\x09\x1e\x9d\x8a\x80\x9a\x21\xda\xdf\xae\xc1\xa7\x14\x47\x65\xce\xf6\xf8\x4f\x5d\xd3\x36\xc5\xfd\x28\x8e\xc7\x47\xa0\xfc\x9b\x83\x54\x8f\x8f\x2a\xa6\x9e\x1f\x32\x58\x75\x66\xed\x71\xb2\x9a\x6f\x68\xc3\x77\xe1\x24\x7f\x43\xa2\xe1\xc2\x29\xfe\xfd\xdb\x3d\xdc\x42\xbe\x33\xd9\xba\xab\x7f\x94\xab\x74\x8c\xa3\xf1\x7f\xfc\x87\x60\xf2\xdf\xfe\x16\x68\xeb\xf7\x5a\xe2\x62\xdb\x5b\xa8\xcf\x20\xf3\x6a\x9d\x5e\xcb\x79\xb4\xb4\x52\xaf\x5f\xd9\x68\xad\xde\xe3\x04\x61\x1b\x7c\x68\x5a\x0b\x15\x26\x48\x93\xa1\xcd\x41\xe7\xbc\x90\x41\xbd\x16\x86\x04\x23\x3d\xea\x17\x1c\x1b\x99\x71\x86\x58\xb8\x4d\x66\x28\xe9\xc8\x4d\x73\x8a\xd3\x02\x29\x78\xed\x23\x1e\xaf\xf6\x7b\xdb\x5b\x50\x32\xce\x52\x61\xa9\x4f\xb0\xa5\x50\x9f\xa6\x95\xb5\x07\x8b\xa9\xb2\xba\x07\x62\x5c\x33\xaa\xdb\xb6\x1c\xdb\x2d\x70\xff\x60\x52\xb9\x41\x1c\x6b\x9b\x45\x7b\x76\xa3\xae\xc4\x17\x6c\xe5\xad\xbf\x83\x6a\x57\x86\x23\xd9\x95\x21\x38\x80\x8c\xa1\x8c\x1d\xe0\xf9\xf4\x20\x7f\xe0\x78\x4a\xe1\xea\xc9\x14\xdf\xd4\x07\xca\x7f\xc4\x49\x84\x43\xa8\xed\x42\x1d\xc0\x09\x87\x4a\xcb\xe4\x61\xaf\xea\x3f\xe6\xec\x47\x8d\x54\xb2\xc9\xd6\x05\x4e\x6e\x11\x7d\x21\x81\x7d\xba\xf5\x2b\xad\x04\xf4\x3a\xe5\x79\x3a\xe2\x7a\x05\x8a\x76\x72\xeb\x99\xf1\xf9\x3a\x61\x88\x66\xe0\xa2\x3c\x4c\x6c\x09\xee\xcd\xc8\x32\xbf\xe8\x8d\xec\x88\xdb\xb2\xff\xf8\x83\xff\xa4\x14\xdd\x61\xb4\xdc\x4f\x02\x5e\x8a\xc1\x79\xd2\x50\x5e\x0d\xc2\x19\x4c\xa6\x88\x59\xe9\x58\x3c\xb9\x0f\x05\x4d\xba\x64\xc3\x94\xb8\x56\xed\xad\xdc\x31\xe4\xe0\x0a\xde\x21\x2f\x22\xd4\x03\x23\x9d\x5a\x91\x6e\x60\x92\x45\xca\x6f\xfb\x2c\xdf\xcb\xb4\x3d\x11\xfd\x01\xbc\x77\x00\xaf\xe2\xf5\x0d\x14\xf5\xe4\xb4\x33\x44\xb0\xa6\xb9\xdf\x7e\x6f\x08\x93\x3b\xc8\x6c\xc7\x12\xb5\xea\x77\xdf\xe0\xbe\xb5\x37\xb7\xf2\xc3\xea\x98\x9b\x2c\x84\x34\x12\x4d\xba\xc7\x35\x53\xb0\x06\xb2\xf9\xd8\xbf\x5b\x4b\x21\x13\x74\x03\xa7\x72\x51\x5a\x8c\x8f\x6e\x0d\xbc\x0d\xe6\x40\x5a\x3d\x77\x00\xb3\x5c\x1b\xcc\x61\x54\xa8\x04\x90\x11\x1e\x10\x93\x42\x09\xc6\xbc\x2d\x34\x4e\x16\x48\x2d\x27\x40\x28\x90\xac\x56\x37\xfd\xa5\x93\xc1\xe4\x31\x97\x3d\xea\xf1\xcc\xe1\x2a\xf5\xf9\x07\x1d\x5a\x3a\x6f\xe6\x40\x50\xaa\x39\x31\xbc\xb3\x2a\x2b\xac\xca\x4e\x5e\xbb\xad\x3e\xcc\xea\x1b\x31\x24\xb5\xe2\x54\x03\xd4\x71\xcc\x8d\x33\xaf\x33\x06\x36\x23\x4b\x61\xd4\xe4\xd3\x10\xe6\x90\xb0\x9f\xfa\x1c\x2f\xf0\x6c\xaa\xaa\xa9\x64\x3d\x22\xa8\xbc\xcf\xb6\x4f\x0c\x16\x17\x6c\x06\xef\x86\x8e\x09\xee\xba\x37\xef\xf3\x77\xaf\x0e\x67\x27\xdf\x0e\x83\x1a\x53\x0b\xe0\x7d\x36\x7e\xd6\x61\x93\xe8\x11\xbd\x5b\x33\x74\xb7\x5e\x0c\x60\x78\xd7\x5f\x44\x73\xe4\xa9\x65\x65\xd7\xce\x1e\xa0\xeb\x6f\xd0\x49\x0d\xd4\xd5\xf3\x22\x30\xd5\xee\xd1\x80\xda\xff\x75\xe7\x5a\xfd\x09\xea\x29\x83\x47\xe0\x7e\x27\x61\x37\x23\xad\xbc\xd3\xf2\x5a\xee\x32\x7c\xb5\xfb\xf8\xcc\x6e\x83\x33\xa6\x2c\x9c\x8d\xe4\x2d\x69\x66\x94\xbc\x8c\x7b\x5b\x22\x61\xc9\xbe\xe7\xba\xfc\xb2\xea\x04\x9e\x56\x27\x30\x9e\x72\xd1\x73\xb4\xc7\xdc\x52\xaa\x96\x98\x9f\xcf\x9c\x3d\x3c\xee\xae\x9e\x9a\xff\xd6\xd4\xc7\xc7\x34\x39\x98\x1b\xf0\x25\x5b\xb2\x18\x1f\xfd\xc6\x7d\xf2\x1b\x1f\x1d\xc5\x47\x47\xb1\xab\xa3\xb8\x21\x97\x69\x38\x5f\x69\x4f\xb2\x61\xd2\x93\xa7\xb7\x38\x7c\x66\xf6\x96\xbc\x13\x26\x04\x4c\x22\xcc\xa0\x39\x36\x57\x57\xaf\xcb\x15\xc3\xcb\x95\x59\x6d\x1e\x29\x7d\x2d\xc9\xa6\x4a\x6f\x4a\x05\xae\xc8\x58\x7b\x95\x54\x81\xd7\xb9\x8f\x92\xb3\xbf\x96\x74\x54\x2a\x7a\xe5\xaf\x17\x27\x11\xc2\x7b\x37\x39\xde\x1b\xcc\xcf\xa9\x08\xc1\x20\x62\x15\x92\x68\x9f\x92\x5f\xbf\xfd\x7c\x9e\x7e\xfd\xe1\xa7\xa5\x9f\x64\x99\xb3\x44\x8b\xf4\x22\x8f\x40\x8e\x08\xf7\x0f\x9e\x32\x9a\xeb\xde\x10\x33\xc4\x9d\x43\x90\xcd\x60\x26\x5d\x8d\x09\x62\xd5\x64\xbe\x87\x96\x5d\xaa\xac\xb6\x7c\x12\xbd\x4e\x08\xd8\x2a\xc9\xe0\xfd\x58\x54\x43\x5b\x43\x12\x95\x7d\x48\x5c\xdf\x80\xb9\x12\x06\x4c\x39\x5b\x59\x90\xfd\x7d\x2e\x85\x97\x30\x9b\x15\xdf\x70\x7b\x57\x7e\x23\x9e\x55\x61\xad\x18\x55\xa5\xbc\x91\x7f\xf3\x2e\x2d\x7a\xfb\xda\xce\x39\xf9\xb5\xc2\xee\x29\x5d\xcc\xb9\xc8\x1f\x55\x89\x3f\x62\x53\x8c\x90\xb8\xd8\xd5\x31\xbf\xe5\x00\x9f\x65\xab\xd6\x4a\xc5\x27\xa7\x24\x42\x6f\x70\xee\x46\x83\xff\xa8\xed\xeb\x33\x94\xef\xd7\x5f\x02\xb8\xc8\x08\xf8\x17\x3c\xcf\x17\x38\x4c\xb2\x3f\xd7\x2e\xbb\x21\x49\x36\x66\xf8\x37\xf4\x25\x38\xfa\x3c\xbd\xaf\xfc\xfc\x37\xf7\x00\x2b\x61\xa0\xf6\xf4\x5f\x2d\xef\xb7\xa2\x4f\x5f\xc8\x7c\x47\x09\xfd\xce\x85\x4b\xb0\x24\xd0\x3c\x78\x2f\x37\x64\x1b\x19\xb0\x75\xd5\x39\xb0\x3e\xde\x93\xbd\xfe\x97\x1f\xde\x65\x8b\xcf\x3e\x7d\xef\xbd\xd7\x1b\x44\xb4\x22\x99\xa0\x4d\x16\xc1\x1c\xd2\x29\x4e\xc6\x02\xbc\xe9\x4b\x70\x7c\x98\xde\xff\x19\xfc\xcd\xb4\xa7\xf2\xb5\x50\x08\x98\xd9\xb2\x30\x19\x15\xa3\x40\xe6\xb5\xab\xb6\x59\x52\x24\xb9\xc7\x9e\xff\x52\x88\xa0\x1e\xbe\x18\x76\x0f\x6f\x72\x78\x10\xc1\xb9\x89\xc9\x32\x9c\x41\x9a\xed\xd1\x6e\xfe\x53\xf6\x2b\xcd\xbe\xbe\xfe\x6c\xf3\xa5\x2c\x67\x14\x2e\x9f\x60\x12\x8c\x82\x97\x84\x82\x39\xbc\xcd\xfd\xbd\x82\x24\x6c\x04\x52\x4a\x42\xc4\x18\x88\x30\x9c\x52\x38\x67\x23\x40\xe8\x14\xa8\x5f\x3f\xbc\xb9\x18\x81\xf3\xf7\xda\xaf\x09\xca\x96\x84\xde\x16\xdf\xf0\x02\x98\xf9\x22\x9c\x81\x39\xa1\x7a\xe1\xcb\x84\x2c\xb2\x27\x91\x78\xfd\x8e\x2b\x5f\x78\xbc\x6f\x23\x05\x30\xf9\xa7\x25\x14\x5e\xe4\xc3\xab\x88\x51\x36\x4b\x21\x0f\x63\xc9\x55\x8b\xe5\x82\x6f\xa8\x02\xdf\x2a\x22\x42\x4f\x47\x95\x4d\x49\x8b\x93\x2a\x69\x58\x2e\x97\x4a\x16\x0e\xfe\xc2\x4b\x37\xbe\x3a\xfa\xc3\x02\x7f\xf5\x2d\x4a\x12\x14\xad\xfe\xc0\x52\x9c\x7c\x75\xf8\x87\x94\x92\x8c\x7c\xf5\x0b\x23\xc9\x1f\x58\x1a\x43\x36\xfb\xea\xb0\x88\xbb\x72\xed\x39\x0a\xf8\xeb\x45\xee\xd9\x97\x87\x7f\x06\xf2\x2f\x70\xf8\x67\xc0\x4f\x82\xbe\x04\x47\x87\x87\xff\xf3\xcf\x85\x2e\x3d\x3a\x3c\xcc\xb5\x65\x6b\x50\x6c\xf7\xf5\x22\x46\xfd\xb4\x09\xcd\xb7\x27\xfb\x66\x74\x71\xfa\x72\xfe\xc3\xdb\x1f\xd7\xa9\x18\xb1\x61\x49\xd5\x42\xf6\xc7\x52\x14\x4d\x05\x24\xe6\x26\xb2\x1b\x73\x52\x5b\xf8\x31\x08\xaf\xa7\x68\x8e\x13\xbc\x47\x5b\xdc\xf1\x31\x7b\xb5\xfa\xf7\x2b\x73\x4f\x84\x40\x06\xad\x06\xdc\xe8\x5e\x71\x02\x04\x23\xf9\x07\xe0\xc2\x91\xd2\xdc\xd7\xc4\x8c\x2d\x10\xdf\xa7\x32\x1c\xde\x22\x1e\xf2\x64\xe4\x26\x5b\x42\x7d\xc3\xca\x55\x54\x48\x16\xf9\x6d\xf9\x8f\x7b\x50\xb0\xf9\xb8\x6d\x79\x65\x11\x3c\x1f\x3f\xef\xe6\x69\x6b\x89\x04\x1b\x3b\xf8\x37\x97\x92\x8a\x55\x3a\x5e\xd0\x58\xbb\x5b\x0a\xec\x87\xf7\x17\x6d\xc1\x75\xdf\xc2\x1c\x23\x68\x43\xbe\x38\xb4\xf7\x8e\x2a\x65\x04\xa2\xff\x7c\x30\x0a\xf8\x90\x6a\x47\xcc\x8e\xbc\xfd\xa0\x7f\x3d\x27\x7a\x32\x7d\x02\xf2\x85\xf7\xe5\xc1\xc1\x0c\xc5\x69\x84\xd8\x6d\x7d\xf1\x0d\x77\x02\xd1\x87\x67\xf2\xaa\x0f\x0c\x51\x5b\x9b\x88\x2a\x67\x7a\xf1\x44\xbd\xa1\x8d\x31\xc5\x08\xb6\xc6\x1d\x25\x90\x8e\xb9\x6f\x87\x11\x8d\xc5\x03\x53\x2c\x01\xc4\x54\x05\xf6\xe5\x6b\xf0\xad\xf8\x66\x33\x2c\x92\x6f\xd4\x20\xf4\xeb\x4c\x3a\xb9\x7c\xcd\x47\xb0\x6d\x16\xe5\xc2\x01\xf2\xf9\xdf\xa2\x15\xf8\xe4\x86\x92\xb9\xf8\x4a\xb6\x7a\xfd\x63\x1f\xd6\xed\x1e\x1f\xe5\x64\x91\xcd\x50\x92\xe1\x50\xa0\x4a\xb5\xef\x25\x70\x91\xf5\x40\x48\xf1\xcd\x2a\x09\x1c\x59\x24\x50\x1b\xa6\x7f\xf7\xd6\xf5\x56\x47\xbb\xa6\xba\xe2\xb1\x5b\x20\x05\x23\x77\xd1\x0b\xfc\x30\x27\x40\x58\x13\xde\x4f\x79\x86\x72\x05\x14\x8f\xf3\x80\xfb\xd3\xaf\xed\x89\xdb\xd6\xc4\xfb\x6b\x1b\x4f\x33\xc4\x55\xbf\x42\x6b\xf9\xfe\xba\xd2\xf2\xbd\xad\x10\xad\x1c\x49\x89\xd3\x5e\x14\x40\xa8\x75\xc0\x66\x64\x79\x86\x62\x28\xb5\xce\xe1\xa1\xc1\x8c\x29\x41\xd5\x8a\xc2\xbc\xa2\xd7\x97\x0b\xd3\xd1\x46\x1d\x8b\x23\x2f\x27\x2f\xad\x6b\xe1\xfc\x08\xbf\x59\x10\x67\x02\xc3\xdb\x5c\xc2\x92\xdc\x7e\x8a\x09\xfd\xb2\x24\x8e\x58\xa4\xf9\xd8\xfe\x1c\x18\xda\xe2\x4b\xf5\xe6\x68\x8b\x4f\x92\x1f\x14\xdd\x65\xd0\xbf\x4e\x7c\x27\x9c\x5c\x89\x06\x3b\x74\xdb\xf1\x1a\x91\xd4\x8b\x0a\x6a\x49\xa1\xf8\xef\xff\xe7\xff\xef\x1d\x07\x68\x14\x11\xb5\x69\x58\x0f\xa8\x37\xcb\xdd\x9d\x1e\xdc\xa7\xec\x65\x3b\x91\x8e\xa6\x8f\x3a\xb8\xeb\xbb\x27\x31\x8e\xc9\xe4\xf3\xe8\xbb\x9b\xbb\xd7\xfe\xf1\xdd\x36\x74\x8b\x4d\xd1\x7f\xd8\xe0\x03\xce\x66\x8b\xc9\x1e\x05\x1f\x96\xdf\x7e\xfe\xe3\xd5\x9b\xcf\x0f\xd6\x39\x2d\xef\xe2\xa2\x6f\xe8\xb4\xbc\x92\xad\x3a\x0a\x5e\xe1\xec\xeb\xc5\x04\x60\x06\x66\x64\x09\x52\x44\xd2\x18\x81\xc9\x02\xc7\x51\x11\xce\x78\x52\xc6\x33\x04\x53\x8a\x30\xc6\x83\xf2\xf0\x0b\x55\xcd\xe7\x60\x3c\x4e\x1f\xc4\x1e\xdb\x88\xcf\x28\x2d\xb1\x77\x74\x0a\x13\xfc\x1b\x54\xcc\x77\xfb\x26\x1b\x3e\xd0\x0f\xc8\x32\x41\x94\x8d\x23\x4a\xd2\x88\xb7\x92\x11\x74\x13\x5f\x3b\x4e\xf2\xdf\xe5\x17\xd5\x0f\xf2\xf9\xd0\xaa\xc7\xf8\xd2\x21\xe2\xcf\xb4\x1c\xe5\xaf\xed\x00\x49\x22\x13\x8d\xc8\x80\x50\xe1\xfd\x2c\x67\x84\x21\x40\x51\x4a\x58\x2e\x37\x2b\xb0\x22\x0b\xb0\x84\x49\x06\x32\x8e\xd5\xb7\xdc\x8b\xd0\xc2\x55\xbe\x88\x71\x86\xe6\x0c\x30\x9c\x58\x2d\x75\x87\xff\xaa\x1c\x57\xe9\xc7\x96\xfe\xeb\x84\xc2\x24\x9c\x8d\xc5\xe3\xeb\x2c\x12\x3f\x5e\x89\x57\x7f\x54\xd1\x87\x2d\xf9\xaf\x52\xa5\xe7\xba\xec\x73\x10\xc1\x15\x03\x70\x4a\xf6\x82\x2d\x52\xc9\x7e\x8f\xd1\xb2\x35\x53\xd7\xee\x41\x0a\x9d\x25\xeb\xd2\xed\x7e\x9c\x85\xa9\x1c\xb5\x0d\x15\xe1\x89\x8f\xb2\x14\x6e\x3c\xc7\x31\x62\x19\x49\x9a\x0c\xe5\xb5\x77\xea\x57\x81\xc2\xca\x1f\x32\x21\xf7\x6e\x04\x0e\x9b\x90\xea\x0f\xf5\xf0\x26\x27\xa6\x32\x87\x61\x26\xcf\x23\xf9\xcc\x38\xf3\xd7\xe2\xa7\xe1\x66\xad\x1e\xb8\xdb\x19\x87\x64\x3e\xc7\x99\x79\xca\xa7\xf2\xb7\xe1\xe6\x5c\x3c\xd1\xd7\xfd\x18\x56\x9b\x67\x33\x04\xf2\x75\xc3\x36\xa8\xb1\x39\xf1\xc7\x4d\x28\x2e\xbf\xc5\x3d\x48\x8c\xe6\x7d\xb1\x33\xb9\xa5\xab\x62\x1a\xc4\x98\x65\xb2\xc5\x8d\x26\x3e\xf9\x16\x22\xf7\xe1\x97\x18\xc5\xbc\x49\x01\x4e\xa6\x31\x12\xaf\xab\xc4\xe4\x84\xf0\xe4\xcf\x11\x62\x93\x6f\x92\xde\xe9\xef\x6e\xfa\x77\x86\x5b\x6a\xa7\xb4\x1e\xe0\xad\xc4\x03\x5b\x83\x0f\x22\x1a\xe8\x1e\x50\xe1\x19\xef\xc6\x09\x6e\xf8\x4a\x83\xbb\x60\x7b\xe2\x04\xbf\x38\xf9\x91\x9c\xdc\xbc\xf4\x74\xc2\xfc\x20\x1e\x37\xc5\x89\x41\xdd\xe1\x5f\x30\x85\x7b\xe4\x0c\xbf\x7c\xfe\x13\x7d\xfb\x6e\x72\xbc\xf9\x64\xb3\x6f\x30\x85\xe0\x4a\xba\xa2\xc1\x48\x7c\x4e\x29\xb9\xc3\x11\x62\xf2\x18\x3e\xa3\x30\xe4\x49\x68\x30\x89\x00\x9c\xe2\x18\x15\xce\xeb\xe3\x69\xfb\x2e\x7c\xf1\xaa\x13\xcd\x10\x63\xc2\xbf\xc4\xec\x24\x9a\x63\x0b\x98\x94\xa9\xd3\x8e\xe8\xac\x93\xcb\x42\xb8\x60\x19\xc9\xd7\xca\x13\x5c\xe5\x9d\x73\x3f\xe8\x71\x00\xd5\xe1\xd8\x49\xf4\xea\x9e\x2e\x28\x02\x5c\x3c\x4f\x49\x92\xc8\x84\xfb\xfe\x98\x42\x5d\xf1\xe7\xbd\xf6\xc9\x67\xa3\x60\x91\xc4\x88\xf7\x54\x5b\x37\xc2\xd1\x82\x71\x3f\xcd\x49\x33\xfe\xac\x89\x72\x7f\x26\x15\x1d\x80\xb9\x0c\x60\x96\x51\x98\x11\x0a\x12\x84\x22\x8e\x3c\x23\x17\xb5\x20\x61\x28\x48\x98\xbb\xe0\x11\xca\x20\x8e\x19\x98\xa0\x1b\x42\x11\x58\x30\x38\x45\xf5\xfe\xd1\xd6\x7d\xb6\xb9\x57\xaf\x17\xe4\x09\xda\xa0\x57\x37\xe4\x45\x96\xc7\xd5\xf9\x2e\x30\xfe\xe5\x57\xdd\xfe\xe3\xd4\xe2\x8d\xa1\xc0\x05\x4c\xa6\x0b\x59\x38\x35\x78\xca\x47\x13\x84\xa0\x18\x4c\x4b\x96\x01\x1f\x67\xfd\xf4\x5a\xe6\x69\x7c\x92\x93\x76\xc1\xc0\x57\x80\x22\x46\xe2\x3b\x14\x81\x93\xb7\x67\xb9\x08\xe4\x9b\x17\xf8\x0a\x5c\xad\x84\xaa\xf8\x23\x78\xf7\x1e\x40\xc6\xf0\x34\x41\x08\x7c\x05\x26\x64\xc2\xe6\x38\x9b\x75\x00\x81\x58\x57\x11\x8c\x02\xd5\x72\xc5\xef\x48\xba\x6c\x4a\xe7\x38\x93\xd6\x30\xec\xe4\x95\xfd\x41\xe9\xca\x19\xb6\x1e\xa3\xe9\x90\x79\xbd\x9b\xc9\xe9\x4a\xe7\xff\x98\x4a\xf1\x85\x3b\xfd\x8a\xe2\xdc\x17\x6b\x5a\x5a\x3b\x6f\xc1\x31\xa5\x70\x55\xeb\xc1\xa1\x2b\x9c\x5c\x21\x91\x0c\xd4\x54\x82\xdb\xfe\xdf\x86\x99\x5f\xb7\x01\x07\x36\x2c\xf7\xc4\xc4\xff\xe6\xfc\xd3\x5f\x9e\x1f\xbf\xf8\x6e\xbf\xce\xb9\x9a\x64\x1a\x84\xfa\x73\x48\x6f\x23\xb2\x4c\xf6\xc8\xb4\xff\xfe\xed\x9b\xe7\xd9\xf3\xef\xcf\xb7\x55\x15\x5a\xa2\x93\x8f\x8c\xc8\xad\x35\x10\xae\x51\x0d\x97\x54\xd7\x6c\x9b\x3b\x2e\xd3\x10\xd4\x9d\xba\xba\x89\x18\xd6\x55\xbd\xef\x9b\x39\x5f\xcf\x83\x6f\x2d\x8c\x6c\xad\x8a\xf4\x29\x89\xe4\xf5\x90\x37\x70\x8e\xe3\xd5\x97\xe0\x6b\x14\xdf\xa1\x5c\xff\x36\x2f\x31\x95\x4c\xfe\x4d\xdf\xc8\xf4\x51\xa4\x14\x55\x47\x92\xc2\x28\x77\x3c\xbf\x04\x87\xf5\xbb\x9b\x76\x83\x1d\x28\x44\x1d\x28\xaa\x35\xec\x79\xa4\x98\x5f\xe5\x0f\xc6\xaf\xd9\x2c\x2d\x90\x51\x45\x23\x39\x6e\xae\x7d\xd4\x5f\x63\xa8\xe8\x1c\x35\x2a\x40\xd7\xed\x95\xe5\x00\xea\x50\x80\x52\x12\x51\x00\x34\xa8\x96\x16\xb2\xef\x80\xf1\x90\x0d\x1e\xca\xb5\x52\xb1\x2e\xba\x84\x0f\x77\x1b\xad\x33\xe9\xfc\x0d\x6c\x26\x7b\xb2\x9d\x3f\x7f\x7f\x76\xfa\x72\x3e\xeb\xd0\x61\x6b\xbb\x11\x3b\x33\xd1\x06\xe1\x47\x0a\x73\x8a\x52\x88\xe3\x3d\xda\xde\x27\xdf\x5d\x5e\x9f\x4f\x4f\x9f\x6e\x3e\x72\x77\x59\x4c\x3f\xe0\x00\x34\x69\x0c\xf9\xb1\x39\x05\x61\x4c\x16\xd1\x38\xb7\x17\x22\x10\x93\x29\x2b\x13\x4c\x4a\x92\xc1\x34\x7d\x2c\x97\xd9\x9b\x1d\x7f\x97\x15\x33\xbb\x39\x57\x2b\xa5\x17\xb8\x8b\x01\xd6\x2e\xa6\x29\xe5\x7e\x0c\x53\x9c\x91\x5b\x94\x38\x6a\x03\xae\xf9\x35\x1d\xab\x03\xd6\x3b\x51\xcd\xe9\xc0\x5f\x2b\xcb\x02\xf8\x5a\x76\x95\x05\x78\x64\x9e\xfe\xbe\x8a\x03\xec\x61\x18\xf9\x84\x9f\x7f\x0e\xa4\x96\x94\xb1\xa5\x7a\x1a\xb3\x85\x72\x3e\x4b\x6a\xb3\x85\x06\xf6\x15\x39\xc4\xa2\xb4\x46\x41\xb5\xc5\x22\xba\xef\xeb\xa7\xe1\x65\x27\x55\xfb\x7a\xf5\x2e\xe1\x69\xd8\xd7\xcd\xf7\x1b\x13\x9d\x40\xc3\xe8\x2e\x96\xef\xaf\x5a\x1f\x7f\x9f\x1e\x36\x3d\xd7\xeb\x59\x6e\xc5\xce\x71\x82\xc0\x72\x86\xc3\x59\xbe\xd5\x02\x94\x64\x14\xa3\x6a\x32\x44\x24\xf7\x66\x1e\x99\x9d\x90\x09\x78\xf7\x1e\x7c\xf2\xd7\xbf\x06\x8c\xcc\x11\x48\x67\x14\x32\xf4\xd7\xbf\x06\x3c\x40\xcb\x60\x1c\xaf\x6c\x6b\xdd\xbe\xdc\xb7\x29\x1a\x73\x78\xaf\x3d\xe7\x0d\xbc\xc7\xf3\xc5\x1c\x14\x5d\x83\x37\x2f\x1b\xf9\x00\x46\x41\xb2\xc8\xad\x31\x7f\xd9\x98\x5b\xe1\x8a\x06\x92\x8c\xaf\xc9\x12\xcc\x61\xb2\xaa\x88\x44\x44\x0a\xa9\x68\x85\x6a\xdc\x3d\x87\xf9\xed\x65\xbe\xa9\x96\x64\xa7\x9e\xeb\xcb\x57\x4b\x6a\x6c\x4a\xc9\x3c\xcd\x86\xca\x91\xad\x0d\x79\x14\xfc\x6f\xfe\xcd\xff\x29\x92\x65\x25\xee\x95\x9c\x9c\x2b\x6d\x96\x4f\x94\xf9\xe7\xcd\x4a\x82\x6f\x5a\xa6\x04\x7a\x17\x8c\x81\x66\x39\x4d\xdd\x3c\x71\x18\x07\xad\xa7\x19\x9a\xed\xed\xd8\x4a\x87\xea\xe2\xb2\xa5\xf0\x80\xd9\x6b\xdc\x88\x43\xba\x27\x21\x82\x38\xbc\x7b\xf1\x39\xbe\xa6\xfb\x15\xf1\x6f\x23\xd6\x30\x9c\x88\x6e\xf6\x28\x26\x70\x7d\xfb\xe3\xe2\xfe\xd7\xb3\x17\x0f\x1d\x08\x52\xe6\x42\x5e\x9e\xbd\xcc\xcd\x1a\xc1\xb0\xfd\xac\x53\x49\xd6\x6b\x2a\xd0\xbe\x3d\x26\x68\x29\x4e\x4b\xc7\xaa\xcc\x5e\xf9\xb3\x67\x2f\x6b\x1a\xcd\xd0\x95\xc0\xdc\x4d\xc2\xdc\x35\xbc\x68\x55\x80\x60\x44\x92\x98\x9b\xdb\x2e\x3b\x38\x08\x73\xa7\x0d\x2c\xd2\x98\xc0\x08\x08\x5f\x0f\x4c\x50\x4c\x96\x45\x60\x3a\xba\x79\x2b\x91\x09\xcc\x19\xa4\x35\x12\xf4\xd9\xa9\x5e\x62\xca\x84\x94\x88\x81\xa0\x08\x2c\x71\x1c\x83\x09\x02\x0b\xd6\x38\xee\x35\xf6\x10\xd8\x01\xff\x64\x0b\xbb\xaf\x91\xea\x46\x30\x34\x2b\x73\xfe\x39\xad\x55\x91\xbe\xf1\xf9\xe1\xa1\xc6\x30\xb1\xf3\x07\xa3\x60\x26\xc7\x66\x30\x35\x06\x60\x5b\x6e\xb4\x66\x30\x8e\x01\x66\x3c\xab\x3b\x67\xa0\x3c\x3c\xa8\xdb\xab\x7b\xc2\xb3\xab\x0c\xd2\x0c\x5c\x36\x53\x72\xb6\xcd\xaf\x23\x13\xb7\x58\x3e\xba\xcb\x36\x68\xe5\x01\x18\x76\x3d\x43\xe0\x86\xaf\xb5\x5c\x43\x6b\x9e\xe6\x9e\x72\x0b\x47\x68\x02\xa9\x85\x55\x9f\x2b\xcb\x3e\x90\x85\xf0\x24\x09\x8b\x92\xf4\x76\xc0\x5a\x94\x69\x8f\xfe\x59\xe3\x5e\x06\xe9\x14\x65\x4f\xe4\x17\x0d\x10\xee\x6a\x60\xaf\xad\xb9\x8c\x1c\x18\x49\x8b\xa2\xc0\xa3\x52\x39\x27\x24\x29\xf0\x0c\x8a\x2a\x78\x29\x70\x6c\x8c\x7e\x5d\xc0\xb8\xec\xf7\xa9\xcb\x86\x1a\xf0\xc7\xe2\x19\x0a\x9c\xbb\xbd\xc5\xcd\x5b\x92\x20\xc3\xe0\x0c\xc4\x74\x8e\x7b\x42\xc8\xed\x1c\xd2\x5b\xb6\xee\xe0\xf5\x07\xb9\x67\xf0\x42\x5d\x3d\xd0\x34\xb2\xd9\x62\x3e\x59\x7b\x0e\xc5\x53\xdc\x13\xb8\xce\x2f\x4d\x20\x8e\x3d\x67\xe0\x10\xf6\x35\xdc\xc0\x78\x35\x02\x0c\x65\x40\x4e\x04\x68\xfd\x2f\x9c\x4b\x7f\x4b\x8e\x56\xd5\x06\x1f\xd6\xae\xdf\x13\xd7\xea\x47\xf8\xcb\xb3\xeb\xf9\x9f\x7e\x5d\x07\x18\x31\x21\xc9\x38\xa5\x38\xc9\xe0\xa4\x9e\xf5\xa1\xc9\x8a\x86\xe1\x79\x54\x41\xd4\x0c\x46\x41\x01\xb8\x49\x12\xbe\x35\x2d\x67\x88\x1b\xfb\xea\x6b\x8e\xb2\x19\x8c\x82\xa3\xc3\xc3\xff\xa9\x16\x8b\xb4\x25\xac\x56\x86\x0e\xc5\xc8\xb1\x48\x72\xfa\xff\xc2\x0e\x96\x68\x72\x90\x9b\x05\xb9\xb3\x96\xcd\xe3\xbf\xdc\xe0\x18\x7d\x25\x41\x45\xd3\xe8\xe6\x03\x87\x4a\x0b\xfe\xf5\x37\x42\xe6\x5f\x71\xf8\x62\x3e\x80\x3f\xe4\x7f\x7e\xe5\xda\x29\x47\x01\xbf\x6e\x4e\xa2\x96\x6b\x8b\x85\xfb\xb1\xb9\x54\x83\x7a\x64\x62\x83\xc8\x90\x0d\x51\x1c\x46\xc0\x63\x98\x64\x8b\xf9\x3e\x9d\x68\x7f\xfb\xfc\xd7\x67\x07\xc9\x77\x1f\xb6\x70\xa2\x9d\x4f\xfe\xc3\x9b\x0b\xde\x90\x18\xc1\x0c\x81\x0f\x6f\x2e\x4a\xd4\x62\x7e\x28\x06\x41\x1a\x43\x9c\x70\xe5\x08\x62\x99\x91\x2d\x0e\xb8\xbf\x3c\x28\xc8\xf7\x78\xb4\xbd\xcf\x47\xdb\x2a\x47\x49\x71\xcb\x03\xc2\xb8\x4f\xb4\xbb\x6e\xa3\x7e\x21\x3e\x43\xf5\xa0\x19\x45\x37\x12\xef\xb8\x26\x3a\x07\xea\x12\x61\x41\x06\xa3\xe0\xff\x4e\x62\x28\x5a\xa2\x2a\x7f\x51\xca\x2a\x38\x2b\xc7\xce\x75\x4d\x5b\x66\xbc\x33\xd9\xfa\xd8\x94\x6c\xdd\xa0\x80\x77\x27\x29\xd9\xd7\x9e\xc1\x79\x1a\xa3\x62\x11\x7d\xe9\x88\x07\xd7\x1e\xe2\x51\xe0\xba\xb9\xb6\x76\xc1\x15\xfa\x75\x81\x24\x0e\x82\x23\x1d\xb4\xb8\xd4\xab\xa5\xfa\x96\xe7\xf1\x81\x21\x70\x0a\x99\xcf\x3c\x3e\x30\xc4\xaf\xdc\xc7\x69\x9c\x8a\x85\xe7\x9c\xc3\xa9\x4c\xbb\xd8\xbf\x19\xe4\xca\xeb\x0e\xe7\xda\xd8\x39\x89\xe2\xd2\x7d\x9e\x07\xf8\x24\x41\x4b\x20\xba\xbb\xd8\x10\x83\xea\x93\x7a\xeb\x2e\x75\xd9\x8d\x84\x69\x3d\xaf\x9c\x52\x56\x5c\xbb\x8f\x33\xb9\xca\xf7\x44\x1f\xbd\x95\x89\x02\x79\x8f\x19\xb4\x69\x6e\xeb\xf7\x7e\x4d\x6c\x64\x3b\x5c\x53\x2f\x1b\xb9\x71\x5c\xa3\x7b\x6e\x9b\xe4\x6e\x40\x33\xff\x59\x5e\x24\xcd\x23\xd0\x12\x2c\xf3\x87\xfb\x6c\xba\xac\xbd\x37\xd1\x64\xe3\x8c\x37\xd6\xa3\x55\x8a\x28\x4e\xa1\xea\xca\xbb\x66\x0d\xda\xfa\x64\x30\x35\x07\x7d\x5a\xd4\x7c\x68\xbd\x20\x7c\x60\xfb\xcb\x67\x36\x91\xfb\x9f\x16\x52\xa1\xd7\xc5\x35\xf1\x56\x86\x64\xf5\x96\xe2\x1a\x06\x17\x6d\x03\xbe\xdf\x9e\x44\x38\x2e\x8f\x8f\x8f\xd2\xdf\x4e\xbe\xd9\x48\xeb\x07\x3d\xbe\xb1\x7f\xbd\x1f\xcc\xfc\x18\x84\xd5\x3c\xd6\xb3\x47\x3e\x7e\xf6\x6d\xf6\xcd\xbb\x59\x6e\x18\x6d\xe7\x84\x7a\x03\x5e\xf1\xfe\x39\xc1\x16\xdf\x95\xf3\x5f\xd1\x6d\x49\x61\x9a\x22\x0a\xda\x9a\x82\xba\xca\x94\x7e\x67\xad\xe8\x1a\x6b\x63\xe8\x15\xb7\x27\x9a\xf5\xdb\x0f\x5f\xbf\x3e\x3c\xbb\xff\x6d\x5f\x2b\x77\x0c\x14\x1b\x8a\x13\x8b\x18\xd2\x3d\xd2\x7e\xc7\x47\x77\xd3\x77\x57\xcf\x2e\xf7\xb6\x24\x77\x4f\xcb\x6e\xf7\x51\xe9\xda\x23\x8f\xdc\x12\xa1\x2a\xc3\xc3\xa2\x65\x37\xef\x27\x04\xaf\xdf\x5c\xbe\x7b\x7f\x0d\x4e\xaf\xbe\xb7\x1f\x6f\xcf\xc8\xf2\x35\x2f\xe8\x7d\x53\xe9\xd7\xef\xa1\xaf\x3b\x18\xd3\x0d\xa4\x07\x87\xc3\xd0\xe8\x1d\xd7\x5e\x91\x2a\xff\xeb\x68\xb0\xab\x55\xa0\x8a\xfd\xaa\x51\x7e\xda\x3a\xb9\x96\x21\xf2\x26\xf6\xc6\x11\x0a\x32\xca\x00\xef\x04\x27\x11\xba\x0f\x46\x81\xa8\x93\xca\xbf\xa4\x44\x1c\x4f\x60\x18\x93\xd6\xed\xd8\xd6\x39\xbf\xbc\x53\x7f\x5c\xb1\x3a\x3b\x62\xda\x88\x67\x6a\x07\xbc\x5d\x2b\xb5\xc4\x03\x66\x08\x46\x15\x03\xfc\xf4\xea\x7b\x70\x4d\xc0\xb5\x3a\x77\xec\x0c\x9b\x2a\x9e\x2b\xb6\x22\x77\xb5\x4a\x0b\x60\xc8\x8a\x2f\x8b\x1a\x64\xc8\x5b\x92\xa1\x2f\x01\xba\xc7\x8c\x77\xfe\xe2\x5b\x11\x88\x60\x06\x8b\x4c\x32\x8a\x78\xce\x4e\x3d\x9b\x6c\xab\xb9\xf2\x21\xbb\xe3\x3d\xdf\xf5\x63\x01\xc8\x32\x94\xaf\x69\x70\x26\x7f\xf0\x4d\x97\x6f\x29\x3f\xaf\xa3\x04\xf1\x50\x0d\x07\xeb\x52\x2f\x97\xca\x5c\x14\xfd\x8b\xb7\x36\x51\x81\x8e\x0e\xdd\xa5\x6b\xeb\xe5\xa7\x9f\x92\xf9\x9c\xa3\x49\xc5\x78\x8e\x73\xf3\x10\x40\x8a\x00\x5b\xa4\xf9\xb0\x7c\xf8\xb4\x5d\x2e\x56\x72\x15\xdf\x93\x25\xf8\xba\x58\x1e\xbe\x1c\xbb\x1f\x67\x64\x3a\x8d\x51\xd3\x12\xe7\x6a\x75\x14\x64\x33\xc4\x9b\x44\x91\xe4\x5a\x5c\x58\xec\x0f\x82\x59\xda\x91\x7b\xfe\x6e\x01\xef\x39\x47\x11\x5e\xcc\xcb\x4d\xa6\x6d\x6b\xe0\xdf\xcf\x17\x59\xe0\x7c\x66\x91\xd8\xe2\x17\x26\x5d\x4f\x0c\xce\x13\xbe\x56\xf1\x8d\x4c\x4d\xa3\x64\x09\x64\x15\x2b\x03\xc5\x98\xd6\xa8\x58\xe8\xa9\xa5\x6e\x08\x69\x09\x61\xad\x1f\x1f\x8e\x30\x9b\x63\xdd\xeb\x72\xc6\x87\xdb\x6b\x25\x95\x3d\xd4\x96\x9f\xdb\x32\xe6\xa7\xd5\x31\x8f\xa7\xb9\x4b\xb7\xdb\x70\xb8\x5f\x6d\xa8\x30\x6d\x1c\xa1\x51\x75\xd1\xe0\x61\x72\x9f\xd0\xf3\xd6\xbc\xde\xba\x57\x64\xf6\xb6\xfe\xc7\x1a\xde\xd6\x9e\x78\xbe\x3f\x5d\xc5\x93\x1f\x2e\x3f\x3b\xdc\x63\xcf\xb7\x49\xb3\x61\x7c\x5f\x9a\x5b\x3b\x7b\xe4\xfa\x3e\xc5\x9f\x1e\xa6\xb3\xe3\xef\xcd\x2d\x5f\x63\xcc\xb2\x61\x5b\xbe\x5e\x73\x02\x04\x23\xf9\x87\xca\x35\xbf\xc3\x6c\x01\x63\xb0\x84\x2b\x90\x11\x30\x87\x09\x9c\xa2\xa2\xfe\x3d\x27\x83\xe8\x59\x2e\x5b\x47\x20\x00\x93\x55\x36\xcb\x2d\xc3\x02\xd9\x42\x50\xf6\x77\x9f\xf7\xa3\x1a\xcb\xec\xa5\xeb\x1d\x34\xca\xe0\x05\x57\x0a\xf8\x56\x4b\x25\x7c\xaf\xf2\xf9\xea\x4d\x09\x79\x41\x20\x8d\xfc\x7b\xd8\x05\xcd\x84\x97\x1f\xc9\x02\xcc\xe0\x1d\x02\x09\x01\x19\x82\x73\x30\xe1\x8f\x14\x98\xf6\xb9\x41\x3b\x06\x29\xa2\x8c\x17\x62\xca\x9f\xf2\x6f\x13\x74\x87\x28\x47\xbd\x37\x1e\x49\x74\x01\x7b\xda\x3c\x96\x3d\xa7\x92\x87\x0d\xb6\x9d\x0e\x37\x82\x8a\x8d\x0e\x37\x13\xc5\x4a\x9b\x5c\xf2\x99\xf8\x57\xea\x4e\xc4\xc4\x7b\x1a\x10\x9b\x60\x4c\xe9\x4b\x42\x4c\xe5\xa1\xc0\x7c\x82\xa2\x71\x48\x0c\xbd\x16\x2e\x44\x0f\x80\x7e\xae\x92\x4a\xba\x13\x4b\x72\x3c\x21\x86\x86\x83\xb9\x19\xc9\x7f\xb8\x12\x08\x74\x7e\x3e\x95\xe7\xcb\xc6\x62\x4f\xd0\xda\x14\x1a\x98\x23\x39\xa7\x31\xa8\xd9\x7b\xb0\xd2\xba\xb2\xd1\x20\xa1\x5f\xfb\x4a\xf7\x1c\xe4\x5e\xd8\x8a\xfa\x21\x5a\x21\xe2\x24\x8c\x17\xd1\xda\xad\x10\xb1\xe2\x8c\x1c\x8c\x48\xbf\x36\x8c\x68\xac\x9a\x88\x80\x28\xdf\x63\x81\x65\xef\x3b\x95\x57\x9e\xca\xb6\x25\x5a\x06\xf5\x9a\xfa\x6a\xfb\x73\xe8\x30\x78\xf5\xa3\x75\xac\x2c\x85\x49\x23\x56\xac\x8d\xb0\x21\xba\x82\xdb\x16\x59\x6d\x7d\x5b\x6b\xc5\x7d\xbe\xba\x8b\xf9\x15\xaf\xc0\xc6\x1e\x9c\x9d\x3a\x53\x5a\xa5\x3c\x8c\x11\xa4\x37\xb8\xc0\xf2\x18\xc2\x2f\xf7\x45\xf0\xdd\x00\xaa\xfc\x7e\x22\x17\xf5\x25\x48\x3b\xce\xff\xab\x98\x4c\x60\xbc\x03\xb4\xff\xfe\xac\xe9\x74\x38\x52\x22\xfe\x4b\x47\xc1\x86\xf9\xdf\x11\xa0\xde\x1b\x7c\xbf\x0b\xba\x7e\x58\x1f\x70\x57\x38\x7d\x8b\xea\xda\x56\x08\xa2\xe1\x9c\x0e\xee\xf3\xee\x49\x00\xe2\xc3\x8f\x5f\xcc\x3e\x3d\x48\x3f\xdf\x50\xd9\x96\xb6\x46\xdc\x81\x8b\x0d\x26\x30\x99\x28\x3f\x08\x4b\xe5\x91\xde\x1e\xc5\x31\xb2\x67\x17\xff\xfe\xee\x97\x37\x3f\x3d\x1e\xe1\x3f\xfc\x23\xfc\xfd\x3e\x77\xde\x8e\x2e\x36\xac\xb0\xe1\x57\xee\x9e\x68\xe3\x4f\x0f\xbf\x8f\xfe\x74\xf2\x3c\xf5\xd6\xc6\x2c\xa4\x38\xcd\x94\x42\xe6\xe9\xa2\xc1\x41\x4a\x31\x9b\x8b\x7f\x9f\xfc\xc2\x0c\xe6\xac\xbf\x4a\xde\x18\x23\x07\x52\xc2\xd9\x22\x3d\x50\xd7\x8c\xf9\xc7\x1d\x73\xf0\xeb\xf9\xe1\x67\x77\x47\xdf\xac\x95\x24\x8c\x73\xa3\x30\x8e\x0d\x67\x74\x41\x35\x43\xb8\x64\x39\x64\x0c\x65\xec\x00\xcf\xa7\x92\x28\x3c\x16\x9d\x2e\x68\x1a\xa3\x27\x69\xa2\x5f\xce\x78\x15\x9f\xf5\x8e\x7f\x3b\xbe\xd7\x6f\x82\x71\x7e\x47\x61\xf6\x5d\x71\x32\xab\x07\x8a\x78\x89\x28\xac\xfe\x12\x1c\x3f\x3f\x4c\xef\xff\x0c\x14\x08\xff\xe7\x9f\xa5\xf7\x7f\x36\xfb\x53\x41\xbf\xae\x2b\x92\x02\xb3\x23\x73\x0a\x05\x3f\x67\xae\x65\x50\x94\xe3\x6d\x0c\xc0\xd1\xbc\xe5\x4f\x95\xe7\x14\xca\xf2\xbd\xc0\xc7\xc9\x66\x48\xa5\x6c\x9b\x0a\x29\xd9\x97\x07\xb9\x68\xb2\x27\x4a\x3e\x79\x39\x25\x3b\xf8\xfe\xb7\x77\x5f\xfc\xf4\xeb\x9b\x77\xa7\xd3\x93\x17\xaf\x56\x37\x3f\x1c\x48\x76\x73\xa7\x63\x3c\x5d\xe0\x08\xb1\x83\xe8\xe0\xfb\xa3\xcf\x2e\x0e\xff\xb4\x08\xef\x97\x27\x2f\x66\x3f\xbd\xfc\xcc\x70\x99\x36\x36\xfd\x47\x90\x7f\xa0\x8b\x50\x3a\x31\x06\x57\x15\x26\x11\xa0\x28\x24\xf3\x79\xbe\x0a\xa3\x4d\xce\xe2\xf8\xdb\xc5\x9b\x3f\xbd\x3e\x0d\xbf\x3b\x79\x01\xa7\x6f\x9e\x1f\xcc\x57\xec\xd7\x78\xcc\x52\x14\xe2\x1b\x1c\xf2\xb4\x0d\x6e\x77\x64\x8b\x04\x27\x7a\x86\x91\xfa\x05\x88\x5f\x40\x31\x63\xc7\x21\xe5\xfa\x49\x5e\x6d\x98\xb3\x6b\x84\x3c\xdb\xa2\xd0\x38\x43\x40\x61\xc3\x78\x15\x2e\x75\x82\x7a\xe6\xeb\x7a\xac\xce\x9f\xf4\xce\x59\x73\x12\x71\xab\x4b\x06\x73\xa4\xa5\xa2\x39\xd8\x33\xc8\xae\xf3\xdf\xce\x29\x25\xb4\x91\x45\x03\x70\x3e\x92\x3b\x18\xf3\xf7\xd7\xc0\x63\x7c\x20\x8b\x7b\x66\x54\x7c\x60\x0b\x18\xc7\x0a\xda\x9d\xcc\x53\x98\xac\x00\xa1\xe2\x78\xa2\x95\x8e\xad\x5f\x0e\xc4\xcc\x32\x72\x2d\x08\xce\xb3\x3d\x6a\x88\x3f\x2f\xf5\xef\x1c\x9c\xee\xc1\xe3\xf2\x95\x66\x3e\x6b\x43\x32\xf2\xba\x18\xde\xd0\xfc\xde\x36\xed\x63\xd8\x20\xfd\x05\xdc\x24\xe5\x8b\x17\x9a\x09\x5f\x8e\xc7\x48\x77\x35\xb6\x87\x4e\x76\x34\x87\x58\x57\x6c\xe7\xea\xf3\xf0\x04\x17\xaf\x1a\x05\xf2\xbf\x55\x72\xcb\x71\x18\x69\xcd\xc7\xf4\x70\x09\x9d\xa0\xe5\xb8\x40\xe9\xaf\x64\x59\x16\x5f\x0d\x49\xec\xca\xeb\x9a\xfd\x01\x14\xc1\xcb\x11\x19\x69\xae\x46\xb7\x5f\xdb\xc8\x25\x0e\x6f\x01\x23\x73\x24\x12\x27\x58\x46\x89\xec\xe8\xbb\x48\xf0\xaf\x0b\x04\xb2\x19\xcc\x38\x42\x75\x44\x92\xbf\xfe\xaf\x0c\x2c\x18\xcf\xb3\x58\xce\x10\x45\x00\xc5\xcc\x6b\x9f\xa9\x9e\x89\x7d\x31\x0a\xd0\xaf\x05\x69\x0a\x79\x8d\x70\x59\x0e\x5b\x0f\x08\x5f\x52\x12\x2d\xc2\xdc\xf4\x3e\x4f\x32\x44\x73\x7f\x0e\x9d\x17\x37\x54\x52\x19\x7b\xf6\x4c\x5a\xaf\x45\x28\x0c\x33\x7c\x27\xec\xbd\x5b\xa4\xe7\x3d\x9f\x14\x3f\x38\x9a\x59\x04\xde\x39\xbf\xb2\x2c\xbb\x94\xcf\xda\xcb\x6b\x62\x59\xfe\xca\x07\xf0\x71\x14\x3c\x0f\x4c\xf2\xf9\x2d\x5a\x6d\x40\x34\xd7\x93\xce\x1f\xc9\x02\x84\x30\x01\x53\x94\x01\x9c\x09\xa8\x1f\x87\x81\xbe\x5c\x2e\xab\xf6\x79\x44\x96\x49\x4c\x60\xc4\x82\x8f\x2e\xf4\x16\xcf\x67\xd8\xf0\x5c\x7a\x21\x60\xdb\x4e\x4d\x8a\x2e\xa8\x1e\x27\x5b\x2d\xc7\x56\xb6\xe3\x2d\xf1\x3a\x71\xb0\x65\x3b\xc9\x62\xf0\xce\x0e\x48\x10\xb4\x1f\x62\xca\x7b\x3d\xba\x6f\xf4\xf5\x59\x36\x14\x2f\x6f\x46\x54\x06\x08\xd1\x70\xfb\x73\x4c\x17\xc9\x8e\xa3\x33\xef\x6e\xbf\x7f\x79\x70\x8c\x8f\xfa\x44\x67\x84\x26\x50\x13\x19\x57\x6a\x67\x06\x29\xa8\xb1\xc3\x90\x76\x2e\xa7\xa9\x21\x2c\x76\xab\xa6\x31\xe0\x4e\xfa\x57\xd3\xbc\x42\x19\xaf\x55\xe1\xa0\xb4\x46\x94\x63\xdf\x47\x37\x0b\x6a\xea\x30\x94\x41\xf3\x90\x32\xba\xc9\xff\xdf\xf1\xd6\x9e\x03\x32\xe5\xce\x9b\x86\xb4\xb9\xe4\xf9\xfa\xf1\xf0\x2b\x92\x6f\x13\xff\x12\x38\x40\xac\xbb\x21\x73\x1a\x4c\x99\x0d\xa9\x9a\x62\x41\xad\xa7\x65\x72\x95\x29\xff\x33\x96\xe4\xdc\xa9\xa2\xf9\x35\xfb\xf1\xe0\xfc\x34\xea\xd0\xfb\x2e\xe7\xb7\x12\x84\x6a\x32\xcd\x20\xc4\x6e\x10\x68\x40\x7a\x63\x96\xed\xfa\x14\xfb\x7a\xf2\x2e\x7b\x7a\x65\x26\x77\xf0\xff\xb1\xf7\xac\xdb\x6d\xdb\x4c\xfe\xf7\x53\xd0\xdc\x3d\x2a\x51\x52\xd4\x35\x4e\x62\x99\x4e\x5d\xc7\x69\xfd\x35\x71\xf2\xd9\x4e\xfb\x25\x92\x9a\x43\x93\x90\x84\x84\x02\x14\x12\xb2\xe3\x5a\x3a\x67\x1f\x62\x1f\x60\x9f\x65\x1f\x65\x9f\x64\x0f\x2e\x94\x78\x95\x28\x4b\xb6\xb2\x7b\xda\xf3\x7d\xb1\x48\xe2\x32\x98\x19\x0c\x06\xc0\x5c\x38\x98\x69\xe3\xed\xec\x79\x7e\x8d\xc2\xa8\xcd\x41\x52\x29\xbe\x9f\x43\xad\xdc\x07\x08\x51\x40\x09\xf1\xae\xec\xa8\xf9\xb4\xed\x7f\x89\x88\x02\xdf\x46\x01\x74\xb9\x4c\xf0\xe5\xbd\x8c\xef\x42\x5f\x08\x51\x4e\x7c\x23\xe7\xdf\x25\xc6\x2a\x29\xa1\x24\x21\x29\x73\x7b\xf4\xb9\xd2\x2d\x8c\xcb\x42\x09\xc5\x0a\x89\x14\x0a\xf3\x88\xc2\x8b\xcd\x8a\xa4\x75\xda\xcf\x8c\x0c\x41\xf6\xbe\x26\xe9\x06\xc4\x63\x5d\x79\x70\x16\x24\x2a\xb2\x4f\x62\xc4\x78\x09\x71\xc0\xa3\x8f\x75\x0d\xb5\x56\xe4\x6a\xf5\xe2\x06\x51\x67\xf0\xbb\x48\xd3\x5c\x2b\xb8\x95\x7c\x44\xdc\x1c\x79\x5e\x71\xc4\xf4\x88\x4f\x97\xe3\xa5\xbe\x32\x5e\xea\xeb\xe0\x45\xca\xa9\x10\x31\xa1\xd8\x2a\x8a\x19\xf5\x7f\xfe\xe3\x3f\xb3\x2c\x1b\x33\x19\xc3\x76\x0a\x8c\xbf\xb1\xf2\xf8\x1b\xab\x99\xa8\xc5\xf7\x30\xa9\x2d\xed\x46\xa2\x51\x8d\x53\xea\x64\xae\xa1\x6d\xcc\xee\x37\x14\x56\xab\xdb\xbe\x19\x62\xc3\x2c\x76\xd4\xc2\xba\xc2\x94\x2a\xab\xc0\xa3\xcf\x28\x11\x31\xe9\x95\xe7\x3c\xe2\x29\xf0\xc6\xfd\xc8\x41\x44\x21\x63\xb9\xa7\x0c\x96\xe4\x30\x11\x85\xf7\x4d\xf2\x87\x70\x8f\x2c\xac\xba\xb0\x76\xe2\xa4\x38\xcf\x90\xd9\x21\x0b\x2c\x0b\x97\x5b\xd4\x66\x81\x2d\x9d\x80\x16\x81\x9d\x3f\x0d\x59\xed\x32\xd3\x00\x12\xb2\xa9\x9b\x86\xb9\x80\x87\xeb\xfd\xf7\xf1\x39\x70\x66\x1b\x04\x2f\xa2\xce\xa2\x53\x33\x4c\x68\xb9\xc8\xcc\xdf\x98\xb1\x3b\xf7\xd3\x4a\xd9\x37\x8b\xb7\xb1\xe1\xfc\xf7\x7f\xad\x80\xb4\xbc\x93\xc0\xdc\x15\x6e\x63\xe3\xe1\x8c\xb2\x94\xc9\xb9\x0c\x3f\x5d\xcb\x58\x5f\xf2\x68\x96\x2e\x1e\x5b\x29\x82\x70\xcb\x73\xea\xce\xd7\x49\xf9\x25\x22\x5e\x22\x10\xdd\x43\x44\x6f\x98\xc3\x57\x38\xdb\xdd\x08\x45\xf3\xc9\xc9\x2a\xa7\x34\xd3\x95\x18\x82\xb5\x50\x4c\xf8\x2c\x90\x9c\x22\x1b\x4c\x6a\x9a\x38\x64\x8c\xe9\x71\x78\xa2\x50\xdc\x1d\x60\x61\x67\xc9\x6b\x73\xb6\x5e\x2c\xcf\xab\xb9\x34\x96\xc2\xf6\xf1\x64\x53\xd8\x27\x3c\x3f\xeb\xc3\x20\xca\x11\x1d\x20\xb8\x19\x6c\xdd\x7f\x06\x15\xae\xb9\xd4\x9b\x23\xad\x7a\x3d\xcc\xe1\x44\x72\x83\xbb\xd6\x76\x79\x8c\x2a\x70\x38\xa2\xb7\xe5\x40\xc6\xc2\xdd\xe6\x5e\xb9\x72\x6d\xd7\xcf\x2f\x2f\xe8\x3a\x16\x6a\xd1\xd1\xe4\xd9\xa8\xa9\xdd\x0c\x9f\xa7\xb9\x5b\x53\xc3\x50\xfb\xde\xed\x88\x0e\xd4\x4c\xff\xa5\x0c\xff\x03\x69\x9f\x3a\x84\x41\x20\xf2\x5c\xe5\xf8\xc5\x6d\x9c\x19\xe2\xe4\x5b\x97\x13\xf8\x24\x2d\x0b\x2b\xb3\x11\x72\xbe\x6c\xdd\xe8\xf4\x02\xdd\xfe\xec\x38\x57\xcf\xb2\x0f\x4f\xc4\xa6\xae\x20\x5f\x64\x8c\x6d\xe9\xf6\x85\x97\x2e\xe2\xae\xa8\xa6\x6c\xa1\x63\xac\xc5\xdb\x51\xe2\xd7\x7c\x72\xa3\x12\xee\x42\xf9\xc5\xcc\xec\x61\xbe\xff\x8b\x7b\x7e\x3e\xe7\x76\xec\x8e\xcd\x0f\xb5\xae\x6c\xe7\x4b\xdf\x27\x63\xec\x8a\x61\xed\x2b\x6a\x44\x88\x0b\x63\x73\xb5\x95\x99\x31\x69\x0e\x75\xae\xa3\xdb\x85\xf4\x25\x4e\xb4\xb8\x8a\x93\x5b\xad\xba\x29\x1e\x4f\x13\x6f\x5d\x56\x17\xd6\x98\xdf\x05\x93\x37\xdf\x1f\xbf\xb7\x9b\x5e\xb6\x65\xb5\x0c\x4f\x54\x34\x86\x6f\x74\x54\x4b\xd9\x9b\x97\xde\x00\x7b\xf3\x76\x1e\x95\xbd\x47\x3e\x1a\xda\x22\x7b\x7c\x2e\x77\xaf\xb4\xed\x5b\x69\x2a\xc8\x86\xb6\x33\x15\xa2\x24\x5e\x77\x12\x8c\x51\xd9\xbe\xb6\xa9\xbd\xed\x19\xf0\xf9\xe5\xbf\xbe\x8c\xea\xe4\x8f\x75\xd6\x7d\x39\x90\x6e\xc4\x15\x85\x33\xa7\x78\x5f\x96\xeb\xba\x0f\x7b\xa7\xae\x9a\xcc\x4a\x95\x38\xc9\x08\xa0\x5f\x46\x18\x51\x64\xb3\x0d\xa1\x9c\x2c\x09\x3b\x45\xb1\x31\x9c\xbd\x09\xcf\xf8\x32\xef\xe1\x9b\x86\x6a\x53\x6a\x3b\x83\xf2\xec\xf8\x71\x66\x4e\x30\x20\x37\x2f\xe1\x2c\x1b\x64\xb5\x9a\x71\x56\x25\x95\x8b\xa8\xed\xe6\x4c\xbd\x10\x9f\x22\xa6\x85\xb3\x7b\x99\x45\xda\xef\x83\xe9\x22\x33\x86\xda\x00\x67\x46\x62\x64\x6d\x39\x7d\x9c\xbe\xf7\xf6\xf4\xfc\xe5\x55\x21\xee\xdc\x1c\x22\xe7\xe3\xdf\x18\x32\xb7\xad\xcd\xdd\x1e\x7d\x0d\x9e\xdc\xe6\x5c\x85\x95\x64\x83\xe9\xb5\xae\x99\xb4\x8d\x3a\x2d\x70\xec\x59\x5c\xd7\x67\xbf\x65\x36\x9c\xc2\xb1\x16\xe4\x6c\x5a\xb2\xd7\x65\xfd\x4a\x1b\x77\x39\x4f\x43\xbb\x9e\xe7\xd1\xc9\x2b\x4a\xe7\x6d\x19\x9e\x18\xb5\x0d\x4e\x4f\xc1\x08\x1b\xe0\x28\x67\x1e\x04\x61\xab\x6e\x69\xfa\x7b\xe4\xbe\x45\x64\x55\x9e\x5a\xa0\xce\x44\x06\xa7\xa4\x4d\xf3\x62\x2a\x4d\xa4\x68\x39\x53\xbd\xc9\x3b\xd9\x4c\xb4\x54\x50\x01\x5b\xc6\xcc\x85\x63\x8a\x18\xaa\x12\xeb\x7d\xbd\xf8\x22\x9b\x81\xee\x3e\xd1\x42\x16\x5f\x79\xcf\x76\xe7\x6c\x0a\xa5\x26\x56\xae\xba\xc7\x01\x52\xb3\xb4\xbb\x0d\xcd\xc1\x90\x65\x36\x30\x0b\xa5\xd1\xd5\x76\xe7\x20\xfe\xf0\xc6\x79\xf7\x71\x7c\xb4\xde\x1c\x9c\x79\x0f\x4b\xab\xaf\x07\x08\x0a\xbd\x64\x1f\x13\xb5\x63\x0b\x17\x07\x71\x3d\x3a\xcb\x4a\x5d\x20\x4a\xf4\x82\xeb\x8e\x02\x21\xa2\x97\xd5\x8e\x5b\xb4\xc9\x25\x24\x0c\x7c\xb3\xe8\xa4\x76\x59\xc3\x8b\x03\x44\xab\x71\xff\x33\x91\xf6\x3b\xb4\x85\x2d\xee\x4b\xbe\xe0\xc4\x5a\x51\xe7\x33\x35\xc7\x1c\x7b\xc5\xb4\x5a\xeb\x04\x9a\x4d\x5d\x6c\xae\x6a\x28\x77\x9f\x7c\x64\xb2\x18\x77\xd4\x8f\x64\xa3\x5a\x16\x30\x20\xee\xd9\x5f\x20\x6c\xda\x3d\x22\xd1\xde\x1b\x1f\x29\x2c\x88\x8a\x62\xfc\xa9\xd0\x3e\x3d\xe4\x0f\x8b\xe5\xe1\x4a\x06\x29\x58\x6c\x29\xb2\x72\x44\xd9\x07\xdc\x20\x09\xf9\xb2\x01\xd9\x1f\xb9\x6b\xdf\xaa\xf8\xff\xbd\xd7\xfc\xd7\xc7\x5f\xbd\x8b\x47\xde\x1f\xcd\x86\xbf\x01\x54\xf2\xf0\x61\xdf\xc5\x61\xa0\xf3\x79\xf4\xec\xf8\x63\x23\xfb\x28\x24\x34\x47\x29\x74\x20\x72\x83\xdc\x3e\xa4\xb1\xa1\xe5\xac\x87\x69\xeb\x1e\x11\x0e\x52\x5c\xcd\x3d\x8f\x47\x1e\xe4\xbf\x8f\x83\x40\xcd\x54\x6f\x63\xe7\x8b\xf2\x32\x74\x05\x47\x20\x2f\x5b\x87\x14\xe0\xdc\xf3\x84\x71\xd5\x3c\x0c\x73\xf7\x17\xea\x8f\xb1\x13\xb9\x47\x92\x02\x90\x7b\xab\x84\x00\xcc\x0e\x83\xb0\x3d\x84\xaf\x10\xf4\xdc\x8c\xd3\xa0\xdc\xeb\xf9\xd4\x18\x0a\x5f\xc4\xaf\xa7\x73\x5f\x72\x91\xbc\xf2\x76\x37\x49\xb1\x5c\x15\x5a\x46\xd2\x37\x66\x48\x5a\x3d\x36\xde\xe3\x09\xe4\xc8\x0c\xd9\x80\x28\x91\xda\x14\x5f\xe5\x82\x6d\xfb\x94\x7c\x7b\x8a\xfc\x2f\x64\x65\xc5\x7c\xc3\x67\x0e\x31\x94\x6c\x0a\xc5\xdb\xce\x0b\xd6\xbb\xba\x79\x75\x13\x64\xe7\x05\xfb\x7b\xcf\xf3\xff\x65\xcf\x93\xbd\x21\x79\x90\x5d\xc7\x77\xa7\xa8\x72\x98\x37\x30\x5d\x47\x3e\xe9\xfb\x30\xd8\xb6\x30\x7c\xf2\xf2\xf3\xed\xf8\x8f\xca\xb0\x78\x00\xab\xeb\x99\x37\xdb\xb7\xa1\xc7\x84\x39\xf7\x48\x95\x0e\xa9\x37\x0d\x93\xf8\xfd\x4a\xbd\x5a\xad\x56\x58\xc9\xdc\x8f\xbc\x6e\x25\x6c\x89\x07\x23\x52\x0d\xb5\x51\x0f\xdf\x88\x80\x44\xb1\x57\x3c\x29\x31\x61\xb3\xbc\xaa\x54\x95\x46\x5d\x11\x9f\xb2\xe6\xf5\x3c\x7c\x12\xf5\xc9\x17\x58\xf6\x10\x86\x8e\x3d\xe2\x7e\xc9\x63\xec\x66\x7c\xfd\x4c\x10\xce\xf9\x1c\x02\x37\x03\xa4\x87\x3c\xb6\x89\xfb\xb7\x1a\xff\x2f\x5e\x3a\xfe\x3e\x47\x22\xf4\x93\x13\x01\x3b\x65\x8f\x90\xd1\x27\x97\xd0\xa0\x5c\x7d\x52\xce\x18\x59\xac\x01\x07\xf9\x8e\x4c\x7c\x55\x13\x91\x77\xca\xe1\x56\x53\x98\x03\x24\x61\xc5\x04\xc3\xc4\xb0\x78\xa6\x23\x9e\xf0\x48\xe6\x58\x92\x20\x31\x04\xd7\xf6\x66\x8f\xb7\xb1\x47\x5f\x5a\xe2\x0b\xb9\xeb\xdb\x38\xe0\x87\x1f\xf2\x37\x67\xab\xaa\xd2\x30\x1b\x7b\xcd\xaa\xfc\xaf\xd6\x78\xfe\x14\xa8\x0b\x22\xf4\x66\x0e\x29\x17\xec\x3c\xbc\x2f\x1c\x4e\x73\x9d\xd1\x3c\xf9\xde\x46\x53\x7f\xb6\xce\x70\x6a\xc5\x87\x93\x2b\x7b\x63\x71\xec\x24\x97\xee\x86\xa2\x4b\xd1\x80\x72\xa7\xcc\x9e\xa8\x46\xd9\x33\x1d\xa0\xc0\x84\x1e\x17\x25\x8a\xa5\x50\x43\xbc\x61\x0c\xaf\x58\x4a\x3b\xfa\xd9\xec\x43\x7a\x22\x7e\x06\x3f\xdf\x5e\xda\x7d\x26\x9c\xb5\x4e\x47\x22\xb5\xd3\x51\x41\xbb\xd6\x35\x94\x55\xeb\x54\xef\x51\xa7\xde\x0d\x2b\xd9\x18\x0d\x79\x80\x82\x53\x57\xbe\x09\xa8\xed\xb3\xb1\xf0\xbd\x89\x78\x85\x30\xa2\x1a\x50\xa6\x0a\xea\x29\xda\xee\x0d\xc2\x2e\xb9\x31\x7d\xf8\x75\x0c\x03\x7a\x14\x36\xf0\x8a\x29\xf8\x0c\x27\x4c\x3c\x23\xd9\x40\x4b\x59\x54\x5a\xb1\xe6\x08\xd5\xa8\xa1\xe0\xb0\x3a\xfb\xa2\x61\x78\xa3\xbc\xb4\x29\x04\x6c\x44\x97\x68\x08\x35\xd0\x52\x90\x32\x99\x28\x1a\x6b\x1e\x82\x16\x2f\x6b\x2b\x96\xf2\xc6\xa6\x03\x73\x68\x7f\xd3\xaa\x86\x52\xdb\x53\xca\x8a\x06\x95\xb2\x82\x00\x30\x14\xa2\x58\x21\x0c\x81\x68\x86\x8c\xa9\x16\xa7\x2a\xd5\xa0\xa2\x2b\x36\x50\xa6\x86\x62\x83\x96\xe2\x43\x3a\xf6\x31\x1f\x04\xff\xc0\x5a\x99\x2a\x53\x85\x9a\x23\x9f\x50\x42\x6f\x47\x90\xe3\x24\x06\x7f\x08\x3b\xe7\x83\x01\x0a\x5a\x29\x04\xcf\x21\xc9\xc4\x86\x46\x4d\xea\xa3\x7e\x1f\xfa\xb3\xf7\x26\xd3\x00\x35\x0a\x38\x64\xd1\xde\x7d\x18\xc0\x65\xdd\xcb\xbe\xc4\x11\x63\xaa\xab\x08\x5c\xa9\xd6\x93\x60\xc4\xe9\x14\xa5\x71\x64\xa0\x82\x6f\x18\x75\x62\x6c\x44\x25\x99\x58\x23\x54\x29\x47\xca\x1a\x9c\xcc\x82\x74\x08\x6b\x58\xa9\x28\xcd\xaa\xa1\xd4\x1b\xa0\xa5\x3c\x6f\x54\x95\x43\x05\x67\x34\x37\x7f\xd0\x59\x29\xd0\x52\x7a\xc4\x57\xb4\x90\x13\xda\x5d\x41\xf2\x6a\x4b\x69\x28\x87\x0a\x69\x29\x44\xd7\x19\xc4\x76\x9b\x74\xa3\x9c\xc2\x18\xa4\xae\xfc\xa8\x10\x43\x61\x8d\x30\xce\xe6\x45\x0e\x95\x67\x40\xfe\xb4\x04\x2f\xb1\xdf\xa0\x95\x6a\x80\x3d\xb3\xba\x91\x29\xdf\x26\x5d\xc6\x64\x47\x94\xfa\xe8\x6a\x4c\xf9\xac\x9b\x09\xac\x4e\x47\x35\x94\xf0\x85\x94\x5a\x9d\x8e\xca\xf8\x8b\xb5\xac\xb3\x07\xc0\xfe\xdf\x92\x13\x2d\xd4\xc1\xcd\xf0\x87\x9c\xd5\x66\x98\xbc\x4d\x8b\x4e\x7b\x00\x16\x33\x17\xca\x61\x2e\xc4\x98\x6b\x4e\xa2\x59\xa7\x31\x29\xc2\x6f\xcc\x43\x39\x92\x5e\xd5\x19\xd4\x82\x9a\xed\xae\x40\x25\x06\x71\xb2\x54\x5b\x0a\x36\x3d\x88\xfb\x74\xa0\x1c\x2a\x76\x4b\xb1\x75\x1d\x44\x64\x2b\x62\x24\x82\xe6\x68\x1c\x0c\xf8\xbc\xa7\x1a\x6e\xa3\x2e\x03\x4d\x63\x13\x72\x06\x95\xed\xba\x27\xd7\x3c\xb2\x6f\x40\x21\x86\x3e\x83\xe7\x1a\x05\xe8\x0a\x79\x88\xde\x3a\x3c\xef\x08\x47\x74\x7c\x62\x74\x3a\xea\x00\xb9\x2e\xc4\x0c\xe1\x56\x64\x94\xf3\xba\x17\x4c\x23\x54\x5e\x28\xd0\xec\x11\xff\xc4\x76\x06\x5a\x82\xe5\xa9\x98\x74\x4c\x0e\x02\x65\x7f\x51\xb9\x50\x5c\x8a\xff\x69\xa0\xb5\x4d\xc5\x3e\x54\xc8\x37\xa0\xdb\x87\x19\x67\xb6\xaa\xd9\x7f\x7b\x76\x56\x7f\xfd\xdb\xf5\xb7\x15\xcf\x4c\x25\xec\x59\xbb\xe2\x58\xbc\x9d\x70\x8b\x1e\x04\x51\x2b\x11\x56\xc7\x87\xb6\x4b\xb0\x77\x3b\x33\x2e\x93\x8f\xcb\x6e\xfe\x47\x3e\x19\x8e\xe8\xc2\xe3\xbe\x44\xd4\x07\x32\x0a\x23\x50\x73\x35\x18\x05\xf6\x95\xc7\x7d\x57\x43\xf0\xe7\xee\xac\xe2\x8c\x34\x28\x63\x42\x13\xa6\x06\x89\xe8\x4c\x0b\x62\x6a\x84\xf1\x96\x25\x9c\x39\x81\x1b\xb2\x58\x34\xdf\xc7\x2c\x99\x10\x46\xfa\xe1\x70\x2f\x54\x19\xa4\x49\xfd\x09\xb9\x10\x53\xe9\x9e\xb4\x12\x56\xea\xb3\x80\x4c\x7c\xfc\x8c\x14\xe5\x11\xcf\x64\x94\x3a\xa9\x4d\x66\x3f\x8a\xa2\x24\x1b\x95\xf0\xeb\x98\x1f\x38\x25\x5b\xba\x0f\x5a\x0b\x01\x37\x4f\xc4\x94\x67\x5a\x98\x17\x39\x63\xe1\xc9\x6a\xce\x79\xad\x13\xe6\x66\x9a\x87\x04\x0a\x5f\x3d\xa0\x15\x84\x40\xde\x26\x64\x50\xe8\xd0\xbc\xd5\xd0\xf6\x4f\x5f\xda\xe7\xaf\x9e\x9c\x3f\xf2\x25\x98\x18\xfb\x06\x90\x18\xfa\xcf\x7f\x17\x86\x82\x47\x7f\x5c\x5d\x9c\xdf\x7e\xc8\xce\x13\xf0\xb7\xa1\xe0\xa3\x18\x0a\xc6\x19\x62\x83\x1c\xe6\xa2\x6b\xe4\x6e\x7d\xbe\xfe\xf5\x6b\xef\x1f\xb4\x72\xec\x3f\xf2\x7c\x4d\x20\x61\x93\x68\x9d\xa7\xe6\xdb\x26\x5e\xdf\x7c\xf9\xeb\xe9\xdb\xe1\xd0\x59\xe3\x5e\xe4\xa1\x26\x48\xf4\xda\x95\x7b\x06\xf8\x3e\x8f\x56\xb5\x7d\xe9\x10\xbb\x65\xd8\xe4\x1a\x9b\x64\x8e\x0d\xf2\x9b\x08\x39\xb3\x55\x5e\x1b\x91\xa3\x5f\x9e\xff\xda\x1f\xaf\xb7\x4c\x84\x3e\x19\x05\x18\xa1\xa8\x23\xc7\xd3\x27\x0b\xfc\x38\x66\xfd\x15\xf6\xd5\x58\xc2\x38\x9b\x67\x17\x46\xdb\x0d\xb2\xca\xf7\x10\xf5\xac\x7a\x56\x19\x7e\x3c\x39\x46\xc5\xa3\x9e\x65\x08\x94\xbc\xfd\xdc\xff\x5d\x16\xda\x3c\xef\xac\x1f\xc1\x2d\x11\x8e\x6c\xbb\xee\x05\x57\x5f\x5e\x5f\xfd\x56\x59\x59\xc4\x24\x24\xfa\xdf\x0c\x93\x4b\xe0\xb5\xf2\xe7\xcf\x5b\xe2\x88\xd9\x6e\xf0\x02\xf4\xed\xfd\xf1\x3f\x9b\xc5\xdc\xc4\xfe\xe6\x87\x3c\x2a\xae\x27\x3a\x02\xe8\x57\x7a\xc4\xef\x13\x1a\x09\x11\xbf\xdd\xbd\xec\xf3\x93\xf3\xca\xd7\xab\xe2\x71\x7d\xd3\x39\x5e\xd2\xf2\x23\xb0\x6f\x2f\x07\x36\xfe\xb2\xd8\xba\x32\x2b\x10\x6d\x56\x3a\x21\x08\x71\xf9\x69\xb5\xaa\x0c\x6d\xbf\x8f\x70\xf9\x8a\x50\x4a\x86\xe5\x46\x34\xc1\x90\xe8\xcd\x54\xb8\x6f\x8c\x48\x72\xc2\x13\x1a\xf0\x23\xfd\x68\x52\x9f\x22\x49\x34\x0b\xc0\xba\x42\x44\xf8\x8c\x18\xb9\x19\x11\xe1\x8b\xa4\x81\xc8\x39\xae\xcb\x4c\x6f\x93\xc8\x4e\x20\x32\xad\xcf\x42\xc0\xc7\x32\x40\xcc\x32\x3f\xcc\x5f\x67\x64\x80\x18\xd1\xdb\x0d\xa7\x81\xc8\x64\x9b\xb0\xf9\xe5\x5c\x53\x8c\x7b\x7c\xe8\x46\x79\x87\x92\x51\xb9\x56\x4d\xe2\x59\xc1\x84\x2a\xbd\x99\xc1\x49\x61\x63\xd3\x9c\x33\xce\x4d\xbb\x24\x14\x88\x65\x9c\x9f\x7c\xf8\x1c\x06\x90\x2e\x74\x56\x10\xf2\x68\xc5\xbc\xc3\x89\x8b\xa1\xa5\xd1\x1b\x9b\x99\xe9\xc8\x16\xe7\x16\xb6\xc7\x74\x60\x7a\xa4\xcf\xb3\x13\x67\xb1\x02\xc7\x93\xc2\x53\x4b\x50\xa2\x04\xa8\x8f\x15\xb4\xdc\x40\x78\x91\x77\xdd\x0c\x17\x4b\xa3\xcf\x6f\x68\x1b\x9c\xb1\x20\xac\xbf\xc2\x84\x2d\x95\xf9\xf5\xdf\x96\x17\x98\x5e\x93\xbc\x7a\xd3\xd4\xd7\x4a\x93\xcb\x99\xa0\x9c\x5e\x79\x22\xf3\x3f\xfb\xe3\xe6\x45\xb6\x2c\x75\x06\x6f\x94\x9c\x04\x32\xeb\x8a\x69\x7b\x4c\x89\x33\x8b\xeb\x1b\x91\xda\xc9\x4c\x32\xd1\x0c\x32\x2a\x86\x37\xef\xe6\x49\x67\xe2\x39\x68\x1e\x25\xbd\x4c\x06\xd2\xee\x93\xc3\xe3\x78\x40\x48\x00\x15\x3b\xcc\x2d\x33\x5a\x8c\xe4\x05\xaf\x37\x4e\xf3\x63\xe1\x00\xb6\x22\xdd\x1f\x82\xe2\x12\x12\x29\xea\xe2\xef\x0a\x10\x5f\x16\xfd\xee\x68\xff\xce\x83\x3c\x6d\xe1\xed\x08\x0a\x1d\x0e\xc3\x9b\x19\x03\x28\x76\xdf\x46\x49\xb3\x83\x7b\xb3\x41\x4c\x1f\x48\x68\x96\xf5\xcc\xd4\x95\x0f\xbe\xa4\x67\xe5\x5b\xb9\xdf\x8a\x2e\xc4\xfe\x4a\xd4\x1a\xd9\x38\xeb\x08\x59\x8c\x15\x7b\xc2\x3c\x5a\x66\x0a\x1a\x07\xf4\x8d\x4d\x9d\x01\x67\x1d\xb7\x2c\x8d\x29\xc5\x12\xab\x2a\x73\xbd\x6b\x6f\xae\x77\x79\xb0\x47\x39\x5e\xbb\xe9\xfc\x5b\x81\xc2\x5a\x54\x86\xa2\xc9\x55\xf2\x2c\xe4\x2c\xe2\xe1\xf0\x0b\xac\xe1\x0f\xb5\xa4\xc7\x57\xe0\xf5\x57\x74\x1e\xf3\x67\xe4\x93\x1e\xf2\xb6\x1d\x04\xf1\xd7\x5f\xaf\x7f\xf1\x7f\xb9\x7d\xbf\xce\x7a\xce\x33\x05\x84\xc3\x59\x21\x93\xcb\x32\xe1\x9d\xbf\xbf\x5a\x25\xb3\x64\xd1\xc5\x7b\x71\x1a\xb8\xef\x30\xb1\xe4\x82\xa9\xb4\x69\x7c\x17\xcf\x26\xb9\x7c\xc9\x5c\x8c\xe7\xef\x2d\x8d\xe4\x23\x22\x79\x95\x43\x83\xfb\xa2\xf7\x7b\x49\x1a\x99\x81\xd6\xf4\x01\x02\x0a\x8e\xc6\x74\xf0\xce\x27\xfc\xf6\x3a\x4c\xbb\xbd\xca\x21\xd4\xc6\x0f\x76\x8a\x27\x9e\x2c\xa6\x3f\x2e\xa6\xd6\x82\xbc\x93\x59\x9f\x1e\x2b\xf5\xe4\xa3\x6a\xeb\x73\xdc\xcb\x88\x0d\xef\xd2\x24\xd8\x88\x2a\xbf\x98\x14\xc9\xce\x17\x52\x44\x16\xb6\x63\x91\x25\x32\x95\xf6\x47\x23\x4e\xc1\x5c\x1e\x5b\x57\x87\x2f\x78\xba\xc0\x7b\xe7\x22\x7c\x38\x1d\x30\xaa\xb3\x15\xd5\x00\xc7\x14\x79\x41\xc5\x5d\x18\xea\x3a\xe2\xd0\x03\x0d\x0a\xee\xa4\xeb\xc7\x90\x30\xb1\xa6\x41\x60\x32\xb2\xdb\x54\xa3\x60\xba\x19\x85\x10\x5b\x77\x94\x5c\x0c\x88\x4f\x5f\xda\x14\xee\x47\x61\x89\xf7\x1d\xba\xbf\x68\x10\xcc\xa0\x50\x3f\x7c\xf8\xf0\xa1\xf2\xe6\x4d\xe5\xe5\x4b\x15\x4c\x0d\x4a\x4e\x03\xc2\x9b\xa1\x86\x28\x91\x68\xd3\xc0\xc9\x56\x29\x7f\xc9\xea\xa2\x21\x3c\xea\x93\xa2\x00\x78\xc4\xb1\x3d\x0d\x98\x3d\x9f\x0c\xcf\xc8\x8d\x36\x6f\xe1\xfd\xe5\x71\x7e\x23\xe6\x98\x3a\xcb\x1a\x9a\x46\xe8\x88\xf3\xe9\x08\xb1\x43\x5c\x84\x1f\x21\xfe\xd5\xdd\xa7\x2f\xf0\xf6\x82\xfa\xfb\xea\xd1\xcf\xc7\x2f\x4f\x5e\xfd\xf2\xeb\xe9\x3f\x7e\x7b\xfd\xe6\xec\xed\xbb\x7f\x9e\x5f\x5c\xbe\xff\xfd\x8f\x7f\x7d\xf8\x68\x5f\x39\x2e\xec\xf5\x07\xe8\xf3\x17\x6f\x88\xc9\xe8\xab\x1f\xd0\xf1\xf5\xcd\xb7\xdb\xbf\xaa\xb5\x7a\xa3\xf9\x64\xef\xe9\xb3\xe7\x7a\xc5\x52\x0d\x0e\x76\x9c\xce\x9c\x0d\x0c\x62\x04\x06\x32\x6c\xc3\x33\x7c\xc3\xb1\x54\xd5\x70\xad\xea\x4e\x8f\xf8\x1a\xb4\xa8\xf9\x69\x4c\x7b\xcf\x3e\x89\xba\x1a\x04\x2d\xf7\x00\x4a\xf7\x89\x16\x40\x96\x86\x2d\x68\x3a\x03\xdb\x3f\x26\x2e\x3c\xa2\x9a\xab\xeb\x00\x1c\x1e\xd6\x0d\xdb\xd2\x1a\x25\x0c\x0e\x0e\x9a\x13\x8d\x64\x96\x69\x1a\x9e\xa5\xd5\x9e\x94\x08\x38\x38\xa8\x4f\xb4\x20\xb3\xd0\x9e\xe1\x5b\x7b\x8d\x52\x60\xa0\xe0\xcc\x3e\xd3\x08\x78\xe1\x59\xbe\xb5\xd7\xdc\x17\xcf\x01\x28\x95\x34\xf6\x0c\x0c\xc7\x72\x74\xee\x85\x22\x51\xc6\x1b\x3b\xa2\x1a\x02\x99\xaf\xed\xec\xd7\x5e\xf6\x6b\x1f\xec\x48\x66\x72\xa6\x86\x0b\x97\xe3\x91\x61\xd1\x99\x61\x11\x9a\x3e\x1c\x79\xb6\x03\xb5\x4a\xfb\xcf\xa3\xf2\x47\xbb\xfc\x57\xb5\xfc\x5c\xef\x54\xac\x6e\xa5\x6f\xa8\x2a\x68\x39\x11\xac\x62\x2b\x06\x02\xf7\xbc\x7f\xdb\xd3\x60\x08\x8c\xc3\x50\xc3\x71\x86\x8a\x94\xe4\xa8\x26\x1c\xd5\x48\xd0\xc3\x2e\x58\xad\x6e\x04\x8c\x8a\x36\x38\x38\xd8\x9b\x68\x5e\xa1\x5a\x86\xaf\x5b\x17\xd4\x47\xb8\xcf\xe7\xd5\xb1\xa4\xa8\x86\x81\xb1\xd7\xdc\xb5\x2c\x9b\x11\x2c\xbb\x08\x01\xb2\x8c\x97\x5f\x26\x00\x33\x4a\xf8\x33\xe6\x14\x04\xd1\x7c\x30\x35\xa2\xdc\x1a\xa3\x50\x8c\x08\x1d\xbf\x83\x19\xe2\x3b\x58\x05\x9c\x44\x62\xb6\xa9\xaa\x81\xad\x6a\x0b\xcf\x69\x81\x75\x5d\x10\x37\xc1\xc2\x18\xec\x90\x83\x5a\xfd\xd9\x0b\x9a\x37\x94\x7d\x72\x58\xab\x3f\x2d\x95\xc8\x41\xbd\xda\x7c\xf6\x42\xcb\x2b\x78\x78\xb8\x37\xa9\x3d\xaf\x03\x23\xa7\xc0\x5e\xa3\x44\x26\xb5\xfa\x33\x00\xf6\x17\xb4\x51\xab\x4f\xea\xf5\x66\x6e\x23\xac\x97\xd2\x5e\x83\xb7\xb3\xbc\xa3\xa9\x44\x30\x0d\xd1\x99\xc3\xf0\x21\xc2\x76\x3c\x48\x15\x62\x55\x8d\x40\x32\x7c\x14\x83\x00\xf5\xb4\xa4\x00\xc0\x00\x30\xe4\x81\x5c\xe4\x19\x58\xd7\x77\xa0\x17\x40\x05\xf5\x34\x72\x58\x7b\x5e\xe3\x88\xac\x37\x41\x42\x4a\x60\xbd\x96\x3b\x20\xad\x51\xe3\xb2\x65\x6f\xc2\x04\x08\x6b\xd3\xaa\xf3\x46\xef\x32\x1a\xe1\x63\x40\xc9\xf7\x75\xb0\x93\xd7\xb8\x14\x5c\xb5\xfa\x44\xe3\xcd\xcb\x7e\x10\xef\xa7\x31\x47\xe1\xd4\xc0\xd6\xdd\xcf\x76\x00\xf7\x9a\xfb\xb4\xe0\xfa\xc2\x15\xe3\xf2\xd5\xed\x83\xac\x2f\x19\x54\x94\x5e\x31\xe6\x4f\xd0\x76\x06\xa6\xaa\xc3\x70\x8a\x89\x03\x23\xa6\x00\x8d\x29\x74\x35\x3a\x87\x21\xac\xdb\xee\x86\x65\xb9\x70\xe8\x43\xaa\xcd\x9c\x6c\x40\xca\x2f\x4d\xc3\xe1\x6c\xda\xdd\xa5\x66\x0f\x61\xf7\xe7\x5b\x4d\x15\xfb\x00\x43\x74\xc6\x5a\xc0\x06\x04\x60\x87\x4c\x26\x94\xbb\xe1\x89\xc1\x6a\xe2\xbb\x1c\xb9\xe3\x43\x7e\x72\xc5\xeb\xee\xc7\xab\x1a\x12\x00\xa6\xd9\x02\x60\x2c\xeb\x28\x09\x74\xa4\x4b\x0c\xa6\xc0\xa0\x53\x30\xcd\xa7\xd5\x10\x05\xce\x23\xe8\x01\x08\x53\xe8\x5f\xdb\x5e\x54\xa3\xa2\x46\x88\x4e\xb6\xee\x58\x1a\xb1\xa8\x11\x58\x38\x4a\x24\xd4\xd3\x44\x3b\x96\x65\x05\x93\x49\x50\x2e\x2b\x87\x55\x70\x17\x71\x3f\x46\x06\x01\x3b\xd4\xbf\xbd\x83\xa6\x63\x7b\x9e\xc6\xd4\x69\x30\x75\x6c\xea\x0c\x34\x0a\xee\xe8\xc0\x27\x37\x4a\x60\x55\x0d\x6a\x52\x22\x66\x02\x53\x94\xa6\x60\x27\xd6\x08\x05\x53\xe3\xc6\xb7\x47\xaf\x64\xdf\x29\x38\x25\x97\x44\x60\x83\xa6\x3d\x1a\x79\xb7\x1a\xfb\x3c\x9d\x1a\x08\x07\xd0\xa7\x47\xf4\x78\xec\x07\xc4\x8f\xd5\xe7\xe3\x98\x39\x4a\xce\xbc\x9f\x00\x34\xf9\xf9\x9d\x06\x8c\xf4\x47\xc9\x21\xe7\x36\xee\x43\x0d\x98\x14\x7e\xa3\x16\x9d\xc9\x14\x38\x2f\xc8\x53\x32\x4f\x26\x6a\x55\xb5\x2c\x2b\xf9\x5e\xae\xec\xa9\xf7\x06\x89\xbe\x3a\xc1\xee\x0e\x34\x39\x15\x2d\xf9\xd7\x0c\xc6\x57\x81\xc0\x56\xd5\xc0\x40\xa7\x7a\xfa\x03\x31\xc2\x77\x42\x56\x32\xea\xc7\xbb\xb1\xb0\x4e\xe5\x47\x23\xde\x5f\xe4\xcb\x94\x0f\x4a\x36\xa5\x5b\x74\xca\x74\x25\x78\xf3\x3b\xf4\x83\x2c\x42\xb0\xd1\x47\xd6\x42\xf5\x5a\x65\x0a\x88\x41\x2d\x9a\x7a\xc7\xca\x51\x1f\x0d\x19\xfe\xc8\x6b\x72\x03\xfd\x63\x3b\x80\x9a\x28\x9c\xf9\x41\xe5\x48\x2c\x95\x54\x75\xd7\xb2\x28\x10\x44\xdf\x0d\x57\x08\x68\x06\x23\x0f\x51\x4d\x35\x55\x60\x04\x16\x8d\x3c\x4a\x29\xb2\xab\x11\x39\xaa\x83\xc6\x64\x12\x44\x7e\xef\x6a\x41\xbb\xda\x3d\x24\xed\x6a\x77\x32\x61\x3f\x2d\xcb\x62\x0f\xa5\x52\xd0\xae\xb1\xf7\xb5\x2e\x28\x95\x76\x35\xcc\x5e\x24\xbe\xf2\x87\x1a\x7f\xa8\xb3\xa2\xf5\x2e\x88\xeb\xfa\x0b\xf6\x6c\x78\xd1\x45\x7b\x74\xcb\x16\xb2\x78\xe5\x4f\xad\xfe\xa4\x5d\x2d\x3f\xe9\x4e\xea\xed\x6a\xb9\xd9\x6d\x57\xcb\xcf\xbb\x93\x76\xb5\xd6\x7d\xc1\x7f\xf2\x7f\x5e\x80\x8e\xb9\x9d\x72\xff\x5e\x31\x29\x0c\x18\xc0\x9b\xdb\x46\xf6\x21\xbd\x18\x5f\xb9\x64\x68\xa3\x08\xc3\x71\x5e\xa3\x9a\xf4\x05\x67\xbb\x2d\x3e\x31\x07\x24\xa0\x40\xb2\x86\xaa\x72\xd6\x80\x42\x93\xc8\x2a\x99\xe6\x91\x99\xfb\xf6\x61\xad\x54\xd2\xa0\x85\xdb\xd5\x6e\x9c\x0d\x81\x01\xa7\x46\x1f\xd2\xa3\xd1\xe8\xbd\xef\xc5\xf4\x16\xd6\x1b\x5d\xda\x11\x9b\x0a\x43\x72\xcd\x94\x80\xaa\x50\x0d\xb0\x45\xcd\xcf\x04\xe1\x18\x20\x9f\x4c\x24\x2c\xa8\x34\x08\x5e\xb0\x31\xec\x43\xdd\x52\x4d\xd5\x48\xb6\xcf\xe3\x19\x38\xc4\xd3\xd5\x4a\x45\xd5\xa1\x8e\xd9\x1c\x3d\xfa\x6c\x7f\x3b\x72\x1c\x18\x04\xfc\xcc\x27\x6b\xe7\x2a\xb0\xbc\xcb\xa7\x94\xa6\xb2\x0a\x8a\x3d\xa6\x03\xe2\xa3\xbf\x44\x34\x84\x9e\x8d\x3c\xe8\x0a\xc9\x25\xb3\x40\x4d\x26\xf3\x5a\x26\x64\x2d\x07\xa5\x52\xf8\x2b\xc4\x5c\x95\xb5\xd7\xac\xd6\x44\x4d\xf1\x8d\xa1\x31\xa0\x36\x1d\x07\x93\x89\xda\xac\x36\xb2\xbf\xb1\x0d\xbb\x80\xfd\x8c\xd0\x57\x64\x8c\xdd\x42\xd0\x17\x83\x49\x6d\x56\x9b\xd9\xdd\xb2\x4e\x4f\xc5\x01\xd8\x6b\xe4\x40\x1c\xc0\xcd\x76\x5b\x5f\xd0\xed\xbb\xeb\xe2\xaa\x9b\x10\xed\x45\x25\x46\x62\xeb\xb1\xe6\x26\x5f\x35\x88\x55\x6d\x91\x03\xd8\x22\xba\xce\x94\x6b\x1c\x6e\xcd\x78\xa4\x88\x9e\x47\x88\x2f\x7e\xfa\x36\x76\xc9\x50\x03\x3f\x86\x53\x69\xbe\xab\xa2\x9b\x93\x0a\x43\xfb\x0b\xbc\xf0\xc6\xfd\x8c\x09\x18\x78\xe3\xbe\x06\x8d\xbb\x21\xdb\x57\xa8\x7e\xcf\x69\x3c\x7f\xb6\xa7\x1a\x1e\x9b\xc3\xbc\xd1\x9d\x50\x3e\x58\x96\x45\x4b\x25\x8d\x5a\x90\x69\x62\x06\x6b\xf3\xd4\xdd\xa7\x06\xc4\x6e\xf0\x07\xa2\x83\x84\xa2\x20\xaa\x95\x6b\x9c\xe4\xe1\x16\x95\x1a\xe1\x12\x5b\x0e\x17\x4d\x30\x35\x6c\x4c\xf0\xfb\x00\xfa\xa7\x6e\x54\x64\xc9\x7e\xd9\xc7\x4f\xaa\x4e\xb5\x5a\x8d\x33\x3c\xbf\xf5\xc8\xe0\xb6\xca\x9f\x9a\xd6\xfe\xf3\xe0\x50\x03\xed\x4e\xb7\xd3\x31\x8d\xd6\x7e\x27\xf8\xa9\xa3\x76\x75\xad\x63\x66\x7f\x00\x3f\x82\x89\xd6\x51\x4d\xbd\xa3\x02\xf0\x93\xa6\x75\xda\x5c\x32\xdf\xd5\x8c\xc6\xb4\x63\x16\xf8\xdd\x05\x13\x4d\x6b\xdb\xe5\xbf\x8e\xca\x1f\x3b\x65\xf6\x5e\xef\x98\x40\x97\x6f\xba\x77\x75\x63\x0a\xa2\x62\xbe\x20\xeb\x52\xf2\x18\x8a\x2c\x5b\x2a\x68\xe2\x68\x90\x0a\xb6\xe0\xe7\x91\xce\x25\x21\x5e\xb0\x7f\x37\x1e\x5d\xda\x7e\x1f\xd2\x7d\x55\x35\x5c\x72\x83\xe7\x4f\x8c\xaa\x98\x9e\x62\xc7\xe7\x17\x3e\xfb\x55\xc3\xf6\x3c\x72\x73\xca\x5f\xef\xef\xd6\xc4\xe3\xdb\x31\x95\xcf\x53\x43\x9c\x1e\xdb\x57\x1e\x7c\x67\xf7\x21\x2b\x32\x1e\xbd\x94\xb1\x0c\xf6\x77\xab\xbc\xfd\xe8\xb3\xe8\x21\xfa\x86\x88\xd6\xa2\xaf\x46\x76\x9f\x71\xa2\xaa\x4e\x77\x50\x4f\x63\x4b\xc1\x7b\x2c\xd0\xc3\xc3\xe4\x84\x6b\xd5\x0e\x36\x45\x49\x8b\x8a\x8d\x06\x72\x55\xb0\x23\x36\x41\x9f\xf8\xce\x84\x01\xfe\x4d\x83\x46\x86\x28\x83\xa2\x0a\x6b\xc0\x64\xf5\xd8\x64\x98\xb7\x32\x05\xac\xe7\x72\x8d\xa9\x37\xf3\xfe\x58\xd3\x81\x15\x87\x07\xb6\x49\xb9\xd6\x05\x2f\xc4\xdf\x7d\xf1\x67\xde\xb6\x0a\x0c\x94\xae\xa1\xcb\x1a\xba\xa8\xa1\xc7\x6b\xa4\x07\xcd\xcf\xe2\xb0\x19\x92\xd0\x0c\x29\x68\x31\x55\x32\x5e\x14\x25\x8a\xce\x09\xcc\x0b\xef\x26\x1b\x16\x6a\xb8\x7d\x2f\x84\x05\x69\x84\xed\x5a\x96\x3d\x17\xbe\x9e\x65\xb7\xbc\x43\xab\xca\xb4\x47\x89\x5d\x0f\x5e\x43\x4f\x05\x87\xb0\xed\x45\x06\x6d\xca\xd7\xa0\xe5\x95\xcb\x80\xe9\x36\xb1\xd2\x6c\x01\xc9\x2e\x7f\x97\x85\x95\x44\x59\xce\x16\x57\x3e\xb4\xbf\x4c\x23\xa5\x23\x9c\x1d\x0e\x24\x84\xcd\x8a\xf7\x6e\x44\x6a\x25\x66\x48\xa2\x66\x39\x51\x91\xed\x0d\xf3\x2b\xc7\x09\x95\x6c\xb9\x06\xa6\x53\xd4\xd3\x76\x93\xe4\x15\x04\xf3\xef\x45\x30\x94\x49\x30\x1f\x84\xf4\x72\x2c\x3f\x72\x5c\xca\xa8\x06\xdb\x4e\x06\xda\x0f\xe2\xe3\x04\x2d\x47\xd7\x73\xa8\x96\x55\x3d\x46\xb5\x08\x83\x26\x4a\x47\xe8\x96\x60\x1e\x14\x7b\x5c\xc4\xf0\xd3\x99\x62\x1b\x27\xbc\x94\x61\x09\x4a\x1f\xd6\x0c\x6c\xce\x05\x98\xc5\xd7\xc8\x0c\x0e\x33\xb0\x19\x15\x6c\xa9\x72\x73\x18\x0c\x6c\xc6\x45\x9e\xb5\x9b\xcd\x83\x06\x36\x13\x92\x30\x5d\x52\x02\x6d\x60\x33\x2e\x76\xad\xdd\xb9\xba\x9c\x01\x2d\x98\x4c\xb2\x0b\xcc\xc1\x04\x93\x49\x36\x58\xe9\xf7\x33\x20\xa6\x06\xd3\xe3\xdf\x8f\xb2\xcf\x4d\x24\x7f\x46\x0f\xb6\xe6\x17\x6f\x34\xcd\x9a\x30\x0d\xf7\x94\xed\x64\xf9\xc5\x28\xb2\xda\xdd\xb4\x54\x24\x60\x32\xd1\x88\x45\xa2\xb2\x33\x29\x0e\x31\x98\x4c\x92\xb5\x42\x81\x8e\x76\xd2\xa2\x8f\x16\x9c\x49\x24\x3a\x93\x5a\x42\xee\x95\x4a\xc9\xb5\xaa\x6d\xb3\xb5\x61\x32\xd1\x02\x4b\xfc\x8e\x81\x2a\xd6\x2a\x2f\x6c\x2b\x80\x5f\xc7\x10\x3b\x6c\xc9\xf0\xf9\x92\x71\x36\xf6\x3c\x2d\x48\x0d\x20\x00\x2f\xaa\xfb\x41\xaa\x8e\x73\xaf\x71\xe0\x4c\x89\xe0\x08\x22\xba\x96\xe6\xe9\x3e\xa8\xd4\x77\x90\x08\xda\x75\x27\x57\xe6\x48\x2d\x23\x04\x61\xdf\x9d\xce\x0f\xfc\xc7\x96\xa3\xd7\x5a\xe3\x03\x1a\x11\x25\xb4\x3d\xce\x12\x25\x21\x08\x33\x59\x32\xd6\x75\xe0\x5a\x9a\xab\xa7\xf0\x02\x2a\x75\x23\x01\x49\xa2\xd1\x14\x44\xe1\xfc\x47\x82\x5b\x5f\x92\x9b\xf4\xb1\x4d\x5a\x63\xb8\x17\xf6\x8c\x60\x0d\x9e\x9f\x4f\xc5\x29\xd8\x49\xd2\x9b\x33\x50\x10\xe3\x1d\xce\x3a\xe8\x5e\x40\xc7\x56\x6d\xc3\x96\x53\x4b\xe8\x3a\x93\x09\xff\x8b\xc2\x29\x62\x4b\x16\xad\x1a\xbe\x55\xe5\x2c\xe6\xfa\x64\xa4\x51\x03\x01\xc3\xb5\x3e\x99\x3e\xe4\x87\xb9\xce\xb2\xae\x25\x71\x77\xad\x04\xb5\x27\x93\xc5\x58\xcd\xfc\x9e\x52\x3b\xdc\xd9\x86\x53\x10\x73\x6c\xb9\x6c\x9f\x19\x55\xc2\x86\x16\x6d\xdf\x07\x59\xe3\x68\x5f\xe5\xda\x4c\x0a\xf1\xb9\x39\x64\x94\x19\x5a\xc3\xb8\x00\xda\x8d\x7c\x2f\x95\x86\xf1\x05\x26\xc1\xec\x9e\xa5\x8d\x93\x5c\xae\x0f\xb3\xf8\xde\xb7\x52\x05\xc5\x8d\x0b\x1b\xf0\xc8\xa2\x6d\x94\xd4\x22\x3d\x4b\x1b\xa5\xda\x4e\xc9\x0d\xd1\x76\xaa\xe0\x54\x1c\x7d\xfa\x56\xfd\x47\xcd\xb3\xea\x3f\x3a\x6d\x27\xdc\xe7\x45\xbb\x31\x23\x0d\xed\xd8\x05\x84\x84\x17\x11\x12\x83\x50\xbc\x18\x3d\x8b\xe8\xb5\x56\x2f\x21\x2e\x7a\x85\xc4\x45\x2f\xbc\x47\xec\x5b\xda\x40\x48\x2b\x3b\x29\x23\x7a\xf9\x32\xa2\x3f\x97\x11\xf6\x54\x6e\x4f\x1e\x50\x42\xb4\xbb\x3b\x41\x3e\x9a\xf8\xa0\xf6\xe3\x23\xd4\x61\xae\x8e\x18\xc1\x25\xe2\x18\x44\x09\x0c\xa2\x42\x18\x44\xba\x0e\x82\x24\xca\x50\x0a\x65\x02\xb8\xec\x46\x17\x03\x29\xd1\x13\x4c\xc3\xcd\xde\x77\x85\xe0\x72\xed\xfb\xc1\x23\x87\x65\x86\xae\xa5\xe7\xe8\xdc\x06\xae\x5f\x81\xf8\x1a\xf9\x04\xf3\x50\xfe\x46\xbb\x1b\xbd\xa5\xa2\xfe\x2d\x47\x2e\xb4\x16\xd7\xa2\xd6\xec\x9e\xe7\xeb\x18\xfa\xb7\x22\x41\x32\xf1\xb5\x1f\x86\x90\xda\x6d\x6c\x0f\xa1\xa5\xfe\xa0\x43\xfd\x07\xb5\xfb\x03\xbf\xd7\x9b\xc7\x3f\x9d\x5f\xf0\x19\xd8\xba\x93\x00\xef\xff\xe3\xe2\xed\x99\x39\xb2\xfd\x00\x6a\xe2\x92\xfb\xfd\xf9\xe9\x71\x68\xef\xc5\xb6\xf1\xd3\x70\xa0\xd9\x07\x20\x38\xff\x00\x04\xcb\x4b\x34\x12\x5e\xa2\x61\x78\xa3\xf0\x43\x4b\xed\x87\x63\x32\xf6\x5c\xee\x9d\xea\x43\xdb\x55\xc4\x58\x95\x9e\x4f\x86\x0a\x1b\x89\x42\xed\xbe\x72\x83\xe8\x40\x61\x43\x52\xe4\x90\xcc\x1f\xf8\x3d\xa4\x3f\xc6\x18\xe1\xfe\x25\x0c\x68\x30\x99\xf8\xf0\xeb\x18\xf9\x51\x74\xdb\xa3\x91\x0a\x42\x8a\xcc\xee\x49\x5f\xbf\xfd\xe5\xd3\xf9\xc9\xc5\xdb\xd7\xbf\x9f\x9c\xef\xef\xd6\x0c\xf6\x7c\x74\x7c\x79\xfa\xfb\xc9\xa7\x5f\x4e\xce\x4e\xce\x8f\x2e\x4f\xdf\x9e\x85\x1f\x7e\x3f\x3d\xf9\xe3\xd3\xeb\xb7\x6f\x7f\x7b\xff\xee\x22\x7c\x77\x79\x7e\x74\x76\x71\xca\x4a\x65\xbd\xfa\x74\x7a\x76\x79\x72\x7e\x76\xf4\x9a\x7d\xc3\x31\x4b\x3a\xd5\xb8\x96\x37\x51\x6a\xc3\xac\x99\x75\xbd\xd7\xb3\x9d\x5e\xed\xa9\xa3\x4e\xc1\xce\xff\x06\x00\x00\xff\xff\x66\xad\x41\xcc\x1a\x3e\x0e\x00") -func bindataPublicAssetsDocumizeDb6507931a581fdde126de11f6da71d1JsBytes() ([]byte, error) { +func bindataPublicAssetsDocumizeBdc2602422339ee7de6884898daccc3bJsBytes() ([]byte, error) { return bindataRead( - _bindataPublicAssetsDocumizeDb6507931a581fdde126de11f6da71d1Js, - "bindata/public/assets/documize-db6507931a581fdde126de11f6da71d1.js", + _bindataPublicAssetsDocumizeBdc2602422339ee7de6884898daccc3bJs, + "bindata/public/assets/documize-bdc2602422339ee7de6884898daccc3b.js", ) } -func bindataPublicAssetsDocumizeDb6507931a581fdde126de11f6da71d1Js() (*asset, error) { - bytes, err := bindataPublicAssetsDocumizeDb6507931a581fdde126de11f6da71d1JsBytes() +func bindataPublicAssetsDocumizeBdc2602422339ee7de6884898daccc3bJs() (*asset, error) { + bytes, err := bindataPublicAssetsDocumizeBdc2602422339ee7de6884898daccc3bJsBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/documize-db6507931a581fdde126de11f6da71d1.js", size: 927704, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/documize-bdc2602422339ee7de6884898daccc3b.js", size: 933402, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1726,7 +1726,7 @@ func bindataPublicAssetsFontMaterialiconsRegularEot() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.eot", size: 143258, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.eot", size: 143258, mode: os.FileMode(493), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1746,7 +1746,7 @@ func bindataPublicAssetsFontMaterialiconsRegularTtf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.ttf", size: 128180, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.ttf", size: 128180, mode: os.FileMode(493), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1766,7 +1766,7 @@ func bindataPublicAssetsFontMaterialiconsRegularWoff() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.woff", size: 57620, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.woff", size: 57620, mode: os.FileMode(493), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1786,7 +1786,7 @@ func bindataPublicAssetsFontMaterialiconsRegularWoff2() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.woff2", size: 44300, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.woff2", size: 44300, mode: os.FileMode(493), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1806,7 +1806,7 @@ func bindataPublicAssetsFontDmzmetaEot() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.eot", size: 16092, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.eot", size: 16092, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1826,7 +1826,7 @@ func bindataPublicAssetsFontDmzmetaSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.svg", size: 84813, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.svg", size: 84813, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1846,7 +1846,7 @@ func bindataPublicAssetsFontDmzmetaTtf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.ttf", size: 15928, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.ttf", size: 15928, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1866,7 +1866,7 @@ func bindataPublicAssetsFontDmzmetaWoff() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.woff", size: 8820, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.woff", size: 8820, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1886,7 +1886,7 @@ func bindataPublicAssetsFontDmzmetaWoff2() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.woff2", size: 7208, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.woff2", size: 7208, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1906,7 +1906,7 @@ func bindataPublicAssetsFontDmzuiEot() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.eot", size: 17672, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.eot", size: 17672, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1926,7 +1926,7 @@ func bindataPublicAssetsFontDmzuiSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.svg", size: 89710, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.svg", size: 89710, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1946,7 +1946,7 @@ func bindataPublicAssetsFontDmzuiTtf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.ttf", size: 17516, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.ttf", size: 17516, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1966,7 +1966,7 @@ func bindataPublicAssetsFontDmzuiWoff() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.woff", size: 9176, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.woff", size: 9176, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1986,7 +1986,7 @@ func bindataPublicAssetsFontDmzuiWoff2() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.woff2", size: 7556, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.woff2", size: 7556, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2006,7 +2006,7 @@ func bindataPublicAssetsImgAttachmentsAviPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/avi.png", size: 1495, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/avi.png", size: 1495, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2026,7 +2026,7 @@ func bindataPublicAssetsImgAttachmentsBinPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/bin.png", size: 1470, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/bin.png", size: 1470, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2046,7 +2046,7 @@ func bindataPublicAssetsImgAttachmentsCodePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/code.png", size: 1520, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/code.png", size: 1520, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2066,7 +2066,7 @@ func bindataPublicAssetsImgAttachmentsCssPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/css.png", size: 1542, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/css.png", size: 1542, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2086,7 +2086,7 @@ func bindataPublicAssetsImgAttachmentsDocPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/doc.png", size: 1497, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/doc.png", size: 1497, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2106,7 +2106,7 @@ func bindataPublicAssetsImgAttachmentsGifPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/gif.png", size: 1463, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/gif.png", size: 1463, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2126,7 +2126,7 @@ func bindataPublicAssetsImgAttachmentsHtmlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/html.png", size: 1459, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/html.png", size: 1459, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2146,7 +2146,7 @@ func bindataPublicAssetsImgAttachmentsImagePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/image.png", size: 1511, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/image.png", size: 1511, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2166,7 +2166,7 @@ func bindataPublicAssetsImgAttachmentsJpgPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/jpg.png", size: 1502, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/jpg.png", size: 1502, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2186,7 +2186,7 @@ func bindataPublicAssetsImgAttachmentsMp3Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/mp3.png", size: 1509, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/mp3.png", size: 1509, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2206,7 +2206,7 @@ func bindataPublicAssetsImgAttachmentsPdfPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/pdf.png", size: 1443, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/pdf.png", size: 1443, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2226,7 +2226,7 @@ func bindataPublicAssetsImgAttachmentsPngPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/png.png", size: 1514, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/png.png", size: 1514, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2246,7 +2246,7 @@ func bindataPublicAssetsImgAttachmentsPptPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/ppt.png", size: 1445, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/ppt.png", size: 1445, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2266,7 +2266,7 @@ func bindataPublicAssetsImgAttachmentsPsdPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/psd.png", size: 1508, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/psd.png", size: 1508, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2286,7 +2286,7 @@ func bindataPublicAssetsImgAttachmentsSettingsPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/settings.png", size: 1589, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/settings.png", size: 1589, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2306,7 +2306,7 @@ func bindataPublicAssetsImgAttachmentsTxtPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/txt.png", size: 1444, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/txt.png", size: 1444, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2326,7 +2326,7 @@ func bindataPublicAssetsImgAttachmentsUnknownPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/unknown.png", size: 1391, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/unknown.png", size: 1391, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2346,7 +2346,7 @@ func bindataPublicAssetsImgAttachmentsVectorPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/vector.png", size: 1395, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/vector.png", size: 1395, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2366,7 +2366,7 @@ func bindataPublicAssetsImgAttachmentsVideoPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/video.png", size: 1336, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/video.png", size: 1336, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2386,7 +2386,7 @@ func bindataPublicAssetsImgAttachmentsVsdPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/vsd.png", size: 1545, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/vsd.png", size: 1545, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2406,7 +2406,7 @@ func bindataPublicAssetsImgAttachmentsXlsPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/xls.png", size: 1520, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/xls.png", size: 1520, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2426,7 +2426,7 @@ func bindataPublicAssetsImgAttachmentsZipPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/zip.png", size: 1459, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/zip.png", size: 1459, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2446,7 +2446,7 @@ func bindataPublicAssetsImgBusyBlackGif() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/busy-black.gif", size: 97340, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/busy-black.gif", size: 97340, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2466,7 +2466,7 @@ func bindataPublicAssetsImgBusyGrayGif() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/busy-gray.gif", size: 83378, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/busy-gray.gif", size: 83378, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2486,7 +2486,7 @@ func bindataPublicAssetsImgBusyWhiteGif() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/busy-white.gif", size: 42705, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/busy-white.gif", size: 42705, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2506,7 +2506,7 @@ func bindataPublicAssetsImgGithubIconLastUpdatedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/github/icon-last-updated.png", size: 1293, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/github/icon-last-updated.png", size: 1293, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2526,7 +2526,7 @@ func bindataPublicAssetsImgIconBlack1024x1024Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-1024x1024.png", size: 17397, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-1024x1024.png", size: 17397, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2546,7 +2546,7 @@ func bindataPublicAssetsImgIconBlack128x128Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-128x128.png", size: 2418, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-128x128.png", size: 2418, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2566,7 +2566,7 @@ func bindataPublicAssetsImgIconBlack256x256Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-256x256.png", size: 4174, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-256x256.png", size: 4174, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2586,7 +2586,7 @@ func bindataPublicAssetsImgIconBlack64x64Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-64x64.png", size: 1724, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-64x64.png", size: 1724, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2606,7 +2606,7 @@ func bindataPublicAssetsImgIconBlue1024x1024Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-1024x1024.png", size: 16700, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-1024x1024.png", size: 16700, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2626,7 +2626,7 @@ func bindataPublicAssetsImgIconBlue128x128Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-128x128.png", size: 2526, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-128x128.png", size: 2526, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2646,7 +2646,7 @@ func bindataPublicAssetsImgIconBlue256x256Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-256x256.png", size: 4247, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-256x256.png", size: 4247, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2666,7 +2666,7 @@ func bindataPublicAssetsImgIconBlue64x64Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-64x64.png", size: 1751, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-64x64.png", size: 1751, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2686,7 +2686,7 @@ func bindataPublicAssetsImgIconPurple1024x1024Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-1024x1024.png", size: 50539, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-1024x1024.png", size: 50539, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2706,7 +2706,7 @@ func bindataPublicAssetsImgIconPurple128x128Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-128x128.png", size: 4181, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-128x128.png", size: 4181, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2726,7 +2726,7 @@ func bindataPublicAssetsImgIconPurple256x256Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-256x256.png", size: 8627, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-256x256.png", size: 8627, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2746,7 +2746,7 @@ func bindataPublicAssetsImgIconPurple64x64Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-64x64.png", size: 2091, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-64x64.png", size: 2091, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2766,7 +2766,7 @@ func bindataPublicAssetsImgIconWhite1024x1024Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-1024x1024.png", size: 17035, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-1024x1024.png", size: 17035, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2786,7 +2786,7 @@ func bindataPublicAssetsImgIconWhite128x128Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-128x128.png", size: 2542, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-128x128.png", size: 2542, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2806,7 +2806,7 @@ func bindataPublicAssetsImgIconWhite256x256Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-256x256.png", size: 4213, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-256x256.png", size: 4213, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2826,7 +2826,7 @@ func bindataPublicAssetsImgIconWhite64x64Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-64x64.png", size: 1747, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-64x64.png", size: 1747, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2846,7 +2846,7 @@ func bindataPublicAssetsImgLogoBlackPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/logo-black.png", size: 10031, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/logo-black.png", size: 10031, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2866,7 +2866,7 @@ func bindataPublicAssetsImgLogoColorPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/logo-color.png", size: 5618, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/logo-color.png", size: 5618, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2886,7 +2886,7 @@ func bindataPublicAssetsImgLogoPurplePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/logo-purple.png", size: 7706, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/logo-purple.png", size: 7706, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2906,7 +2906,7 @@ func bindataPublicAssetsImgOnboardLockGreenPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock-green.png", size: 3229, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock-green.png", size: 3229, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2926,7 +2926,7 @@ func bindataPublicAssetsImgOnboardLockRedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock-red.png", size: 3158, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock-red.png", size: 3158, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2946,7 +2946,7 @@ func bindataPublicAssetsImgOnboardLockPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock.png", size: 3004, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock.png", size: 3004, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2966,7 +2966,7 @@ func bindataPublicAssetsImgOnboardNavIconsPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/nav-icons.png", size: 2527, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/nav-icons.png", size: 2527, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2986,7 +2986,7 @@ func bindataPublicAssetsImgOnboardPatternPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/pattern.png", size: 6084, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/pattern.png", size: 6084, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3006,7 +3006,7 @@ func bindataPublicAssetsImgOnboardPersonGreenPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person-green.png", size: 6260, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person-green.png", size: 6260, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3026,7 +3026,7 @@ func bindataPublicAssetsImgOnboardPersonRedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person-red.png", size: 6057, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person-red.png", size: 6057, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3046,7 +3046,7 @@ func bindataPublicAssetsImgOnboardPersonPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person.png", size: 5580, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person.png", size: 5580, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3066,7 +3066,7 @@ func bindataPublicAssetsImgSetupErrorPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/setup/error.png", size: 2660, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/setup/error.png", size: 2660, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3086,7 +3086,7 @@ func bindataPublicAssetsImgSetupLogoPurplePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/setup/logo-purple.png", size: 7706, mode: os.FileMode(384), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/setup/logo-purple.png", size: 7706, mode: os.FileMode(384), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3106,7 +3106,7 @@ func bindataPublicAssetsImgSetupLogoPurple2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/setup/logo-purple@2x.png", size: 16907, mode: os.FileMode(384), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/setup/logo-purple@2x.png", size: 16907, mode: os.FileMode(384), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3126,7 +3126,7 @@ func bindataPublicAssetsThemeBraveE188e599a50e31c6aa4927f558647b53Css() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-brave-e188e599a50e31c6aa4927f558647b53.css", size: 414840, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-brave-e188e599a50e31c6aa4927f558647b53.css", size: 414840, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3146,7 +3146,7 @@ func bindataPublicAssetsThemeConferenceD09adc773f645dd2e8f333b3f6069ff2Css() (*a return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-conference-d09adc773f645dd2e8f333b3f6069ff2.css", size: 414840, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-conference-d09adc773f645dd2e8f333b3f6069ff2.css", size: 414840, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3166,7 +3166,7 @@ func bindataPublicAssetsThemeForest7ca416b4fd288ebc8c83a78ba68d08f1Css() (*asset return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-forest-7ca416b4fd288ebc8c83a78ba68d08f1.css", size: 414832, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-forest-7ca416b4fd288ebc8c83a78ba68d08f1.css", size: 414832, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3186,7 +3186,7 @@ func bindataPublicAssetsThemeHarvest174911de20bca50d3d590aecfc4d52ceCss() (*asse return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-harvest-174911de20bca50d3d590aecfc4d52ce.css", size: 414840, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-harvest-174911de20bca50d3d590aecfc4d52ce.css", size: 414840, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3206,7 +3206,7 @@ func bindataPublicAssetsThemeSilverA1725993e7c703c057f98040ae38ce1eCss() (*asset return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-silver-a1725993e7c703c057f98040ae38ce1e.css", size: 414658, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-silver-a1725993e7c703c057f98040ae38ce1e.css", size: 414658, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3226,7 +3226,7 @@ func bindataPublicAssetsThemeSunflower526449d93e32c8516dc8f1f42235862fCss() (*as return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-sunflower-526449d93e32c8516dc8f1f42235862f.css", size: 414848, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-sunflower-526449d93e32c8516dc8f1f42235862f.css", size: 414848, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3246,7 +3246,7 @@ func bindataPublicAssetsVendor90f1cf88476e3c25028ab369aaf4f921Js() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/vendor-90f1cf88476e3c25028ab369aaf4f921.js", size: 1818651, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/vendor-90f1cf88476e3c25028ab369aaf4f921.js", size: 1818651, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3266,7 +3266,7 @@ func bindataPublicAssetsVendorEdb876ab3653e1c4ec07d79685459500Css() (*asset, err return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/vendor-edb876ab3653e1c4ec07d79685459500.css", size: 13535, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/assets/vendor-edb876ab3653e1c4ec07d79685459500.css", size: 13535, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3286,7 +3286,7 @@ func bindataPublicCodemirrorDs_store() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/.DS_Store", size: 12292, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/.DS_Store", size: 12292, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3306,7 +3306,7 @@ func bindataPublicCodemirrorAddonDs_store() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/.DS_Store", size: 6148, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/.DS_Store", size: 6148, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3326,7 +3326,7 @@ func bindataPublicCodemirrorAddonCommentCommentJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/comment/comment.js", size: 3982, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/comment/comment.js", size: 3982, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3346,7 +3346,7 @@ func bindataPublicCodemirrorAddonCommentContinuecommentJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/comment/continuecomment.js", size: 1556, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/comment/continuecomment.js", size: 1556, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3366,7 +3366,7 @@ func bindataPublicCodemirrorAddonDialogDialogCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/dialog/dialog.css", size: 507, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/dialog/dialog.css", size: 507, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3386,7 +3386,7 @@ func bindataPublicCodemirrorAddonDialogDialogJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/dialog/dialog.js", size: 2306, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/dialog/dialog.js", size: 2306, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3406,7 +3406,7 @@ func bindataPublicCodemirrorAddonDisplayAutorefreshJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/autorefresh.js", size: 852, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/autorefresh.js", size: 852, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3426,7 +3426,7 @@ func bindataPublicCodemirrorAddonDisplayFullscreenCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/fullscreen.css", size: 116, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/fullscreen.css", size: 116, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3446,7 +3446,7 @@ func bindataPublicCodemirrorAddonDisplayFullscreenJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/fullscreen.js", size: 888, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/fullscreen.js", size: 888, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3466,7 +3466,7 @@ func bindataPublicCodemirrorAddonDisplayPanelJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/panel.js", size: 2427, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/panel.js", size: 2427, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3486,7 +3486,7 @@ func bindataPublicCodemirrorAddonDisplayPlaceholderJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/placeholder.js", size: 1237, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/placeholder.js", size: 1237, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3506,7 +3506,7 @@ func bindataPublicCodemirrorAddonDisplayRulersJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/rulers.js", size: 1177, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/rulers.js", size: 1177, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3526,7 +3526,7 @@ func bindataPublicCodemirrorAddonEditClosebracketsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/closebrackets.js", size: 3364, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/closebrackets.js", size: 3364, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3546,7 +3546,7 @@ func bindataPublicCodemirrorAddonEditClosetagJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/closetag.js", size: 3403, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/closetag.js", size: 3403, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3566,7 +3566,7 @@ func bindataPublicCodemirrorAddonEditContinuelistJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/continuelist.js", size: 1371, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/continuelist.js", size: 1371, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3586,7 +3586,7 @@ func bindataPublicCodemirrorAddonEditMatchbracketsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/matchbrackets.js", size: 2972, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/matchbrackets.js", size: 2972, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3606,7 +3606,7 @@ func bindataPublicCodemirrorAddonEditMatchtagsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/matchtags.js", size: 1342, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/matchtags.js", size: 1342, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3626,7 +3626,7 @@ func bindataPublicCodemirrorAddonEditTrailingspaceJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/trailingspace.js", size: 503, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/trailingspace.js", size: 503, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3646,7 +3646,7 @@ func bindataPublicCodemirrorAddonFoldBraceFoldJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/brace-fold.js", size: 1905, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/brace-fold.js", size: 1905, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3666,7 +3666,7 @@ func bindataPublicCodemirrorAddonFoldCommentFoldJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/comment-fold.js", size: 1018, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/comment-fold.js", size: 1018, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3686,7 +3686,7 @@ func bindataPublicCodemirrorAddonFoldFoldcodeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldcode.js", size: 2507, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldcode.js", size: 2507, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3706,7 +3706,7 @@ func bindataPublicCodemirrorAddonFoldFoldgutterCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldgutter.css", size: 435, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldgutter.css", size: 435, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3726,7 +3726,7 @@ func bindataPublicCodemirrorAddonFoldFoldgutterJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldgutter.js", size: 2430, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldgutter.js", size: 2430, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3746,7 +3746,7 @@ func bindataPublicCodemirrorAddonFoldIndentFoldJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/indent-fold.js", size: 651, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/indent-fold.js", size: 651, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3766,7 +3766,7 @@ func bindataPublicCodemirrorAddonFoldMarkdownFoldJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/markdown-fold.js", size: 716, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/markdown-fold.js", size: 716, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3786,7 +3786,7 @@ func bindataPublicCodemirrorAddonFoldXmlFoldJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/xml-fold.js", size: 3407, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/xml-fold.js", size: 3407, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3806,7 +3806,7 @@ func bindataPublicCodemirrorAddonHintAnywordHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/anyword-hint.js", size: 788, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/anyword-hint.js", size: 788, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3826,7 +3826,7 @@ func bindataPublicCodemirrorAddonHintCssHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/css-hint.js", size: 1173, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/css-hint.js", size: 1173, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3846,7 +3846,7 @@ func bindataPublicCodemirrorAddonHintHtmlHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/html-hint.js", size: 7630, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/html-hint.js", size: 7630, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3866,7 +3866,7 @@ func bindataPublicCodemirrorAddonHintJavascriptHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/javascript-hint.js", size: 3138, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/javascript-hint.js", size: 3138, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3886,7 +3886,7 @@ func bindataPublicCodemirrorAddonHintShowHintCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/show-hint.css", size: 623, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/show-hint.css", size: 623, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3906,7 +3906,7 @@ func bindataPublicCodemirrorAddonHintShowHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/show-hint.js", size: 8814, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/show-hint.js", size: 8814, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3926,7 +3926,7 @@ func bindataPublicCodemirrorAddonHintSqlHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/sql-hint.js", size: 3727, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/sql-hint.js", size: 3727, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3946,7 +3946,7 @@ func bindataPublicCodemirrorAddonHintXmlHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/xml-hint.js", size: 2150, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/xml-hint.js", size: 2150, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3966,7 +3966,7 @@ func bindataPublicCodemirrorAddonLintCoffeescriptLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/coffeescript-lint.js", size: 750, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/coffeescript-lint.js", size: 750, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3986,7 +3986,7 @@ func bindataPublicCodemirrorAddonLintCssLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/css-lint.js", size: 607, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/css-lint.js", size: 607, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4006,7 +4006,7 @@ func bindataPublicCodemirrorAddonLintHtmlLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/html-lint.js", size: 938, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/html-lint.js", size: 938, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4026,7 +4026,7 @@ func bindataPublicCodemirrorAddonLintJavascriptLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/javascript-lint.js", size: 920, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/javascript-lint.js", size: 920, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4046,7 +4046,7 @@ func bindataPublicCodemirrorAddonLintJsonLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/json-lint.js", size: 629, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/json-lint.js", size: 629, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4066,7 +4066,7 @@ func bindataPublicCodemirrorAddonLintLintCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/lint.css", size: 2999, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/lint.css", size: 2999, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4086,7 +4086,7 @@ func bindataPublicCodemirrorAddonLintLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/lint.js", size: 4217, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/lint.js", size: 4217, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4106,7 +4106,7 @@ func bindataPublicCodemirrorAddonLintYamlLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/yaml-lint.js", size: 540, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/yaml-lint.js", size: 540, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4126,7 +4126,7 @@ func bindataPublicCodemirrorAddonMergeMergeCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/merge/merge.css", size: 3423, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/merge/merge.css", size: 3423, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4146,7 +4146,7 @@ func bindataPublicCodemirrorAddonMergeMergeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/merge/merge.js", size: 18425, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/merge/merge.js", size: 18425, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4166,7 +4166,7 @@ func bindataPublicCodemirrorAddonModeLoadmodeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/loadmode.js", size: 1162, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/loadmode.js", size: 1162, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4186,7 +4186,7 @@ func bindataPublicCodemirrorAddonModeMultiplexJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/multiplex.js", size: 2209, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/multiplex.js", size: 2209, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4206,7 +4206,7 @@ func bindataPublicCodemirrorAddonModeMultiplex_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/multiplex_test.js", size: 492, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/multiplex_test.js", size: 492, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4226,7 +4226,7 @@ func bindataPublicCodemirrorAddonModeOverlayJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/overlay.js", size: 1321, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/overlay.js", size: 1321, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4246,7 +4246,7 @@ func bindataPublicCodemirrorAddonModeSimpleJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/simple.js", size: 4053, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/simple.js", size: 4053, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4266,7 +4266,7 @@ func bindataPublicCodemirrorAddonRunmodeColorizeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/colorize.js", size: 673, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/colorize.js", size: 673, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4286,7 +4286,7 @@ func bindataPublicCodemirrorAddonRunmodeRunmodeStandaloneJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode-standalone.js", size: 3144, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode-standalone.js", size: 3144, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4306,7 +4306,7 @@ func bindataPublicCodemirrorAddonRunmodeRunmodeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode.js", size: 1131, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode.js", size: 1131, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4326,7 +4326,7 @@ func bindataPublicCodemirrorAddonRunmodeRunmodeNodeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode.node.js", size: 4336, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode.node.js", size: 4336, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4346,7 +4346,7 @@ func bindataPublicCodemirrorAddonScrollAnnotatescrollbarJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/annotatescrollbar.js", size: 2653, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/annotatescrollbar.js", size: 2653, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4366,7 +4366,7 @@ func bindataPublicCodemirrorAddonScrollScrollpastendJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/scrollpastend.js", size: 797, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/scrollpastend.js", size: 797, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4386,7 +4386,7 @@ func bindataPublicCodemirrorAddonScrollSimplescrollbarsCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/simplescrollbars.css", size: 1347, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/simplescrollbars.css", size: 1347, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4406,7 +4406,7 @@ func bindataPublicCodemirrorAddonScrollSimplescrollbarsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/simplescrollbars.js", size: 3101, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/simplescrollbars.js", size: 3101, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4426,7 +4426,7 @@ func bindataPublicCodemirrorAddonSearchJumpToLineJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/jump-to-line.js", size: 1161, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/jump-to-line.js", size: 1161, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4446,7 +4446,7 @@ func bindataPublicCodemirrorAddonSearchMatchHighlighterJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/match-highlighter.js", size: 2710, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/match-highlighter.js", size: 2710, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4466,7 +4466,7 @@ func bindataPublicCodemirrorAddonSearchMatchesonscrollbarCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/matchesonscrollbar.css", size: 188, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/matchesonscrollbar.css", size: 188, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4486,7 +4486,7 @@ func bindataPublicCodemirrorAddonSearchMatchesonscrollbarJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/matchesonscrollbar.js", size: 2144, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/matchesonscrollbar.js", size: 2144, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4506,7 +4506,7 @@ func bindataPublicCodemirrorAddonSearchSearchJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/search.js", size: 5389, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/search.js", size: 5389, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4526,7 +4526,7 @@ func bindataPublicCodemirrorAddonSearchSearchcursorJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/searchcursor.js", size: 5185, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/searchcursor.js", size: 5185, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4546,7 +4546,7 @@ func bindataPublicCodemirrorAddonSelectionActiveLineJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/active-line.js", size: 1347, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/active-line.js", size: 1347, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4566,7 +4566,7 @@ func bindataPublicCodemirrorAddonSelectionMarkSelectionJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/mark-selection.js", size: 1779, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/mark-selection.js", size: 1779, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4586,7 +4586,7 @@ func bindataPublicCodemirrorAddonSelectionSelectionPointerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/selection-pointer.js", size: 1915, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/selection-pointer.js", size: 1915, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4606,7 +4606,7 @@ func bindataPublicCodemirrorAddonTernTernCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/tern.css", size: 1872, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/tern.css", size: 1872, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4626,7 +4626,7 @@ func bindataPublicCodemirrorAddonTernTernJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/tern.js", size: 11800, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/tern.js", size: 11800, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4646,7 +4646,7 @@ func bindataPublicCodemirrorAddonTernWorkerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/worker.js", size: 760, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/worker.js", size: 760, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4666,7 +4666,7 @@ func bindataPublicCodemirrorAddonWrapHardwrapJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/wrap/hardwrap.js", size: 2445, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/wrap/hardwrap.js", size: 2445, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4686,7 +4686,7 @@ func bindataPublicCodemirrorLibCodemirrorJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/lib/codemirror.js", size: 168436, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/lib/codemirror.js", size: 168436, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4706,7 +4706,7 @@ func bindataPublicCodemirrorModeAplAplJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/apl/apl.js", size: 2657, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/apl/apl.js", size: 2657, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4726,7 +4726,7 @@ func bindataPublicCodemirrorModeAplIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/apl/index.html", size: 2663, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/apl/index.html", size: 2663, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4746,7 +4746,7 @@ func bindataPublicCodemirrorModeAsciiarmorAsciiarmorJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asciiarmor/asciiarmor.js", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asciiarmor/asciiarmor.js", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4766,7 +4766,7 @@ func bindataPublicCodemirrorModeAsciiarmorIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asciiarmor/index.html", size: 1652, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asciiarmor/index.html", size: 1652, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4786,7 +4786,7 @@ func bindataPublicCodemirrorModeAsn1Asn1Js() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asn.1/asn.1.js", size: 4199, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asn.1/asn.1.js", size: 4199, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4806,7 +4806,7 @@ func bindataPublicCodemirrorModeAsn1IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asn.1/index.html", size: 2748, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asn.1/index.html", size: 2748, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4826,7 +4826,7 @@ func bindataPublicCodemirrorModeAsteriskAsteriskJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asterisk/asterisk.js", size: 4330, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asterisk/asterisk.js", size: 4330, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4846,7 +4846,7 @@ func bindataPublicCodemirrorModeAsteriskIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asterisk/index.html", size: 5134, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asterisk/index.html", size: 5134, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4866,7 +4866,7 @@ func bindataPublicCodemirrorModeBrainfuckBrainfuckJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/brainfuck/brainfuck.js", size: 815, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/brainfuck/brainfuck.js", size: 815, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4886,7 +4886,7 @@ func bindataPublicCodemirrorModeBrainfuckIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/brainfuck/index.html", size: 3822, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/brainfuck/index.html", size: 3822, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4906,7 +4906,7 @@ func bindataPublicCodemirrorModeClikeClikeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/clike.js", size: 20062, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/clike.js", size: 20062, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4926,7 +4926,7 @@ func bindataPublicCodemirrorModeClikeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/index.html", size: 11355, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/index.html", size: 11355, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4946,7 +4946,7 @@ func bindataPublicCodemirrorModeClikeScalaHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/scala.html", size: 29002, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/scala.html", size: 29002, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4966,7 +4966,7 @@ func bindataPublicCodemirrorModeClikeTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/test.js", size: 3565, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/test.js", size: 3565, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4986,7 +4986,7 @@ func bindataPublicCodemirrorModeClojureClojureJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/clojure.js", size: 11116, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/clojure.js", size: 11116, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5006,7 +5006,7 @@ func bindataPublicCodemirrorModeClojureIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/index.html", size: 3372, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/index.html", size: 3372, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5026,7 +5026,7 @@ func bindataPublicCodemirrorModeClojureTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/test.js", size: 14681, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/test.js", size: 14681, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5046,7 +5046,7 @@ func bindataPublicCodemirrorModeCmakeCmakeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cmake/cmake.js", size: 1010, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cmake/cmake.js", size: 1010, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5066,7 +5066,7 @@ func bindataPublicCodemirrorModeCmakeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cmake/index.html", size: 4636, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cmake/index.html", size: 4636, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5086,7 +5086,7 @@ func bindataPublicCodemirrorModeCobolCobolJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cobol/cobol.js", size: 6418, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cobol/cobol.js", size: 6418, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5106,7 +5106,7 @@ func bindataPublicCodemirrorModeCobolIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cobol/index.html", size: 9373, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cobol/index.html", size: 9373, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5126,7 +5126,7 @@ func bindataPublicCodemirrorModeCoffeescriptCoffeescriptJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/coffeescript/coffeescript.js", size: 4209, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/coffeescript/coffeescript.js", size: 4209, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5146,7 +5146,7 @@ func bindataPublicCodemirrorModeCoffeescriptIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/coffeescript/index.html", size: 22800, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/coffeescript/index.html", size: 22800, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5166,7 +5166,7 @@ func bindataPublicCodemirrorModeCommonlispCommonlispJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/commonlisp/commonlisp.js", size: 2536, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/commonlisp/commonlisp.js", size: 2536, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5186,7 +5186,7 @@ func bindataPublicCodemirrorModeCommonlispIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/commonlisp/index.html", size: 7014, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/commonlisp/index.html", size: 7014, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5206,7 +5206,7 @@ func bindataPublicCodemirrorModeCrystalCrystalJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/crystal/crystal.js", size: 5302, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/crystal/crystal.js", size: 5302, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5226,7 +5226,7 @@ func bindataPublicCodemirrorModeCrystalIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/crystal/index.html", size: 3089, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/crystal/index.html", size: 3089, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5246,7 +5246,7 @@ func bindataPublicCodemirrorModeCssCssJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/css.js", size: 24817, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/css.js", size: 24817, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5266,7 +5266,7 @@ func bindataPublicCodemirrorModeCssGssHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/gss.html", size: 3796, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/gss.html", size: 3796, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5286,7 +5286,7 @@ func bindataPublicCodemirrorModeCssGss_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/gss_test.js", size: 256, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/gss_test.js", size: 256, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5306,7 +5306,7 @@ func bindataPublicCodemirrorModeCssIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/index.html", size: 2717, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/index.html", size: 2717, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5326,7 +5326,7 @@ func bindataPublicCodemirrorModeCssLessHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/less.html", size: 4548, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/less.html", size: 4548, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5346,7 +5346,7 @@ func bindataPublicCodemirrorModeCssLess_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/less_test.js", size: 1473, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/less_test.js", size: 1473, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5366,7 +5366,7 @@ func bindataPublicCodemirrorModeCssScssHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/scss.html", size: 3284, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/scss.html", size: 3284, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5386,7 +5386,7 @@ func bindataPublicCodemirrorModeCssScss_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/scss_test.js", size: 2562, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/scss_test.js", size: 2562, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5406,7 +5406,7 @@ func bindataPublicCodemirrorModeCssTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/test.js", size: 5883, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/test.js", size: 5883, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5426,7 +5426,7 @@ func bindataPublicCodemirrorModeCypherCypherJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/cypher.js", size: 3462, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/cypher.js", size: 3462, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5446,7 +5446,7 @@ func bindataPublicCodemirrorModeCypherIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/index.html", size: 2449, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/index.html", size: 2449, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5466,7 +5466,7 @@ func bindataPublicCodemirrorModeCypherTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/test.js", size: 1047, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/test.js", size: 1047, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5486,7 +5486,7 @@ func bindataPublicCodemirrorModeDDJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/d.js", size: 3996, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/d.js", size: 3996, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5506,7 +5506,7 @@ func bindataPublicCodemirrorModeDIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/index.html", size: 6816, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/index.html", size: 6816, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5526,7 +5526,7 @@ func bindataPublicCodemirrorModeDTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/test.js", size: 238, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/test.js", size: 238, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5546,7 +5546,7 @@ func bindataPublicCodemirrorModeDartDartJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dart/dart.js", size: 2315, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dart/dart.js", size: 2315, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5566,7 +5566,7 @@ func bindataPublicCodemirrorModeDartIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dart/index.html", size: 2111, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dart/index.html", size: 2111, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5586,7 +5586,7 @@ func bindataPublicCodemirrorModeDiffDiffJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/diff/diff.js", size: 558, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/diff/diff.js", size: 558, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5606,7 +5606,7 @@ func bindataPublicCodemirrorModeDiffIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/diff/index.html", size: 4732, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/diff/index.html", size: 4732, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5626,7 +5626,7 @@ func bindataPublicCodemirrorModeDjangoDjangoJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/django/django.js", size: 4820, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/django/django.js", size: 4820, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5646,7 +5646,7 @@ func bindataPublicCodemirrorModeDjangoIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/django/index.html", size: 2867, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/django/index.html", size: 2867, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5666,7 +5666,7 @@ func bindataPublicCodemirrorModeDockerfileDockerfileJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/dockerfile.js", size: 2197, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/dockerfile.js", size: 2197, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5686,7 +5686,7 @@ func bindataPublicCodemirrorModeDockerfileIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/index.html", size: 2735, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/index.html", size: 2735, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5706,7 +5706,7 @@ func bindataPublicCodemirrorModeDockerfileTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/test.js", size: 4210, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/test.js", size: 4210, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5726,7 +5726,7 @@ func bindataPublicCodemirrorModeDtdDtdJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dtd/dtd.js", size: 2255, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dtd/dtd.js", size: 2255, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5746,7 +5746,7 @@ func bindataPublicCodemirrorModeDtdIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dtd/index.html", size: 3644, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dtd/index.html", size: 3644, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5766,7 +5766,7 @@ func bindataPublicCodemirrorModeDylanDylanJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/dylan.js", size: 4232, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/dylan.js", size: 4232, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5786,7 +5786,7 @@ func bindataPublicCodemirrorModeDylanIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/index.html", size: 13822, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/index.html", size: 13822, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5806,7 +5806,7 @@ func bindataPublicCodemirrorModeDylanTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/test.js", size: 2144, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/test.js", size: 2144, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5826,7 +5826,7 @@ func bindataPublicCodemirrorModeEbnfEbnfJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ebnf/ebnf.js", size: 2438, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ebnf/ebnf.js", size: 2438, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5846,7 +5846,7 @@ func bindataPublicCodemirrorModeEbnfIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ebnf/index.html", size: 2918, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ebnf/index.html", size: 2918, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5866,7 +5866,7 @@ func bindataPublicCodemirrorModeEclEclJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ecl/ecl.js", size: 5349, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ecl/ecl.js", size: 5349, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5886,7 +5886,7 @@ func bindataPublicCodemirrorModeEclIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ecl/index.html", size: 1732, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ecl/index.html", size: 1732, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5906,7 +5906,7 @@ func bindataPublicCodemirrorModeEiffelEiffelJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/eiffel/eiffel.js", size: 2042, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/eiffel/eiffel.js", size: 2042, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5926,7 +5926,7 @@ func bindataPublicCodemirrorModeEiffelIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/eiffel/index.html", size: 13521, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/eiffel/index.html", size: 13521, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5946,7 +5946,7 @@ func bindataPublicCodemirrorModeElmElmJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/elm/elm.js", size: 2167, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/elm/elm.js", size: 2167, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5966,7 +5966,7 @@ func bindataPublicCodemirrorModeElmIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/elm/index.html", size: 1947, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/elm/index.html", size: 1947, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5986,7 +5986,7 @@ func bindataPublicCodemirrorModeErlangErlangJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/erlang/erlang.js", size: 8282, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/erlang/erlang.js", size: 8282, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6006,7 +6006,7 @@ func bindataPublicCodemirrorModeErlangIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/erlang/index.html", size: 2636, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/erlang/index.html", size: 2636, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6026,7 +6026,7 @@ func bindataPublicCodemirrorModeFactorFactorJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/factor/factor.js", size: 1913, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/factor/factor.js", size: 1913, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6046,7 +6046,7 @@ func bindataPublicCodemirrorModeFactorIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/factor/index.html", size: 2508, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/factor/index.html", size: 2508, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6066,7 +6066,7 @@ func bindataPublicCodemirrorModeFclFclJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/fcl/fcl.js", size: 2331, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/fcl/fcl.js", size: 2331, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6086,7 +6086,7 @@ func bindataPublicCodemirrorModeFclIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/fcl/index.html", size: 3575, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/fcl/index.html", size: 3575, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6106,7 +6106,7 @@ func bindataPublicCodemirrorModeForthForthJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/forth/forth.js", size: 2920, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/forth/forth.js", size: 2920, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6126,7 +6126,7 @@ func bindataPublicCodemirrorModeForthIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/forth/index.html", size: 2106, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/forth/index.html", size: 2106, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6146,7 +6146,7 @@ func bindataPublicCodemirrorModeFortranFortranJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/fortran/fortran.js", size: 4889, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/fortran/fortran.js", size: 4889, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6166,7 +6166,7 @@ func bindataPublicCodemirrorModeFortranIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/fortran/index.html", size: 2799, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/fortran/index.html", size: 2799, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6186,7 +6186,7 @@ func bindataPublicCodemirrorModeGasGasJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gas/gas.js", size: 4413, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gas/gas.js", size: 4413, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6206,7 +6206,7 @@ func bindataPublicCodemirrorModeGasIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gas/index.html", size: 2163, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gas/index.html", size: 2163, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6226,7 +6226,7 @@ func bindataPublicCodemirrorModeGfmGfmJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/gfm.js", size: 2754, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/gfm.js", size: 2754, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6246,7 +6246,7 @@ func bindataPublicCodemirrorModeGfmIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/index.html", size: 5255, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/index.html", size: 5255, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6266,7 +6266,7 @@ func bindataPublicCodemirrorModeGfmTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/test.js", size: 5271, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/test.js", size: 5271, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6286,7 +6286,7 @@ func bindataPublicCodemirrorModeGherkinGherkinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gherkin/gherkin.js", size: 10411, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gherkin/gherkin.js", size: 10411, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6306,7 +6306,7 @@ func bindataPublicCodemirrorModeGherkinIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gherkin/index.html", size: 1889, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gherkin/index.html", size: 1889, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6326,7 +6326,7 @@ func bindataPublicCodemirrorModeGoGoJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/go/go.js", size: 3042, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/go/go.js", size: 3042, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6346,7 +6346,7 @@ func bindataPublicCodemirrorModeGoIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/go/index.html", size: 2658, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/go/index.html", size: 2658, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6366,7 +6366,7 @@ func bindataPublicCodemirrorModeGroovyGroovyJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/groovy/groovy.js", size: 4077, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/groovy/groovy.js", size: 4077, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6386,7 +6386,7 @@ func bindataPublicCodemirrorModeGroovyIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/groovy/index.html", size: 2661, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/groovy/index.html", size: 2661, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6406,7 +6406,7 @@ func bindataPublicCodemirrorModeHamlHamlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/haml.js", size: 2263, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/haml.js", size: 2263, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6426,7 +6426,7 @@ func bindataPublicCodemirrorModeHamlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/index.html", size: 3038, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/index.html", size: 3038, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6446,7 +6446,7 @@ func bindataPublicCodemirrorModeHamlTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/test.js", size: 2285, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/test.js", size: 2285, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6466,7 +6466,7 @@ func bindataPublicCodemirrorModeHandlebarsHandlebarsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/handlebars/handlebars.js", size: 1350, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/handlebars/handlebars.js", size: 1350, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6486,7 +6486,7 @@ func bindataPublicCodemirrorModeHandlebarsIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/handlebars/index.html", size: 3221, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/handlebars/index.html", size: 3221, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6506,7 +6506,7 @@ func bindataPublicCodemirrorModeHaskellHaskellJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell/haskell.js", size: 4562, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell/haskell.js", size: 4562, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6526,7 +6526,7 @@ func bindataPublicCodemirrorModeHaskellIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell/index.html", size: 2662, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell/index.html", size: 2662, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6546,7 +6546,7 @@ func bindataPublicCodemirrorModeHaskellLiterateHaskellLiterateJs() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell-literate/haskell-literate.js", size: 692, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell-literate/haskell-literate.js", size: 692, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6566,7 +6566,7 @@ func bindataPublicCodemirrorModeHaskellLiterateIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell-literate/index.html", size: 9865, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell-literate/index.html", size: 9865, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6586,7 +6586,7 @@ func bindataPublicCodemirrorModeHaxeHaxeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haxe/haxe.js", size: 8113, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haxe/haxe.js", size: 8113, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6606,7 +6606,7 @@ func bindataPublicCodemirrorModeHaxeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haxe/index.html", size: 2884, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haxe/index.html", size: 2884, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6626,7 +6626,7 @@ func bindataPublicCodemirrorModeHtmlembeddedHtmlembeddedJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlembedded/htmlembedded.js", size: 1068, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlembedded/htmlembedded.js", size: 1068, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6646,7 +6646,7 @@ func bindataPublicCodemirrorModeHtmlembeddedIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlembedded/index.html", size: 3198, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlembedded/index.html", size: 3198, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6666,7 +6666,7 @@ func bindataPublicCodemirrorModeHtmlmixedHtmlmixedJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlmixed/htmlmixed.js", size: 2888, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlmixed/htmlmixed.js", size: 2888, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6686,7 +6686,7 @@ func bindataPublicCodemirrorModeHtmlmixedIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlmixed/index.html", size: 4547, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlmixed/index.html", size: 4547, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6706,7 +6706,7 @@ func bindataPublicCodemirrorModeHttpHttpJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/http/http.js", size: 1253, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/http/http.js", size: 1253, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6726,7 +6726,7 @@ func bindataPublicCodemirrorModeHttpIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/http/index.html", size: 1700, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/http/index.html", size: 1700, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6746,7 +6746,7 @@ func bindataPublicCodemirrorModeIdlIdlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/idl/idl.js", size: 11960, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/idl/idl.js", size: 11960, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6766,7 +6766,7 @@ func bindataPublicCodemirrorModeIdlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/idl/index.html", size: 2159, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/idl/index.html", size: 2159, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6786,7 +6786,7 @@ func bindataPublicCodemirrorModeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/index.html", size: 8295, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/index.html", size: 8295, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6806,7 +6806,7 @@ func bindataPublicCodemirrorModeJadeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jade/index.html", size: 3437, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jade/index.html", size: 3437, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6826,7 +6826,7 @@ func bindataPublicCodemirrorModeJadeJadeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jade/jade.js", size: 7952, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jade/jade.js", size: 7952, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6846,7 +6846,7 @@ func bindataPublicCodemirrorModeJavascriptIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/index.html", size: 4983, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/index.html", size: 4983, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6866,7 +6866,7 @@ func bindataPublicCodemirrorModeJavascriptJavascriptJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/javascript.js", size: 16157, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/javascript.js", size: 16157, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6886,7 +6886,7 @@ func bindataPublicCodemirrorModeJavascriptJsonLdHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/json-ld.html", size: 2940, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/json-ld.html", size: 2940, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6906,7 +6906,7 @@ func bindataPublicCodemirrorModeJavascriptTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/test.js", size: 16698, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/test.js", size: 16698, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6926,7 +6926,7 @@ func bindataPublicCodemirrorModeJavascriptTypescriptHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/typescript.html", size: 2083, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/typescript.html", size: 2083, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6946,7 +6946,7 @@ func bindataPublicCodemirrorModeJinja2IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jinja2/index.html", size: 2062, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jinja2/index.html", size: 2062, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6966,7 +6966,7 @@ func bindataPublicCodemirrorModeJinja2Jinja2Js() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jinja2/jinja2.js", size: 2135, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jinja2/jinja2.js", size: 2135, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6986,7 +6986,7 @@ func bindataPublicCodemirrorModeJsxIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/index.html", size: 3039, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/index.html", size: 3039, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7006,7 +7006,7 @@ func bindataPublicCodemirrorModeJsxJsxJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/jsx.js", size: 2344, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/jsx.js", size: 2344, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7026,7 +7026,7 @@ func bindataPublicCodemirrorModeJsxTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/test.js", size: 3577, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/test.js", size: 3577, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7046,7 +7046,7 @@ func bindataPublicCodemirrorModeJuliaIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/julia/index.html", size: 2901, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/julia/index.html", size: 2901, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7066,7 +7066,7 @@ func bindataPublicCodemirrorModeJuliaJuliaJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/julia/julia.js", size: 6138, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/julia/julia.js", size: 6138, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7086,7 +7086,7 @@ func bindataPublicCodemirrorModeLivescriptIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/livescript/index.html", size: 10166, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/livescript/index.html", size: 10166, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7106,7 +7106,7 @@ func bindataPublicCodemirrorModeLivescriptLivescriptJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/livescript/livescript.js", size: 4418, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/livescript/livescript.js", size: 4418, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7126,7 +7126,7 @@ func bindataPublicCodemirrorModeLuaIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/lua/index.html", size: 2558, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/lua/index.html", size: 2558, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7146,7 +7146,7 @@ func bindataPublicCodemirrorModeLuaLuaJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/lua/lua.js", size: 3597, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/lua/lua.js", size: 3597, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7166,7 +7166,7 @@ func bindataPublicCodemirrorModeMarkdownIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/index.html", size: 13112, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/index.html", size: 13112, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7186,7 +7186,7 @@ func bindataPublicCodemirrorModeMarkdownMarkdownJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/markdown.js", size: 14821, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/markdown.js", size: 14821, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7206,7 +7206,7 @@ func bindataPublicCodemirrorModeMarkdownTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/test.js", size: 25879, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/test.js", size: 25879, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7226,7 +7226,7 @@ func bindataPublicCodemirrorModeMathematicaIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mathematica/index.html", size: 2255, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mathematica/index.html", size: 2255, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7246,7 +7246,7 @@ func bindataPublicCodemirrorModeMathematicaMathematicaJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mathematica/mathematica.js", size: 2177, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mathematica/mathematica.js", size: 2177, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7266,7 +7266,7 @@ func bindataPublicCodemirrorModeMboxIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mbox/index.html", size: 1616, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mbox/index.html", size: 1616, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7286,7 +7286,7 @@ func bindataPublicCodemirrorModeMboxMboxJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mbox/mbox.js", size: 1666, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mbox/mbox.js", size: 1666, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7306,7 +7306,7 @@ func bindataPublicCodemirrorModeMetaJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/meta.js", size: 12533, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/meta.js", size: 12533, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7326,7 +7326,7 @@ func bindataPublicCodemirrorModeMircIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mirc/index.html", size: 6340, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mirc/index.html", size: 6340, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7346,7 +7346,7 @@ func bindataPublicCodemirrorModeMircMircJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mirc/mirc.js", size: 6166, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mirc/mirc.js", size: 6166, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7366,7 +7366,7 @@ func bindataPublicCodemirrorModeMllikeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mllike/index.html", size: 4669, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mllike/index.html", size: 4669, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7386,7 +7386,7 @@ func bindataPublicCodemirrorModeMllikeMllikeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mllike/mllike.js", size: 5087, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mllike/mllike.js", size: 5087, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7406,7 +7406,7 @@ func bindataPublicCodemirrorModeModelicaIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/modelica/index.html", size: 2813, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/modelica/index.html", size: 2813, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7426,7 +7426,7 @@ func bindataPublicCodemirrorModeModelicaModelicaJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/modelica/modelica.js", size: 3299, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/modelica/modelica.js", size: 3299, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7446,7 +7446,7 @@ func bindataPublicCodemirrorModeMscgenIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/index.html", size: 4633, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/index.html", size: 4633, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7466,7 +7466,7 @@ func bindataPublicCodemirrorModeMscgenMscgenJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/mscgen.js", size: 3917, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/mscgen.js", size: 3917, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7486,7 +7486,7 @@ func bindataPublicCodemirrorModeMscgenMscgen_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/mscgen_test.js", size: 3308, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/mscgen_test.js", size: 3308, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7506,7 +7506,7 @@ func bindataPublicCodemirrorModeMscgenMsgenny_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/msgenny_test.js", size: 2800, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/msgenny_test.js", size: 2800, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7526,7 +7526,7 @@ func bindataPublicCodemirrorModeMscgenXu_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/xu_test.js", size: 3662, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/xu_test.js", size: 3662, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7546,7 +7546,7 @@ func bindataPublicCodemirrorModeMumpsIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mumps/index.html", size: 2915, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mumps/index.html", size: 2915, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7566,7 +7566,7 @@ func bindataPublicCodemirrorModeMumpsMumpsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mumps/mumps.js", size: 2283, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mumps/mumps.js", size: 2283, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7586,7 +7586,7 @@ func bindataPublicCodemirrorModeNginxIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/nginx/index.html", size: 5566, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/nginx/index.html", size: 5566, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7606,7 +7606,7 @@ func bindataPublicCodemirrorModeNginxNginxJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/nginx/nginx.js", size: 7526, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/nginx/nginx.js", size: 7526, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7626,7 +7626,7 @@ func bindataPublicCodemirrorModeNsisIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/nsis/index.html", size: 2087, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/nsis/index.html", size: 2087, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7646,7 +7646,7 @@ func bindataPublicCodemirrorModeNsisNsisJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/nsis/nsis.js", size: 6805, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/nsis/nsis.js", size: 6805, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7666,7 +7666,7 @@ func bindataPublicCodemirrorModeNtriplesIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ntriples/index.html", size: 2754, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ntriples/index.html", size: 2754, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7686,7 +7686,7 @@ func bindataPublicCodemirrorModeNtriplesNtriplesJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ntriples/ntriples.js", size: 2467, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ntriples/ntriples.js", size: 2467, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7706,7 +7706,7 @@ func bindataPublicCodemirrorModeOctaveIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/octave/index.html", size: 2331, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/octave/index.html", size: 2331, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7726,7 +7726,7 @@ func bindataPublicCodemirrorModeOctaveOctaveJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/octave/octave.js", size: 2566, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/octave/octave.js", size: 2566, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7746,7 +7746,7 @@ func bindataPublicCodemirrorModeOzIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/oz/index.html", size: 1827, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/oz/index.html", size: 1827, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7766,7 +7766,7 @@ func bindataPublicCodemirrorModeOzOzJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/oz/oz.js", size: 3120, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/oz/oz.js", size: 3120, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7786,7 +7786,7 @@ func bindataPublicCodemirrorModePascalIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pascal/index.html", size: 1747, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pascal/index.html", size: 1747, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7806,7 +7806,7 @@ func bindataPublicCodemirrorModePascalPascalJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pascal/pascal.js", size: 2299, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pascal/pascal.js", size: 2299, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7826,7 +7826,7 @@ func bindataPublicCodemirrorModePegjsIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pegjs/index.html", size: 2358, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pegjs/index.html", size: 2358, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7846,7 +7846,7 @@ func bindataPublicCodemirrorModePegjsPegjsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pegjs/pegjs.js", size: 1644, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pegjs/pegjs.js", size: 1644, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7866,7 +7866,7 @@ func bindataPublicCodemirrorModePerlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/perl/index.html", size: 1849, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/perl/index.html", size: 1849, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7886,7 +7886,7 @@ func bindataPublicCodemirrorModePerlPerlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/perl/perl.js", size: 9822, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/perl/perl.js", size: 9822, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7906,7 +7906,7 @@ func bindataPublicCodemirrorModePhpIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/index.html", size: 3273, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/index.html", size: 3273, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7926,7 +7926,7 @@ func bindataPublicCodemirrorModePhpPhpJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/php.js", size: 13919, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/php.js", size: 13919, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7946,7 +7946,7 @@ func bindataPublicCodemirrorModePhpTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/test.js", size: 5327, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/test.js", size: 5327, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7966,7 +7966,7 @@ func bindataPublicCodemirrorModePigIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pig/index.html", size: 1798, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pig/index.html", size: 1798, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7986,7 +7986,7 @@ func bindataPublicCodemirrorModePigPigJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pig/pig.js", size: 2869, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pig/pig.js", size: 2869, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8006,7 +8006,7 @@ func bindataPublicCodemirrorModePowershellIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/index.html", size: 7918, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/index.html", size: 7918, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8026,7 +8026,7 @@ func bindataPublicCodemirrorModePowershellPowershellJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/powershell.js", size: 8043, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/powershell.js", size: 8043, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8046,7 +8046,7 @@ func bindataPublicCodemirrorModePowershellTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/test.js", size: 2393, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/test.js", size: 2393, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8066,7 +8066,7 @@ func bindataPublicCodemirrorModePropertiesIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/properties/index.html", size: 1878, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/properties/index.html", size: 1878, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8086,7 +8086,7 @@ func bindataPublicCodemirrorModePropertiesPropertiesJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/properties/properties.js", size: 960, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/properties/properties.js", size: 960, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8106,7 +8106,7 @@ func bindataPublicCodemirrorModeProtobufIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/protobuf/index.html", size: 2949, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/protobuf/index.html", size: 2949, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8126,7 +8126,7 @@ func bindataPublicCodemirrorModeProtobufProtobufJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/protobuf/protobuf.js", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/protobuf/protobuf.js", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8146,7 +8146,7 @@ func bindataPublicCodemirrorModePugIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pug/index.html", size: 3440, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pug/index.html", size: 3440, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8166,7 +8166,7 @@ func bindataPublicCodemirrorModePugPugJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pug/pug.js", size: 8020, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pug/pug.js", size: 8020, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8186,7 +8186,7 @@ func bindataPublicCodemirrorModePuppetIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/puppet/index.html", size: 3744, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/puppet/index.html", size: 3744, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8206,7 +8206,7 @@ func bindataPublicCodemirrorModePuppetPuppetJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/puppet/puppet.js", size: 2768, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/puppet/puppet.js", size: 2768, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8226,7 +8226,7 @@ func bindataPublicCodemirrorModePythonIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/index.html", size: 6744, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/index.html", size: 6744, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8246,7 +8246,7 @@ func bindataPublicCodemirrorModePythonPythonJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/python.js", size: 6414, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/python.js", size: 6414, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8266,7 +8266,7 @@ func bindataPublicCodemirrorModePythonTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/test.js", size: 1442, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/test.js", size: 1442, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8286,7 +8286,7 @@ func bindataPublicCodemirrorModeQIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/q/index.html", size: 9429, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/q/index.html", size: 9429, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8306,7 +8306,7 @@ func bindataPublicCodemirrorModeQQJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/q/q.js", size: 4225, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/q/q.js", size: 4225, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8326,7 +8326,7 @@ func bindataPublicCodemirrorModeRIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/r/index.html", size: 2841, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/r/index.html", size: 2841, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8346,7 +8346,7 @@ func bindataPublicCodemirrorModeRRJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/r/r.js", size: 3199, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/r/r.js", size: 3199, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8366,7 +8366,7 @@ func bindataPublicCodemirrorModeRpmChangesIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/changes/index.html", size: 2326, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/changes/index.html", size: 2326, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8386,7 +8386,7 @@ func bindataPublicCodemirrorModeRpmIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/index.html", size: 4930, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/index.html", size: 4930, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8406,7 +8406,7 @@ func bindataPublicCodemirrorModeRpmRpmJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/rpm.js", size: 1964, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/rpm.js", size: 1964, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8426,7 +8426,7 @@ func bindataPublicCodemirrorModeRstIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rst/index.html", size: 18237, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rst/index.html", size: 18237, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8446,7 +8446,7 @@ func bindataPublicCodemirrorModeRstRstJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rst/rst.js", size: 6620, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rst/rst.js", size: 6620, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8466,7 +8466,7 @@ func bindataPublicCodemirrorModeRubyIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/index.html", size: 6233, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/index.html", size: 6233, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8486,7 +8486,7 @@ func bindataPublicCodemirrorModeRubyRubyJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/ruby.js", size: 5280, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/ruby.js", size: 5280, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8506,7 +8506,7 @@ func bindataPublicCodemirrorModeRubyTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/test.js", size: 480, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/test.js", size: 480, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8526,7 +8526,7 @@ func bindataPublicCodemirrorModeRustIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/index.html", size: 2000, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/index.html", size: 2000, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8546,7 +8546,7 @@ func bindataPublicCodemirrorModeRustRustJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/rust.js", size: 2361, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/rust.js", size: 2361, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8566,7 +8566,7 @@ func bindataPublicCodemirrorModeRustTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/test.js", size: 676, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/test.js", size: 676, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8586,7 +8586,7 @@ func bindataPublicCodemirrorModeSasIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sas/index.html", size: 2322, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sas/index.html", size: 2322, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8606,7 +8606,7 @@ func bindataPublicCodemirrorModeSasSasJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sas/sas.js", size: 9537, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sas/sas.js", size: 9537, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8626,7 +8626,7 @@ func bindataPublicCodemirrorModeSassIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/index.html", size: 2276, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/index.html", size: 2276, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8646,7 +8646,7 @@ func bindataPublicCodemirrorModeSassSassJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/sass.js", size: 4624, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/sass.js", size: 4624, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8666,7 +8666,7 @@ func bindataPublicCodemirrorModeSassTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/test.js", size: 3627, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/test.js", size: 3627, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8686,7 +8686,7 @@ func bindataPublicCodemirrorModeSchemeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/scheme/index.html", size: 2877, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/scheme/index.html", size: 2877, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8706,7 +8706,7 @@ func bindataPublicCodemirrorModeSchemeSchemeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/scheme/scheme.js", size: 6312, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/scheme/scheme.js", size: 6312, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8726,7 +8726,7 @@ func bindataPublicCodemirrorModeShellIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/index.html", size: 1938, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/index.html", size: 1938, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8746,7 +8746,7 @@ func bindataPublicCodemirrorModeShellShellJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/shell.js", size: 2563, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/shell.js", size: 2563, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8766,7 +8766,7 @@ func bindataPublicCodemirrorModeShellTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/test.js", size: 1763, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/test.js", size: 1763, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8786,7 +8786,7 @@ func bindataPublicCodemirrorModeSieveIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sieve/index.html", size: 2658, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sieve/index.html", size: 2658, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8806,7 +8806,7 @@ func bindataPublicCodemirrorModeSieveSieveJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sieve/sieve.js", size: 1868, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sieve/sieve.js", size: 1868, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8826,7 +8826,7 @@ func bindataPublicCodemirrorModeSlimIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/index.html", size: 4370, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/index.html", size: 4370, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8846,7 +8846,7 @@ func bindataPublicCodemirrorModeSlimSlimJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/slim.js", size: 7489, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/slim.js", size: 7489, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8866,7 +8866,7 @@ func bindataPublicCodemirrorModeSlimTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/test.js", size: 2451, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/test.js", size: 2451, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8886,7 +8886,7 @@ func bindataPublicCodemirrorModeSmalltalkIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/smalltalk/index.html", size: 2388, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/smalltalk/index.html", size: 2388, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8906,7 +8906,7 @@ func bindataPublicCodemirrorModeSmalltalkSmalltalkJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/smalltalk/smalltalk.js", size: 2216, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/smalltalk/smalltalk.js", size: 2216, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8926,7 +8926,7 @@ func bindataPublicCodemirrorModeSmartyIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/smarty/index.html", size: 4441, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/smarty/index.html", size: 4441, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8946,7 +8946,7 @@ func bindataPublicCodemirrorModeSmartySmartyJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/smarty/smarty.js", size: 2971, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/smarty/smarty.js", size: 2971, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8966,7 +8966,7 @@ func bindataPublicCodemirrorModeSolrIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/solr/index.html", size: 1672, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/solr/index.html", size: 1672, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8986,7 +8986,7 @@ func bindataPublicCodemirrorModeSolrSolrJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/solr/solr.js", size: 1139, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/solr/solr.js", size: 1139, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9006,7 +9006,7 @@ func bindataPublicCodemirrorModeSoyIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/index.html", size: 3051, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/index.html", size: 3051, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9026,7 +9026,7 @@ func bindataPublicCodemirrorModeSoySoyJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/soy.js", size: 6454, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/soy.js", size: 6454, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9046,7 +9046,7 @@ func bindataPublicCodemirrorModeSoyTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/test.js", size: 5271, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/test.js", size: 5271, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9066,7 +9066,7 @@ func bindataPublicCodemirrorModeSparqlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sparql/index.html", size: 2257, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sparql/index.html", size: 2257, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9086,7 +9086,7 @@ func bindataPublicCodemirrorModeSparqlSparqlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sparql/sparql.js", size: 3308, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sparql/sparql.js", size: 3308, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9106,7 +9106,7 @@ func bindataPublicCodemirrorModeSpreadsheetIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/spreadsheet/index.html", size: 1860, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/spreadsheet/index.html", size: 1860, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9126,7 +9126,7 @@ func bindataPublicCodemirrorModeSpreadsheetSpreadsheetJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/spreadsheet/spreadsheet.js", size: 1390, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/spreadsheet/spreadsheet.js", size: 1390, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9146,7 +9146,7 @@ func bindataPublicCodemirrorModeSqlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sql/index.html", size: 4134, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sql/index.html", size: 4134, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9166,7 +9166,7 @@ func bindataPublicCodemirrorModeSqlSqlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sql/sql.js", size: 36630, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sql/sql.js", size: 36630, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9186,7 +9186,7 @@ func bindataPublicCodemirrorModeStexIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/index.html", size: 4650, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/index.html", size: 4650, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9206,7 +9206,7 @@ func bindataPublicCodemirrorModeStexStexJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/stex.js", size: 3277, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/stex.js", size: 3277, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9226,7 +9226,7 @@ func bindataPublicCodemirrorModeStexTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/test.js", size: 3070, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/test.js", size: 3070, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9246,7 +9246,7 @@ func bindataPublicCodemirrorModeStylusIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/stylus/index.html", size: 3278, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/stylus/index.html", size: 3278, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9266,7 +9266,7 @@ func bindataPublicCodemirrorModeStylusStylusJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/stylus/stylus.js", size: 26222, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/stylus/stylus.js", size: 26222, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9286,7 +9286,7 @@ func bindataPublicCodemirrorModeSwiftIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/index.html", size: 2797, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/index.html", size: 2797, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9306,7 +9306,7 @@ func bindataPublicCodemirrorModeSwiftSwiftJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/swift.js", size: 4151, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/swift.js", size: 4151, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9326,7 +9326,7 @@ func bindataPublicCodemirrorModeSwiftTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/test.js", size: 7835, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/test.js", size: 7835, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9346,7 +9346,7 @@ func bindataPublicCodemirrorModeTclIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tcl/index.html", size: 6781, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tcl/index.html", size: 6781, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9366,7 +9366,7 @@ func bindataPublicCodemirrorModeTclTclJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tcl/tcl.js", size: 2545, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tcl/tcl.js", size: 2545, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9386,7 +9386,7 @@ func bindataPublicCodemirrorModeTextileIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/index.html", size: 4670, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/index.html", size: 4670, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9406,7 +9406,7 @@ func bindataPublicCodemirrorModeTextileTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/test.js", size: 7129, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/test.js", size: 7129, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9426,7 +9426,7 @@ func bindataPublicCodemirrorModeTextileTextileJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/textile.js", size: 7062, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/textile.js", size: 7062, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9446,7 +9446,7 @@ func bindataPublicCodemirrorModeTiddlywikiIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/index.html", size: 5208, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/index.html", size: 5208, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9466,7 +9466,7 @@ func bindataPublicCodemirrorModeTiddlywikiTiddlywikiCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/tiddlywiki.css", size: 220, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/tiddlywiki.css", size: 220, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9486,7 +9486,7 @@ func bindataPublicCodemirrorModeTiddlywikiTiddlywikiJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/tiddlywiki.js", size: 3071, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/tiddlywiki.js", size: 3071, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9506,7 +9506,7 @@ func bindataPublicCodemirrorModeTikiIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/index.html", size: 2190, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/index.html", size: 2190, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9526,7 +9526,7 @@ func bindataPublicCodemirrorModeTikiTikiCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/tiki.css", size: 439, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/tiki.css", size: 439, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9546,7 +9546,7 @@ func bindataPublicCodemirrorModeTikiTikiJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/tiki.js", size: 3523, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/tiki.js", size: 3523, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9566,7 +9566,7 @@ func bindataPublicCodemirrorModeTomlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/toml/index.html", size: 2147, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/toml/index.html", size: 2147, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9586,7 +9586,7 @@ func bindataPublicCodemirrorModeTomlTomlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/toml/toml.js", size: 1246, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/toml/toml.js", size: 1246, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9606,7 +9606,7 @@ func bindataPublicCodemirrorModeTornadoIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tornado/index.html", size: 2593, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tornado/index.html", size: 2593, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9626,7 +9626,7 @@ func bindataPublicCodemirrorModeTornadoTornadoJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tornado/tornado.js", size: 1421, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tornado/tornado.js", size: 1421, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9646,7 +9646,7 @@ func bindataPublicCodemirrorModeTroffIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/troff/index.html", size: 4627, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/troff/index.html", size: 4627, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9666,7 +9666,7 @@ func bindataPublicCodemirrorModeTroffTroffJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/troff/troff.js", size: 1292, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/troff/troff.js", size: 1292, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9686,7 +9686,7 @@ func bindataPublicCodemirrorModeTtcnIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn/index.html", size: 4016, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn/index.html", size: 4016, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9706,7 +9706,7 @@ func bindataPublicCodemirrorModeTtcnTtcnJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn/ttcn.js", size: 5449, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn/ttcn.js", size: 5449, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9726,7 +9726,7 @@ func bindataPublicCodemirrorModeTtcnCfgIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn-cfg/index.html", size: 4131, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn-cfg/index.html", size: 4131, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9746,7 +9746,7 @@ func bindataPublicCodemirrorModeTtcnCfgTtcnCfgJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn-cfg/ttcn-cfg.js", size: 4407, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn-cfg/ttcn-cfg.js", size: 4407, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9766,7 +9766,7 @@ func bindataPublicCodemirrorModeTurtleIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/turtle/index.html", size: 2012, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/turtle/index.html", size: 2012, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9786,7 +9786,7 @@ func bindataPublicCodemirrorModeTurtleTurtleJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/turtle/turtle.js", size: 2163, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/turtle/turtle.js", size: 2163, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9806,7 +9806,7 @@ func bindataPublicCodemirrorModeTwigIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/twig/index.html", size: 1677, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/twig/index.html", size: 1677, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9826,7 +9826,7 @@ func bindataPublicCodemirrorModeTwigTwigJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/twig/twig.js", size: 2203, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/twig/twig.js", size: 2203, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9846,7 +9846,7 @@ func bindataPublicCodemirrorModeVbIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vb/index.html", size: 1945, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vb/index.html", size: 1945, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9866,7 +9866,7 @@ func bindataPublicCodemirrorModeVbVbJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vb/vb.js", size: 3179, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vb/vb.js", size: 3179, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9886,7 +9886,7 @@ func bindataPublicCodemirrorModeVbscriptIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vbscript/index.html", size: 1824, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vbscript/index.html", size: 1824, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9906,7 +9906,7 @@ func bindataPublicCodemirrorModeVbscriptVbscriptJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vbscript/vbscript.js", size: 6062, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vbscript/vbscript.js", size: 6062, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9926,7 +9926,7 @@ func bindataPublicCodemirrorModeVelocityIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/velocity/index.html", size: 3623, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/velocity/index.html", size: 3623, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9946,7 +9946,7 @@ func bindataPublicCodemirrorModeVelocityVelocityJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/velocity/velocity.js", size: 2908, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/velocity/velocity.js", size: 2908, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9966,7 +9966,7 @@ func bindataPublicCodemirrorModeVerilogIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/index.html", size: 3087, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/index.html", size: 3087, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9986,7 +9986,7 @@ func bindataPublicCodemirrorModeVerilogTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/test.js", size: 5150, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/test.js", size: 5150, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10006,7 +10006,7 @@ func bindataPublicCodemirrorModeVerilogVerilogJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/verilog.js", size: 8980, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/verilog.js", size: 8980, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10026,7 +10026,7 @@ func bindataPublicCodemirrorModeVhdlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vhdl/index.html", size: 2954, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vhdl/index.html", size: 2954, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10046,7 +10046,7 @@ func bindataPublicCodemirrorModeVhdlVhdlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vhdl/vhdl.js", size: 3561, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vhdl/vhdl.js", size: 3561, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10066,7 +10066,7 @@ func bindataPublicCodemirrorModeVueIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vue/index.html", size: 4158, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vue/index.html", size: 4158, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10086,7 +10086,7 @@ func bindataPublicCodemirrorModeVueVueJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vue/vue.js", size: 1898, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vue/vue.js", size: 1898, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10106,7 +10106,7 @@ func bindataPublicCodemirrorModeWebidlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/webidl/index.html", size: 2639, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/webidl/index.html", size: 2639, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10126,7 +10126,7 @@ func bindataPublicCodemirrorModeWebidlWebidlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/webidl/webidl.js", size: 2777, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/webidl/webidl.js", size: 2777, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10146,7 +10146,7 @@ func bindataPublicCodemirrorModeXmlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/index.html", size: 2478, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/index.html", size: 2478, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10166,7 +10166,7 @@ func bindataPublicCodemirrorModeXmlTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/test.js", size: 1370, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/test.js", size: 1370, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10186,7 +10186,7 @@ func bindataPublicCodemirrorModeXmlXmlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/xml.js", size: 5776, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/xml.js", size: 5776, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10206,7 +10206,7 @@ func bindataPublicCodemirrorModeXqueryIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/index.html", size: 9135, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/index.html", size: 9135, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10226,7 +10226,7 @@ func bindataPublicCodemirrorModeXqueryTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/test.js", size: 4416, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/test.js", size: 4416, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10246,7 +10246,7 @@ func bindataPublicCodemirrorModeXqueryXqueryJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/xquery.js", size: 6883, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/xquery.js", size: 6883, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10266,7 +10266,7 @@ func bindataPublicCodemirrorModeYacasIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yacas/index.html", size: 2177, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yacas/index.html", size: 2177, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10286,7 +10286,7 @@ func bindataPublicCodemirrorModeYacasYacasJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yacas/yacas.js", size: 2374, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yacas/yacas.js", size: 2374, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10306,7 +10306,7 @@ func bindataPublicCodemirrorModeYamlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml/index.html", size: 2421, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml/index.html", size: 2421, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10326,7 +10326,7 @@ func bindataPublicCodemirrorModeYamlYamlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml/yaml.js", size: 1824, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml/yaml.js", size: 1824, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10346,7 +10346,7 @@ func bindataPublicCodemirrorModeYamlFrontmatterIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml-frontmatter/index.html", size: 4039, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml-frontmatter/index.html", size: 4039, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10366,7 +10366,7 @@ func bindataPublicCodemirrorModeYamlFrontmatterYamlFrontmatterJs() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js", size: 957, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js", size: 957, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10386,7 +10386,7 @@ func bindataPublicCodemirrorModeZ80IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/z80/index.html", size: 1713, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/z80/index.html", size: 1713, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10406,7 +10406,7 @@ func bindataPublicCodemirrorModeZ80Z80Js() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/z80/z80.js", size: 1987, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/z80/z80.js", size: 1987, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10426,7 +10426,7 @@ func bindataPublicFaviconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/favicon.ico", size: 4414, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/favicon.ico", size: 4414, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10446,7 +10446,7 @@ func bindataPublicManifestJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/manifest.json", size: 616, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/manifest.json", size: 616, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10466,7 +10466,7 @@ func bindataPublicPdfjsDs_store() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/.DS_Store", size: 8196, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/.DS_Store", size: 8196, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10486,7 +10486,7 @@ func bindataPublicPdfjsLicense() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/LICENSE", size: 10174, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/LICENSE", size: 10174, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10506,7 +10506,7 @@ func bindataPublicPdfjsBuildPdfJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/build/pdf.js", size: 312743, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/build/pdf.js", size: 312743, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10526,7 +10526,7 @@ func bindataPublicPdfjsBuildPdfWorkerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/build/pdf.worker.js", size: 748145, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/build/pdf.worker.js", size: 748145, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10546,7 +10546,7 @@ func bindataPublicPdfjsWebCmaps78EucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-EUC-H.bcmap", size: 2404, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-EUC-H.bcmap", size: 2404, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10566,7 +10566,7 @@ func bindataPublicPdfjsWebCmaps78EucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-EUC-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-EUC-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10586,7 +10586,7 @@ func bindataPublicPdfjsWebCmaps78HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-H.bcmap", size: 2379, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-H.bcmap", size: 2379, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10606,7 +10606,7 @@ func bindataPublicPdfjsWebCmaps78RksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-RKSJ-H.bcmap", size: 2398, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-RKSJ-H.bcmap", size: 2398, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10626,7 +10626,7 @@ func bindataPublicPdfjsWebCmaps78RksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-RKSJ-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-RKSJ-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10646,7 +10646,7 @@ func bindataPublicPdfjsWebCmaps78VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10666,7 +10666,7 @@ func bindataPublicPdfjsWebCmaps78msRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap", size: 2651, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap", size: 2651, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10686,7 +10686,7 @@ func bindataPublicPdfjsWebCmaps78msRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10706,7 +10706,7 @@ func bindataPublicPdfjsWebCmaps83pvRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap", size: 905, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap", size: 905, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10726,7 +10726,7 @@ func bindataPublicPdfjsWebCmaps90msRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap", size: 721, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap", size: 721, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10746,7 +10746,7 @@ func bindataPublicPdfjsWebCmaps90msRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10766,7 +10766,7 @@ func bindataPublicPdfjsWebCmaps90mspRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap", size: 715, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap", size: 715, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10786,7 +10786,7 @@ func bindataPublicPdfjsWebCmaps90mspRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap", size: 291, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap", size: 291, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10806,7 +10806,7 @@ func bindataPublicPdfjsWebCmaps90pvRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap", size: 982, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap", size: 982, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10826,7 +10826,7 @@ func bindataPublicPdfjsWebCmaps90pvRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap", size: 260, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap", size: 260, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10846,7 +10846,7 @@ func bindataPublicPdfjsWebCmapsAddHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-H.bcmap", size: 2419, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-H.bcmap", size: 2419, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10866,7 +10866,7 @@ func bindataPublicPdfjsWebCmapsAddRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-RKSJ-H.bcmap", size: 2413, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-RKSJ-H.bcmap", size: 2413, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10886,7 +10886,7 @@ func bindataPublicPdfjsWebCmapsAddRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-RKSJ-V.bcmap", size: 287, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-RKSJ-V.bcmap", size: 287, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10906,7 +10906,7 @@ func bindataPublicPdfjsWebCmapsAddVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-V.bcmap", size: 282, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-V.bcmap", size: 282, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10926,7 +10926,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap", size: 317, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap", size: 317, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10946,7 +10946,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap", size: 371, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap", size: 371, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10966,7 +10966,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap", size: 376, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap", size: 376, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10986,7 +10986,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns13Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap", size: 401, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap", size: 401, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11006,7 +11006,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns14Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap", size: 405, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap", size: 405, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11026,7 +11026,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns15Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11046,7 +11046,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns16Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11066,7 +11066,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap", size: 41193, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap", size: 41193, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11086,7 +11086,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-0.bcmap", size: 217, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-0.bcmap", size: 217, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11106,7 +11106,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-1.bcmap", size: 250, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-1.bcmap", size: 250, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11126,7 +11126,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-2.bcmap", size: 465, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-2.bcmap", size: 465, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11146,7 +11146,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb13Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-3.bcmap", size: 470, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-3.bcmap", size: 470, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11166,7 +11166,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb14Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-4.bcmap", size: 601, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-4.bcmap", size: 601, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11186,7 +11186,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb15Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-5.bcmap", size: 625, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-5.bcmap", size: 625, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11206,7 +11206,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap", size: 33974, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap", size: 33974, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11226,7 +11226,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap", size: 225, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap", size: 225, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11246,7 +11246,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap", size: 226, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap", size: 226, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11266,7 +11266,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap", size: 233, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap", size: 233, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11286,7 +11286,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan13Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap", size: 242, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap", size: 242, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11306,7 +11306,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan14Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap", size: 337, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap", size: 337, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11326,7 +11326,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan15Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap", size: 430, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap", size: 430, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11346,7 +11346,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan16Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap", size: 485, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap", size: 485, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11366,7 +11366,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap", size: 40951, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap", size: 40951, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11386,7 +11386,7 @@ func bindataPublicPdfjsWebCmapsAdobeKorea10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap", size: 241, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap", size: 241, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11406,7 +11406,7 @@ func bindataPublicPdfjsWebCmapsAdobeKorea11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap", size: 386, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap", size: 386, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11426,7 +11426,7 @@ func bindataPublicPdfjsWebCmapsAdobeKorea12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap", size: 391, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap", size: 391, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11446,7 +11446,7 @@ func bindataPublicPdfjsWebCmapsAdobeKorea1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap", size: 23293, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap", size: 23293, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11466,7 +11466,7 @@ func bindataPublicPdfjsWebCmapsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5-H.bcmap", size: 1086, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5-H.bcmap", size: 1086, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11486,7 +11486,7 @@ func bindataPublicPdfjsWebCmapsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5-V.bcmap", size: 142, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5-V.bcmap", size: 142, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11506,7 +11506,7 @@ func bindataPublicPdfjsWebCmapsB5pcHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5pc-H.bcmap", size: 1099, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5pc-H.bcmap", size: 1099, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11526,7 +11526,7 @@ func bindataPublicPdfjsWebCmapsB5pcVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5pc-V.bcmap", size: 144, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5pc-V.bcmap", size: 144, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11546,7 +11546,7 @@ func bindataPublicPdfjsWebCmapsCnsEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS-EUC-H.bcmap", size: 1780, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS-EUC-H.bcmap", size: 1780, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11566,7 +11566,7 @@ func bindataPublicPdfjsWebCmapsCnsEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS-EUC-V.bcmap", size: 1920, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS-EUC-V.bcmap", size: 1920, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11586,7 +11586,7 @@ func bindataPublicPdfjsWebCmapsCns1HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS1-H.bcmap", size: 706, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS1-H.bcmap", size: 706, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11606,7 +11606,7 @@ func bindataPublicPdfjsWebCmapsCns1VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS1-V.bcmap", size: 143, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS1-V.bcmap", size: 143, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11626,7 +11626,7 @@ func bindataPublicPdfjsWebCmapsCns2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS2-H.bcmap", size: 504, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS2-H.bcmap", size: 504, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11646,7 +11646,7 @@ func bindataPublicPdfjsWebCmapsCns2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS2-V.bcmap", size: 93, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS2-V.bcmap", size: 93, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11666,7 +11666,7 @@ func bindataPublicPdfjsWebCmapsEthkB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETHK-B5-H.bcmap", size: 4426, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETHK-B5-H.bcmap", size: 4426, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11686,7 +11686,7 @@ func bindataPublicPdfjsWebCmapsEthkB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETHK-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETHK-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11706,7 +11706,7 @@ func bindataPublicPdfjsWebCmapsEtenB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETen-B5-H.bcmap", size: 1125, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETen-B5-H.bcmap", size: 1125, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11726,7 +11726,7 @@ func bindataPublicPdfjsWebCmapsEtenB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETen-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETen-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11746,7 +11746,7 @@ func bindataPublicPdfjsWebCmapsEtenmsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETenms-B5-H.bcmap", size: 101, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETenms-B5-H.bcmap", size: 101, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11766,7 +11766,7 @@ func bindataPublicPdfjsWebCmapsEtenmsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETenms-B5-V.bcmap", size: 172, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETenms-B5-V.bcmap", size: 172, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11786,7 +11786,7 @@ func bindataPublicPdfjsWebCmapsEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/EUC-H.bcmap", size: 578, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/EUC-H.bcmap", size: 578, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11806,7 +11806,7 @@ func bindataPublicPdfjsWebCmapsEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/EUC-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/EUC-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11826,7 +11826,7 @@ func bindataPublicPdfjsWebCmapsExtHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-H.bcmap", size: 2536, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-H.bcmap", size: 2536, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11846,7 +11846,7 @@ func bindataPublicPdfjsWebCmapsExtRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap", size: 2542, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap", size: 2542, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11866,7 +11866,7 @@ func bindataPublicPdfjsWebCmapsExtRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap", size: 218, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap", size: 218, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11886,7 +11886,7 @@ func bindataPublicPdfjsWebCmapsExtVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-V.bcmap", size: 215, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-V.bcmap", size: 215, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11906,7 +11906,7 @@ func bindataPublicPdfjsWebCmapsGbEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-EUC-H.bcmap", size: 549, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-EUC-H.bcmap", size: 549, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11926,7 +11926,7 @@ func bindataPublicPdfjsWebCmapsGbEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-EUC-V.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-EUC-V.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11946,7 +11946,7 @@ func bindataPublicPdfjsWebCmapsGbHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-H.bcmap", size: 528, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-H.bcmap", size: 528, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11966,7 +11966,7 @@ func bindataPublicPdfjsWebCmapsGbVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-V.bcmap", size: 175, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-V.bcmap", size: 175, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11986,7 +11986,7 @@ func bindataPublicPdfjsWebCmapsGbkEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK-EUC-H.bcmap", size: 14692, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK-EUC-H.bcmap", size: 14692, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12006,7 +12006,7 @@ func bindataPublicPdfjsWebCmapsGbkEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12026,7 +12026,7 @@ func bindataPublicPdfjsWebCmapsGbk2kHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK2K-H.bcmap", size: 19662, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK2K-H.bcmap", size: 19662, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12046,7 +12046,7 @@ func bindataPublicPdfjsWebCmapsGbk2kVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK2K-V.bcmap", size: 219, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK2K-V.bcmap", size: 219, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12066,7 +12066,7 @@ func bindataPublicPdfjsWebCmapsGbkpEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBKp-EUC-H.bcmap", size: 14686, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBKp-EUC-H.bcmap", size: 14686, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12086,7 +12086,7 @@ func bindataPublicPdfjsWebCmapsGbkpEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBKp-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBKp-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12106,7 +12106,7 @@ func bindataPublicPdfjsWebCmapsGbtEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-EUC-H.bcmap", size: 7290, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-EUC-H.bcmap", size: 7290, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12126,7 +12126,7 @@ func bindataPublicPdfjsWebCmapsGbtEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12146,7 +12146,7 @@ func bindataPublicPdfjsWebCmapsGbtHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-H.bcmap", size: 7269, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-H.bcmap", size: 7269, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12166,7 +12166,7 @@ func bindataPublicPdfjsWebCmapsGbtVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-V.bcmap", size: 176, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-V.bcmap", size: 176, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12186,7 +12186,7 @@ func bindataPublicPdfjsWebCmapsGbtpcEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap", size: 7298, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap", size: 7298, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12206,7 +12206,7 @@ func bindataPublicPdfjsWebCmapsGbtpcEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12226,7 +12226,7 @@ func bindataPublicPdfjsWebCmapsGbpcEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBpc-EUC-H.bcmap", size: 557, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBpc-EUC-H.bcmap", size: 557, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12246,7 +12246,7 @@ func bindataPublicPdfjsWebCmapsGbpcEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBpc-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBpc-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12266,7 +12266,7 @@ func bindataPublicPdfjsWebCmapsHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/H.bcmap", size: 553, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/H.bcmap", size: 553, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12286,7 +12286,7 @@ func bindataPublicPdfjsWebCmapsHkdlaB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdla-B5-H.bcmap", size: 2654, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdla-B5-H.bcmap", size: 2654, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12306,7 +12306,7 @@ func bindataPublicPdfjsWebCmapsHkdlaB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdla-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdla-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12326,7 +12326,7 @@ func bindataPublicPdfjsWebCmapsHkdlbB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdlb-B5-H.bcmap", size: 2414, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdlb-B5-H.bcmap", size: 2414, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12346,7 +12346,7 @@ func bindataPublicPdfjsWebCmapsHkdlbB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdlb-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdlb-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12366,7 +12366,7 @@ func bindataPublicPdfjsWebCmapsHkgccsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKgccs-B5-H.bcmap", size: 2292, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKgccs-B5-H.bcmap", size: 2292, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12386,7 +12386,7 @@ func bindataPublicPdfjsWebCmapsHkgccsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKgccs-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKgccs-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12406,7 +12406,7 @@ func bindataPublicPdfjsWebCmapsHkm314B5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm314-B5-H.bcmap", size: 1772, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm314-B5-H.bcmap", size: 1772, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12426,7 +12426,7 @@ func bindataPublicPdfjsWebCmapsHkm314B5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm314-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm314-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12446,7 +12446,7 @@ func bindataPublicPdfjsWebCmapsHkm471B5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm471-B5-H.bcmap", size: 2171, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm471-B5-H.bcmap", size: 2171, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12466,7 +12466,7 @@ func bindataPublicPdfjsWebCmapsHkm471B5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm471-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm471-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12486,7 +12486,7 @@ func bindataPublicPdfjsWebCmapsHkscsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKscs-B5-H.bcmap", size: 4437, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKscs-B5-H.bcmap", size: 4437, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12506,7 +12506,7 @@ func bindataPublicPdfjsWebCmapsHkscsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKscs-B5-V.bcmap", size: 159, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKscs-B5-V.bcmap", size: 159, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12526,7 +12526,7 @@ func bindataPublicPdfjsWebCmapsHankakuBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Hankaku.bcmap", size: 132, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Hankaku.bcmap", size: 132, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12546,7 +12546,7 @@ func bindataPublicPdfjsWebCmapsHiraganaBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Hiragana.bcmap", size: 124, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Hiragana.bcmap", size: 124, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12566,7 +12566,7 @@ func bindataPublicPdfjsWebCmapsKscEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-EUC-H.bcmap", size: 1848, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-EUC-H.bcmap", size: 1848, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12586,7 +12586,7 @@ func bindataPublicPdfjsWebCmapsKscEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-EUC-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-EUC-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12606,7 +12606,7 @@ func bindataPublicPdfjsWebCmapsKscHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-H.bcmap", size: 1831, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-H.bcmap", size: 1831, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12626,7 +12626,7 @@ func bindataPublicPdfjsWebCmapsKscJohabHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-Johab-H.bcmap", size: 16791, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-Johab-H.bcmap", size: 16791, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12646,7 +12646,7 @@ func bindataPublicPdfjsWebCmapsKscJohabVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-Johab-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-Johab-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12666,7 +12666,7 @@ func bindataPublicPdfjsWebCmapsKscVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12686,7 +12686,7 @@ func bindataPublicPdfjsWebCmapsKscmsUhcHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-H.bcmap", size: 2787, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-H.bcmap", size: 2787, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12706,7 +12706,7 @@ func bindataPublicPdfjsWebCmapsKscmsUhcHwHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap", size: 2789, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap", size: 2789, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12726,7 +12726,7 @@ func bindataPublicPdfjsWebCmapsKscmsUhcHwVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12746,7 +12746,7 @@ func bindataPublicPdfjsWebCmapsKscmsUhcVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12766,7 +12766,7 @@ func bindataPublicPdfjsWebCmapsKscpcEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap", size: 2024, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap", size: 2024, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12786,7 +12786,7 @@ func bindataPublicPdfjsWebCmapsKscpcEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12806,7 +12806,7 @@ func bindataPublicPdfjsWebCmapsKatakanaBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Katakana.bcmap", size: 100, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Katakana.bcmap", size: 100, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12826,7 +12826,7 @@ func bindataPublicPdfjsWebCmapsLicense() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/LICENSE", size: 2080, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/LICENSE", size: 2080, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12846,7 +12846,7 @@ func bindataPublicPdfjsWebCmapsNwpHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/NWP-H.bcmap", size: 2765, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/NWP-H.bcmap", size: 2765, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12866,7 +12866,7 @@ func bindataPublicPdfjsWebCmapsNwpVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/NWP-V.bcmap", size: 252, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/NWP-V.bcmap", size: 252, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12886,7 +12886,7 @@ func bindataPublicPdfjsWebCmapsRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/RKSJ-H.bcmap", size: 534, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/RKSJ-H.bcmap", size: 534, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12906,7 +12906,7 @@ func bindataPublicPdfjsWebCmapsRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/RKSJ-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/RKSJ-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12926,7 +12926,7 @@ func bindataPublicPdfjsWebCmapsRomanBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Roman.bcmap", size: 96, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Roman.bcmap", size: 96, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12946,7 +12946,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap", size: 48280, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap", size: 48280, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12966,7 +12966,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12986,7 +12986,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap", size: 50419, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap", size: 50419, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13006,7 +13006,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13026,7 +13026,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap", size: 52679, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap", size: 52679, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13046,7 +13046,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13066,7 +13066,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap", size: 53629, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap", size: 53629, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13086,7 +13086,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap", size: 157, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap", size: 157, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13106,7 +13106,7 @@ func bindataPublicPdfjsWebCmapsUnigbUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap", size: 43366, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap", size: 43366, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13126,7 +13126,7 @@ func bindataPublicPdfjsWebCmapsUnigbUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap", size: 193, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap", size: 193, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13146,7 +13146,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap", size: 44086, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap", size: 44086, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13166,7 +13166,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13186,7 +13186,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap", size: 45738, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap", size: 45738, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13206,7 +13206,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13226,7 +13226,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap", size: 46837, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap", size: 46837, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13246,7 +13246,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13266,7 +13266,7 @@ func bindataPublicPdfjsWebCmapsUnijisUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap", size: 25439, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap", size: 25439, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13286,7 +13286,7 @@ func bindataPublicPdfjsWebCmapsUnijisUcs2HwHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap", size: 119, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap", size: 119, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13306,7 +13306,7 @@ func bindataPublicPdfjsWebCmapsUnijisUcs2HwVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap", size: 680, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap", size: 680, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13326,7 +13326,7 @@ func bindataPublicPdfjsWebCmapsUnijisUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap", size: 664, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap", size: 664, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13346,7 +13346,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap", size: 39443, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap", size: 39443, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13366,7 +13366,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap", size: 643, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap", size: 643, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13386,7 +13386,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap", size: 40539, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap", size: 40539, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13406,7 +13406,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap", size: 677, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap", size: 677, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13426,7 +13426,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap", size: 41695, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap", size: 41695, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13446,7 +13446,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap", size: 678, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap", size: 678, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13466,7 +13466,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap", size: 39534, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap", size: 39534, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13486,7 +13486,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap", size: 647, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap", size: 647, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13506,7 +13506,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap", size: 40630, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap", size: 40630, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13526,7 +13526,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap", size: 681, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap", size: 681, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13546,7 +13546,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap", size: 41779, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap", size: 41779, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13566,7 +13566,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap", size: 682, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap", size: 682, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13586,7 +13586,7 @@ func bindataPublicPdfjsWebCmapsUnijisproUcs2HwVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap", size: 705, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap", size: 705, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13606,7 +13606,7 @@ func bindataPublicPdfjsWebCmapsUnijisproUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap", size: 689, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap", size: 689, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13626,7 +13626,7 @@ func bindataPublicPdfjsWebCmapsUnijisproUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap", size: 726, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap", size: 726, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13646,7 +13646,7 @@ func bindataPublicPdfjsWebCmapsUnijisx0213Utf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap", size: 40517, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap", size: 40517, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13666,7 +13666,7 @@ func bindataPublicPdfjsWebCmapsUnijisx0213Utf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap", size: 684, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap", size: 684, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13686,7 +13686,7 @@ func bindataPublicPdfjsWebCmapsUnijisx02132004Utf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap", size: 40608, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap", size: 40608, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13706,7 +13706,7 @@ func bindataPublicPdfjsWebCmapsUnijisx02132004Utf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap", size: 688, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap", size: 688, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13726,7 +13726,7 @@ func bindataPublicPdfjsWebCmapsUniksUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap", size: 25783, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap", size: 25783, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13746,7 +13746,7 @@ func bindataPublicPdfjsWebCmapsUniksUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13766,7 +13766,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap", size: 26327, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap", size: 26327, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13786,7 +13786,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13806,7 +13806,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap", size: 26451, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap", size: 26451, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13826,7 +13826,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap", size: 168, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap", size: 168, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13846,7 +13846,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap", size: 27790, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap", size: 27790, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13866,7 +13866,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13886,7 +13886,7 @@ func bindataPublicPdfjsWebCmapsVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13906,7 +13906,7 @@ func bindataPublicPdfjsWebCmapsWpSymbolBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/WP-Symbol.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/WP-Symbol.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13926,7 +13926,7 @@ func bindataPublicPdfjsWebCompressedTracemonkeyPldi09Pdf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/compressed.tracemonkey-pldi-09.pdf", size: 1016315, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/compressed.tracemonkey-pldi-09.pdf", size: 1016315, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13946,7 +13946,7 @@ func bindataPublicPdfjsWebDebuggerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/debugger.js", size: 8938, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/debugger.js", size: 8938, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13966,7 +13966,7 @@ func bindataPublicPdfjsWebImagesAnnotationCheckSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-check.svg", size: 415, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-check.svg", size: 415, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13986,7 +13986,7 @@ func bindataPublicPdfjsWebImagesAnnotationCommentSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-comment.svg", size: 883, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-comment.svg", size: 883, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14006,7 +14006,7 @@ func bindataPublicPdfjsWebImagesAnnotationHelpSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-help.svg", size: 2168, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-help.svg", size: 2168, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14026,7 +14026,7 @@ func bindataPublicPdfjsWebImagesAnnotationInsertSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-insert.svg", size: 408, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-insert.svg", size: 408, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14046,7 +14046,7 @@ func bindataPublicPdfjsWebImagesAnnotationKeySvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-key.svg", size: 1452, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-key.svg", size: 1452, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14066,7 +14066,7 @@ func bindataPublicPdfjsWebImagesAnnotationNewparagraphSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-newparagraph.svg", size: 426, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-newparagraph.svg", size: 426, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14086,7 +14086,7 @@ func bindataPublicPdfjsWebImagesAnnotationNoiconSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-noicon.svg", size: 158, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-noicon.svg", size: 158, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14106,7 +14106,7 @@ func bindataPublicPdfjsWebImagesAnnotationNoteSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-note.svg", size: 1041, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-note.svg", size: 1041, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14126,7 +14126,7 @@ func bindataPublicPdfjsWebImagesAnnotationParagraphSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-paragraph.svg", size: 1143, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-paragraph.svg", size: 1143, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14146,7 +14146,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonNextRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next-rtl.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next-rtl.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14166,7 +14166,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonNextRtl2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next-rtl@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next-rtl@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14186,7 +14186,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonNextPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14206,7 +14206,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonNext2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14226,7 +14226,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonPreviousRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous-rtl.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous-rtl.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14246,7 +14246,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonPreviousRtl2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous-rtl@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous-rtl@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14266,7 +14266,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonPreviousPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14286,7 +14286,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonPrevious2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14306,7 +14306,7 @@ func bindataPublicPdfjsWebImagesGrabCur() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/grab.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/grab.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14326,7 +14326,7 @@ func bindataPublicPdfjsWebImagesGrabbingCur() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/grabbing.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/grabbing.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14346,7 +14346,7 @@ func bindataPublicPdfjsWebImagesLoadingIconGif() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-icon.gif", size: 2545, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-icon.gif", size: 2545, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14366,7 +14366,7 @@ func bindataPublicPdfjsWebImagesLoadingSmallPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-small.png", size: 7402, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-small.png", size: 7402, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14386,7 +14386,7 @@ func bindataPublicPdfjsWebImagesLoadingSmall2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-small@2x.png", size: 16131, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-small@2x.png", size: 16131, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14406,7 +14406,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonDocumentpropertiesPng() (* return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-documentProperties.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-documentProperties.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14426,7 +14426,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonDocumentproperties2xPng() return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-documentProperties@2x.png", size: 933, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-documentProperties@2x.png", size: 933, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14446,7 +14446,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonFirstpagePng() (*asset, er return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-firstPage.png", size: 179, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-firstPage.png", size: 179, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14466,7 +14466,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonFirstpage2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-firstPage@2x.png", size: 266, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-firstPage@2x.png", size: 266, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14486,7 +14486,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonHandtoolPng() (*asset, err return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-handTool.png", size: 301, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-handTool.png", size: 301, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14506,7 +14506,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonHandtool2xPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-handTool@2x.png", size: 583, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-handTool@2x.png", size: 583, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14526,7 +14526,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonLastpagePng() (*asset, err return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-lastPage.png", size: 175, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-lastPage.png", size: 175, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14546,7 +14546,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonLastpage2xPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-lastPage@2x.png", size: 276, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-lastPage@2x.png", size: 276, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14566,7 +14566,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonRotateccwPng() (*asset, er return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCcw.png", size: 360, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCcw.png", size: 360, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14586,7 +14586,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonRotateccw2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCcw@2x.png", size: 731, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCcw@2x.png", size: 731, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14606,7 +14606,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonRotatecwPng() (*asset, err return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCw.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCw.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14626,7 +14626,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonRotatecw2xPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCw@2x.png", size: 714, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCw@2x.png", size: 714, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14646,7 +14646,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollhorizontalPng() (*as return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.png", size: 218, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.png", size: 218, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14666,7 +14666,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollhorizontal2xPng() (* return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal@2x.png", size: 332, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal@2x.png", size: 332, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14686,7 +14686,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollverticalPng() (*asse return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollVertical.png", size: 228, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollVertical.png", size: 228, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14706,7 +14706,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollvertical2xPng() (*as return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollVertical@2x.png", size: 349, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollVertical@2x.png", size: 349, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14726,7 +14726,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollwrappedPng() (*asset return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.png", size: 297, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.png", size: 297, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14746,7 +14746,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollwrapped2xPng() (*ass return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollWrapped@2x.png", size: 490, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollWrapped@2x.png", size: 490, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14766,7 +14766,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSelecttoolPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-selectTool.png", size: 461, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-selectTool.png", size: 461, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14786,7 +14786,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSelecttool2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-selectTool@2x.png", size: 1067, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-selectTool@2x.png", size: 1067, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14806,7 +14806,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadevenPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadEven.png", size: 347, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadEven.png", size: 347, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14826,7 +14826,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadeven2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadEven@2x.png", size: 694, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadEven@2x.png", size: 694, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14846,7 +14846,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadnonePng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadNone.png", size: 179, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadNone.png", size: 179, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14866,7 +14866,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadnone2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadNone@2x.png", size: 261, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadNone@2x.png", size: 261, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14886,7 +14886,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadoddPng() (*asset, er return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadOdd.png", size: 344, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadOdd.png", size: 344, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14906,7 +14906,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadodd2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadOdd@2x.png", size: 621, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadOdd@2x.png", size: 621, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14926,7 +14926,7 @@ func bindataPublicPdfjsWebImagesShadowPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/shadow.png", size: 290, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/shadow.png", size: 290, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14946,7 +14946,7 @@ func bindataPublicPdfjsWebImagesTexturePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/texture.png", size: 2417, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/texture.png", size: 2417, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14966,7 +14966,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonBookmarkPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-bookmark.png", size: 174, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-bookmark.png", size: 174, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14986,7 +14986,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonBookmark2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-bookmark@2x.png", size: 260, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-bookmark@2x.png", size: 260, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15006,7 +15006,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonDownloadPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-download.png", size: 259, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-download.png", size: 259, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15026,7 +15026,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonDownload2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-download@2x.png", size: 425, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-download@2x.png", size: 425, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15046,7 +15046,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonMenuarrowsPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-menuArrows.png", size: 107, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-menuArrows.png", size: 107, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15066,7 +15066,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonMenuarrows2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-menuArrows@2x.png", size: 152, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-menuArrows@2x.png", size: 152, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15086,7 +15086,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonOpenfilePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-openFile.png", size: 295, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-openFile.png", size: 295, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15106,7 +15106,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonOpenfile2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-openFile@2x.png", size: 550, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-openFile@2x.png", size: 550, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15126,7 +15126,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPagedownRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown-rtl.png", size: 242, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown-rtl.png", size: 242, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15146,7 +15146,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPagedownRtl2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown-rtl@2x.png", size: 398, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown-rtl@2x.png", size: 398, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15166,7 +15166,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPagedownPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown.png", size: 238, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown.png", size: 238, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15186,7 +15186,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPagedown2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown@2x.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown@2x.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15206,7 +15206,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPageupRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp-rtl.png", size: 245, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp-rtl.png", size: 245, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15226,7 +15226,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPageupRtl2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp-rtl@2x.png", size: 405, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp-rtl@2x.png", size: 405, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15246,7 +15246,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPageupPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15266,7 +15266,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPageup2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp@2x.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp@2x.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15286,7 +15286,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPresentationmodePng() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-presentationMode.png", size: 321, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-presentationMode.png", size: 321, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15306,7 +15306,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPresentationmode2xPng() (*asset, er return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-presentationMode@2x.png", size: 586, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-presentationMode@2x.png", size: 586, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15326,7 +15326,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPrintPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-print.png", size: 257, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-print.png", size: 257, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15346,7 +15346,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPrint2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-print@2x.png", size: 464, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-print@2x.png", size: 464, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15366,7 +15366,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSearchPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-search.png", size: 309, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-search.png", size: 309, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15386,7 +15386,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSearch2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-search@2x.png", size: 653, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-search@2x.png", size: 653, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15406,7 +15406,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSecondarytoolbartoggleRtlPng() (*as return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15426,7 +15426,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSecondarytoolbartoggleRtl2xPng() (* return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png", size: 456, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png", size: 456, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15446,7 +15446,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSecondarytoolbartogglePng() (*asset return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.png", size: 243, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.png", size: 243, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15466,7 +15466,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSecondarytoolbartoggle2xPng() (*ass return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle@2x.png", size: 458, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle@2x.png", size: 458, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15486,7 +15486,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSidebartoggleRtlPng() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle-rtl.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle-rtl.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15506,7 +15506,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSidebartoggleRtl2xPng() (*asset, er return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle-rtl@2x.png", size: 344, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle-rtl@2x.png", size: 344, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15526,7 +15526,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSidebartogglePng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15546,7 +15546,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSidebartoggle2xPng() (*asset, error return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15566,7 +15566,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewattachmentsPng() (*asset, error return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewAttachments.png", size: 384, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewAttachments.png", size: 384, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15586,7 +15586,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewattachments2xPng() (*asset, err return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewAttachments@2x.png", size: 859, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewAttachments@2x.png", size: 859, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15606,7 +15606,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewoutlineRtlPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline-rtl.png", size: 177, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline-rtl.png", size: 177, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15626,7 +15626,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewoutlineRtl2xPng() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline-rtl@2x.png", size: 394, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline-rtl@2x.png", size: 394, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15646,7 +15646,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewoutlinePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline.png", size: 178, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline.png", size: 178, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15666,7 +15666,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewoutline2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15686,7 +15686,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewthumbnailPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewThumbnail.png", size: 185, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewThumbnail.png", size: 185, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15706,7 +15706,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewthumbnail2xPng() (*asset, error return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewThumbnail@2x.png", size: 219, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewThumbnail@2x.png", size: 219, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15726,7 +15726,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonZoominPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomIn.png", size: 136, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomIn.png", size: 136, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15746,7 +15746,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonZoomin2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomIn@2x.png", size: 160, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomIn@2x.png", size: 160, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15766,7 +15766,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonZoomoutPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomOut.png", size: 88, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomOut.png", size: 88, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15786,7 +15786,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonZoomout2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomOut@2x.png", size: 109, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomOut@2x.png", size: 109, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15806,7 +15806,7 @@ func bindataPublicPdfjsWebImagesTreeitemCollapsedRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed-rtl.png", size: 143, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed-rtl.png", size: 143, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15826,7 +15826,7 @@ func bindataPublicPdfjsWebImagesTreeitemCollapsedRtl2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed-rtl@2x.png", size: 167, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed-rtl@2x.png", size: 167, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15846,7 +15846,7 @@ func bindataPublicPdfjsWebImagesTreeitemCollapsedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed.png", size: 128, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed.png", size: 128, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15866,7 +15866,7 @@ func bindataPublicPdfjsWebImagesTreeitemCollapsed2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed@2x.png", size: 149, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed@2x.png", size: 149, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15886,7 +15886,7 @@ func bindataPublicPdfjsWebImagesTreeitemExpandedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-expanded.png", size: 125, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-expanded.png", size: 125, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15906,7 +15906,7 @@ func bindataPublicPdfjsWebImagesTreeitemExpanded2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-expanded@2x.png", size: 172, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-expanded@2x.png", size: 172, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15926,7 +15926,7 @@ func bindataPublicPdfjsWebLocaleAchViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ach/viewer.properties", size: 8848, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ach/viewer.properties", size: 8848, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15946,7 +15946,7 @@ func bindataPublicPdfjsWebLocaleAfViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/af/viewer.properties", size: 7727, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/af/viewer.properties", size: 7727, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15966,7 +15966,7 @@ func bindataPublicPdfjsWebLocaleAkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ak/viewer.properties", size: 5504, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ak/viewer.properties", size: 5504, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15986,7 +15986,7 @@ func bindataPublicPdfjsWebLocaleAnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/an/viewer.properties", size: 8085, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/an/viewer.properties", size: 8085, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16006,7 +16006,7 @@ func bindataPublicPdfjsWebLocaleArViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ar/viewer.properties", size: 12619, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ar/viewer.properties", size: 12619, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16026,7 +16026,7 @@ func bindataPublicPdfjsWebLocaleAsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/as/viewer.properties", size: 9976, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/as/viewer.properties", size: 9976, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16046,7 +16046,7 @@ func bindataPublicPdfjsWebLocaleAstViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ast/viewer.properties", size: 8736, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ast/viewer.properties", size: 8736, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16066,7 +16066,7 @@ func bindataPublicPdfjsWebLocaleAzViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/az/viewer.properties", size: 11506, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/az/viewer.properties", size: 11506, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16086,7 +16086,7 @@ func bindataPublicPdfjsWebLocaleBeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/be/viewer.properties", size: 13783, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/be/viewer.properties", size: 13783, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16106,7 +16106,7 @@ func bindataPublicPdfjsWebLocaleBgViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bg/viewer.properties", size: 14159, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bg/viewer.properties", size: 14159, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16126,7 +16126,7 @@ func bindataPublicPdfjsWebLocaleBnBdViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bn-BD/viewer.properties", size: 13216, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bn-BD/viewer.properties", size: 13216, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16146,7 +16146,7 @@ func bindataPublicPdfjsWebLocaleBnInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bn-IN/viewer.properties", size: 11075, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bn-IN/viewer.properties", size: 11075, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16166,7 +16166,7 @@ func bindataPublicPdfjsWebLocaleBrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/br/viewer.properties", size: 11609, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/br/viewer.properties", size: 11609, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16186,7 +16186,7 @@ func bindataPublicPdfjsWebLocaleBrxViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/brx/viewer.properties", size: 10166, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/brx/viewer.properties", size: 10166, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16206,7 +16206,7 @@ func bindataPublicPdfjsWebLocaleBsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bs/viewer.properties", size: 9099, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bs/viewer.properties", size: 9099, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16226,7 +16226,7 @@ func bindataPublicPdfjsWebLocaleCaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ca/viewer.properties", size: 9460, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ca/viewer.properties", size: 9460, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16246,7 +16246,7 @@ func bindataPublicPdfjsWebLocaleCakViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cak/viewer.properties", size: 11685, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cak/viewer.properties", size: 11685, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16266,7 +16266,7 @@ func bindataPublicPdfjsWebLocaleCrhViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/crh/viewer.properties", size: 9840, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/crh/viewer.properties", size: 9840, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16286,7 +16286,7 @@ func bindataPublicPdfjsWebLocaleCsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cs/viewer.properties", size: 11389, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cs/viewer.properties", size: 11389, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16306,7 +16306,7 @@ func bindataPublicPdfjsWebLocaleCsbViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/csb/viewer.properties", size: 4832, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/csb/viewer.properties", size: 4832, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16326,7 +16326,7 @@ func bindataPublicPdfjsWebLocaleCyViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cy/viewer.properties", size: 11040, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cy/viewer.properties", size: 11040, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16346,7 +16346,7 @@ func bindataPublicPdfjsWebLocaleDaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/da/viewer.properties", size: 10991, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/da/viewer.properties", size: 10991, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16366,7 +16366,7 @@ func bindataPublicPdfjsWebLocaleDeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/de/viewer.properties", size: 10791, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/de/viewer.properties", size: 10791, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16386,7 +16386,7 @@ func bindataPublicPdfjsWebLocaleElViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/el/viewer.properties", size: 14297, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/el/viewer.properties", size: 14297, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16406,7 +16406,7 @@ func bindataPublicPdfjsWebLocaleEnCaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-CA/viewer.properties", size: 10773, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-CA/viewer.properties", size: 10773, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16426,7 +16426,7 @@ func bindataPublicPdfjsWebLocaleEnGbViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-GB/viewer.properties", size: 7535, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-GB/viewer.properties", size: 7535, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16446,7 +16446,7 @@ func bindataPublicPdfjsWebLocaleEnUsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-US/viewer.properties", size: 10777, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-US/viewer.properties", size: 10777, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16466,7 +16466,7 @@ func bindataPublicPdfjsWebLocaleEnZaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-ZA/viewer.properties", size: 6977, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-ZA/viewer.properties", size: 6977, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16486,7 +16486,7 @@ func bindataPublicPdfjsWebLocaleEoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/eo/viewer.properties", size: 11162, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/eo/viewer.properties", size: 11162, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16506,7 +16506,7 @@ func bindataPublicPdfjsWebLocaleEsArViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-AR/viewer.properties", size: 11289, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-AR/viewer.properties", size: 11289, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16526,7 +16526,7 @@ func bindataPublicPdfjsWebLocaleEsClViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-CL/viewer.properties", size: 11494, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-CL/viewer.properties", size: 11494, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16546,7 +16546,7 @@ func bindataPublicPdfjsWebLocaleEsEsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-ES/viewer.properties", size: 11522, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-ES/viewer.properties", size: 11522, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16566,7 +16566,7 @@ func bindataPublicPdfjsWebLocaleEsMxViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-MX/viewer.properties", size: 11434, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-MX/viewer.properties", size: 11434, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16586,7 +16586,7 @@ func bindataPublicPdfjsWebLocaleEtViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/et/viewer.properties", size: 11084, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/et/viewer.properties", size: 11084, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16606,7 +16606,7 @@ func bindataPublicPdfjsWebLocaleEuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/eu/viewer.properties", size: 11378, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/eu/viewer.properties", size: 11378, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16626,7 +16626,7 @@ func bindataPublicPdfjsWebLocaleFaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fa/viewer.properties", size: 10268, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fa/viewer.properties", size: 10268, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16646,7 +16646,7 @@ func bindataPublicPdfjsWebLocaleFfViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ff/viewer.properties", size: 8855, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ff/viewer.properties", size: 8855, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16666,7 +16666,7 @@ func bindataPublicPdfjsWebLocaleFiViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fi/viewer.properties", size: 11237, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fi/viewer.properties", size: 11237, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16686,7 +16686,7 @@ func bindataPublicPdfjsWebLocaleFrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fr/viewer.properties", size: 11723, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fr/viewer.properties", size: 11723, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16706,7 +16706,7 @@ func bindataPublicPdfjsWebLocaleFyNlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fy-NL/viewer.properties", size: 11089, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fy-NL/viewer.properties", size: 11089, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16726,7 +16726,7 @@ func bindataPublicPdfjsWebLocaleGaIeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ga-IE/viewer.properties", size: 8216, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ga-IE/viewer.properties", size: 8216, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16746,7 +16746,7 @@ func bindataPublicPdfjsWebLocaleGdViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gd/viewer.properties", size: 10211, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gd/viewer.properties", size: 10211, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16766,7 +16766,7 @@ func bindataPublicPdfjsWebLocaleGlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gl/viewer.properties", size: 7203, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gl/viewer.properties", size: 7203, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16786,7 +16786,7 @@ func bindataPublicPdfjsWebLocaleGnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gn/viewer.properties", size: 11400, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gn/viewer.properties", size: 11400, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16806,7 +16806,7 @@ func bindataPublicPdfjsWebLocaleGuInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gu-IN/viewer.properties", size: 15394, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gu-IN/viewer.properties", size: 15394, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16826,7 +16826,7 @@ func bindataPublicPdfjsWebLocaleHeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/he/viewer.properties", size: 12079, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/he/viewer.properties", size: 12079, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16846,7 +16846,7 @@ func bindataPublicPdfjsWebLocaleHiInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hi-IN/viewer.properties", size: 13188, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hi-IN/viewer.properties", size: 13188, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16866,7 +16866,7 @@ func bindataPublicPdfjsWebLocaleHrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hr/viewer.properties", size: 8002, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hr/viewer.properties", size: 8002, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16886,7 +16886,7 @@ func bindataPublicPdfjsWebLocaleHsbViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hsb/viewer.properties", size: 11486, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hsb/viewer.properties", size: 11486, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16906,7 +16906,7 @@ func bindataPublicPdfjsWebLocaleHtoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hto/viewer.properties", size: 5182, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hto/viewer.properties", size: 5182, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16926,7 +16926,7 @@ func bindataPublicPdfjsWebLocaleHuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hu/viewer.properties", size: 11667, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hu/viewer.properties", size: 11667, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16946,7 +16946,7 @@ func bindataPublicPdfjsWebLocaleHyAmViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hy-AM/viewer.properties", size: 10955, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hy-AM/viewer.properties", size: 10955, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16966,7 +16966,7 @@ func bindataPublicPdfjsWebLocaleIaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ia/viewer.properties", size: 11434, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ia/viewer.properties", size: 11434, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16986,7 +16986,7 @@ func bindataPublicPdfjsWebLocaleIdViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/id/viewer.properties", size: 11138, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/id/viewer.properties", size: 11138, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17006,7 +17006,7 @@ func bindataPublicPdfjsWebLocaleIsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/is/viewer.properties", size: 9612, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/is/viewer.properties", size: 9612, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17026,7 +17026,7 @@ func bindataPublicPdfjsWebLocaleItViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/it/viewer.properties", size: 7866, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/it/viewer.properties", size: 7866, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17046,7 +17046,7 @@ func bindataPublicPdfjsWebLocaleJaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ja/viewer.properties", size: 10852, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ja/viewer.properties", size: 10852, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17066,7 +17066,7 @@ func bindataPublicPdfjsWebLocaleKaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ka/viewer.properties", size: 16006, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ka/viewer.properties", size: 16006, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17086,7 +17086,7 @@ func bindataPublicPdfjsWebLocaleKabViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kab/viewer.properties", size: 11201, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kab/viewer.properties", size: 11201, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17106,7 +17106,7 @@ func bindataPublicPdfjsWebLocaleKkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kk/viewer.properties", size: 13618, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kk/viewer.properties", size: 13618, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17126,7 +17126,7 @@ func bindataPublicPdfjsWebLocaleKmViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/km/viewer.properties", size: 11829, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/km/viewer.properties", size: 11829, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17146,7 +17146,7 @@ func bindataPublicPdfjsWebLocaleKnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kn/viewer.properties", size: 12111, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kn/viewer.properties", size: 12111, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17166,7 +17166,7 @@ func bindataPublicPdfjsWebLocaleKoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ko/viewer.properties", size: 11400, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ko/viewer.properties", size: 11400, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17186,7 +17186,7 @@ func bindataPublicPdfjsWebLocaleKokViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kok/viewer.properties", size: 9573, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kok/viewer.properties", size: 9573, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17206,7 +17206,7 @@ func bindataPublicPdfjsWebLocaleKsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ks/viewer.properties", size: 8546, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ks/viewer.properties", size: 8546, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17226,7 +17226,7 @@ func bindataPublicPdfjsWebLocaleKuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ku/viewer.properties", size: 6325, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ku/viewer.properties", size: 6325, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17246,7 +17246,7 @@ func bindataPublicPdfjsWebLocaleLgViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lg/viewer.properties", size: 4510, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lg/viewer.properties", size: 4510, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17266,7 +17266,7 @@ func bindataPublicPdfjsWebLocaleLijViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lij/viewer.properties", size: 11376, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lij/viewer.properties", size: 11376, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17286,7 +17286,7 @@ func bindataPublicPdfjsWebLocaleLoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lo/viewer.properties", size: 7878, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lo/viewer.properties", size: 7878, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17306,7 +17306,7 @@ func bindataPublicPdfjsWebLocaleLocaleProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/locale.properties", size: 5110, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/locale.properties", size: 5110, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17326,7 +17326,7 @@ func bindataPublicPdfjsWebLocaleLtViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lt/viewer.properties", size: 11542, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lt/viewer.properties", size: 11542, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17346,7 +17346,7 @@ func bindataPublicPdfjsWebLocaleLtgViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ltg/viewer.properties", size: 9919, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ltg/viewer.properties", size: 9919, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17366,7 +17366,7 @@ func bindataPublicPdfjsWebLocaleLvViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lv/viewer.properties", size: 11285, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lv/viewer.properties", size: 11285, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17386,7 +17386,7 @@ func bindataPublicPdfjsWebLocaleMaiViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mai/viewer.properties", size: 9447, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mai/viewer.properties", size: 9447, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17406,7 +17406,7 @@ func bindataPublicPdfjsWebLocaleMehViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/meh/viewer.properties", size: 3140, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/meh/viewer.properties", size: 3140, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17426,7 +17426,7 @@ func bindataPublicPdfjsWebLocaleMkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mk/viewer.properties", size: 7701, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mk/viewer.properties", size: 7701, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17446,7 +17446,7 @@ func bindataPublicPdfjsWebLocaleMlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ml/viewer.properties", size: 13497, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ml/viewer.properties", size: 13497, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17466,7 +17466,7 @@ func bindataPublicPdfjsWebLocaleMnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mn/viewer.properties", size: 3557, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mn/viewer.properties", size: 3557, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17486,7 +17486,7 @@ func bindataPublicPdfjsWebLocaleMrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mr/viewer.properties", size: 12528, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mr/viewer.properties", size: 12528, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17506,7 +17506,7 @@ func bindataPublicPdfjsWebLocaleMsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ms/viewer.properties", size: 11071, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ms/viewer.properties", size: 11071, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17526,7 +17526,7 @@ func bindataPublicPdfjsWebLocaleMyViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/my/viewer.properties", size: 11533, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/my/viewer.properties", size: 11533, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17546,7 +17546,7 @@ func bindataPublicPdfjsWebLocaleNbNoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nb-NO/viewer.properties", size: 10863, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nb-NO/viewer.properties", size: 10863, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17566,7 +17566,7 @@ func bindataPublicPdfjsWebLocaleNeNpViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ne-NP/viewer.properties", size: 11691, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ne-NP/viewer.properties", size: 11691, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17586,7 +17586,7 @@ func bindataPublicPdfjsWebLocaleNlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nl/viewer.properties", size: 11336, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nl/viewer.properties", size: 11336, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17606,7 +17606,7 @@ func bindataPublicPdfjsWebLocaleNnNoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nn-NO/viewer.properties", size: 10832, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nn-NO/viewer.properties", size: 10832, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17626,7 +17626,7 @@ func bindataPublicPdfjsWebLocaleNsoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nso/viewer.properties", size: 5610, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nso/viewer.properties", size: 5610, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17646,7 +17646,7 @@ func bindataPublicPdfjsWebLocaleOcViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/oc/viewer.properties", size: 9755, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/oc/viewer.properties", size: 9755, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17666,7 +17666,7 @@ func bindataPublicPdfjsWebLocaleOrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/or/viewer.properties", size: 10397, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/or/viewer.properties", size: 10397, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17686,7 +17686,7 @@ func bindataPublicPdfjsWebLocalePaInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pa-IN/viewer.properties", size: 11954, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pa-IN/viewer.properties", size: 11954, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17706,7 +17706,7 @@ func bindataPublicPdfjsWebLocalePlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pl/viewer.properties", size: 7751, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pl/viewer.properties", size: 7751, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17726,7 +17726,7 @@ func bindataPublicPdfjsWebLocalePtBrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pt-BR/viewer.properties", size: 10787, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pt-BR/viewer.properties", size: 10787, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17746,7 +17746,7 @@ func bindataPublicPdfjsWebLocalePtPtViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pt-PT/viewer.properties", size: 11474, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pt-PT/viewer.properties", size: 11474, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17766,7 +17766,7 @@ func bindataPublicPdfjsWebLocaleRmViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/rm/viewer.properties", size: 11670, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/rm/viewer.properties", size: 11670, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17786,7 +17786,7 @@ func bindataPublicPdfjsWebLocaleRoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ro/viewer.properties", size: 11640, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ro/viewer.properties", size: 11640, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17806,7 +17806,7 @@ func bindataPublicPdfjsWebLocaleRuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ru/viewer.properties", size: 13879, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ru/viewer.properties", size: 13879, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17826,7 +17826,7 @@ func bindataPublicPdfjsWebLocaleRwViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/rw/viewer.properties", size: 3488, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/rw/viewer.properties", size: 3488, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17846,7 +17846,7 @@ func bindataPublicPdfjsWebLocaleSahViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sah/viewer.properties", size: 8401, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sah/viewer.properties", size: 8401, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17866,7 +17866,7 @@ func bindataPublicPdfjsWebLocaleSatViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sat/viewer.properties", size: 8346, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sat/viewer.properties", size: 8346, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17886,7 +17886,7 @@ func bindataPublicPdfjsWebLocaleSiViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/si/viewer.properties", size: 9674, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/si/viewer.properties", size: 9674, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17906,7 +17906,7 @@ func bindataPublicPdfjsWebLocaleSkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sk/viewer.properties", size: 11628, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sk/viewer.properties", size: 11628, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17926,7 +17926,7 @@ func bindataPublicPdfjsWebLocaleSlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sl/viewer.properties", size: 11146, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sl/viewer.properties", size: 11146, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17946,7 +17946,7 @@ func bindataPublicPdfjsWebLocaleSonViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/son/viewer.properties", size: 7445, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/son/viewer.properties", size: 7445, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17966,7 +17966,7 @@ func bindataPublicPdfjsWebLocaleSqViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sq/viewer.properties", size: 11023, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sq/viewer.properties", size: 11023, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17986,7 +17986,7 @@ func bindataPublicPdfjsWebLocaleSrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sr/viewer.properties", size: 12236, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sr/viewer.properties", size: 12236, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18006,7 +18006,7 @@ func bindataPublicPdfjsWebLocaleSvSeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sv-SE/viewer.properties", size: 10885, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sv-SE/viewer.properties", size: 10885, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18026,7 +18026,7 @@ func bindataPublicPdfjsWebLocaleSwViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sw/viewer.properties", size: 5268, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sw/viewer.properties", size: 5268, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18046,7 +18046,7 @@ func bindataPublicPdfjsWebLocaleTaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ta/viewer.properties", size: 13473, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ta/viewer.properties", size: 13473, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18066,7 +18066,7 @@ func bindataPublicPdfjsWebLocaleTaLkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ta-LK/viewer.properties", size: 3495, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ta-LK/viewer.properties", size: 3495, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18086,7 +18086,7 @@ func bindataPublicPdfjsWebLocaleTeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/te/viewer.properties", size: 13076, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/te/viewer.properties", size: 13076, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18106,7 +18106,7 @@ func bindataPublicPdfjsWebLocaleThViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/th/viewer.properties", size: 13789, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/th/viewer.properties", size: 13789, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18126,7 +18126,7 @@ func bindataPublicPdfjsWebLocaleTlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tl/viewer.properties", size: 7804, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tl/viewer.properties", size: 7804, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18146,7 +18146,7 @@ func bindataPublicPdfjsWebLocaleTnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tn/viewer.properties", size: 3630, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tn/viewer.properties", size: 3630, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18166,7 +18166,7 @@ func bindataPublicPdfjsWebLocaleTrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tr/viewer.properties", size: 11250, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tr/viewer.properties", size: 11250, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18186,7 +18186,7 @@ func bindataPublicPdfjsWebLocaleTszViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tsz/viewer.properties", size: 3213, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tsz/viewer.properties", size: 3213, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18206,7 +18206,7 @@ func bindataPublicPdfjsWebLocaleUkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/uk/viewer.properties", size: 13712, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/uk/viewer.properties", size: 13712, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18226,7 +18226,7 @@ func bindataPublicPdfjsWebLocaleUrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ur/viewer.properties", size: 10290, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ur/viewer.properties", size: 10290, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18246,7 +18246,7 @@ func bindataPublicPdfjsWebLocaleUzViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/uz/viewer.properties", size: 7340, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/uz/viewer.properties", size: 7340, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18266,7 +18266,7 @@ func bindataPublicPdfjsWebLocaleViViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/vi/viewer.properties", size: 9653, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/vi/viewer.properties", size: 9653, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18286,7 +18286,7 @@ func bindataPublicPdfjsWebLocaleWoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/wo/viewer.properties", size: 4913, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/wo/viewer.properties", size: 4913, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18306,7 +18306,7 @@ func bindataPublicPdfjsWebLocaleXhViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/xh/viewer.properties", size: 8192, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/xh/viewer.properties", size: 8192, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18326,7 +18326,7 @@ func bindataPublicPdfjsWebLocaleZamViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zam/viewer.properties", size: 3696, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zam/viewer.properties", size: 3696, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18346,7 +18346,7 @@ func bindataPublicPdfjsWebLocaleZhCnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zh-CN/viewer.properties", size: 10709, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zh-CN/viewer.properties", size: 10709, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18366,7 +18366,7 @@ func bindataPublicPdfjsWebLocaleZhTwViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zh-TW/viewer.properties", size: 10774, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zh-TW/viewer.properties", size: 10774, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18386,7 +18386,7 @@ func bindataPublicPdfjsWebLocaleZuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zu/viewer.properties", size: 5672, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zu/viewer.properties", size: 5672, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18406,7 +18406,7 @@ func bindataPublicPdfjsWebViewerCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.css", size: 55950, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.css", size: 55950, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18426,7 +18426,7 @@ func bindataPublicPdfjsWebViewerHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.html", size: 22182, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.html", size: 22182, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18446,7 +18446,7 @@ func bindataPublicPdfjsWebViewerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.js", size: 229074, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.js", size: 229074, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18466,7 +18466,7 @@ func bindataPublicPrismPrismCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/prism/prism.css", size: 3759, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/prism/prism.css", size: 3759, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18486,7 +18486,7 @@ func bindataPublicPrismPrismJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/prism/prism.js", size: 74113, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/prism/prism.js", size: 74113, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18506,7 +18506,7 @@ func bindataPublicSectionsAirtablePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/airtable.png", size: 1263, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/airtable.png", size: 1263, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18526,7 +18526,7 @@ func bindataPublicSectionsAirtable2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/airtable@2x.png", size: 4247, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/airtable@2x.png", size: 4247, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18546,7 +18546,7 @@ func bindataPublicSectionsAsanaPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/asana.png", size: 1405, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/asana.png", size: 1405, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18566,7 +18566,7 @@ func bindataPublicSectionsAsana2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/asana@2x.png", size: 3507, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/asana@2x.png", size: 3507, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18586,7 +18586,7 @@ func bindataPublicSectionsCodePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/code.png", size: 720, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/code.png", size: 720, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18606,7 +18606,7 @@ func bindataPublicSectionsCode2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/code@2x.png", size: 1468, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/code@2x.png", size: 1468, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18626,7 +18626,7 @@ func bindataPublicSectionsDocusignPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/docusign.png", size: 791, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/docusign.png", size: 791, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18646,7 +18646,7 @@ func bindataPublicSectionsDocusign2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/docusign@2x.png", size: 1358, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/docusign@2x.png", size: 1358, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18666,7 +18666,7 @@ func bindataPublicSectionsFlowchartPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/flowchart.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/flowchart.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18686,7 +18686,7 @@ func bindataPublicSectionsFlowchart2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/flowchart@2x.png", size: 630, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/flowchart@2x.png", size: 630, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18706,7 +18706,7 @@ func bindataPublicSectionsGeminiPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/gemini.png", size: 1580, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/gemini.png", size: 1580, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18726,7 +18726,7 @@ func bindataPublicSectionsGemini2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/gemini@2x.png", size: 3446, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/gemini@2x.png", size: 3446, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18746,7 +18746,7 @@ func bindataPublicSectionsGithubPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/github.png", size: 674, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/github.png", size: 674, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18766,7 +18766,7 @@ func bindataPublicSectionsGithub2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/github@2x.png", size: 1388, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/github@2x.png", size: 1388, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18786,7 +18786,7 @@ func bindataPublicSectionsIntercomPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/intercom.png", size: 1183, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/intercom.png", size: 1183, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18806,7 +18806,7 @@ func bindataPublicSectionsIntercom2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/intercom@2x.png", size: 2223, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/intercom@2x.png", size: 2223, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18826,7 +18826,7 @@ func bindataPublicSectionsJiraPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/jira.png", size: 1326, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/jira.png", size: 1326, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18846,7 +18846,7 @@ func bindataPublicSectionsJira2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/jira@2x.png", size: 2932, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/jira@2x.png", size: 2932, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18866,7 +18866,7 @@ func bindataPublicSectionsMailchimpPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/mailchimp.png", size: 2115, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/mailchimp.png", size: 2115, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18886,7 +18886,7 @@ func bindataPublicSectionsMailchimp2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/mailchimp@2x.png", size: 5901, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/mailchimp@2x.png", size: 5901, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18906,7 +18906,7 @@ func bindataPublicSectionsMarkdownPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/markdown.png", size: 518, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/markdown.png", size: 518, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18926,7 +18926,7 @@ func bindataPublicSectionsMarkdown2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/markdown@2x.png", size: 864, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/markdown@2x.png", size: 864, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18946,7 +18946,7 @@ func bindataPublicSectionsPapertrailPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/papertrail.png", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/papertrail.png", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18966,7 +18966,7 @@ func bindataPublicSectionsPapertrail2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/papertrail@2x.png", size: 2376, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/papertrail@2x.png", size: 2376, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18986,7 +18986,7 @@ func bindataPublicSectionsPdfPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/pdf.png", size: 555, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/pdf.png", size: 555, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19006,7 +19006,7 @@ func bindataPublicSectionsPdf2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/pdf@2x.png", size: 1001, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/pdf@2x.png", size: 1001, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19026,7 +19026,7 @@ func bindataPublicSectionsPlantumlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/plantuml.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/plantuml.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19046,7 +19046,7 @@ func bindataPublicSectionsPlantuml2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/plantuml@2x.png", size: 630, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/plantuml@2x.png", size: 630, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19066,7 +19066,7 @@ func bindataPublicSectionsSalesforcePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/salesforce.png", size: 1116, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/salesforce.png", size: 1116, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19086,7 +19086,7 @@ func bindataPublicSectionsSalesforce2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/salesforce@2x.png", size: 2630, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/salesforce@2x.png", size: 2630, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19106,7 +19106,7 @@ func bindataPublicSectionsStripePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/stripe.png", size: 1487, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/stripe.png", size: 1487, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19126,7 +19126,7 @@ func bindataPublicSectionsStripe2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/stripe@2x.png", size: 4523, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/stripe@2x.png", size: 4523, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19146,7 +19146,7 @@ func bindataPublicSectionsSuggestPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/suggest.png", size: 578, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/suggest.png", size: 578, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19166,7 +19166,7 @@ func bindataPublicSectionsSuggest2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/suggest@2x.png", size: 1096, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/suggest@2x.png", size: 1096, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19186,7 +19186,7 @@ func bindataPublicSectionsTablePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/table.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/table.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19206,7 +19206,7 @@ func bindataPublicSectionsTable2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/table@2x.png", size: 487, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/table@2x.png", size: 487, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19226,7 +19226,7 @@ func bindataPublicSectionsTabularPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/tabular.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/tabular.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19246,7 +19246,7 @@ func bindataPublicSectionsTabular2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/tabular@2x.png", size: 487, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/tabular@2x.png", size: 487, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19266,7 +19266,7 @@ func bindataPublicSectionsTrelloPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/trello.png", size: 718, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/trello.png", size: 718, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19286,7 +19286,7 @@ func bindataPublicSectionsTrello2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/trello@2x.png", size: 1161, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/trello@2x.png", size: 1161, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19306,7 +19306,7 @@ func bindataPublicSectionsWysiwygPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/wysiwyg.png", size: 562, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/wysiwyg.png", size: 562, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19326,7 +19326,7 @@ func bindataPublicSectionsWysiwyg2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/wysiwyg@2x.png", size: 941, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/wysiwyg@2x.png", size: 941, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19346,7 +19346,7 @@ func bindataPublicSectionsZendeskPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/zendesk.png", size: 1720, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/zendesk.png", size: 1720, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19366,7 +19366,7 @@ func bindataPublicSectionsZendesk2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/zendesk@2x.png", size: 5196, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/sections/zendesk@2x.png", size: 5196, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19386,7 +19386,7 @@ func bindataPublicTinymceLangsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/langs/readme.md", size: 151, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/langs/readme.md", size: 151, mode: os.FileMode(493), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19406,7 +19406,7 @@ func bindataPublicTinymceLicenseTxt() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/license.txt", size: 26441, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/license.txt", size: 26441, mode: os.FileMode(493), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19426,7 +19426,7 @@ func bindataPublicTinymcePluginsAdvlistPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/advlist/plugin.min.js", size: 3754, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/advlist/plugin.min.js", size: 3754, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19446,7 +19446,7 @@ func bindataPublicTinymcePluginsAnchorPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/anchor/plugin.min.js", size: 1775, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/anchor/plugin.min.js", size: 1775, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19466,7 +19466,7 @@ func bindataPublicTinymcePluginsAutolinkPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autolink/plugin.min.js", size: 2127, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autolink/plugin.min.js", size: 2127, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19486,7 +19486,7 @@ func bindataPublicTinymcePluginsAutoresizePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autoresize/plugin.min.js", size: 1930, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autoresize/plugin.min.js", size: 1930, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19506,7 +19506,7 @@ func bindataPublicTinymcePluginsAutosavePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autosave/plugin.min.js", size: 3008, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autosave/plugin.min.js", size: 3008, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19526,7 +19526,7 @@ func bindataPublicTinymcePluginsBbcodePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/bbcode/plugin.min.js", size: 2821, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/bbcode/plugin.min.js", size: 2821, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19546,7 +19546,7 @@ func bindataPublicTinymcePluginsCharmapPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/charmap/plugin.min.js", size: 11690, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/charmap/plugin.min.js", size: 11690, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19566,7 +19566,7 @@ func bindataPublicTinymcePluginsCodePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/code/plugin.min.js", size: 910, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/code/plugin.min.js", size: 910, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19586,7 +19586,7 @@ func bindataPublicTinymcePluginsCodesampleCssPrismCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/codesample/css/prism.css", size: 4970, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/codesample/css/prism.css", size: 4970, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19606,7 +19606,7 @@ func bindataPublicTinymcePluginsCodesamplePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/codesample/plugin.min.js", size: 20643, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/codesample/plugin.min.js", size: 20643, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19626,7 +19626,7 @@ func bindataPublicTinymcePluginsColorpickerPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/colorpicker/plugin.min.js", size: 240, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/colorpicker/plugin.min.js", size: 240, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19646,7 +19646,7 @@ func bindataPublicTinymcePluginsContextmenuPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/contextmenu/plugin.min.js", size: 240, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/contextmenu/plugin.min.js", size: 240, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19666,7 +19666,7 @@ func bindataPublicTinymcePluginsDirectionalityPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/directionality/plugin.min.js", size: 2786, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/directionality/plugin.min.js", size: 2786, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19686,7 +19686,7 @@ func bindataPublicTinymcePluginsEmoticonsJsEmojisJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/js/emojis.js", size: 175092, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/js/emojis.js", size: 175092, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19706,7 +19706,7 @@ func bindataPublicTinymcePluginsEmoticonsJsEmojisMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/js/emojis.min.js", size: 175092, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/js/emojis.min.js", size: 175092, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19726,7 +19726,7 @@ func bindataPublicTinymcePluginsEmoticonsPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/plugin.min.js", size: 7786, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/plugin.min.js", size: 7786, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19746,7 +19746,7 @@ func bindataPublicTinymcePluginsFullpagePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/fullpage/plugin.min.js", size: 7845, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/fullpage/plugin.min.js", size: 7845, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19766,7 +19766,7 @@ func bindataPublicTinymcePluginsFullscreenPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/fullscreen/plugin.min.js", size: 8862, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/fullscreen/plugin.min.js", size: 8862, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19786,7 +19786,7 @@ func bindataPublicTinymcePluginsHelpPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/help/plugin.min.js", size: 14088, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/help/plugin.min.js", size: 14088, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19806,7 +19806,7 @@ func bindataPublicTinymcePluginsHrPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/hr/plugin.min.js", size: 533, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/hr/plugin.min.js", size: 533, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19826,7 +19826,7 @@ func bindataPublicTinymcePluginsImagePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/image/plugin.min.js", size: 22398, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/image/plugin.min.js", size: 22398, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19846,7 +19846,7 @@ func bindataPublicTinymcePluginsImagetoolsPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/imagetools/plugin.min.js", size: 21157, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/imagetools/plugin.min.js", size: 21157, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19866,7 +19866,7 @@ func bindataPublicTinymcePluginsImportcssPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/importcss/plugin.min.js", size: 4613, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/importcss/plugin.min.js", size: 4613, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19886,7 +19886,7 @@ func bindataPublicTinymcePluginsInsertdatetimePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/insertdatetime/plugin.min.js", size: 2873, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/insertdatetime/plugin.min.js", size: 2873, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19906,7 +19906,7 @@ func bindataPublicTinymcePluginsLegacyoutputPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/legacyoutput/plugin.min.js", size: 2639, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/legacyoutput/plugin.min.js", size: 2639, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19926,7 +19926,7 @@ func bindataPublicTinymcePluginsLinkPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/link/plugin.min.js", size: 16000, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/link/plugin.min.js", size: 16000, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19946,7 +19946,7 @@ func bindataPublicTinymcePluginsListsPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/lists/plugin.min.js", size: 27160, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/lists/plugin.min.js", size: 27160, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19966,7 +19966,7 @@ func bindataPublicTinymcePluginsMediaPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/media/plugin.min.js", size: 17260, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/media/plugin.min.js", size: 17260, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19986,7 +19986,7 @@ func bindataPublicTinymcePluginsNonbreakingPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/nonbreaking/plugin.min.js", size: 1106, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/nonbreaking/plugin.min.js", size: 1106, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20006,7 +20006,7 @@ func bindataPublicTinymcePluginsNoneditablePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/noneditable/plugin.min.js", size: 1532, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/noneditable/plugin.min.js", size: 1532, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20026,7 +20026,7 @@ func bindataPublicTinymcePluginsPagebreakPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/pagebreak/plugin.min.js", size: 1491, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/pagebreak/plugin.min.js", size: 1491, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20046,7 +20046,7 @@ func bindataPublicTinymcePluginsPastePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/paste/plugin.min.js", size: 24189, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/paste/plugin.min.js", size: 24189, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20066,7 +20066,7 @@ func bindataPublicTinymcePluginsPreviewPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/preview/plugin.min.js", size: 1766, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/preview/plugin.min.js", size: 1766, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20086,7 +20086,7 @@ func bindataPublicTinymcePluginsPrintPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/print/plugin.min.js", size: 579, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/print/plugin.min.js", size: 579, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20106,7 +20106,7 @@ func bindataPublicTinymcePluginsQuickbarsPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/quickbars/plugin.min.js", size: 9774, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/quickbars/plugin.min.js", size: 9774, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20126,7 +20126,7 @@ func bindataPublicTinymcePluginsSavePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/save/plugin.min.js", size: 1515, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/save/plugin.min.js", size: 1515, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20146,7 +20146,7 @@ func bindataPublicTinymcePluginsSearchreplacePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/searchreplace/plugin.min.js", size: 8884, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/searchreplace/plugin.min.js", size: 8884, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20166,7 +20166,7 @@ func bindataPublicTinymcePluginsSpellcheckerPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/spellchecker/plugin.min.js", size: 9718, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/spellchecker/plugin.min.js", size: 9718, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20186,7 +20186,7 @@ func bindataPublicTinymcePluginsTabfocusPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/tabfocus/plugin.min.js", size: 1612, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/tabfocus/plugin.min.js", size: 1612, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20206,7 +20206,7 @@ func bindataPublicTinymcePluginsTablePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/table/plugin.min.js", size: 119755, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/table/plugin.min.js", size: 119755, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20226,7 +20226,7 @@ func bindataPublicTinymcePluginsTemplatePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/template/plugin.min.js", size: 7680, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/template/plugin.min.js", size: 7680, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20246,7 +20246,7 @@ func bindataPublicTinymcePluginsTextcolorPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/textcolor/plugin.min.js", size: 236, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/textcolor/plugin.min.js", size: 236, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20266,7 +20266,7 @@ func bindataPublicTinymcePluginsTextpatternPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/textpattern/plugin.min.js", size: 17927, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/textpattern/plugin.min.js", size: 17927, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20286,7 +20286,7 @@ func bindataPublicTinymcePluginsTocPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/toc/plugin.min.js", size: 3148, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/toc/plugin.min.js", size: 3148, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20306,7 +20306,7 @@ func bindataPublicTinymcePluginsVisualblocksCssVisualblocksCss() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/visualblocks/css/visualblocks.css", size: 5473, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/visualblocks/css/visualblocks.css", size: 5473, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20326,7 +20326,7 @@ func bindataPublicTinymcePluginsVisualblocksPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/visualblocks/plugin.min.js", size: 1342, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/visualblocks/plugin.min.js", size: 1342, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20346,7 +20346,7 @@ func bindataPublicTinymcePluginsVisualcharsPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/visualchars/plugin.min.js", size: 5426, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/visualchars/plugin.min.js", size: 5426, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20366,7 +20366,7 @@ func bindataPublicTinymcePluginsWordcountPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/wordcount/plugin.min.js", size: 9026, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/wordcount/plugin.min.js", size: 9026, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20386,7 +20386,7 @@ func bindataPublicTinymceSkinsContentDefaultContentMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/default/content.min.css", size: 957, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/default/content.min.css", size: 957, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20406,7 +20406,7 @@ func bindataPublicTinymceSkinsContentDocumentContentMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/document/content.min.css", size: 1040, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/document/content.min.css", size: 1040, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20426,7 +20426,7 @@ func bindataPublicTinymceSkinsContentWriterContentMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/writer/content.min.css", size: 978, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/writer/content.min.css", size: 978, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20446,7 +20446,7 @@ func bindataPublicTinymceSkinsUiOxideContentInlineMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.inline.min.css", size: 18253, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.inline.min.css", size: 18253, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20466,7 +20466,7 @@ func bindataPublicTinymceSkinsUiOxideContentMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.min.css", size: 18049, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.min.css", size: 18049, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20486,7 +20486,7 @@ func bindataPublicTinymceSkinsUiOxideContentMobileMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.mobile.min.css", size: 544, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.mobile.min.css", size: 544, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20506,7 +20506,7 @@ func bindataPublicTinymceSkinsUiOxideFontsTinymceMobileWoff() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff", size: 4624, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff", size: 4624, mode: os.FileMode(493), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20526,7 +20526,7 @@ func bindataPublicTinymceSkinsUiOxideSkinMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/skin.min.css", size: 51110, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/skin.min.css", size: 51110, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20546,7 +20546,7 @@ func bindataPublicTinymceSkinsUiOxideSkinMobileMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/skin.mobile.min.css", size: 20978, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/skin.mobile.min.css", size: 20978, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20566,7 +20566,7 @@ func bindataPublicTinymceSkinsUiOxideDarkContentInlineMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.inline.min.css", size: 18253, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.inline.min.css", size: 18253, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20586,7 +20586,7 @@ func bindataPublicTinymceSkinsUiOxideDarkContentMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.min.css", size: 18049, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.min.css", size: 18049, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20606,7 +20606,7 @@ func bindataPublicTinymceSkinsUiOxideDarkContentMobileMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.mobile.min.css", size: 544, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.mobile.min.css", size: 544, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20626,7 +20626,7 @@ func bindataPublicTinymceSkinsUiOxideDarkFontsTinymceMobileWoff() (*asset, error return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff", size: 4624, mode: os.FileMode(493), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff", size: 4624, mode: os.FileMode(493), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20646,7 +20646,7 @@ func bindataPublicTinymceSkinsUiOxideDarkSkinMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/skin.min.css", size: 51006, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/skin.min.css", size: 51006, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20666,7 +20666,7 @@ func bindataPublicTinymceSkinsUiOxideDarkSkinMobileMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/skin.mobile.min.css", size: 20978, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/skin.mobile.min.css", size: 20978, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20686,7 +20686,7 @@ func bindataPublicTinymceThemesMobileThemeMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/themes/mobile/theme.min.js", size: 166055, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/themes/mobile/theme.min.js", size: 166055, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20706,7 +20706,7 @@ func bindataPublicTinymceThemesSilverThemeMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/themes/silver/theme.min.js", size: 364236, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/themes/silver/theme.min.js", size: 364236, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20726,7 +20726,7 @@ func bindataPublicTinymceTinymceMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/tinymce.min.js", size: 419754, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/tinymce.min.js", size: 419754, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20746,7 +20746,7 @@ func bindataRobotsTxt() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/robots.txt", size: 51, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/robots.txt", size: 51, mode: os.FileMode(420), modTime: time.Unix(1565877061, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20766,7 +20766,7 @@ func bindataScriptsMysqlDb_00000Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00000.sql", size: 10782, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00000.sql", size: 10782, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20786,7 +20786,7 @@ func bindataScriptsMysqlDb_00001Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00001.sql", size: 692, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00001.sql", size: 692, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20806,7 +20806,7 @@ func bindataScriptsMysqlDb_00002Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00002.sql", size: 548, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00002.sql", size: 548, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20826,7 +20826,7 @@ func bindataScriptsMysqlDb_00003Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00003.sql", size: 103, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00003.sql", size: 103, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20846,7 +20846,7 @@ func bindataScriptsMysqlDb_00004Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00004.sql", size: 824, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00004.sql", size: 824, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20866,7 +20866,7 @@ func bindataScriptsMysqlDb_00005Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00005.sql", size: 441, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00005.sql", size: 441, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20886,7 +20886,7 @@ func bindataScriptsMysqlDb_00006Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00006.sql", size: 634, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00006.sql", size: 634, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20906,7 +20906,7 @@ func bindataScriptsMysqlDb_00007Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00007.sql", size: 115, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00007.sql", size: 115, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20926,7 +20926,7 @@ func bindataScriptsMysqlDb_00008Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00008.sql", size: 711, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00008.sql", size: 711, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20946,7 +20946,7 @@ func bindataScriptsMysqlDb_00009Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00009.sql", size: 1262, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00009.sql", size: 1262, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20966,7 +20966,7 @@ func bindataScriptsMysqlDb_00010Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00010.sql", size: 4289, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00010.sql", size: 4289, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20986,7 +20986,7 @@ func bindataScriptsMysqlDb_00011Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00011.sql", size: 218, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00011.sql", size: 218, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21006,7 +21006,7 @@ func bindataScriptsMysqlDb_00012Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00012.sql", size: 128, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00012.sql", size: 128, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21026,7 +21026,7 @@ func bindataScriptsMysqlDb_00013Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00013.sql", size: 632, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00013.sql", size: 632, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21046,7 +21046,7 @@ func bindataScriptsMysqlDb_00014Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00014.sql", size: 144, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00014.sql", size: 144, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21066,7 +21066,7 @@ func bindataScriptsMysqlDb_00015Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00015.sql", size: 3905, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00015.sql", size: 3905, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21086,7 +21086,7 @@ func bindataScriptsMysqlDb_00016Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00016.sql", size: 6528, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00016.sql", size: 6528, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21106,7 +21106,7 @@ func bindataScriptsMysqlDb_00017Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00017.sql", size: 1543, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00017.sql", size: 1543, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21126,7 +21126,7 @@ func bindataScriptsMysqlDb_00018Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00018.sql", size: 320, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00018.sql", size: 320, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21146,7 +21146,7 @@ func bindataScriptsMysqlDb_00019Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00019.sql", size: 1432, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00019.sql", size: 1432, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21166,7 +21166,7 @@ func bindataScriptsMysqlDb_00020Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00020.sql", size: 605, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00020.sql", size: 605, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21186,7 +21186,7 @@ func bindataScriptsMysqlDb_00021Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00021.sql", size: 929, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00021.sql", size: 929, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21206,7 +21206,7 @@ func bindataScriptsMysqlDb_00022Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00022.sql", size: 158, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00022.sql", size: 158, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21226,7 +21226,7 @@ func bindataScriptsMysqlDb_00023Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00023.sql", size: 126, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00023.sql", size: 126, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21246,7 +21246,7 @@ func bindataScriptsMysqlDb_00024Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00024.sql", size: 346, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00024.sql", size: 346, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21266,7 +21266,7 @@ func bindataScriptsMysqlDb_00025Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00025.sql", size: 16139, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00025.sql", size: 16139, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21286,7 +21286,7 @@ func bindataScriptsMysqlDb_00026Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00026.sql", size: 133, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00026.sql", size: 133, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21306,7 +21306,7 @@ func bindataScriptsMysqlDb_00027Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00027.sql", size: 1901, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00027.sql", size: 1901, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21326,7 +21326,7 @@ func bindataScriptsMysqlDb_00028Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00028.sql", size: 145, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00028.sql", size: 145, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21346,7 +21346,7 @@ func bindataScriptsMysqlDb_00029Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00029.sql", size: 182, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00029.sql", size: 182, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21366,7 +21366,7 @@ func bindataScriptsMysqlDb_00030Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00030.sql", size: 332, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00030.sql", size: 332, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21386,7 +21386,7 @@ func bindataScriptsPostgresqlDb_00001Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00001.sql", size: 21353, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00001.sql", size: 21353, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21406,7 +21406,7 @@ func bindataScriptsPostgresqlDb_00002Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00002.sql", size: 110, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00002.sql", size: 110, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21426,7 +21426,7 @@ func bindataScriptsPostgresqlDb_00003Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00003.sql", size: 1637, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00003.sql", size: 1637, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21446,7 +21446,7 @@ func bindataScriptsPostgresqlDb_00004Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00004.sql", size: 134, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00004.sql", size: 134, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21466,7 +21466,7 @@ func bindataScriptsPostgresqlDb_00005Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00005.sql", size: 165, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00005.sql", size: 165, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21486,7 +21486,7 @@ func bindataScriptsPostgresqlDb_00006Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00006.sql", size: 298, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00006.sql", size: 298, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21506,7 +21506,7 @@ func bindataScriptsSqlserverDb_00001Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00001.sql", size: 23995, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00001.sql", size: 23995, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21526,7 +21526,7 @@ func bindataScriptsSqlserverDb_00002Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00002.sql", size: 170, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00002.sql", size: 170, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21546,7 +21546,7 @@ func bindataScriptsSqlserverDb_00003Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00003.sql", size: 308, mode: os.FileMode(420), modTime: time.Unix(1565211062, 0)} + info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00003.sql", size: 308, mode: os.FileMode(420), modTime: time.Unix(1565877062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21629,11 +21629,11 @@ var _bindata = map[string]func() (*asset, error){ "bindata/onboard/dmz_space.json": bindataOnboardDmz_spaceJson, "bindata/onboard/dmz_space_label.json": bindataOnboardDmz_space_labelJson, "bindata/public/assets/.DS_Store": bindataPublicAssetsDs_store, - "bindata/public/assets/assetMap-b09cb67e695840127becaface267f2e3.json": bindataPublicAssetsAssetmapB09cb67e695840127becaface267f2e3Json, + "bindata/public/assets/assetMap-658d7e9ba92595f60c663f0bb9bdb49e.json": bindataPublicAssetsAssetmap658d7e9ba92595f60c663f0bb9bdb49eJson, "bindata/public/assets/assetMap-cd33192964e8c20af9391de38dbf449b.json": bindataPublicAssetsAssetmapCd33192964e8c20af9391de38dbf449bJson, "bindata/public/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js": bindataPublicAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs, "bindata/public/assets/documize-2fe00df20667e7f3343cc39c5fd05a6a.css": bindataPublicAssetsDocumize2fe00df20667e7f3343cc39c5fd05a6aCss, - "bindata/public/assets/documize-db6507931a581fdde126de11f6da71d1.js": bindataPublicAssetsDocumizeDb6507931a581fdde126de11f6da71d1Js, + "bindata/public/assets/documize-bdc2602422339ee7de6884898daccc3b.js": bindataPublicAssetsDocumizeBdc2602422339ee7de6884898daccc3bJs, "bindata/public/assets/font/MaterialIcons-Regular.eot": bindataPublicAssetsFontMaterialiconsRegularEot, "bindata/public/assets/font/MaterialIcons-Regular.ttf": bindataPublicAssetsFontMaterialiconsRegularTtf, "bindata/public/assets/font/MaterialIcons-Regular.woff": bindataPublicAssetsFontMaterialiconsRegularWoff, @@ -22701,11 +22701,11 @@ var _bintree = &bintree{nil, map[string]*bintree{ "public": &bintree{nil, map[string]*bintree{ "assets": &bintree{nil, map[string]*bintree{ ".DS_Store": &bintree{bindataPublicAssetsDs_store, map[string]*bintree{}}, - "assetMap-b09cb67e695840127becaface267f2e3.json": &bintree{bindataPublicAssetsAssetmapB09cb67e695840127becaface267f2e3Json, map[string]*bintree{}}, + "assetMap-658d7e9ba92595f60c663f0bb9bdb49e.json": &bintree{bindataPublicAssetsAssetmap658d7e9ba92595f60c663f0bb9bdb49eJson, map[string]*bintree{}}, "assetMap-cd33192964e8c20af9391de38dbf449b.json": &bintree{bindataPublicAssetsAssetmapCd33192964e8c20af9391de38dbf449bJson, map[string]*bintree{}}, "auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js": &bintree{bindataPublicAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs, map[string]*bintree{}}, "documize-2fe00df20667e7f3343cc39c5fd05a6a.css": &bintree{bindataPublicAssetsDocumize2fe00df20667e7f3343cc39c5fd05a6aCss, map[string]*bintree{}}, - "documize-db6507931a581fdde126de11f6da71d1.js": &bintree{bindataPublicAssetsDocumizeDb6507931a581fdde126de11f6da71d1Js, map[string]*bintree{}}, + "documize-bdc2602422339ee7de6884898daccc3b.js": &bintree{bindataPublicAssetsDocumizeBdc2602422339ee7de6884898daccc3bJs, map[string]*bintree{}}, "font": &bintree{nil, map[string]*bintree{ "MaterialIcons-Regular.eot": &bintree{bindataPublicAssetsFontMaterialiconsRegularEot, map[string]*bintree{}}, "MaterialIcons-Regular.ttf": &bintree{bindataPublicAssetsFontMaterialiconsRegularTtf, map[string]*bintree{}}, diff --git a/gui/app/authenticators/cas.js b/gui/app/authenticators/cas.js new file mode 100644 index 00000000..a49a6f92 --- /dev/null +++ b/gui/app/authenticators/cas.js @@ -0,0 +1,48 @@ +// Copyright 2016 Documize Inc. . All rights reserved. +// +// This software (Documize Community Edition) is licensed under +// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html +// +// You can operate outside the AGPL restrictions by purchasing +// Documize Enterprise Edition and obtaining a commercial license +// by contacting . +// +// https://documize.com + +import { isPresent } from '@ember/utils'; +import { reject, resolve } from 'rsvp'; +import { inject as service } from '@ember/service'; +import Base from 'ember-simple-auth/authenticators/base'; +import netUtil from "../utils/net"; + +export default Base.extend({ + ajax: service(), + appMeta: service(), + localStorage: service(), + + restore(data) { + // TODO: verify authentication data + if (data) { + return resolve(data); + } + + return reject(); + }, + + authenticate(data){ + data.domain = netUtil.getSubdomain(); + + if (!isPresent(data.ticket)) { + return reject("data.ticket is empty"); + } + return this.get('ajax').post('public/authenticate/cas', { + data: JSON.stringify(data), + contentType: 'json' + }); + }, + + invalidate() { + this.get('localStorage').clearAll(); + return resolve(); + } +}); diff --git a/gui/app/components/customize/auth-settings.js b/gui/app/components/customize/auth-settings.js index 5ecaa04c..638f45e9 100644 --- a/gui/app/components/customize/auth-settings.js +++ b/gui/app/components/customize/auth-settings.js @@ -33,6 +33,9 @@ export default Component.extend(ModalMixin, Notifier, { isLDAPProvider: computed('authProvider', function() { return this.get('authProvider') === this.get('constants').AuthProvider.LDAP; }), + isCASProvider: computed('authProvider', function(){ + return this.get('authProvider') === this.get('constants').AuthProvider.CAS; + }), KeycloakUrlError: empty('keycloakConfig.url'), KeycloakRealmError: empty('keycloakConfig.realm'), @@ -61,6 +64,10 @@ export default Component.extend(ModalMixin, Notifier, { ldapPreview: null, ldapConfig: null, + casErrorUrl: empty('casConfig.url'), + casErrorRedirectUrl: empty('casConfig.redirectUrl'), + casConfig:null, + init() { this._super(...arguments); @@ -122,6 +129,19 @@ export default Component.extend(ModalMixin, Notifier, { this.set('ldapConfig', ldapConfig); break; } + case constants.AuthProvider.CAS: { + let casConfig = this.get('authConfig'); + if (_.isUndefined(casConfig) || _.isNull(casConfig) || _.isEmpty(casConfig) ) { + casConfig = {}; + } else { + casConfig = JSON.parse(casConfig); + casConfig.url = casConfig.hasOwnProperty('url') ? casConfig.url : ''; + casConfig.redirectUrl = casConfig.hasOwnProperty('redirectUrl') ? casConfig.redirectUrl : ''; + } + + this.set('casConfig', casConfig); + break; + } } }, @@ -140,6 +160,10 @@ export default Component.extend(ModalMixin, Notifier, { let constants = this.get('constants'); this.set('authProvider', constants.AuthProvider.LDAP); }, + onCAS() { + let constants = this.get('constants'); + this.set('authProvider', constants.AuthProvider.CAS); + }, onLDAPEncryption(e) { this.set('ldapConfig.encryptionType', e); @@ -231,6 +255,21 @@ export default Component.extend(ModalMixin, Notifier, { return; } + break; + case constants.AuthProvider.CAS: + if (this.get('casErrorUrl')) { + $("#cas-url").focus(); + return; + } + if (this.get('casErrorRedirectUrl')) { + $("#cas-redirect-url").focus(); + return; + } + + config = copy(this.get('casConfig')); + config.url = config.url.trim(); + config.redirectUrl = config.redirectUrl.trim(); + break; } diff --git a/gui/app/constants/constants.js b/gui/app/constants/constants.js index 1094165d..a2f49775 100644 --- a/gui/app/constants/constants.js +++ b/gui/app/constants/constants.js @@ -25,6 +25,7 @@ let constants = EmberObject.extend({ Documize: 'documize', Keycloak: 'keycloak', LDAP: 'ldap', + CAS: 'cas', ServerTypeLDAP: 'ldap', ServerTypeAD: 'ad', EncryptionTypeNone: 'none', diff --git a/gui/app/mixins/auth.js b/gui/app/mixins/auth.js index 52123bc2..ca3b9f3c 100644 --- a/gui/app/mixins/auth.js +++ b/gui/app/mixins/auth.js @@ -17,6 +17,7 @@ export default Mixin.create({ isAuthProviderDocumize: true, isAuthProviderKeycloak: false, isAuthProviderLDAP: false, + isAuthProviderCAS: false, isDualAuth: false, init() { @@ -26,6 +27,7 @@ export default Mixin.create({ this.set('isAuthProviderDocumize', this.get('appMeta.authProvider') === constants.AuthProvider.Documize); this.set('isAuthProviderKeycloak', this.get('appMeta.authProvider') === constants.AuthProvider.Keycloak); this.set('isAuthProviderLDAP', this.get('appMeta.authProvider') === constants.AuthProvider.LDAP); + this.set('isAuthProviderCAS', this.get('appMeta.authProvider') == constants.AuthProvider.CAS); if (this.get('appMeta.authProvider') === constants.AuthProvider.LDAP) { let config = this.get('appMeta.authConfig'); diff --git a/gui/app/pods/auth/cas/controller.js b/gui/app/pods/auth/cas/controller.js new file mode 100644 index 00000000..f0b1abcb --- /dev/null +++ b/gui/app/pods/auth/cas/controller.js @@ -0,0 +1,14 @@ +// Copyright 2016 Documize Inc. . All rights reserved. +// +// This software (Documize Community Edition) is licensed under +// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html +// +// You can operate outside the AGPL restrictions by purchasing +// Documize Enterprise Edition and obtaining a commercial license +// by contacting . +// +// https://documize.com + +import Controller from '@ember/controller'; + +export default Controller.extend({}); \ No newline at end of file diff --git a/gui/app/pods/auth/cas/route.js b/gui/app/pods/auth/cas/route.js new file mode 100644 index 00000000..f16bd701 --- /dev/null +++ b/gui/app/pods/auth/cas/route.js @@ -0,0 +1,65 @@ +// Copyright 2016 Documize Inc. . All rights reserved. +// +// This software (Documize Community Edition) is licensed under +// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html +// +// You can operate outside the AGPL restrictions by purchasing +// Documize Enterprise Edition and obtaining a commercial license +// by contacting . +// +// https://documize.com + +import { Promise as EmberPromise } from 'rsvp'; +import { inject as service } from '@ember/service'; +import Route from '@ember/routing/route'; + +export default Route.extend({ + ajax: service(), + session: service(), + appMeta: service(), + localStorage: service(), + queryParams: { + mode: { + refreshModel: true + }, + ticket : { + refreshModel: true + } + }, + message: '', + mode: 'login', + afterModel(model) { + return new EmberPromise((resolve) => { + let constants = this.get('constants'); + + if (this.get('appMeta.authProvider') !== constants.AuthProvider.CAS) { + resolve(); + } + let ticket = model.ticket; + if (ticket === '') { + resolve(); + } + let data = {ticket: ticket}; + this.get("session").authenticate('authenticator:cas', data).then(() => { + this.transitionTo('folders'); + }, (reject) => { + if (!_.isUndefined(reject.Error)) { + model.message = reject.Error; + } else { + model.message = reject.Error; + } + model.mode = 'reject'; + resolve(); + }); + + }) + }, + + model(params) { + return { + mode: this.get('mode'), + message: this.get('message'), + ticket: params.ticket + } + } +}); diff --git a/gui/app/pods/auth/cas/template.hbs b/gui/app/pods/auth/cas/template.hbs new file mode 100644 index 00000000..c61afd04 --- /dev/null +++ b/gui/app/pods/auth/cas/template.hbs @@ -0,0 +1,12 @@ +{{#if (is-equal model.mode "login")}} +
+

Authenticating with CAS...

+ +
+{{/if}} + +{{#if (is-equal model.mode "reject")}} +
+

CAS authentication failure

+
+{{/if}} diff --git a/gui/app/pods/auth/login/controller.js b/gui/app/pods/auth/login/controller.js index e5028347..770fc3cd 100644 --- a/gui/app/pods/auth/login/controller.js +++ b/gui/app/pods/auth/login/controller.js @@ -16,6 +16,7 @@ import Controller from '@ember/controller'; export default Controller.extend(AuthProvider, { appMeta: service('app-meta'), session: service('session'), + invalidCredentials: false, reset() { @@ -26,7 +27,7 @@ export default Controller.extend(AuthProvider, { }); } - if (this.get('isAuthProviderLDAP')) { + if (this.get('isAuthProviderLDAP') || this.get('isAuthProviderCAS')) { this.setProperties({ username: '', password: '' @@ -62,6 +63,16 @@ export default Controller.extend(AuthProvider, { this.set('invalidCredentials', true); }); } + // if (this.get('isAuthProviderCAS')) { + // + // this.get('session').authenticate('authenticator:cas').then((response) => { + // this.transitionToRoute('folders'); + // return response; + // }).catch(() => { + // this.set('invalidCredentials', true); + // }); + // } } } + }); diff --git a/gui/app/pods/auth/login/route.js b/gui/app/pods/auth/login/route.js index bda8f638..18babbfd 100644 --- a/gui/app/pods/auth/login/route.js +++ b/gui/app/pods/auth/login/route.js @@ -17,6 +17,7 @@ import Route from '@ember/routing/route'; export default Route.extend({ appMeta: service(), kcAuth: service(), + global: service(), localStorage: service(), showLogin: false, @@ -40,6 +41,13 @@ export default Route.extend({ }); break; + case constants.AuthProvider.CAS: { + let config = JSON.parse(this.get('appMeta.authConfig')); + let url = config.url + '/login?service=' + encodeURIComponent(config.redirectUrl); + window.location.replace(url); + resolve(); + break; + } default: this.set('showLogin', true); diff --git a/gui/app/pods/auth/login/template.hbs b/gui/app/pods/auth/login/template.hbs index 43a99528..0f691717 100644 --- a/gui/app/pods/auth/login/template.hbs +++ b/gui/app/pods/auth/login/template.hbs @@ -27,8 +27,8 @@ {{input type="password" value=password id="authPassword" class="form-control" autocomplete="current-password"}} {{/if}} + {{ui/ui-button color=constants.Color.Green light=true label=constants.Label.SignIn onClick=(action "login")}} - {{ui/ui-button color=constants.Color.Green light=true label=constants.Label.SignIn onClick=(action "login")}}
Invalid credentials
{{#if isAuthProviderDocumize}} diff --git a/gui/app/pods/customize/auth/route.js b/gui/app/pods/customize/auth/route.js index 8b4344ab..8dc4a530 100644 --- a/gui/app/pods/customize/auth/route.js +++ b/gui/app/pods/customize/auth/route.js @@ -42,6 +42,9 @@ export default Route.extend(AuthenticatedRouteMixin, { case constants.AuthProvider.LDAP: data.authConfig = config; break; + case constants.AuthProvider.CAS: + data.authConfig = config; + break; case constants.AuthProvider.Documize: data.authConfig = ''; break; diff --git a/gui/app/pods/customize/auth/template.hbs b/gui/app/pods/customize/auth/template.hbs index d8bcaed8..cb09180f 100644 --- a/gui/app/pods/customize/auth/template.hbs +++ b/gui/app/pods/customize/auth/template.hbs @@ -1,6 +1,6 @@ {{layout/logo-heading title="Authentication" - desc="Choose user authentication provider — Documize, Redhat Keycloak, LDAP/AD" + desc="Choose user authentication provider — Documize, Redhat Keycloak, LDAP/AD, Central Authentication Server" icon=constants.Icon.Locked}} {{customize/auth-settings diff --git a/gui/app/router.js b/gui/app/router.js index 59fff74f..06831cbe 100644 --- a/gui/app/router.js +++ b/gui/app/router.js @@ -160,6 +160,9 @@ export default Router.map(function () { this.route('share', { path: 'share/:id/:slug/:serial' }); + this.route('cas', { + path: 'cas' + }); } ); diff --git a/gui/app/routes/application.js b/gui/app/routes/application.js index a2c45e3d..d84598f2 100644 --- a/gui/app/routes/application.js +++ b/gui/app/routes/application.js @@ -26,7 +26,7 @@ export default Route.extend(ApplicationRouteMixin, { let sa = this.get('session.session.authenticator'); return this.get('appMeta').boot(transition.targetName, '').then(data => { - if (sa !== "authenticator:documize" && sa !== "authenticator:keycloak" && sa !== "authenticator:ldap" && data.allowAnonymousAccess) { + if (sa !== "authenticator:documize" && sa !== "authenticator:keycloak" && sa !== "authenticator:ldap" && sa != "authenticator:cas" && data.allowAnonymousAccess) { if (!this.get('appMeta.setupMode') && !this.get('appMeta.secureMode')) { return this.get('session').authenticate('authenticator:anonymous', data); } diff --git a/gui/app/services/category.js b/gui/app/services/category.js index f5801563..ed769da4 100644 --- a/gui/app/services/category.js +++ b/gui/app/services/category.js @@ -164,7 +164,7 @@ export default BaseService.extend({ // fetchXXX represents UI specific bulk data loading designed to // reduce network traffic and boost app performance. - // This method that returns: + // This method returns: // 1. getUserVisible() // 2. getSummary() // 3. getSpaceCategoryMembership() diff --git a/gui/app/services/document.js b/gui/app/services/document.js index e0d10e8d..f7eab913 100644 --- a/gui/app/services/document.js +++ b/gui/app/services/document.js @@ -412,7 +412,7 @@ export default Service.extend({ // fetchXXX represents UI specific bulk data loading designed to // reduce network traffic and boost app performance. - // This method that returns: + // This method returns: // 1. getUserVisible() // 2. getSummary() // 3. getSpaceCategoryMembership() diff --git a/gui/app/templates/components/customize/auth-settings.hbs b/gui/app/templates/components/customize/auth-settings.hbs index 5055159e..5d882ac7 100644 --- a/gui/app/templates/components/customize/auth-settings.hbs +++ b/gui/app/templates/components/customize/auth-settings.hbs @@ -18,11 +18,18 @@
  • LDAP
    -
    Connect to LDAP/ Active Directory
    +
    Connect to LDAP/Active Directory
    {{#if isLDAPProvider}} {{/if}}
  • +
  • +
    CAS
    +
    Via Central Authentication Server
    + {{#if isCASProvider}} + + {{/if}} +
  • @@ -167,7 +174,18 @@ {{ui/ui-button color=constants.Color.Yellow light=true label="Test →" onClick=(action "onLDAPPreview")}} {{ui/ui-button-gap}} {{/if}} - + {{#if isCASProvider}} +
    + + {{focus-input id="cas-url" type="text" value=casConfig.url class=(if casErrorUrl "form-control is-invalid" "form-control")}} + e.g. http://localhost:8888/auth +
    +
    + + {{focus-input id="cas-redirect-url" type="text" value=casConfig.redirectUrl class=(if casErrorRedirectUrl "form-control is-invalid" "form-control")}} + e.g. http:///auth/cas +
    + {{/if}} {{ui/ui-button color=constants.Color.Green light=true icon=constants.Icon.Locked label=constants.Label.Activate onClick=(action "onSave")}} diff --git a/gui/package-lock.json b/gui/package-lock.json new file mode 100644 index 00000000..42aaa80e --- /dev/null +++ b/gui/package-lock.json @@ -0,0 +1,28267 @@ +{ + "name": "documize", + "version": "3.1.2", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helpers": "^7.5.5", + "@babel/parser": "^7.5.5", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", + "dev": true, + "requires": { + "@babel/types": "^7.5.5", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", + "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz", + "integrity": "sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-member-expression-to-functions": "^7.5.5", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5", + "@babel/helper-split-export-declaration": "^7.4.4" + } + }, + "@babel/helper-define-map": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", + "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", + "dev": true, + "requires": { + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.5.5", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "dev": true, + "requires": { + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" + } + }, + "@babel/helpers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", + "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", + "dev": true, + "requires": { + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz", + "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.5.5", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz", + "integrity": "sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-decorators": "^7.2.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", + "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz", + "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz", + "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", + "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5", + "@babel/helper-split-export-declaration": "^7.4.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz", + "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", + "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", + "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", + "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", + "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", + "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", + "dev": true, + "requires": { + "regexp-tree": "^0.1.6" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", + "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", + "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.4.4", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", + "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", + "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz", + "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", + "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.5.tgz", + "integrity": "sha512-RPB/YeGr4ZrFKNwfuQRlMf2lxoCUaU01MTw39/OFE/RiL8HDjtn68BwEPft1P7JN4akyEmjGWAMNldOV7o9V2g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-typescript": "^7.2.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", + "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + } + }, + "@babel/polyfill": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz", + "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==", + "dev": true, + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/preset-env": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", + "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.5.5", + "@babel/plugin-transform-classes": "^7.5.5", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.5.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.5", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.4.4", + "@babel/types": "^7.5.5", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + } + }, + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/traverse": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.5.5", + "@babel/types": "^7.5.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@ember/jquery": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@ember/jquery/-/jquery-0.6.1.tgz", + "integrity": "sha512-XMgfUYag97YOYLsC0Ys4/H6mHO2U2wra/92eVIug+5eYBloYSDhv2MY/iq/ocwXVSB2dQaphJx5pFXqdrjEzWQ==", + "dev": true, + "requires": { + "broccoli-funnel": "^2.0.2", + "broccoli-merge-trees": "^3.0.2", + "ember-cli-babel": "^7.7.3", + "ember-cli-version-checker": "^3.1.3", + "jquery": "^3.4.1", + "resolve": "^1.11.1" + } + }, + "@ember/optional-features": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@ember/optional-features/-/optional-features-0.7.0.tgz", + "integrity": "sha512-qLXvL/Kq/COb43oQmCrKx7Fy8k1XJDI2RlgbCnZHH26AGVgJT/sZugx1A2AIxKdamtl/Mi+rQSjGIuscSjqjDw==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "co": "^4.6.0", + "ember-cli-version-checker": "^2.1.0", + "glob": "^7.1.2", + "inquirer": "^3.3.0", + "mkdirp": "^0.5.1", + "silent-error": "^1.1.0", + "util.promisify": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@ember/ordered-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@ember/ordered-set/-/ordered-set-2.0.3.tgz", + "integrity": "sha512-F4yfVk6WMc4AUHxeZsC3CaKyTvO0qSZJy7WWHCFTlVDQw6vubn+FvnGdhzpN1F00EiXMI4Tv1tJdSquHcCnYrA==", + "dev": true, + "requires": { + "ember-cli-babel": "^6.16.0", + "ember-compatibility-helpers": "^1.1.1" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "@ember/test-helpers": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@ember/test-helpers/-/test-helpers-1.6.0.tgz", + "integrity": "sha512-t6K15t4p/iW1D7rUAfGZZwIWqLV8HoVm9Dxn44L9PwMFjw3GAJf4bHdwCbdr3jpsgjG14HH+5XzF9IBIvmOZ4A==", + "dev": true, + "requires": { + "broccoli-debug": "^0.6.5", + "broccoli-funnel": "^2.0.2", + "ember-assign-polyfill": "^2.6.0", + "ember-cli-babel": "^7.7.3", + "ember-cli-htmlbars-inline-precompile": "^2.1.0", + "ember-test-waiters": "^1.0.0" + } + }, + "@embroider/core": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@embroider/core/-/core-0.4.3.tgz", + "integrity": "sha512-n24WU/dGuGDqZrljWoX8raK2wFX3R8iJG0rfCWx+1kW87IvB+ZgS3j4KiZ/S788BA07udrYsrgecYnciG2bBMg==", + "dev": true, + "requires": { + "@babel/core": "^7.2.2", + "@babel/parser": "^7.3.4", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/traverse": "^7.3.4", + "@babel/types": "^7.3.4", + "@embroider/macros": "0.4.3", + "assert-never": "^1.1.0", + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "broccoli-persistent-filter": "^2.2.2", + "broccoli-plugin": "^1.3.0", + "broccoli-source": "^1.1.0", + "debug": "^3.1.0", + "fast-sourcemap-concat": "^1.4.0", + "filesize": "^4.1.2", + "fs-extra": "^7.0.1", + "fs-tree-diff": "^2.0.0", + "handlebars": "^4.0.11", + "js-string-escape": "^1.0.1", + "jsdom": "^12.0.0", + "json-stable-stringify": "^1.0.1", + "lodash": "^4.17.10", + "pkg-up": "^2.0.0", + "resolve": "^1.8.1", + "resolve-package-path": "^1.2.2", + "semver": "^5.5.0", + "strip-bom": "^3.0.0", + "typescript-memoize": "^1.0.0-alpha.3", + "walk-sync": "^1.1.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-tree-diff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz", + "integrity": "sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A==", + "dev": true, + "requires": { + "@types/symlink-or-copy": "^1.2.0", + "heimdalljs-logger": "^0.1.7", + "object-assign": "^4.1.0", + "path-posix": "^1.0.0", + "symlink-or-copy": "^1.1.8" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "walk-sync": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-1.1.4.tgz", + "integrity": "sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "ensure-posix-path": "^1.1.0", + "matcher-collection": "^1.1.1" + } + } + } + }, + "@embroider/macros": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@embroider/macros/-/macros-0.4.3.tgz", + "integrity": "sha512-vq/Ny2ULpKxq60Sv5usSrz651dXFM5phP/O5G5MWDY8YOodIkRLGqtub34sB0OmwxpCuTntUzl9P/I4wkyQ3Kw==", + "dev": true, + "requires": { + "@babel/core": "^7.2.2", + "@babel/traverse": "^7.2.4", + "@babel/types": "^7.3.2", + "@embroider/core": "0.4.3", + "resolve": "^1.8.1", + "semver": "^5.6.0" + } + }, + "@glimmer/compiler": { + "version": "0.41.4", + "resolved": "https://registry.npmjs.org/@glimmer/compiler/-/compiler-0.41.4.tgz", + "integrity": "sha512-JTdFJDp0irQptXCqDQUPWaB7p6/Bg2SKe7NIMoeKeRGAw0Nhgi0xkqTN7OF2sugfjMdmzRn1oHRL5Mk26VZtfw==", + "dev": true, + "requires": { + "@glimmer/interfaces": "^0.41.4", + "@glimmer/syntax": "^0.41.4", + "@glimmer/util": "^0.41.4", + "@glimmer/wire-format": "^0.41.4" + } + }, + "@glimmer/di": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@glimmer/di/-/di-0.2.1.tgz", + "integrity": "sha512-0D53YVuEgGdHfTl9LGWDZqVzGhn4cT0CXqyAuOYkKFLvqboJXz6SnkRhQNPhhA2hLVrPnvUz3+choQmPhHLGGQ==", + "dev": true + }, + "@glimmer/env": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@glimmer/env/-/env-0.1.7.tgz", + "integrity": "sha1-/S0rVakCnGs3psk16MiHGucN+gc=", + "dev": true + }, + "@glimmer/interfaces": { + "version": "0.41.4", + "resolved": "https://registry.npmjs.org/@glimmer/interfaces/-/interfaces-0.41.4.tgz", + "integrity": "sha512-MzXwMyod3MlwSZezHSaVBsCEIW/giYYfTDYARR46QnYsaFVatMVbydjsI7jkAuBCbnLCyNOIc1TrYIj71i/rpg==", + "dev": true + }, + "@glimmer/resolver": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@glimmer/resolver/-/resolver-0.4.3.tgz", + "integrity": "sha512-UhX6vlZbWRMq6pCquSC3wfWLM9kO0PhQPD1dZ3XnyZkmsvEE94Cq+EncA9JalUuevKoJrfUFRvrZ0xaz+yar3g==", + "dev": true, + "requires": { + "@glimmer/di": "^0.2.0" + } + }, + "@glimmer/syntax": { + "version": "0.41.4", + "resolved": "https://registry.npmjs.org/@glimmer/syntax/-/syntax-0.41.4.tgz", + "integrity": "sha512-NLPNirZDbNmpZ8T/ccle22zt2rhUq5il7ST6IJk62T58QZeJsdr3m3RS4kaGSBsQhXoKELrgX048yYEX5sC+fw==", + "dev": true, + "requires": { + "@glimmer/interfaces": "^0.41.4", + "@glimmer/util": "^0.41.4", + "handlebars": "^4.0.13", + "simple-html-tokenizer": "^0.5.7" + } + }, + "@glimmer/util": { + "version": "0.41.4", + "resolved": "https://registry.npmjs.org/@glimmer/util/-/util-0.41.4.tgz", + "integrity": "sha512-DwS94K+M0vtG+cymxH0rslJr09qpdjyOLdCjmpKcG/nNiZQfMA1ybAaFEmwk9UaVlUG9STENFeQwyrLevJB+7g==", + "dev": true + }, + "@glimmer/wire-format": { + "version": "0.41.4", + "resolved": "https://registry.npmjs.org/@glimmer/wire-format/-/wire-format-0.41.4.tgz", + "integrity": "sha512-vp3Z+PjYkgCCyj5HX3cFB6Mag76GwVkI0cx9vMHKDoqJFJBicxc9JPymNuPuEithsJpUXJj2g7TKwJaliH2+cw==", + "dev": true, + "requires": { + "@glimmer/interfaces": "^0.41.4", + "@glimmer/util": "^0.41.4" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/acorn": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.5.tgz", + "integrity": "sha512-603sPiZ4GVRHPvn6vNgEAvJewKsy+zwRWYS2MeIMemgoAtcjlw2G3lALxrb9OPA17J28bkB71R33yXlQbUatCA==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/fs-extra": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.1.0.tgz", + "integrity": "sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "12.6.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz", + "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==", + "dev": true + }, + "@types/rimraf": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.2.tgz", + "integrity": "sha512-Hm/bnWq0TCy7jmjeN5bKYij9vw5GrDFWME4IuxV08278NtU/VdGbzsBohcCUJ7+QMqmUq5hpRKB39HeQWJjztQ==", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "@types/symlink-or-copy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz", + "integrity": "sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", + "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", + "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", + "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", + "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", + "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.7.11" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", + "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", + "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", + "dev": true + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", + "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", + "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", + "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", + "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/utf8": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", + "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", + "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/helper-wasm-section": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-opt": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/wast-printer": "1.7.11" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", + "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", + "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", + "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", + "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/floating-point-hex-parser": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-code-frame": "1.7.11", + "@webassemblyjs/helper-fsm": "1.7.11", + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", + "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11", + "@xtuc/long": "4.2.1" + } + }, + "@xg-wang/whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@xg-wang/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-ULtqA6L75RLzTNW68IiOja0XYv4Ebc3OGMzfia1xxSEMpD0mk/pMvkQX0vbCFyQmKc5xGp80Ms2WiSlXLh8hbA==", + "dev": true + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", + "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "dev": true + }, + "abab": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "abortcontroller-polyfill": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.3.0.tgz", + "integrity": "sha512-lbWQgf+eRvku3va8poBlDBO12FigTQr9Zb7NIjXrePrhxWVKdCP2wbDl1tLDaYa18PWTom3UEWwdH13S46I+yA==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", + "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "dev": true, + "requires": { + "acorn": "^5.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + } + } + }, + "acorn-globals": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", + "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" + }, + "amd-name-resolver": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.3.1.tgz", + "integrity": "sha512-26qTEWqZQ+cxSYygZ4Cf8tsjDBLceJahhtewxtKZA3SRa4PluuqYCuheemDQD+7Mf5B7sr+zhTDWAHDh02a1Dw==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1", + "object-hash": "^1.3.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "animation-frame": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/animation-frame/-/animation-frame-0.2.5.tgz", + "integrity": "sha1-zfWpGmmtLIXdrCuC2vcpAwDwWWA=", + "dev": true + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "ansi-to-html": { + "version": "0.6.11", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.11.tgz", + "integrity": "sha512-88XZtrcwrfkyn6fGstHnkaF1kl7hGtNCYh4vSmItgEV+6JnQHryDBf7udF4f2RhTRQmYvJvPcTtqgaqrxzc9oA==", + "dev": true, + "requires": { + "entities": "^1.1.1" + } + }, + "ansicolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", + "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=", + "dev": true + }, + "anymatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.0.3.tgz", + "integrity": "sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aot-test-generators": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/aot-test-generators/-/aot-test-generators-0.1.0.tgz", + "integrity": "sha1-Q/D2Ffl8spjXkZwbC05rcxCwPNA=", + "dev": true, + "requires": { + "jsesc": "^2.5.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-to-error": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-to-error/-/array-to-error-1.1.1.tgz", + "integrity": "sha1-1ogSkm0UCXogVXmmZ+6vGFakTAc=", + "dev": true, + "requires": { + "array-to-sentence": "^1.1.0" + } + }, + "array-to-sentence": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-to-sentence/-/array-to-sentence-1.1.0.tgz", + "integrity": "sha1-yASVba+lMjJJWyBalFJ1OiWNOfw=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-never": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.0.tgz", + "integrity": "sha512-61QPxh2lfV5j2dBsEtwhz8/sUj+baAIuCpQxeWorGeMxlTkbeyGyq7igxJB8yij1JdzUhyoiekNHMXrMYnkjvA==", + "dev": true + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-disk-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/async-disk-cache/-/async-disk-cache-1.3.4.tgz", + "integrity": "sha512-qsIvGJ/XYZ5bSGf5vHt2aEQHZnyuehmk/+51rCJhpkZl4LtvOZ+STbhLbdFAJGYO+dLzUT5Bb4nLKqHBX83vhw==", + "dev": true, + "requires": { + "debug": "^2.1.3", + "heimdalljs": "^0.2.3", + "istextorbinary": "2.1.0", + "mkdirp": "^0.5.0", + "rimraf": "^2.5.3", + "rsvp": "^3.0.18", + "username-sync": "^1.0.2" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "async-promise-queue": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/async-promise-queue/-/async-promise-queue-1.0.5.tgz", + "integrity": "sha512-xi0aQ1rrjPWYmqbwr18rrSKbSaXIeIwSd1J4KAgVfkq8utNbdZoht7GfvfY6swFUAMJ9obkc4WPJmtGwl+B8dw==", + "dev": true, + "requires": { + "async": "^2.4.1", + "debug": "^2.6.8" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + } + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-loader": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-debug-macros": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.3.2.tgz", + "integrity": "sha512-CslqMZ3RGUvlEERuKr+wrXcHqQGvQ9ALLrbcOt8aSEp4ySfNCHAQbuGQYKZYw3P30/VGkPaR0Begch+dbqgEpg==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-ember-modules-api-polyfill": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.9.0.tgz", + "integrity": "sha512-c03h50291phJ2gQxo/aIOvFQE2c6glql1A7uagE3XbPXpKVAJOUxtVDjvWG6UAB6BC5ynsJfMWvY0w4TPRKIHQ==", + "dev": true, + "requires": { + "ember-rfc176-data": "^0.3.9" + } + }, + "babel-plugin-feature-flags": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-feature-flags/-/babel-plugin-feature-flags-0.3.1.tgz", + "integrity": "sha1-nIJ8+aTrmhn3JcyyOehcqwIDb8E=", + "dev": true + }, + "babel-plugin-filter-imports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/babel-plugin-filter-imports/-/babel-plugin-filter-imports-1.1.2.tgz", + "integrity": "sha512-BpXJV3fndKEP1D9Yhwpz4NIjM/d1FYpdx4E4KmUPnTIFUxXNj0QEAY18MXVzEyYi2EWEVhoOG2CmclDfdMj5ew==", + "dev": true, + "requires": { + "babel-types": "^6.26.0", + "lodash": "^4.17.10" + } + }, + "babel-plugin-htmlbars-inline-precompile": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-1.0.0.tgz", + "integrity": "sha512-4jvKEHR1bAX03hBDZ94IXsYCj3bwk9vYsn6ux6JZNL2U5pvzCWjqyrGahfsGNrhERyxw8IqcirOi9Q6WCo3dkQ==", + "dev": true + }, + "babel-plugin-module-resolver": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", + "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==", + "dev": true, + "requires": { + "find-babel-config": "^1.1.0", + "glob": "^7.1.2", + "pkg-up": "^2.0.0", + "reselect": "^3.0.1", + "resolve": "^1.4.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "^0.10.0" + }, + "dependencies": { + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + } + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, + "babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + }, + "dependencies": { + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + } + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } + } + }, + "babel6-plugin-strip-class-callcheck": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel6-plugin-strip-class-callcheck/-/babel6-plugin-strip-class-callcheck-6.0.0.tgz", + "integrity": "sha1-3oQcGr6705943gr/ssmlLuIo/d8=", + "dev": true + }, + "babel6-plugin-strip-heimdall": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/babel6-plugin-strip-heimdall/-/babel6-plugin-strip-heimdall-6.0.1.tgz", + "integrity": "sha1-NfgO3ewff//cAJgR371G2ZZQcrY=", + "dev": true + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "backbone": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", + "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==", + "dev": true, + "requires": { + "underscore": ">=1.8.3" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "binaryextensions": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.2.tgz", + "integrity": "sha512-xVNN69YGDghOqCCtA6FI7avYrr02mTJjOgB0/f1VPD3pJC8QEvjTKWc4epDx8AqxxA75NI0QpVM2gPJXUbE4Tg==", + "dev": true + }, + "blank-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/blank-object/-/blank-object-1.0.2.tgz", + "integrity": "sha1-+ZB5P76ajI3QE/syGUIL7IHV9Lk=", + "dev": true + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", + "dev": true, + "requires": { + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" + }, + "dependencies": { + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, + "raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "dev": true, + "requires": { + "bytes": "1", + "string_decoder": "0.10" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + } + } + }, + "boilerplate-update": { + "version": "0.22.6", + "resolved": "https://registry.npmjs.org/boilerplate-update/-/boilerplate-update-0.22.6.tgz", + "integrity": "sha512-mbgV8nUs6ovN/uvHTqk8tm8a/h+PgDtWAGs3zNg/rfvAi6Nu3IFpWr3MCENJfp2its4MuXj7Ozoo8wBBHHdPjQ==", + "dev": true, + "requires": { + "cpr": "^3.0.1", + "debug": "^4.1.1", + "execa": "^2.0.0", + "git-diff-apply": "0.19.1", + "inquirer": "^6.2.2", + "merge-package.json": "^3.0.0", + "npx": "^10.2.0", + "open": "^6.0.0", + "p-reduce": "^2.0.0", + "rimraf": "^2.6.3", + "semver": "^6.0.0", + "tmp": "0.1.0", + "which": "^1.3.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "execa": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.3.tgz", + "integrity": "sha512-iM124nlyGSrXmuyZF1EMe83ESY2chIYVyDRZKgmcDynid2Q2v/+GuE7gNMl6Sy9Niwf4MC0DDxagOxeMPjuLsw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "inquirer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "npm-run-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", + "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + }, + "dependencies": { + "path-key": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz", + "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==", + "dev": true + } + } + }, + "npx": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/npx/-/npx-10.2.0.tgz", + "integrity": "sha512-DqjFkzET0DeaXYXNJnirnvEovwk4lBa33ZQCw1jxMuas4yH9jdU8q2U8L3cLaB2UqzgmW2Ssqk8lcGiPRL8pRg==", + "dev": true, + "requires": { + "libnpx": "10.2.0", + "npm": "5.1.0" + }, + "dependencies": { + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "ci-info": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", + "dev": true + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cliui": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", + "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "hosted-git-info": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "dev": true, + "requires": { + "ci-info": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "libnpx": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/libnpx/-/libnpx-10.2.0.tgz", + "integrity": "sha512-X28coei8/XRCt15cYStbLBph+KGhFra4VQhRBPuH/HHMkC5dxM8v24RVgUsvODKCrUZ0eTgiTqJp6zbl0sskQQ==", + "dev": true, + "requires": { + "dotenv": "^5.0.1", + "npm-package-arg": "^6.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.3.0", + "which": "^1.3.0", + "y18n": "^4.0.0", + "yargs": "^11.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "npm": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-5.1.0.tgz", + "integrity": "sha512-pt5ClxEmY/dLpb60SmGQQBKi3nB6Ljx1FXmpoCUdAULlGqGVn2uCyXxPCWFbcuHGthT7qGiaGa1wOfs/UjGYMw==", + "dev": true, + "requires": { + "JSONStream": "~1.3.1", + "abbrev": "~1.1.0", + "ansi-regex": "~3.0.0", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "~1.1.2", + "archy": "~1.0.0", + "bluebird": "~3.5.0", + "cacache": "~9.2.9", + "call-limit": "~1.1.0", + "chownr": "~1.0.1", + "cmd-shim": "~2.0.2", + "columnify": "~1.5.4", + "config-chain": "~1.1.11", + "debuglog": "*", + "detect-indent": "~5.0.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "fstream": "~1.0.11", + "fstream-npm": "~1.2.1", + "glob": "~7.1.2", + "graceful-fs": "~4.1.11", + "has-unicode": "~2.0.1", + "hosted-git-info": "~2.5.0", + "iferr": "~0.1.5", + "imurmurhash": "*", + "inflight": "~1.0.6", + "inherits": "~2.0.3", + "ini": "~1.3.4", + "init-package-json": "~1.10.1", + "lazy-property": "~1.0.0", + "lockfile": "~1.0.3", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "~4.1.1", + "mississippi": "~1.3.0", + "mkdirp": "~0.5.1", + "move-concurrently": "~1.0.1", + "node-gyp": "~3.6.2", + "nopt": "~4.0.1", + "normalize-package-data": "~2.4.0", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "~3.0.0", + "npm-package-arg": "~5.1.2", + "npm-registry-client": "~8.4.0", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "~1.4.3", + "osenv": "~0.1.4", + "pacote": "~2.7.38", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "~1.0.1", + "read-installed": "~4.0.3", + "read-package-json": "~2.0.9", + "read-package-tree": "~5.1.6", + "readable-stream": "~2.3.2", + "readdir-scoped-modules": "*", + "request": "~2.81.0", + "retry": "~0.10.1", + "rimraf": "~2.6.1", + "safe-buffer": "~5.1.1", + "semver": "~5.3.0", + "sha": "~2.0.1", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "~4.1.6", + "strip-ansi": "~4.0.0", + "tar": "~2.2.1", + "text-table": "~0.2.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "~1.1.0", + "unpipe": "~1.0.0", + "update-notifier": "~2.2.0", + "uuid": "~3.1.0", + "validate-npm-package-license": "*", + "validate-npm-package-name": "~3.0.0", + "which": "~1.2.14", + "worker-farm": "~1.3.1", + "wrappy": "~1.0.2", + "write-file-atomic": "~2.1.0" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "dependencies": { + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + } + } + }, + "abbrev": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", + "dev": true + }, + "ansistyles": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz", + "integrity": "sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=", + "dev": true + }, + "aproba": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", + "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==", + "dev": true + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "cacache": { + "version": "9.2.9", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-9.2.9.tgz", + "integrity": "sha512-ghg1j5OyTJ6qsrqU++dN23QiTDxb5AZCFGsF3oB+v9v/gY+F4X8L/0gdQMEjd+8Ot3D29M2etX5PKozHRn2JQw==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^1.3.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.1", + "ssri": "^4.1.6", + "unique-filename": "^1.1.0", + "y18n": "^3.2.1" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + }, + "dependencies": { + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + } + } + }, + "call-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/call-limit/-/call-limit-1.1.0.tgz", + "integrity": "sha1-b9YbA/PaQqLNDsK2DwK9DnGZH+o=", + "dev": true + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "cmd-shim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz", + "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + }, + "dependencies": { + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + } + } + } + } + } + } + }, + "config-chain": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + }, + "dependencies": { + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + }, + "dependencies": { + "asap": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz", + "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=", + "dev": true + } + } + }, + "editor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", + "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=", + "dev": true + }, + "fs-vacuum": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.10.tgz", + "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "fstream-npm": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/fstream-npm/-/fstream-npm-1.2.1.tgz", + "integrity": "sha512-iBHpm/LmD1qw0TlHMAqVd9rwdU6M+EHRUnPkXpRi5G/Hf0FIFH+oZFryodAU2MFNfGRh/CzhUFlMKV3pdeOTDw==", + "dev": true, + "requires": { + "fstream-ignore": "^1.0.0", + "inherits": "2" + }, + "dependencies": { + "fstream-ignore": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + } + } + } + } + } + } + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + } + } + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "init-package-json": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.1.tgz", + "integrity": "sha1-zYc6FneWvvuZYSsodioLY5P9j2o=", + "dev": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", + "dev": true, + "requires": { + "read": "1" + } + } + } + }, + "lazy-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazy-property/-/lazy-property-1.0.0.tgz", + "integrity": "sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=", + "dev": true + }, + "lockfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.3.tgz", + "integrity": "sha1-Jjj8OaAzHpysGgS3F5mTHJxQ33k=", + "dev": true + }, + "lodash._baseindexof": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz", + "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=", + "dev": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz", + "integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=", + "dev": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + }, + "dependencies": { + "lodash._createset": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz", + "integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + } + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz", + "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=", + "dev": true + }, + "lodash._createcache": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash._createcache/-/lodash._createcache-3.1.2.tgz", + "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lodash.without": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz", + "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + }, + "dependencies": { + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "mississippi": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.0.tgz", + "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^1.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + } + } + }, + "duplexify": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", + "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=", + "dev": true, + "requires": { + "end-of-stream": "1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "end-of-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", + "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=", + "dev": true, + "requires": { + "once": "~1.3.0" + }, + "dependencies": { + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "1" + } + } + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + } + } + }, + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", + "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + } + } + }, + "pump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", + "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", + "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", + "dev": true, + "requires": { + "duplexify": "^3.1.2", + "inherits": "^2.0.1", + "pump": "^1.0.0" + } + }, + "stream-each": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.0.tgz", + "integrity": "sha1-HpXUdXP1gNgU3A/4zQ9m8c5TyZE=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + } + } + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + } + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "copy-concurrently": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.3.tgz", + "integrity": "sha1-Rft4ZiSaHKiJqlcI5svSc+dbslA=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + } + } + }, + "node-gyp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "2", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + } + } + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + } + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + }, + "dependencies": { + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + } + } + } + } + }, + "npm-cache-filename": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz", + "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=", + "dev": true + }, + "npm-install-checks": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-3.0.0.tgz", + "integrity": "sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc=", + "dev": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-package-arg": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-5.1.2.tgz", + "integrity": "sha512-wJBsrf0qpypPT7A0LART18hCdyhpCMxeTtcb0X4IZO2jsP6Om7EHN1d9KSKiqD+KVH030RVNpWS9thk+pb7wzA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.4.2", + "osenv": "^0.1.4", + "semver": "^5.1.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-registry-client": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.4.0.tgz", + "integrity": "sha512-PVNfqq0lyRdFnE//nDmn3CC9uqTsr8Bya9KPLIevlXMfkP0m4RpCVyFFk0W1Gfx436kKwyhLA6J+lV+rgR81gQ==", + "dev": true, + "requires": { + "concat-stream": "^1.5.2", + "graceful-fs": "^4.1.6", + "normalize-package-data": "~1.0.1 || ^2.0.0", + "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0", + "npmlog": "2 || ^3.1.0 || ^4.0.0", + "once": "^1.3.3", + "request": "^2.74.0", + "retry": "^0.10.0", + "semver": "2 >=2.2.1 || 3.x || 4 || 5", + "slide": "^1.1.3", + "ssri": "^4.1.2" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + } + } + } + } + }, + "npm-user-validate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-1.0.0.tgz", + "integrity": "sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE=", + "dev": true + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + } + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "requires": { + "string-width": "^1.0.2" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", + "dev": true + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + }, + "dependencies": { + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + } + } + }, + "pacote": { + "version": "2.7.38", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-2.7.38.tgz", + "integrity": "sha512-XxHUyHQB7QCVBxoXeVu0yKxT+2PvJucsc0+1E+6f95lMUxEAYERgSAc71ckYXrYr35Ew3xFU/LrhdIK21GQFFA==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "cacache": "^9.2.9", + "glob": "^7.1.2", + "lru-cache": "^4.1.1", + "make-fetch-happen": "^2.4.13", + "minimatch": "^3.0.4", + "mississippi": "^1.2.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^5.1.2", + "npm-pick-manifest": "^1.0.4", + "osenv": "^0.1.4", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^4.0.0", + "safe-buffer": "^5.1.1", + "semver": "^5.3.0", + "ssri": "^4.1.6", + "tar-fs": "^1.15.3", + "tar-stream": "^1.5.4", + "unique-filename": "^1.1.0", + "which": "^1.2.12" + }, + "dependencies": { + "make-fetch-happen": { + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-2.4.13.tgz", + "integrity": "sha512-73CsTlMRSLdGr7VvOE8iYl/ejOSIxyfRYg7jZhepGGEqIlgdq6FLe2DEAI5bo813Jdg5fS/Ku62SRQ/UpT6NJA==", + "dev": true, + "requires": { + "agentkeepalive": "^3.3.0", + "cacache": "^9.2.9", + "http-cache-semantics": "^3.7.3", + "http-proxy-agent": "^2.0.0", + "https-proxy-agent": "^2.0.0", + "lru-cache": "^4.1.1", + "mississippi": "^1.2.0", + "node-fetch-npm": "^2.0.1", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^3.0.0", + "ssri": "^4.1.6" + }, + "dependencies": { + "agentkeepalive": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.3.0.tgz", + "integrity": "sha512-9yhcpXti2ZQE7bxuCsjjWNIZoQOd9sZ1ZBovHG0YeCRohFv73SLvcm73PC9T3olM4GyozaQb+4MGdQpcD8m7NQ==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + } + } + }, + "http-cache-semantics": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.7.3.tgz", + "integrity": "sha1-LzXFMuzSnx5UE7mvgztySjxvf3I=", + "dev": true + }, + "http-proxy-agent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.0.0.tgz", + "integrity": "sha1-RkgqLwUjpNYIJVFwn0acs+SoX/Q=", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "2" + }, + "dependencies": { + "agent-base": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.1.0.tgz", + "integrity": "sha1-IOF0Ac1Js8B2v1akvGxbQ2/6jVU=", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + }, + "dependencies": { + "es6-promise": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", + "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==", + "dev": true + } + } + } + } + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + } + } + }, + "https-proxy-agent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.0.0.tgz", + "integrity": "sha1-/6pLb69YasNAwYoUBDHna31/KUQ=", + "dev": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^2.4.1" + }, + "dependencies": { + "agent-base": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.1.0.tgz", + "integrity": "sha1-IOF0Ac1Js8B2v1akvGxbQ2/6jVU=", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + }, + "dependencies": { + "es6-promise": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", + "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==", + "dev": true + } + } + } + } + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + } + } + }, + "node-fetch-npm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.1.tgz", + "integrity": "sha512-W3onhopST5tqpX0/MGSL47pDQLLKobNR83AvkiOWQKaw54h+uYUfzeLAxCiyhWlUOiuI+GIb4O9ojLaAFlhCCA==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-helpfulerror": "^1.0.3", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "~0.4.13" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", + "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", + "dev": true + } + } + }, + "json-parse-helpfulerror": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", + "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", + "dev": true, + "requires": { + "jju": "^1.1.0" + }, + "dependencies": { + "jju": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.3.0.tgz", + "integrity": "sha1-2t2e8BkkvHKLA/L3l5vb1i96Kqo=", + "dev": true + } + } + } + } + }, + "socks-proxy-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-3.0.0.tgz", + "integrity": "sha512-YJcT+SNNBgFoK/NpO20PChz0VnBOhkjG3X10BwlrYujd0NZlSsH1jbxSQ1S0njt3sOvzwQ2PvGqqUIvP4rNk/w==", + "dev": true, + "requires": { + "agent-base": "^4.0.1", + "socks": "^1.1.10" + }, + "dependencies": { + "agent-base": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.1.0.tgz", + "integrity": "sha1-IOF0Ac1Js8B2v1akvGxbQ2/6jVU=", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + }, + "dependencies": { + "es6-promise": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", + "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==", + "dev": true + } + } + } + } + }, + "socks": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", + "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", + "dev": true, + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "smart-buffer": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", + "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=", + "dev": true + } + } + } + } + } + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + } + } + } + } + }, + "npm-pick-manifest": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-1.0.4.tgz", + "integrity": "sha512-MKxNdeyOZysPRTTbHtW0M5Fw38Jo/3ARsoGw5qjCfS+XGjvNB/Gb4qtAZUFmKPM2mVum+eX559eHvKywU856BQ==", + "dev": true, + "requires": { + "npm-package-arg": "^5.1.2", + "semver": "^5.3.0" + } + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + } + } + }, + "protoduck": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-4.0.0.tgz", + "integrity": "sha1-/kh02MeRM2bP2erRJFOiLNNlf44=", + "dev": true, + "requires": { + "genfun": "^4.0.1" + }, + "dependencies": { + "genfun": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-4.0.1.tgz", + "integrity": "sha1-7RAEHy5KfxsKOEZtF6XD4n3x38E=", + "dev": true + } + } + }, + "tar-fs": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.15.3.tgz", + "integrity": "sha1-7M+TXpQUk9gVECjmNuUc5MPKfyA=", + "dev": true, + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + }, + "dependencies": { + "pump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", + "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + }, + "dependencies": { + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true, + "requires": { + "once": "^1.4.0" + } + } + } + } + } + }, + "tar-stream": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", + "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", + "dev": true, + "requires": { + "bl": "^1.0.0", + "end-of-stream": "^1.0.0", + "readable-stream": "^2.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "bl": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", + "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + } + } + } + } + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + }, + "dependencies": { + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + } + } + }, + "read-cmd-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz", + "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", + "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + }, + "dependencies": { + "util-extend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=", + "dev": true + } + } + }, + "read-package-json": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.9.tgz", + "integrity": "sha512-vuV8p921IgyelL4UOKv3FsRuRZSaRn30HanLAOKargsr8TbBEq+I3MgloSRXYuKhNdYP1wlEGilMWAIayA2RFg==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-helpfulerror": "^1.0.2", + "normalize-package-data": "^2.0.0" + }, + "dependencies": { + "json-parse-helpfulerror": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", + "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", + "dev": true, + "requires": { + "jju": "^1.1.0" + }, + "dependencies": { + "jju": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.3.0.tgz", + "integrity": "sha1-2t2e8BkkvHKLA/L3l5vb1i96Kqo=", + "dev": true + } + } + } + } + }, + "read-package-tree": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.1.6.tgz", + "integrity": "sha512-FCX1aT3GWyY658wzDICef4p+n0dB+ENRct8E/Qyvppj6xVpOYerBHfUu7OP5Rt1/393Tdglguf5ju5DEX4wZNg==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "once": "^1.3.0", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.0", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + } + } + }, + "readdir-scoped-modules": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz", + "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + }, + "dependencies": { + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + }, + "dependencies": { + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + }, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + } + } + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + }, + "dependencies": { + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + }, + "dependencies": { + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + } + } + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + } + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + }, + "dependencies": { + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.x.x" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "jsprim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true, + "requires": { + "extsprintf": "1.0.2" + } + } + } + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + } + } + } + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "dev": true, + "requires": { + "mime-db": "~1.27.0" + }, + "dependencies": { + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "dev": true + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true, + "requires": { + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + } + } + }, + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "sha": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sha/-/sha-2.0.1.tgz", + "integrity": "sha1-YDCCL70smCOUn49y7WQR7lzyWq4=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "readable-stream": "^2.0.2" + } + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "sorted-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-2.0.1.tgz", + "integrity": "sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=", + "dev": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz", + "integrity": "sha1-x3lMfgd4gAUv9xqNSi27Sppjisc=", + "dev": true, + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-1.3.0.tgz", + "integrity": "sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + } + } + }, + "stream-iterate": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stream-iterate/-/stream-iterate-1.2.0.tgz", + "integrity": "sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE=", + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + } + } + } + } + }, + "ssri": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-4.1.6.tgz", + "integrity": "sha512-WUbCdgSAMQjTFZRWvSPpauryvREEA+Krn19rx67UlJEJx/M192ZHxMmJXjZ4tkdFm+Sb0SXGlENeQVlA5wY7kA==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + }, + "dependencies": { + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true + }, + "umask": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", + "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", + "dev": true + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + }, + "dependencies": { + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + } + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "update-notifier": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.2.0.tgz", + "integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=", + "dev": true, + "requires": { + "boxen": "^1.0.0", + "chalk": "^1.0.0", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "boxen": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.1.0.tgz", + "integrity": "sha1-sbad1SIwXoB6md7ud329blFnsQI=", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^1.1.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^0.1.0", + "widest-line": "^1.0.0" + }, + "dependencies": { + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "string-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", + "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "term-size": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-0.1.1.tgz", + "integrity": "sha1-hzYLljlsq1dgljcUzaDQy+7K2co=", + "dev": true, + "requires": { + "execa": "^0.4.0" + }, + "dependencies": { + "execa": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz", + "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=", + "dev": true, + "requires": { + "cross-spawn-async": "^2.1.1", + "is-stream": "^1.1.0", + "npm-run-path": "^1.0.0", + "object-assign": "^4.0.1", + "path-key": "^1.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn-async": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", + "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", + "dev": true, + "requires": { + "lru-cache": "^4.0.0", + "which": "^1.2.8" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "npm-run-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", + "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", + "dev": true, + "requires": { + "path-key": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "path-key": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", + "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + } + } + } + } + }, + "widest-line": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", + "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", + "dev": true, + "requires": { + "string-width": "^1.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + } + } + } + } + } + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "configstore": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.0.tgz", + "integrity": "sha1-Rd+QcHPibfoc9LLVL1tgVF6qEdE=", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz", + "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + } + } + }, + "make-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", + "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + }, + "dependencies": { + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + } + } + } + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + }, + "dependencies": { + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + }, + "dependencies": { + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + }, + "dependencies": { + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + } + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + }, + "dependencies": { + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + } + } + } + } + }, + "registry-auth-token": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", + "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "rc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "dev": true, + "requires": { + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + } + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + }, + "dependencies": { + "rc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "dev": true, + "requires": { + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + } + } + } + } + } + } + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + } + } + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + }, + "dependencies": { + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "^1.0.2" + }, + "dependencies": { + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + } + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + } + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + }, + "dependencies": { + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + } + } + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + }, + "dependencies": { + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + } + } + }, + "worker-farm": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.3.1.tgz", + "integrity": "sha1-QzMRK7SbF6oFC4eJXKayys9A5f8=", + "dev": true, + "requires": { + "errno": ">=0.1.1 <0.2.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + }, + "dependencies": { + "errno": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "dev": true, + "requires": { + "prr": "~0.0.0" + }, + "dependencies": { + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + } + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz", + "integrity": "sha512-0TZ20a+xcIl4u0+Mj5xDH2yOWdmQiXlKf9Hm+TgDXjTMsEYb+gDrmb8e8UNAzMCitX8NBqG4Z/FUQIyzv/R1JQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + } + } + }, + "npm-package-arg": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "rc": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", + "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", + "dev": true, + "requires": { + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "update-notifier": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.4.0.tgz", + "integrity": "sha1-+bTHAPv9TsEsgRWHJYd31WPYyGY=", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "widest-line": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "dev": true, + "requires": { + "rimraf": "^2.6.3" + } + } + } + }, + "bootstrap": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", + "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==" + }, + "bower-config": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/bower-config/-/bower-config-1.4.1.tgz", + "integrity": "sha1-hf2d82fCuNu9DKpMXyutQM2Ewsw=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.3", + "mout": "^1.0.0", + "optimist": "^0.6.1", + "osenv": "^0.1.3", + "untildify": "^2.1.0" + } + }, + "bower-endpoint-parser": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/bower-endpoint-parser/-/bower-endpoint-parser-0.2.2.tgz", + "integrity": "sha1-ALVlrb+rby01rd3pd+l5Yqy8s/Y=", + "dev": true + }, + "boxen": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz", + "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^2.4.2", + "cli-boxes": "^2.2.0", + "string-width": "^3.0.0", + "term-size": "^1.2.0", + "type-fest": "^0.3.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "broccoli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/broccoli/-/broccoli-2.3.0.tgz", + "integrity": "sha512-TeYMYlCGFK8EGk4Wce1G1uU3i52+YxRqP3WPOVDojC1zUk+Gi40wHBzUT2fncQZDl26dmCQMNugtHKjvUpcGQg==", + "dev": true, + "requires": { + "broccoli-node-info": "1.1.0", + "broccoli-slow-trees": "^3.0.1", + "broccoli-source": "^1.1.0", + "commander": "^2.15.1", + "connect": "^3.6.6", + "esm": "^3.2.4", + "findup-sync": "^2.0.0", + "handlebars": "^4.0.11", + "heimdalljs": "^0.2.6", + "heimdalljs-logger": "^0.1.9", + "mime-types": "^2.1.19", + "promise.prototype.finally": "^3.1.0", + "resolve-path": "^1.4.0", + "rimraf": "^2.6.2", + "sane": "^4.0.0", + "tmp": "0.0.33", + "tree-sync": "^1.2.2", + "underscore.string": "^3.2.2", + "watch-detector": "^0.1.0" + }, + "dependencies": { + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "broccoli-amd-funnel": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-amd-funnel/-/broccoli-amd-funnel-2.0.1.tgz", + "integrity": "sha512-VRE+0PYAN4jQfkIq3GKRj4U/4UV9rVpLan5ll6fVYV4ziVg4OEfR5GUnILEg++QtR4xSaugRxCPU5XJLDy3bNQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "symlink-or-copy": "^1.2.0" + } + }, + "broccoli-asset-rev": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/broccoli-asset-rev/-/broccoli-asset-rev-3.0.0.tgz", + "integrity": "sha512-gAHQZnwvtl74tGevUqGuWoyOdJUdMMv0TjGSMzbdyGImr9fZcnM6xmggDA8bUawrMto9NFi00ZtNUgA4dQiUBw==", + "dev": true, + "requires": { + "broccoli-asset-rewrite": "^2.0.0", + "broccoli-filter": "^1.2.2", + "broccoli-persistent-filter": "^1.4.3", + "json-stable-stringify": "^1.0.0", + "minimatch": "^3.0.4", + "rsvp": "^3.0.6" + }, + "dependencies": { + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + } + } + } + }, + "broccoli-asset-rewrite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/broccoli-asset-rewrite/-/broccoli-asset-rewrite-2.0.0.tgz", + "integrity": "sha512-dqhxdQpooNi7LHe8J9Jdxp6o3YPFWl4vQmint6zrsn2sVbOo+wpyiX3erUSt0IBtjNkAxqJjuvS375o2cLBHTA==", + "dev": true, + "requires": { + "broccoli-filter": "^1.2.3" + } + }, + "broccoli-babel-transpiler": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-7.2.0.tgz", + "integrity": "sha512-lkP9dNFfK810CRHHWsNl9rjyYqcXH3qg0kArnA6tV9Owx3nlZm3Eyr0cGo6sMUQCNLH+2oKrRjOdUGSc6Um6Cw==", + "dev": true, + "requires": { + "@babel/core": "^7.3.3", + "@babel/polyfill": "^7.0.0", + "broccoli-funnel": "^2.0.2", + "broccoli-merge-trees": "^3.0.2", + "broccoli-persistent-filter": "^2.2.1", + "clone": "^2.1.2", + "hash-for-dep": "^1.4.7", + "heimdalljs-logger": "^0.1.9", + "json-stable-stringify": "^1.0.1", + "rsvp": "^4.8.4", + "workerpool": "^3.1.1" + }, + "dependencies": { + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + } + } + }, + "broccoli-builder": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/broccoli-builder/-/broccoli-builder-0.18.14.tgz", + "integrity": "sha1-S3ni+ETeEaThuBbD9Jxt9HdsMS0=", + "dev": true, + "requires": { + "broccoli-node-info": "^1.1.0", + "heimdalljs": "^0.2.0", + "promise-map-series": "^0.2.1", + "quick-temp": "^0.1.2", + "rimraf": "^2.2.8", + "rsvp": "^3.0.17", + "silent-error": "^1.0.1" + } + }, + "broccoli-caching-writer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/broccoli-caching-writer/-/broccoli-caching-writer-3.0.3.tgz", + "integrity": "sha1-C9LJapc41qarWQ8HujXFFX19tHY=", + "dev": true, + "requires": { + "broccoli-kitchen-sink-helpers": "^0.3.1", + "broccoli-plugin": "^1.2.1", + "debug": "^2.1.1", + "rimraf": "^2.2.8", + "rsvp": "^3.0.17", + "walk-sync": "^0.3.0" + } + }, + "broccoli-clean-css": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/broccoli-clean-css/-/broccoli-clean-css-1.1.0.tgz", + "integrity": "sha1-nbFD2a9+CuecJuOsWpuy1yDqGfo=", + "dev": true, + "requires": { + "broccoli-persistent-filter": "^1.1.6", + "clean-css-promise": "^0.1.0", + "inline-source-map-comment": "^1.0.5", + "json-stable-stringify": "^1.0.0" + }, + "dependencies": { + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + } + } + } + }, + "broccoli-concat": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/broccoli-concat/-/broccoli-concat-3.7.4.tgz", + "integrity": "sha512-9gRv1tyCQuq2+48DT9DQyxRNLOuwDtHybDeYuWA3g26HFqZd0PGAOeXcLXHpKRhxzrEbU6Gm28dZ/KolMr04cQ==", + "dev": true, + "requires": { + "broccoli-debug": "^0.6.5", + "broccoli-kitchen-sink-helpers": "^0.3.1", + "broccoli-plugin": "^1.3.0", + "ensure-posix-path": "^1.0.2", + "fast-sourcemap-concat": "^1.4.0", + "find-index": "^1.1.0", + "fs-extra": "^4.0.3", + "fs-tree-diff": "^0.5.7", + "lodash.merge": "^4.6.2", + "lodash.omit": "^4.1.0", + "lodash.uniq": "^4.2.0", + "walk-sync": "^0.3.2" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "broccoli-config-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/broccoli-config-loader/-/broccoli-config-loader-1.0.1.tgz", + "integrity": "sha512-MDKYQ50rxhn+g17DYdfzfEM9DjTuSGu42Db37A8TQHQe8geYEcUZ4SQqZRgzdAI3aRQNlA1yBHJfOeGmOjhLIg==", + "dev": true, + "requires": { + "broccoli-caching-writer": "^3.0.3" + } + }, + "broccoli-config-replace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/broccoli-config-replace/-/broccoli-config-replace-1.1.2.tgz", + "integrity": "sha1-bqh52SpbrWNNETKbUfxfSq/anAA=", + "dev": true, + "requires": { + "broccoli-kitchen-sink-helpers": "^0.3.1", + "broccoli-plugin": "^1.2.0", + "debug": "^2.2.0", + "fs-extra": "^0.24.0" + }, + "dependencies": { + "fs-extra": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.24.0.tgz", + "integrity": "sha1-1OQ0KpZnXLeEZjOmCZJJMytTmVI=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, + "broccoli-debug": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/broccoli-debug/-/broccoli-debug-0.6.5.tgz", + "integrity": "sha512-RIVjHvNar9EMCLDW/FggxFRXqpjhncM/3qq87bn/y+/zR9tqEkHvTqbyOc4QnB97NO2m6342w4wGkemkaeOuWg==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.2.1", + "fs-tree-diff": "^0.5.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "symlink-or-copy": "^1.1.8", + "tree-sync": "^1.2.2" + } + }, + "broccoli-file-creator": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/broccoli-file-creator/-/broccoli-file-creator-2.1.1.tgz", + "integrity": "sha512-YpjOExWr92C5vhnK0kmD81kM7U09kdIRZk9w4ZDCDHuHXW+VE/x6AGEOQQW3loBQQ6Jk+k+TSm8dESy4uZsnjw==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.1.0", + "mkdirp": "^0.5.1" + } + }, + "broccoli-filter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/broccoli-filter/-/broccoli-filter-1.3.0.tgz", + "integrity": "sha512-VXJXw7eBfG82CFxaBDjYmyN7V72D4In2zwLVQJd/h3mBfF3CMdRTsv2L20lmRTtCv1sAHcB+LgMso90e/KYiLw==", + "dev": true, + "requires": { + "broccoli-kitchen-sink-helpers": "^0.3.1", + "broccoli-plugin": "^1.0.0", + "copy-dereference": "^1.0.0", + "debug": "^2.2.0", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + } + }, + "broccoli-funnel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/broccoli-funnel/-/broccoli-funnel-2.0.2.tgz", + "integrity": "sha512-/vDTqtv7ipjEZQOVqO4vGDVAOZyuYzQ/EgGoyewfOgh1M7IQAToBKZI0oAQPgMBeFPPlIbfMuAngk+ohPBuaHQ==", + "dev": true, + "requires": { + "array-equal": "^1.0.0", + "blank-object": "^1.0.1", + "broccoli-plugin": "^1.3.0", + "debug": "^2.2.0", + "fast-ordered-set": "^1.0.0", + "fs-tree-diff": "^0.5.3", + "heimdalljs": "^0.2.0", + "minimatch": "^3.0.0", + "mkdirp": "^0.5.0", + "path-posix": "^1.0.0", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0", + "walk-sync": "^0.3.1" + } + }, + "broccoli-funnel-reducer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/broccoli-funnel-reducer/-/broccoli-funnel-reducer-1.0.0.tgz", + "integrity": "sha1-ETZbKnha7JsXlyo234fu8kxcwOo=", + "dev": true + }, + "broccoli-kitchen-sink-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/broccoli-kitchen-sink-helpers/-/broccoli-kitchen-sink-helpers-0.3.1.tgz", + "integrity": "sha1-d8fBgZS5ZkFj7E/O4nk0RJJuDAY=", + "dev": true, + "requires": { + "glob": "^5.0.10", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "broccoli-lint-eslint": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/broccoli-lint-eslint/-/broccoli-lint-eslint-5.0.0.tgz", + "integrity": "sha512-V7M6U4th21bf1X4u3KoZa0xkcPq9JCSyKxB/nCWCBFMI3rkrB8nlyDLd8DKIUTqL+ojlFOGV5lohPZwndw0sZw==", + "dev": true, + "requires": { + "aot-test-generators": "^0.1.0", + "broccoli-concat": "^3.2.2", + "broccoli-persistent-filter": "^2.1.0", + "eslint": "^5.6.0", + "json-stable-stringify": "^1.0.1", + "lodash.defaultsdeep": "^4.6.0", + "md5-hex": "^2.0.0" + } + }, + "broccoli-merge-trees": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-3.0.2.tgz", + "integrity": "sha512-ZyPAwrOdlCddduFbsMyyFzJUrvW6b04pMvDiAQZrCwghlvgowJDY+EfoXn+eR1RRA5nmGHJ+B68T63VnpRiT1A==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^2.0.0" + } + }, + "broccoli-middleware": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/broccoli-middleware/-/broccoli-middleware-2.1.0.tgz", + "integrity": "sha512-ymuDaxQBKG51hKfAeDf8G0Y70rRSPS5Pu77u5HO0YsYTSSAjdZuYT2ALIlWTm+MFXYRQJIlMsqDdDNBzsvy0BQ==", + "dev": true, + "requires": { + "ansi-html": "^0.0.7", + "handlebars": "^4.0.4", + "has-ansi": "^3.0.0", + "mime-types": "^2.1.18" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "has-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-3.0.0.tgz", + "integrity": "sha1-Ngd+8dFfMzSEqn+neihgbxxlWzc=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "broccoli-module-normalizer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/broccoli-module-normalizer/-/broccoli-module-normalizer-1.3.0.tgz", + "integrity": "sha512-0idZCOtdVG6xXoQ36Psc1ApMCr3lW5DB+WEAOEwHcUoESIBHzwcRPQTxheGIjZ5o0hxpsRYAUH5x0ErtNezbrQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1", + "rimraf": "^2.6.2", + "symlink-or-copy": "^1.1.8" + }, + "dependencies": { + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + } + } + }, + "broccoli-module-unification-reexporter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/broccoli-module-unification-reexporter/-/broccoli-module-unification-reexporter-1.0.0.tgz", + "integrity": "sha512-HTi9ua520M20aBZomaiBopsSt3yjL7J/paR3XPjieygK7+ShATBiZdn0B+ZPiniBi4I8JuMn1q0fNFUevtP//A==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "mkdirp": "^0.5.1", + "walk-sync": "^0.3.2" + } + }, + "broccoli-node-info": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/broccoli-node-info/-/broccoli-node-info-1.1.0.tgz", + "integrity": "sha1-OqLjHgflvbUW3SUhT3xFuhxFlBI=", + "dev": true + }, + "broccoli-persistent-filter": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-2.3.1.tgz", + "integrity": "sha512-hVsmIgCDrl2NFM+3Gs4Cr2TA6UPaIZip99hN8mtkaUPgM8UeVnCbxelCvBjUBHo0oaaqP5jzqqnRVvb568Yu5g==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^2.0.0", + "hash-for-dep": "^1.5.0", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^4.7.0", + "symlink-or-copy": "^1.0.1", + "sync-disk-cache": "^1.3.3", + "walk-sync": "^1.0.0" + }, + "dependencies": { + "fs-tree-diff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz", + "integrity": "sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A==", + "dev": true, + "requires": { + "@types/symlink-or-copy": "^1.2.0", + "heimdalljs-logger": "^0.1.7", + "object-assign": "^4.1.0", + "path-posix": "^1.0.0", + "symlink-or-copy": "^1.1.8" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "walk-sync": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-1.1.4.tgz", + "integrity": "sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "ensure-posix-path": "^1.1.0", + "matcher-collection": "^1.1.1" + } + } + } + }, + "broccoli-plugin": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz", + "integrity": "sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ==", + "dev": true, + "requires": { + "promise-map-series": "^0.2.1", + "quick-temp": "^0.1.3", + "rimraf": "^2.3.4", + "symlink-or-copy": "^1.1.8" + } + }, + "broccoli-rollup": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/broccoli-rollup/-/broccoli-rollup-2.1.1.tgz", + "integrity": "sha512-aky/Ovg5DbsrsJEx2QCXxHLA6ZR+9u1TNVTf85soP4gL8CjGGKQ/JU8R3BZ2ntkWzo6/83RCKzX6O+nlNKR5MQ==", + "dev": true, + "requires": { + "@types/node": "^9.6.0", + "amd-name-resolver": "^1.2.0", + "broccoli-plugin": "^1.2.1", + "fs-tree-diff": "^0.5.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "magic-string": "^0.24.0", + "node-modules-path": "^1.0.1", + "rollup": "^0.57.1", + "symlink-or-copy": "^1.1.8", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "@types/node": { + "version": "9.6.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.50.tgz", + "integrity": "sha512-9Yzqn2NzJxwFzon4W+aqUAMl3FiVnJ965f5F3H5T+EpUrHqb2Is1SPp/lsj2WFBqXrhIINJ5SzSwneLMg5PgSQ==", + "dev": true + } + } + }, + "broccoli-sass-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/broccoli-sass-source-maps/-/broccoli-sass-source-maps-4.0.0.tgz", + "integrity": "sha512-Bjgg0Q626pPwiPU+Sk7jJNjblPEwhceuTzMPw2F5XY+FzdTBMYQKuJYlJ4x2DdsubE95e3rVQeSZ68jA13Nhzg==", + "dev": true, + "requires": { + "broccoli-caching-writer": "^3.0.3", + "include-path-searcher": "^0.1.0", + "mkdirp": "^0.3.5", + "object-assign": "^2.0.0", + "rsvp": "^3.0.6" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + } + } + }, + "broccoli-slow-trees": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/broccoli-slow-trees/-/broccoli-slow-trees-3.0.1.tgz", + "integrity": "sha1-m/Kp4vjrPtOj8qvd6YjaQ3zNybQ=", + "dev": true, + "requires": { + "heimdalljs": "^0.2.1" + } + }, + "broccoli-source": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/broccoli-source/-/broccoli-source-1.1.0.tgz", + "integrity": "sha1-VPDoLItz9GWAy7xPV48LMvyo+Ak=", + "dev": true + }, + "broccoli-sri-hash": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/broccoli-sri-hash/-/broccoli-sri-hash-2.1.2.tgz", + "integrity": "sha1-vGmQXtejga0yXMDQLe0HEyjr8/M=", + "dev": true, + "requires": { + "broccoli-caching-writer": "^2.2.0", + "mkdirp": "^0.5.1", + "rsvp": "^3.1.0", + "sri-toolbox": "^0.2.0", + "symlink-or-copy": "^1.0.1" + }, + "dependencies": { + "broccoli-caching-writer": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/broccoli-caching-writer/-/broccoli-caching-writer-2.3.1.tgz", + "integrity": "sha1-uTz1j5Jk8AMHWGjbBXdPTn8lvQc=", + "dev": true, + "requires": { + "broccoli-kitchen-sink-helpers": "^0.2.5", + "broccoli-plugin": "1.1.0", + "debug": "^2.1.1", + "rimraf": "^2.2.8", + "rsvp": "^3.0.17", + "walk-sync": "^0.2.5" + } + }, + "broccoli-kitchen-sink-helpers": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/broccoli-kitchen-sink-helpers/-/broccoli-kitchen-sink-helpers-0.2.9.tgz", + "integrity": "sha1-peCYbtjXb7WYS2jD8EUNOpbjbsw=", + "dev": true, + "requires": { + "glob": "^5.0.10", + "mkdirp": "^0.5.1" + } + }, + "broccoli-plugin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.1.0.tgz", + "integrity": "sha1-c+LPoF+OoeP8FCDEDD2efcckvwI=", + "dev": true, + "requires": { + "promise-map-series": "^0.2.1", + "quick-temp": "^0.1.3", + "rimraf": "^2.3.4", + "symlink-or-copy": "^1.0.1" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "walk-sync": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.2.7.tgz", + "integrity": "sha1-tJvk7mhnZXrrc2l4tWop0Q+jmWk=", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.0", + "matcher-collection": "^1.0.0" + } + } + } + }, + "broccoli-stew": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/broccoli-stew/-/broccoli-stew-1.6.0.tgz", + "integrity": "sha512-sUwCJNnYH4Na690By5xcEMAZqKgquUQnMAEuIiL3Z2k63mSw9Xg+7Ew4wCrFrMmXMcLpWjZDOm6Yqnq268N+ZQ==", + "dev": true, + "requires": { + "broccoli-debug": "^0.6.1", + "broccoli-funnel": "^2.0.0", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.1.6", + "broccoli-plugin": "^1.3.0", + "chalk": "^2.4.1", + "debug": "^3.1.0", + "ensure-posix-path": "^1.0.1", + "fs-extra": "^5.0.0", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "rsvp": "^4.8.3", + "symlink-or-copy": "^1.2.0", + "walk-sync": "^0.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "broccoli-string-replace": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/broccoli-string-replace/-/broccoli-string-replace-0.1.2.tgz", + "integrity": "sha1-HtkvhWgK+NUDAjkl51Tk4zZ2uR8=", + "dev": true, + "requires": { + "broccoli-persistent-filter": "^1.1.5", + "minimatch": "^3.0.3" + }, + "dependencies": { + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + } + } + } + }, + "broccoli-templater": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/broccoli-templater/-/broccoli-templater-2.0.2.tgz", + "integrity": "sha512-71KpNkc7WmbEokTQpGcbGzZjUIY1NSVa3GB++KFKAfx5SZPUozCOsBlSTwxcv8TLoCAqbBnsX5AQPgg6vJ2l9g==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.1", + "fs-tree-diff": "^0.5.9", + "lodash.template": "^4.4.0", + "rimraf": "^2.6.2", + "walk-sync": "^0.3.3" + } + }, + "broccoli-uglify-sourcemap": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/broccoli-uglify-sourcemap/-/broccoli-uglify-sourcemap-3.1.1.tgz", + "integrity": "sha512-X0GkGz75DFPVwRj7LCUaa1hFOPd6STveaHRCOSXIyq076AZzLVAc08zxhbbMHQOxCer8aRD1pHfuU72fQBCzcA==", + "dev": true, + "requires": { + "async-promise-queue": "^1.0.4", + "broccoli-plugin": "^1.2.1", + "debug": "^4.1.0", + "lodash.defaultsdeep": "^4.6.0", + "matcher-collection": "^2.0.0", + "mkdirp": "^0.5.0", + "source-map-url": "^0.4.0", + "symlink-or-copy": "^1.0.1", + "terser": "^3.17.0", + "walk-sync": "^1.1.3", + "workerpool": "^3.1.2" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "matcher-collection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-2.0.0.tgz", + "integrity": "sha512-wSi4BgQGTFfBN5J+pIaS78rEKk4qIkjrw+NfJYdHsd2cRVIQsbDi3BZtNAXTFA2WHvlbS9kLGtTjv3cPJKuRSw==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "minimatch": "^3.0.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + } + }, + "walk-sync": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-1.1.4.tgz", + "integrity": "sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "ensure-posix-path": "^1.1.0", + "matcher-collection": "^1.1.1" + }, + "dependencies": { + "matcher-collection": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.1.2.tgz", + "integrity": "sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g==", + "dev": true, + "requires": { + "minimatch": "^3.0.2" + } + } + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + }, + "bser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", + "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz", + "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + } + } + }, + "calculate-cache-key-for-tree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-2.0.0.tgz", + "integrity": "sha512-Quw8a6y8CPmRd6eU+mwypktYCwUcf8yVFIRbNZ6tPQEckX9yd+EBVEPC/GSZZrMWH9e7Vz4pT7XhpmyApRByLQ==", + "dev": true, + "requires": { + "json-stable-stringify": "^1.0.1" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "can-symlink": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/can-symlink/-/can-symlink-1.0.0.tgz", + "integrity": "sha1-l7YH2KhLtsbiKLkC2GTstZS50hk=", + "dev": true, + "requires": { + "tmp": "0.0.28" + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30000988", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000988.tgz", + "integrity": "sha512-lPj3T8poYrRc/bniW5SQPND3GRtSrQdUM/R4mCYTbZxyi3jQiggLvZH4+BYUuX0t4TXjU+vMM7KFDQg+rSzZUQ==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + }, + "dependencies": { + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + } + } + }, + "cardinal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz", + "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=", + "dev": true, + "requires": { + "ansicolors": "~0.2.1", + "redeyed": "~1.0.0" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "charm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", + "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", + "dev": true, + "requires": { + "inherits": "^2.0.1" + } + }, + "chokidar": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.2.tgz", + "integrity": "sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA==", + "dev": true, + "requires": { + "anymatch": "^3.0.1", + "braces": "^3.0.2", + "fsevents": "^2.0.6", + "glob-parent": "^5.0.0", + "is-binary-path": "^2.1.0", + "is-glob": "^4.0.1", + "normalize-path": "^3.0.0", + "readdirp": "^3.1.1" + } + }, + "chownr": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-base-url": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-base-url/-/clean-base-url-1.0.0.tgz", + "integrity": "sha1-yQHPCiC5ckNbDszVLQVoJKQ1G3s=", + "dev": true + }, + "clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "dev": true, + "requires": { + "commander": "2.8.x", + "source-map": "0.4.x" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + } + } + }, + "clean-css-promise": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/clean-css-promise/-/clean-css-promise-0.1.1.tgz", + "integrity": "sha1-Q/PSyN/LK/BxSBJSzZt2QzwI7ss=", + "dev": true, + "requires": { + "array-to-error": "^1.0.0", + "clean-css": "^3.4.5", + "pinkie-promise": "^2.0.0" + } + }, + "clean-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-up-path/-/clean-up-path-1.0.0.tgz", + "integrity": "sha512-PHGlEF0Z6976qQyN6gM7kKH6EH0RdfZcc8V+QhFe36eRxV0SMH5OUBZG7Bxa9YcreNzyNbK63cGiZxdSZgosRw==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", + "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz", + "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==", + "dev": true + }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "1.0.3" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "dev": true, + "requires": { + "mime-db": ">= 1.40.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "configstore": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz", + "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "console-ui": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/console-ui/-/console-ui-3.1.1.tgz", + "integrity": "sha512-22y+uk4AGq9quz6kofKQjkeCIAm86+MTxT/RZMFm8fMArP2lAkzxjUjNyrw7S6wXnnB+qRnC+/2ANMTke68RTQ==", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "inquirer": "^6", + "json-stable-stringify": "^1.0.1", + "ora": "^3.4.0", + "through2": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "inquirer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-dereference": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/copy-dereference/-/copy-dereference-1.0.0.tgz", + "integrity": "sha1-axMYZUIP2BtBO6mUtE02VTERUrY=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "dev": true + }, + "core-js-compat": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.4.tgz", + "integrity": "sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg==", + "dev": true, + "requires": { + "browserslist": "^4.6.2", + "core-js-pure": "3.1.4", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "core-js-pure": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.4.tgz", + "integrity": "sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==", + "dev": true + }, + "core-object": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/core-object/-/core-object-3.1.5.tgz", + "integrity": "sha512-sA2/4+/PZ/KV6CKgjrVrrUVBKCkdDO02CUlQ0YKTQoYUwPYNOtOAcWlbYhd5v/1JqYaA6oZ4sDlOU4ppVw6Wbg==", + "dev": true, + "requires": { + "chalk": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cpr": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cpr/-/cpr-3.0.1.tgz", + "integrity": "sha1-uaVQOLfNgaNcF7l2GJW9hJau8eU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.5", + "minimist": "^1.2.0", + "mkdirp": "~0.5.1", + "rimraf": "^2.5.4" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "dag-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-2.0.2.tgz", + "integrity": "sha1-lxS0ct6CoYQ94vuptodpOMq0TGg=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "date-time": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-time/-/date-time-2.1.0.tgz", + "integrity": "sha512-/9+C44X7lot0IeiyfgJmETtRMhBidBYM2QFFIkGa0U1k+hSyY87Nw7PY3eDqpvCBm7I3WCSfPeZskW/YYq6m4g==", + "dev": true, + "requires": { + "time-zone": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + } + } + }, + "defer-to-connect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", + "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.209", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.209.tgz", + "integrity": "sha512-KxRvLp5jUapyKIcMaecwgmUpJEsJKuHn0DJJPZjZh2valqYlzdmGvaE/nTAqwKqQwf0jIKv7Go4FYHu9wKWzOg==", + "dev": true + }, + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "ember-ajax": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ember-ajax/-/ember-ajax-3.1.0.tgz", + "integrity": "sha512-5PsAFSVjGpjeNOhUGthUYy6cTPOHSp5i/A6ZNXcyWQrNRF8xDkocyGYuOP0xIRmgLIJmOuWSMt8piflxfem+gQ==", + "dev": true, + "requires": { + "ember-cli-babel": "^6.6.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-assign-polyfill": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/ember-assign-polyfill/-/ember-assign-polyfill-2.6.0.tgz", + "integrity": "sha512-Y8NzOmHI/g4PuJ+xC14eTYiQbigNYddyHB8FY2kuQMxThTEIDE7SJtgttJrYYcPciOu0Tnb5ff36iO46LeiXkw==", + "dev": true, + "requires": { + "ember-cli-babel": "^6.16.0", + "ember-cli-version-checker": "^2.0.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-attacher": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/ember-attacher/-/ember-attacher-0.14.0.tgz", + "integrity": "sha512-0uX0eCwYvpzmAU9uCooB4LtTXksKqqXxGH0cziP7e2Z7wqwQmMNwzsw/Maq/4VlDlo2Bewbm0v1iUT2wLXacJA==", + "dev": true, + "requires": { + "babel-plugin-filter-imports": "^1.1.1", + "babel6-plugin-strip-class-callcheck": "^6.0.0", + "broccoli-funnel": "^2.0.1", + "ember-cli-babel": "^6.16.0", + "ember-cli-htmlbars": "^3.0.0", + "ember-cli-sass": "^8.0.1", + "ember-popper": "^0.9.2", + "ember-truth-helpers": "^2.0.0", + "sass": "^1.13.2" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-sass": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ember-cli-sass/-/ember-cli-sass-8.0.1.tgz", + "integrity": "sha512-sJQiBJo51tReuJmDLHkJ/zIbqSslEjJB2zRPH+6bbhzfznzUfhCLXHthpHCS3SqnVq2rnzZQ8ifdmAX7mRWJ7w==", + "dev": true, + "requires": { + "broccoli-funnel": "^1.0.0", + "broccoli-merge-trees": "^1.1.0", + "broccoli-sass-source-maps": "^4.0.0", + "ember-cli-version-checker": "^2.1.0" + }, + "dependencies": { + "broccoli-funnel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/broccoli-funnel/-/broccoli-funnel-1.2.0.tgz", + "integrity": "sha1-zdw6/F/xaFqAI0iP/3TOb7WlEpY=", + "dev": true, + "requires": { + "array-equal": "^1.0.0", + "blank-object": "^1.0.1", + "broccoli-plugin": "^1.3.0", + "debug": "^2.2.0", + "exists-sync": "0.0.4", + "fast-ordered-set": "^1.0.0", + "fs-tree-diff": "^0.5.3", + "heimdalljs": "^0.2.0", + "minimatch": "^3.0.0", + "mkdirp": "^0.5.0", + "path-posix": "^1.0.0", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0", + "walk-sync": "^0.3.1" + } + }, + "broccoli-merge-trees": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-1.2.4.tgz", + "integrity": "sha1-oAFRm7UGfwZYnZGvopQkRaLQ/bU=", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "can-symlink": "^1.0.0", + "fast-ordered-set": "^1.0.2", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + } + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-auto-import": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ember-auto-import/-/ember-auto-import-1.5.2.tgz", + "integrity": "sha512-skVQpfdc6G5OVRsyemDn3vI1nj/iBBgnoqRLRka0ZbDT2GqelmyJ86bp+Bd/ztJe45Le3we+LXbR7T54RU5A9w==", + "dev": true, + "requires": { + "@babel/core": "^7.1.6", + "@babel/preset-env": "^7.0.0", + "@babel/traverse": "^7.1.6", + "@babel/types": "^7.1.6", + "@embroider/core": "^0.4.3", + "babel-core": "^6.26.3", + "babel-loader": "^8.0.6", + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-template": "^6.26.0", + "babylon": "^6.18.0", + "broccoli-debug": "^0.6.4", + "broccoli-plugin": "^1.3.0", + "debug": "^3.1.0", + "ember-cli-babel": "^6.6.0", + "enhanced-resolve": "^4.0.0", + "fs-extra": "^6.0.1", + "fs-tree-diff": "^1.0.0", + "handlebars": "~4.1.2", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "pkg-up": "^2.0.0", + "resolve": "^1.7.1", + "rimraf": "^2.6.2", + "symlink-or-copy": "^1.2.0", + "typescript-memoize": "^1.0.0-alpha.3", + "walk-sync": "^0.3.3", + "webpack": "~4.28" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "fs-tree-diff": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-0.5.9.tgz", + "integrity": "sha512-872G8ax0kHh01m9n/2KDzgYwouKza0Ad9iFltBpNykvROvf2AGtoOzPJgGx125aolGPER3JuC7uZFrQ7bG1AZw==", + "dev": true, + "requires": { + "heimdalljs-logger": "^0.1.7", + "object-assign": "^4.1.0", + "path-posix": "^1.0.0", + "symlink-or-copy": "^1.1.8" + } + }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-tree-diff": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-1.0.2.tgz", + "integrity": "sha512-Zro2ACaPVDgVOx9+s5s5AfPlAD0kMJdbwGvTGF6KC1SjxjiGWxJvV4mUTDkFVSy3OUw2C/f1qpdjF81hGqSBAw==", + "dev": true, + "requires": { + "heimdalljs-logger": "^0.1.7", + "object-assign": "^4.1.0", + "path-posix": "^1.0.0", + "symlink-or-copy": "^1.1.8" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + }, + "dependencies": { + "fs-tree-diff": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-0.5.9.tgz", + "integrity": "sha512-872G8ax0kHh01m9n/2KDzgYwouKza0Ad9iFltBpNykvROvf2AGtoOzPJgGx125aolGPER3JuC7uZFrQ7bG1AZw==", + "dev": true, + "requires": { + "heimdalljs-logger": "^0.1.7", + "object-assign": "^4.1.0", + "path-posix": "^1.0.0", + "symlink-or-copy": "^1.1.8" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-cli": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/ember-cli/-/ember-cli-3.10.1.tgz", + "integrity": "sha512-MQdZAxkwSR2wGJhVMP0Wm7cSYXfMW0Hku/kWtqDm1Ig1dIcWWRpTNxQ12uxBSiE8uQNrXpF3cl5ZDpMVnhbdqw==", + "dev": true, + "requires": { + "@babel/core": "^7.4.3", + "@babel/plugin-transform-modules-amd": "^7.2.0", + "amd-name-resolver": "^1.3.1", + "babel-plugin-module-resolver": "^3.2.0", + "bower-config": "^1.4.1", + "bower-endpoint-parser": "0.2.2", + "broccoli": "^2.3.0", + "broccoli-amd-funnel": "^2.0.1", + "broccoli-babel-transpiler": "^7.2.0", + "broccoli-builder": "^0.18.14", + "broccoli-concat": "^3.7.3", + "broccoli-config-loader": "^1.0.1", + "broccoli-config-replace": "^1.1.2", + "broccoli-debug": "^0.6.5", + "broccoli-funnel": "^2.0.2", + "broccoli-funnel-reducer": "^1.0.0", + "broccoli-merge-trees": "^3.0.2", + "broccoli-middleware": "^2.0.1", + "broccoli-module-normalizer": "^1.3.0", + "broccoli-module-unification-reexporter": "^1.0.0", + "broccoli-source": "^1.1.0", + "broccoli-stew": "^2.1.0", + "calculate-cache-key-for-tree": "^2.0.0", + "capture-exit": "^2.0.0", + "chalk": "^2.4.2", + "ci-info": "^2.0.0", + "clean-base-url": "^1.0.0", + "compression": "^1.7.4", + "configstore": "^4.0.0", + "console-ui": "^3.0.2", + "core-object": "^3.1.5", + "dag-map": "^2.0.2", + "diff": "^4.0.1", + "ember-cli-broccoli-sane-watcher": "^3.0.0", + "ember-cli-is-package-missing": "^1.0.0", + "ember-cli-lodash-subset": "^2.0.1", + "ember-cli-normalize-entity-name": "^1.0.0", + "ember-cli-preprocess-registry": "^3.3.0", + "ember-cli-string-utils": "^1.1.0", + "ember-source-channel-url": "^1.1.0", + "ensure-posix-path": "^1.0.2", + "execa": "^1.0.0", + "exit": "^0.1.2", + "express": "^4.16.4", + "filesize": "^4.1.2", + "find-up": "^3.0.0", + "find-yarn-workspace-root": "^1.2.1", + "fs-extra": "^7.0.1", + "fs-tree-diff": "^2.0.0", + "get-caller-file": "^2.0.5", + "git-repo-info": "^2.1.0", + "glob": "^7.1.3", + "heimdalljs": "^0.2.6", + "heimdalljs-fs-monitor": "^0.2.2", + "heimdalljs-graph": "^0.3.5", + "heimdalljs-logger": "^0.1.10", + "http-proxy": "^1.17.0", + "inflection": "^1.12.0", + "is-git-url": "^1.0.0", + "isbinaryfile": "^3.0.3", + "js-yaml": "^3.13.1", + "json-stable-stringify": "^1.0.1", + "leek": "0.0.24", + "lodash.template": "^4.4.0", + "markdown-it": "^8.4.2", + "markdown-it-terminal": "0.1.0", + "minimatch": "^3.0.4", + "morgan": "^1.9.1", + "nopt": "^3.0.6", + "npm-package-arg": "^6.1.0", + "p-defer": "^2.1.0", + "portfinder": "^1.0.20", + "promise-map-series": "^0.2.3", + "quick-temp": "^0.1.8", + "resolve": "^1.10.0", + "resolve-package-path": "^1.2.6", + "rsvp": "^4.8.4", + "sane": "^4.1.0", + "semver": "^6.0.0", + "silent-error": "^1.1.1", + "sort-package-json": "^1.22.1", + "symlink-or-copy": "^1.2.0", + "temp": "0.9.0", + "testem": "^2.14.0", + "tiny-lr": "^1.1.1", + "tree-sync": "^1.4.0", + "uuid": "^3.3.2", + "validate-npm-package-name": "^3.0.0", + "walk-sync": "^1.1.3", + "watch-detector": "^0.1.0", + "yam": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "broccoli-stew": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/broccoli-stew/-/broccoli-stew-2.1.0.tgz", + "integrity": "sha512-tgCkuTWYl4uf7k7ib2D79KFEj2hCgnTUNPMnrCoAha0/4bywcNccmaZVWtL9Ex37yX5h5eAbnM/ak2ULoMwSSw==", + "dev": true, + "requires": { + "broccoli-debug": "^0.6.5", + "broccoli-funnel": "^2.0.0", + "broccoli-merge-trees": "^3.0.1", + "broccoli-persistent-filter": "^2.1.1", + "broccoli-plugin": "^1.3.1", + "chalk": "^2.4.1", + "debug": "^3.1.0", + "ensure-posix-path": "^1.0.1", + "fs-extra": "^6.0.1", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "rsvp": "^4.8.4", + "symlink-or-copy": "^1.2.0", + "walk-sync": "^0.3.3" + }, + "dependencies": { + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "walk-sync": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.4.tgz", + "integrity": "sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.0", + "matcher-collection": "^1.0.0" + } + } + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-tree-diff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz", + "integrity": "sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A==", + "dev": true, + "requires": { + "@types/symlink-or-copy": "^1.2.0", + "heimdalljs-logger": "^0.1.7", + "object-assign": "^4.1.0", + "path-posix": "^1.0.0", + "symlink-or-copy": "^1.1.8" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "walk-sync": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-1.1.4.tgz", + "integrity": "sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "ensure-posix-path": "^1.1.0", + "matcher-collection": "^1.1.1" + } + } + } + }, + "ember-cli-app-version": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-app-version/-/ember-cli-app-version-3.2.0.tgz", + "integrity": "sha512-fHWOJElSw8JL03FNCHrT0RdWhGpWEQ4VQ10unEwwhVZ+OANNcOLz8O2dA3D5iuB4bb0fMLwjEwYZGM62+TBs1Q==", + "dev": true, + "requires": { + "ember-cli-babel": "^6.12.0", + "git-repo-version": "^1.0.2" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-cli-babel": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-7.8.0.tgz", + "integrity": "sha512-xUBgJQ81fqd7k/KIiGU+pjpoXhrmmRf9pUrqLenNSU5N+yeNFT5a1+w0b+p1F7oBphfXVwuxApdZxrmAHOdA3Q==", + "dev": true, + "requires": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.3.4", + "@babel/plugin-proposal-decorators": "^7.3.0", + "@babel/plugin-transform-modules-amd": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.2.0", + "@babel/polyfill": "^7.0.0", + "@babel/preset-env": "^7.0.0", + "@babel/runtime": "^7.2.0", + "amd-name-resolver": "^1.2.1", + "babel-plugin-debug-macros": "^0.3.0", + "babel-plugin-ember-modules-api-polyfill": "^2.9.0", + "babel-plugin-module-resolver": "^3.1.1", + "broccoli-babel-transpiler": "^7.1.2", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.1", + "broccoli-source": "^1.1.0", + "clone": "^2.1.2", + "ember-cli-babel-plugin-helpers": "^1.1.0", + "ember-cli-version-checker": "^2.1.2", + "ensure-posix-path": "^1.0.2", + "semver": "^5.5.0" + }, + "dependencies": { + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + } + } + }, + "ember-cli-babel-plugin-helpers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.0.tgz", + "integrity": "sha512-Zr4my8Xn+CzO0gIuFNXji0eTRml5AxZUTDQz/wsNJ5AJAtyFWCY4QtKdoELNNbiCVGt1lq5yLiwTm4scGKu6xA==", + "dev": true + }, + "ember-cli-broccoli-sane-watcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ember-cli-broccoli-sane-watcher/-/ember-cli-broccoli-sane-watcher-3.0.0.tgz", + "integrity": "sha512-sLn+wy6FJpGMHtSwAGUjQK3nJFvw2b6H8bR2EgMIXxkUI3DYFLi6Xnyxm02XlMTcfTxF10yHFhHJe0O+PcJM7A==", + "dev": true, + "requires": { + "broccoli-slow-trees": "^3.0.1", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rsvp": "^3.0.18", + "sane": "^4.0.0" + } + }, + "ember-cli-dependency-checker": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-dependency-checker/-/ember-cli-dependency-checker-3.2.0.tgz", + "integrity": "sha512-dkSmcJ/jY/2ms/S6ph2jXSfOW5VfOpLfg5DFEbra0SaMNgYkNDFF1o0U4OdTsG37L5h/AXWNuVtnOa4TMabz9Q==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "find-yarn-workspace-root": "^1.1.0", + "is-git-url": "^1.0.0", + "resolve": "^1.5.0", + "semver": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ember-cli-eslint": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ember-cli-eslint/-/ember-cli-eslint-5.1.0.tgz", + "integrity": "sha512-o6787b0tgkRNp+KJo5BiQxtkLuz/yyYqVWF31LPrh+ZCC8jETrfyjsuk8VPDxKLGq7qEiQNJUgOEW87HTad7Vg==", + "dev": true, + "requires": { + "broccoli-lint-eslint": "^5.0.0", + "ember-cli-version-checker": "^3.0.0", + "rsvp": "^4.6.1", + "walk-sync": "^1.0.0" + }, + "dependencies": { + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "walk-sync": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-1.1.4.tgz", + "integrity": "sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "ensure-posix-path": "^1.1.0", + "matcher-collection": "^1.1.1" + } + } + } + }, + "ember-cli-get-component-path-option": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ember-cli-get-component-path-option/-/ember-cli-get-component-path-option-1.0.0.tgz", + "integrity": "sha1-DXtZVVni+QUKvtgE8djv8bCLx3E=", + "dev": true + }, + "ember-cli-htmlbars": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ember-cli-htmlbars/-/ember-cli-htmlbars-3.1.0.tgz", + "integrity": "sha512-cgvRJM73IT0aePUG7oQ/afB7vSRBV3N0wu9BrWhHX2zkR7A7cUBI7KC9VPk6tbctCXoM7BRGsCC4aIjF7yrfXA==", + "dev": true, + "requires": { + "broccoli-persistent-filter": "^2.3.1", + "hash-for-dep": "^1.5.1", + "json-stable-stringify": "^1.0.1", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "ember-cli-htmlbars-inline-precompile": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-2.1.0.tgz", + "integrity": "sha512-BylIHduwQkncPhnj0ZyorBuljXbTzLgRo6kuHf1W+IHFxThFl2xG+r87BVwsqx4Mn9MTgW9SE0XWjwBJcSWd6Q==", + "dev": true, + "requires": { + "babel-plugin-htmlbars-inline-precompile": "^1.0.0", + "ember-cli-version-checker": "^2.1.2", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.9", + "silent-error": "^1.1.0" + }, + "dependencies": { + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + } + } + }, + "ember-cli-inject-live-reload": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-2.0.1.tgz", + "integrity": "sha512-vrW/3KSrku+Prqmp7ZkpCxYkabnLrTHDEvV9B1yphTP++dhiV7n7Dv9NrmyubkoF3Inm0xrbbhB5mScvvuTQSg==", + "dev": true, + "requires": { + "clean-base-url": "^1.0.0", + "ember-cli-version-checker": "^2.1.2" + }, + "dependencies": { + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + } + } + }, + "ember-cli-is-package-missing": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ember-cli-is-package-missing/-/ember-cli-is-package-missing-1.0.0.tgz", + "integrity": "sha1-bmGEyvuSY13ZPKbJRrEEKS1OM5A=", + "dev": true + }, + "ember-cli-lodash-subset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ember-cli-lodash-subset/-/ember-cli-lodash-subset-2.0.1.tgz", + "integrity": "sha1-IMtop5D+D94kiN39jvu332/nZvI=", + "dev": true + }, + "ember-cli-mirage": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/ember-cli-mirage/-/ember-cli-mirage-0.4.15.tgz", + "integrity": "sha512-5wCycS40pkohNPaLcyCn5BUjJ/4PGK9lz6j1tftJms5tBQhSjkZ37+pfhVKh3iYSId/+z0RTxVknykQH4P0sQA==", + "dev": true, + "requires": { + "@xg-wang/whatwg-fetch": "^3.0.0", + "broccoli-file-creator": "^2.1.1", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^3.0.2", + "broccoli-stew": "^2.0.1", + "broccoli-string-replace": "^0.1.2", + "chalk": "^1.1.1", + "ember-auto-import": "^1.2.19", + "ember-cli-babel": "^6.16.0", + "ember-cli-node-assets": "^0.2.2", + "ember-get-config": "^0.2.2", + "ember-inflector": "^2.0.0 || ^3.0.0", + "fake-xml-http-request": "^2.0.0", + "faker": "^3.0.0", + "lodash": "^4.17.11", + "pretender": "2.1.1", + "route-recognizer": "^0.3.4" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + }, + "dependencies": { + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + } + } + }, + "broccoli-stew": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/broccoli-stew/-/broccoli-stew-2.1.0.tgz", + "integrity": "sha512-tgCkuTWYl4uf7k7ib2D79KFEj2hCgnTUNPMnrCoAha0/4bywcNccmaZVWtL9Ex37yX5h5eAbnM/ak2ULoMwSSw==", + "dev": true, + "requires": { + "broccoli-debug": "^0.6.5", + "broccoli-funnel": "^2.0.0", + "broccoli-merge-trees": "^3.0.1", + "broccoli-persistent-filter": "^2.1.1", + "broccoli-plugin": "^1.3.1", + "chalk": "^2.4.1", + "debug": "^3.1.0", + "ensure-posix-path": "^1.0.1", + "fs-extra": "^6.0.1", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "rsvp": "^4.8.4", + "symlink-or-copy": "^1.2.0", + "walk-sync": "^0.3.3" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-cli-node-assets": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ember-cli-node-assets/-/ember-cli-node-assets-0.2.2.tgz", + "integrity": "sha1-0tVWJufMZhn4gtf+VXUfkmYCJwg=", + "dev": true, + "requires": { + "broccoli-funnel": "^1.0.1", + "broccoli-merge-trees": "^1.1.1", + "broccoli-source": "^1.1.0", + "debug": "^2.2.0", + "lodash": "^4.5.1", + "resolve": "^1.1.7" + }, + "dependencies": { + "broccoli-funnel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/broccoli-funnel/-/broccoli-funnel-1.2.0.tgz", + "integrity": "sha1-zdw6/F/xaFqAI0iP/3TOb7WlEpY=", + "dev": true, + "requires": { + "array-equal": "^1.0.0", + "blank-object": "^1.0.1", + "broccoli-plugin": "^1.3.0", + "debug": "^2.2.0", + "exists-sync": "0.0.4", + "fast-ordered-set": "^1.0.0", + "fs-tree-diff": "^0.5.3", + "heimdalljs": "^0.2.0", + "minimatch": "^3.0.0", + "mkdirp": "^0.5.0", + "path-posix": "^1.0.0", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0", + "walk-sync": "^0.3.1" + } + }, + "broccoli-merge-trees": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-1.2.4.tgz", + "integrity": "sha1-oAFRm7UGfwZYnZGvopQkRaLQ/bU=", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "can-symlink": "^1.0.0", + "fast-ordered-set": "^1.0.2", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + } + } + }, + "ember-cli-normalize-entity-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ember-cli-normalize-entity-name/-/ember-cli-normalize-entity-name-1.0.0.tgz", + "integrity": "sha1-CxT3vLxZmqEXtf3cgeT9A8S61bc=", + "dev": true, + "requires": { + "silent-error": "^1.0.0" + } + }, + "ember-cli-path-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ember-cli-path-utils/-/ember-cli-path-utils-1.0.0.tgz", + "integrity": "sha1-Tjmvi1UwHN3FAXc5t3qAT7ogce0=", + "dev": true + }, + "ember-cli-preprocess-registry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ember-cli-preprocess-registry/-/ember-cli-preprocess-registry-3.3.0.tgz", + "integrity": "sha512-60GYpw7VPeB7TvzTLZTuLTlHdOXvayxjAQ+IxM2T04Xkfyu75O2ItbWlftQW7NZVGkaCsXSRAmn22PG03VpLMA==", + "dev": true, + "requires": { + "broccoli-clean-css": "^1.1.0", + "broccoli-funnel": "^2.0.1", + "debug": "^3.0.1", + "process-relative-require": "^1.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "ember-cli-sass": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ember-cli-sass/-/ember-cli-sass-10.0.0.tgz", + "integrity": "sha512-gAMh3sHRExk/gOpbJ+OKKLPd8vCT8Bs8UU0cdNwBUOVwQ0UJ3iKyQY6GS1bMMXYtiyK2ieUPsrDGf14LUcC7bw==", + "dev": true, + "requires": { + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^3.0.1", + "broccoli-sass-source-maps": "^4.0.0", + "ember-cli-version-checker": "^2.1.0" + }, + "dependencies": { + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + } + } + }, + "ember-cli-sri": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ember-cli-sri/-/ember-cli-sri-2.1.1.tgz", + "integrity": "sha1-lxYgk0pLkYPPeSPMA+F4uDqpB/0=", + "dev": true, + "requires": { + "broccoli-sri-hash": "^2.1.0" + } + }, + "ember-cli-string-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz", + "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=", + "dev": true + }, + "ember-cli-template-lint": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/ember-cli-template-lint/-/ember-cli-template-lint-1.0.0-beta.3.tgz", + "integrity": "sha512-ivrvYih+cx7VUlyyMQBmk61Ki+gT5axfppWrk6fSvHaoxHZadXU3zRJMT5DPkeRaayRu0y1dls4wqfrUhzQ1PA==", + "dev": true, + "requires": { + "aot-test-generators": "^0.1.0", + "broccoli-concat": "^3.7.1", + "broccoli-persistent-filter": "^2.1.0", + "chalk": "^2.4.1", + "debug": "^4.0.1", + "ember-cli-version-checker": "^3.0.1", + "ember-template-lint": "^1.1.0", + "json-stable-stringify": "^1.0.1", + "md5-hex": "^2.0.0", + "strip-ansi": "^4.0.0", + "walk-sync": "^1.1.3" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "walk-sync": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-1.1.4.tgz", + "integrity": "sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "ensure-posix-path": "^1.1.0", + "matcher-collection": "^1.1.1" + } + } + } + }, + "ember-cli-test-info": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ember-cli-test-info/-/ember-cli-test-info-1.0.0.tgz", + "integrity": "sha1-7U6WDySel1I8+JHkrtIHLOhFd7Q=", + "dev": true, + "requires": { + "ember-cli-string-utils": "^1.0.0" + } + }, + "ember-cli-test-loader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-test-loader/-/ember-cli-test-loader-2.2.0.tgz", + "integrity": "sha512-mlSXX9SciIRwGkFTX6XGyJYp4ry6oCFZRxh5jJ7VH8UXLTNx2ZACtDTwaWtNhYrWXgKyiDUvmD8enD56aePWRA==", + "dev": true, + "requires": { + "ember-cli-babel": "^6.8.1" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-cli-typescript": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ember-cli-typescript/-/ember-cli-typescript-2.0.2.tgz", + "integrity": "sha512-7I5azCTxOgRDN8aSSnJZIKSqr+MGnT+jLTUbBYqF8wu6ojs2DUnTePxUcQMcvNh3Q3B1ySv7Q/uZFSjdU9gSjA==", + "dev": true, + "requires": { + "@babel/plugin-proposal-class-properties": "^7.1.0", + "@babel/plugin-transform-typescript": "~7.4.0", + "ansi-to-html": "^0.6.6", + "debug": "^4.0.0", + "ember-cli-babel-plugin-helpers": "^1.0.0", + "execa": "^1.0.0", + "fs-extra": "^7.0.0", + "resolve": "^1.5.0", + "rsvp": "^4.8.1", + "semver": "^6.0.0", + "stagehand": "^1.0.0", + "walk-sync": "^1.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "walk-sync": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-1.1.4.tgz", + "integrity": "sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "ensure-posix-path": "^1.1.0", + "matcher-collection": "^1.1.1" + } + } + } + }, + "ember-cli-uglify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ember-cli-uglify/-/ember-cli-uglify-3.0.0.tgz", + "integrity": "sha512-n3QxdBfAgBdb2Cnso82Kt/nxm3ppIjnYWM8uhOEhF1aYxNXfM7AJrc+yiqTCDUR61Db8aCpHfAMvChz3kyme7g==", + "dev": true, + "requires": { + "broccoli-uglify-sourcemap": "^3.1.0", + "lodash.defaultsdeep": "^4.6.0" + } + }, + "ember-cli-update": { + "version": "0.34.13", + "resolved": "https://registry.npmjs.org/ember-cli-update/-/ember-cli-update-0.34.13.tgz", + "integrity": "sha512-KdU/2dyrtpNdEogwEPOrZvPfuCSflbtUvGL5HxS4Y9kMxqvRGcncZopH16El3Jd6XhL8faIygajvd9gT4JD+Gw==", + "dev": true, + "requires": { + "boilerplate-update": "0.22.6", + "debug": "^4.1.1", + "fs-extra": "^8.0.0", + "resolve": "^1.10.0", + "semver": "^6.0.0", + "update-notifier": "^3.0.0", + "which": "^1.3.1", + "yargs": "^13.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "ember-cli-version-checker": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-3.1.3.tgz", + "integrity": "sha512-PZNSvpzwWgv68hcXxyjREpj3WWb81A7rtYNQq1lLEgrWIchF8ApKJjWP3NBpHjaatwILkZAV8klair5WFlXAKg==", + "dev": true, + "requires": { + "resolve-package-path": "^1.2.6", + "semver": "^5.6.0" + } + }, + "ember-compatibility-helpers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.0.tgz", + "integrity": "sha512-pUW4MzJdcaQtwGsErYmitFRs0rlCYBAnunVzlFFUBr4xhjlCjgHJo0b53gFnhTgenNM3d3/NqLarzRhDTjXRTg==", + "dev": true, + "requires": { + "babel-plugin-debug-macros": "^0.2.0", + "ember-cli-version-checker": "^2.1.1", + "semver": "^5.4.1" + }, + "dependencies": { + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + } + } + }, + "ember-concurrency": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/ember-concurrency/-/ember-concurrency-0.10.1.tgz", + "integrity": "sha512-KdvR5TEfnLov4igeIZiVueFOL0kMjkabMQrioipegey+NF23SSYThc/y2rKv109D92lTAJgC6Vp7+j2RtXqD+w==", + "dev": true, + "requires": { + "babel-core": "^6.24.1", + "ember-cli-babel": "^6.8.2", + "ember-compatibility-helpers": "^1.2.0", + "ember-maybe-import-regenerator": "^0.1.5" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-cookies": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/ember-cookies/-/ember-cookies-0.4.0.tgz", + "integrity": "sha512-KXFxmaxEMlSqYQdyAaM/Rs84PxBJCqBQEPkLqhBStC9LwEovUSTEXzhd3FHVbMHch/THI4JzjoYEsj4CrdxVgQ==", + "dev": true, + "requires": { + "ember-cli-babel": "^7.1.0", + "ember-getowner-polyfill": "^1.1.0 || ^2.0.0" + } + }, + "ember-copy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ember-copy/-/ember-copy-1.0.0.tgz", + "integrity": "sha512-aiZNAvOmdemHdvZNn0b5b/0d9g3JFpcOsrDgfhYEbfd7SzE0b69YiaVK2y3wjqfjuuiA54vOllGN4pjSzECNSw==", + "dev": true, + "requires": { + "ember-cli-babel": "^6.6.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-data": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/ember-data/-/ember-data-3.10.0.tgz", + "integrity": "sha512-QqKJ5/Co2wGBnD5FSUiO1tbhsjjiRS5uJUwD2vRa0suwNv5E9f+5S6Yww6O0B2z5nDRzRheBFZ7iRjbshQhWDg==", + "dev": true, + "requires": { + "@ember/ordered-set": "^2.0.3", + "@glimmer/env": "^0.1.7", + "babel-plugin-feature-flags": "^0.3.1", + "babel-plugin-filter-imports": "^2.0.4", + "babel6-plugin-strip-class-callcheck": "^6.0.0", + "babel6-plugin-strip-heimdall": "^6.0.1", + "broccoli-debug": "^0.6.5", + "broccoli-file-creator": "^2.1.1", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^3.0.2", + "broccoli-rollup": "^2.1.1", + "calculate-cache-key-for-tree": "^1.2.0", + "chalk": "^2.4.1", + "ember-cli-babel": "^7.7.3", + "ember-cli-path-utils": "^1.0.0", + "ember-cli-string-utils": "^1.1.0", + "ember-cli-test-info": "^1.0.0", + "ember-cli-typescript": "^2.0.0", + "ember-cli-version-checker": "^3.1.3", + "ember-inflector": "^3.0.0", + "git-repo-info": "^2.0.0", + "heimdalljs": "^0.3.0", + "inflection": "^1.12.0", + "npm-git-info": "^1.0.3", + "resolve": "^1.8.1", + "silent-error": "^1.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-plugin-filter-imports": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-filter-imports/-/babel-plugin-filter-imports-2.0.4.tgz", + "integrity": "sha512-Ra4VylqMFsmTJCUeLRJ/OP2ZqO0cCJQK2HKihNTnoKP4f8IhxHKL4EkbmfkwGjXCeDyXd0xQ6UTK8Nd+h9V/SQ==", + "dev": true, + "requires": { + "@babel/types": "^7.1.5", + "lodash": "^4.17.11" + } + }, + "calculate-cache-key-for-tree": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-1.2.3.tgz", + "integrity": "sha512-PPQorvdNw8K8k7UftCeradwOmKDSDJs8wcqYTtJPEt3fHbZyK8QsorybJA+lOmk0dgE61vX6R+5Kd3W9h4EMGg==", + "dev": true, + "requires": { + "json-stable-stringify": "^1.0.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "heimdalljs": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.3.3.tgz", + "integrity": "sha1-6S0sb3f9RtW/ULYQ0orTF1UFTQs=", + "dev": true, + "requires": { + "rsvp": "~3.2.1" + } + }, + "rsvp": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", + "integrity": "sha1-B8tKXfJa3Z6Cbrxn3Mn9idsn2Eo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ember-export-application-global": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ember-export-application-global/-/ember-export-application-global-2.0.0.tgz", + "integrity": "sha1-jW12GayKGj+MQwA1Sesh6+1oW9I=", + "dev": true, + "requires": { + "ember-cli-babel": "^6.0.0-beta.7" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-factory-for-polyfill": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/ember-factory-for-polyfill/-/ember-factory-for-polyfill-1.3.1.tgz", + "integrity": "sha512-y3iG2iCzH96lZMTWQw6LWNLAfOmDC4pXKbZP6FxG8lt7GGaNFkZjwsf+Z5GAe7kxfD7UG4lVkF7x37K82rySGA==", + "dev": true, + "requires": { + "ember-cli-version-checker": "^2.1.0" + }, + "dependencies": { + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + } + } + }, + "ember-fetch": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ember-fetch/-/ember-fetch-6.7.0.tgz", + "integrity": "sha512-lB9G+XDKOc84Dr3THJs+l/KmtzUus7nv12Z0xOP54J917HmjnAsSZ9OHTp+X8ClxlAm35/v9l+sFd7IlB9Baqw==", + "dev": true, + "requires": { + "abortcontroller-polyfill": "^1.3.0", + "broccoli-concat": "^3.2.2", + "broccoli-debug": "^0.6.5", + "broccoli-merge-trees": "^3.0.0", + "broccoli-rollup": "^2.1.1", + "broccoli-stew": "^2.1.0", + "broccoli-templater": "^2.0.1", + "calculate-cache-key-for-tree": "^2.0.0", + "caniuse-api": "^3.0.0", + "ember-cli-babel": "^6.8.2", + "node-fetch": "^2.6.0", + "whatwg-fetch": "^3.0.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + }, + "dependencies": { + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + } + } + }, + "broccoli-stew": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/broccoli-stew/-/broccoli-stew-2.1.0.tgz", + "integrity": "sha512-tgCkuTWYl4uf7k7ib2D79KFEj2hCgnTUNPMnrCoAha0/4bywcNccmaZVWtL9Ex37yX5h5eAbnM/ak2ULoMwSSw==", + "dev": true, + "requires": { + "broccoli-debug": "^0.6.5", + "broccoli-funnel": "^2.0.0", + "broccoli-merge-trees": "^3.0.1", + "broccoli-persistent-filter": "^2.1.1", + "broccoli-plugin": "^1.3.1", + "chalk": "^2.4.1", + "debug": "^3.1.0", + "ensure-posix-path": "^1.0.1", + "fs-extra": "^6.0.1", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "rsvp": "^4.8.4", + "symlink-or-copy": "^1.2.0", + "walk-sync": "^0.3.3" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-gestures": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ember-gestures/-/ember-gestures-1.1.3.tgz", + "integrity": "sha512-zKRtAvLt91BtYQfiHsna+rWZ8+3jps4UrYvQKLWDWB6qh9bp+JooHKYwLedrKqWOO610BM+jsiw1FYP+GCgMMQ==", + "dev": true, + "requires": { + "animation-frame": "~0.2.4", + "broccoli-funnel": "^2.0.2", + "broccoli-merge-trees": "^3.0.2", + "ember-cli-babel": "^6.8.2", + "ember-cli-htmlbars": "^2.0.1", + "ember-cli-version-checker": "^2.1.0", + "ember-copy": "^1.0.0", + "ember-getowner-polyfill": "^2.2.0", + "fastboot-transform": "^0.1.3", + "hammerjs": "^2.0.8", + "resolve": "^1.10.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + }, + "dependencies": { + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + } + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-htmlbars": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/ember-cli-htmlbars/-/ember-cli-htmlbars-2.0.5.tgz", + "integrity": "sha512-3f3PAxdnQ/fhQa8XP/3z4RLRgLHxV8j4Ln75aHbRdemOCjBa048KxL9l+acRLhCulbGQCMnLiIUIC89PAzLrcA==", + "dev": true, + "requires": { + "broccoli-persistent-filter": "^1.4.3", + "hash-for-dep": "^1.2.3", + "json-stable-stringify": "^1.0.0", + "strip-bom": "^3.0.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-get-config": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/ember-get-config/-/ember-get-config-0.2.4.tgz", + "integrity": "sha1-EYSSoqA9c+RgBO13eSiUICH+Hs0=", + "dev": true, + "requires": { + "broccoli-file-creator": "^1.1.1", + "ember-cli-babel": "^6.3.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-file-creator": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/broccoli-file-creator/-/broccoli-file-creator-1.2.0.tgz", + "integrity": "sha512-l9zthHg6bAtnOfRr/ieZ1srRQEsufMZID7xGYRW3aBDv3u/3Eux+Iawl10tAGYE5pL9YB4n5X4vxkp6iNOoZ9g==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.1.0", + "mkdirp": "^0.5.1" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-getowner-polyfill": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-getowner-polyfill/-/ember-getowner-polyfill-2.2.0.tgz", + "integrity": "sha512-rwGMJgbGzxIAiWYjdpAh04Abvt0s3HuS/VjHzUFhVyVg2pzAuz45B9AzOxYXzkp88vFC7FPaiA4kE8NxNk4A4Q==", + "dev": true, + "requires": { + "ember-cli-version-checker": "^2.1.0", + "ember-factory-for-polyfill": "^1.3.1" + }, + "dependencies": { + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + } + } + }, + "ember-in-element-polyfill": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ember-in-element-polyfill/-/ember-in-element-polyfill-0.1.3.tgz", + "integrity": "sha512-zZfjJC0wE1s0yH/UPPPvy64PuEInQ+GdO5v7tqTm/TfR8BiKGvHayxLZ0Kc3C06RGcfiFPU50HvWzLglTpeR+Q==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "ember-cli-babel": "^6.6.0", + "ember-cli-version-checker": "^2.1.0", + "ember-wormhole": "^0.5.4" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-inflector": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ember-inflector/-/ember-inflector-3.0.1.tgz", + "integrity": "sha512-fngrwMsnhkBt51KZgwNwQYxgURwV4lxtoHdjxf7RueGZ5zM7frJLevhHw7pbQNGqXZ3N+MRkhfNOLkdDK9kFdA==", + "dev": true, + "requires": { + "ember-cli-babel": "^6.6.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-load-initializers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ember-load-initializers/-/ember-load-initializers-2.0.0.tgz", + "integrity": "sha512-GQ0x7jGcPovmIFsLQO0dFERHCjkFNAWeuVErXHR466oPHvi479in/WtSJK707pmr3GA5QXXRJy6U8fAdJeJcxA==", + "dev": true, + "requires": { + "ember-cli-babel": "^7.0.0" + } + }, + "ember-maybe-import-regenerator": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ember-maybe-import-regenerator/-/ember-maybe-import-regenerator-0.1.6.tgz", + "integrity": "sha1-NdQYKK+m1qWbwNo85H80xXPXdso=", + "dev": true, + "requires": { + "broccoli-funnel": "^1.0.1", + "broccoli-merge-trees": "^1.0.0", + "ember-cli-babel": "^6.0.0-beta.4", + "regenerator-runtime": "^0.9.5" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + }, + "dependencies": { + "broccoli-funnel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/broccoli-funnel/-/broccoli-funnel-2.0.2.tgz", + "integrity": "sha512-/vDTqtv7ipjEZQOVqO4vGDVAOZyuYzQ/EgGoyewfOgh1M7IQAToBKZI0oAQPgMBeFPPlIbfMuAngk+ohPBuaHQ==", + "dev": true, + "requires": { + "array-equal": "^1.0.0", + "blank-object": "^1.0.1", + "broccoli-plugin": "^1.3.0", + "debug": "^2.2.0", + "fast-ordered-set": "^1.0.0", + "fs-tree-diff": "^0.5.3", + "heimdalljs": "^0.2.0", + "minimatch": "^3.0.0", + "mkdirp": "^0.5.0", + "path-posix": "^1.0.0", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0", + "walk-sync": "^0.3.1" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + } + } + }, + "broccoli-funnel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/broccoli-funnel/-/broccoli-funnel-1.2.0.tgz", + "integrity": "sha1-zdw6/F/xaFqAI0iP/3TOb7WlEpY=", + "dev": true, + "requires": { + "array-equal": "^1.0.0", + "blank-object": "^1.0.1", + "broccoli-plugin": "^1.3.0", + "debug": "^2.2.0", + "exists-sync": "0.0.4", + "fast-ordered-set": "^1.0.0", + "fs-tree-diff": "^0.5.3", + "heimdalljs": "^0.2.0", + "minimatch": "^3.0.0", + "mkdirp": "^0.5.0", + "path-posix": "^1.0.0", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0", + "walk-sync": "^0.3.1" + } + }, + "broccoli-merge-trees": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-1.2.4.tgz", + "integrity": "sha1-oAFRm7UGfwZYnZGvopQkRaLQ/bU=", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "can-symlink": "^1.0.0", + "fast-ordered-set": "^1.0.2", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + }, + "dependencies": { + "broccoli-funnel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/broccoli-funnel/-/broccoli-funnel-2.0.2.tgz", + "integrity": "sha512-/vDTqtv7ipjEZQOVqO4vGDVAOZyuYzQ/EgGoyewfOgh1M7IQAToBKZI0oAQPgMBeFPPlIbfMuAngk+ohPBuaHQ==", + "dev": true, + "requires": { + "array-equal": "^1.0.0", + "blank-object": "^1.0.1", + "broccoli-plugin": "^1.3.0", + "debug": "^2.2.0", + "fast-ordered-set": "^1.0.0", + "fs-tree-diff": "^0.5.3", + "heimdalljs": "^0.2.0", + "minimatch": "^3.0.0", + "mkdirp": "^0.5.0", + "path-posix": "^1.0.0", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0", + "walk-sync": "^0.3.1" + } + } + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "regenerator-runtime": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz", + "integrity": "sha1-0z65XQ0gAaS+OWWXB8UbDLcc4Ck=", + "dev": true + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-maybe-in-element": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ember-maybe-in-element/-/ember-maybe-in-element-0.1.3.tgz", + "integrity": "sha512-cAiG6N9HwvoPsMIePgwECilPrKRrIdfKqx9g8qWHKPS4vwrgS2PTeLmOcJvVYbBTXkHaFZmecDRpf6xAj6zk7A==", + "dev": true, + "requires": { + "ember-cli-babel": "^6.11.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-popper": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/ember-popper/-/ember-popper-0.9.2.tgz", + "integrity": "sha512-Umm3NCOAnDqaBUcjlfA8alaDqcZIiNaLzpisFPQ/DMrc8lVUGBhmB6HTmshfAoU22ljZ8FSLk6aUUW10VL/3pg==", + "dev": true, + "requires": { + "babel6-plugin-strip-class-callcheck": "^6.0.0", + "ember-cli-babel": "^6.10.0", + "ember-cli-htmlbars": "^2.0.3", + "ember-cli-node-assets": "^0.2.2", + "ember-in-element-polyfill": "^0.1.2", + "ember-maybe-in-element": "^0.1.3", + "ember-raf-scheduler": "^0.1.0", + "fastboot-transform": "^0.1.0", + "popper.js": "^1.14.1" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-htmlbars": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/ember-cli-htmlbars/-/ember-cli-htmlbars-2.0.5.tgz", + "integrity": "sha512-3f3PAxdnQ/fhQa8XP/3z4RLRgLHxV8j4Ln75aHbRdemOCjBa048KxL9l+acRLhCulbGQCMnLiIUIC89PAzLrcA==", + "dev": true, + "requires": { + "broccoli-persistent-filter": "^1.4.3", + "hash-for-dep": "^1.2.3", + "json-stable-stringify": "^1.0.0", + "strip-bom": "^3.0.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-qunit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/ember-qunit/-/ember-qunit-4.5.0.tgz", + "integrity": "sha512-T4VtcsbTJsVRPH8kIg1L/qPCkHX0WchsHzxSRJW+3Tw4ZPtYvgB99wJ8A81fBZUO0eF7UNHL/j583U5LgDGsHw==", + "dev": true, + "requires": { + "@ember/test-helpers": "^1.6.0", + "broccoli-funnel": "^2.0.2", + "broccoli-merge-trees": "^3.0.2", + "common-tags": "^1.4.0", + "ember-cli-babel": "^7.8.0", + "ember-cli-test-loader": "^2.2.0", + "qunit": "^2.9.2" + } + }, + "ember-raf-scheduler": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ember-raf-scheduler/-/ember-raf-scheduler-0.1.0.tgz", + "integrity": "sha1-oioC0jjDdEmSMcA6ucW5iHxyqFM=", + "dev": true, + "requires": { + "ember-cli-babel": "^6.6.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-resolver": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/ember-resolver/-/ember-resolver-5.1.3.tgz", + "integrity": "sha512-ud7Sw8R3hcGnGSvom96p56zdLEqEgVQEAo4HySJjBP0n7JT1lWSvLb7JrJwAZ7d9g1c2tm5ZlxBPUDwQrwMOuQ==", + "dev": true, + "requires": { + "@glimmer/resolver": "^0.4.1", + "babel-plugin-debug-macros": "^0.1.10", + "broccoli-funnel": "^2.0.2", + "broccoli-merge-trees": "^3.0.0", + "ember-cli-babel": "^6.16.0", + "ember-cli-version-checker": "^3.0.0", + "resolve": "^1.10.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.1.11.tgz", + "integrity": "sha512-hZw5qNNGAR02Y+yBUrtsnJHh8OXavkayPRqKGAXnIm4t5rWVpj3ArwsC7TWdpZsBguQvHAeyTxZ7s23yY60HHg==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + }, + "dependencies": { + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + } + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + }, + "dependencies": { + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + } + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-rfc176-data": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/ember-rfc176-data/-/ember-rfc176-data-0.3.9.tgz", + "integrity": "sha512-EiTo5YQS0Duy0xp9gCP8ekzv9vxirNi7MnIB4zWs+thtWp/mEKgf5mkiiLU2+oo8C5DuavVHhoPQDmyxh8Io1Q==", + "dev": true + }, + "ember-router-generator": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/ember-router-generator/-/ember-router-generator-1.2.3.tgz", + "integrity": "sha1-jtLKhv8yM2MSD8FCeBkeno8TFe4=", + "dev": true, + "requires": { + "recast": "^0.11.3" + } + }, + "ember-runtime-enumerable-includes-polyfill": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ember-runtime-enumerable-includes-polyfill/-/ember-runtime-enumerable-includes-polyfill-2.1.0.tgz", + "integrity": "sha512-au18iI8VbEDYn3jLFZzETnKN5ciPgCUxMRucEP3jkq7qZ6sE0FVKpWMPY/h9tTND3VOBJt6fgPpEBJoJVCUudg==", + "dev": true, + "requires": { + "ember-cli-babel": "^6.9.0", + "ember-cli-version-checker": "^2.1.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-simple-auth": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/ember-simple-auth/-/ember-simple-auth-1.9.2.tgz", + "integrity": "sha512-WTG2uGe8+TIfwsy5eaS7uIszEmyQ/pjKLUMjyq6YYkU9d9erSXVRiuO4h46OxTEbVI3c17mjAu/4kTxc+BOFZw==", + "dev": true, + "requires": { + "base-64": "^0.1.0", + "broccoli-file-creator": "^2.0.0", + "broccoli-funnel": "^1.2.0 || ^2.0.0", + "broccoli-merge-trees": "^2.0.0 || ^3.0.0", + "ember-cli-babel": "^6.8.2", + "ember-cli-is-package-missing": "^1.0.0", + "ember-cookies": "^0.3.0 || ^0.4.0", + "ember-fetch": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "ember-getowner-polyfill": "^1.1.0 || ^2.0.0", + "silent-error": "^1.0.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + }, + "dependencies": { + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + } + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-source": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/ember-source/-/ember-source-3.10.2.tgz", + "integrity": "sha512-7WRBikgS5riwO0DiBtKQDQhk80mqppMbghSAHXvfJAYpkGFxuH//MxjO1eRXP9xjzmdMhfDmixrMnNBtc5D6mA==", + "dev": true, + "requires": { + "broccoli-funnel": "^2.0.2", + "broccoli-merge-trees": "^3.0.2", + "chalk": "^2.4.2", + "ember-cli-babel": "^7.7.0", + "ember-cli-get-component-path-option": "^1.0.0", + "ember-cli-is-package-missing": "^1.0.0", + "ember-cli-normalize-entity-name": "^1.0.0", + "ember-cli-path-utils": "^1.0.0", + "ember-cli-string-utils": "^1.1.0", + "ember-cli-version-checker": "^3.1.3", + "ember-router-generator": "^1.2.3", + "inflection": "^1.12.0", + "jquery": "^3.3.1", + "resolve": "^1.10.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ember-source-channel-url": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ember-source-channel-url/-/ember-source-channel-url-1.2.0.tgz", + "integrity": "sha512-CLClcHzVf+8GoFk4176R16nwXoel70bd7DKVAY6D8M0m5fJJhbTrAPYpDA0lY8A60HZo9j/s8A8LWiGh1YmdZg==", + "dev": true, + "requires": { + "got": "^8.0.1" + } + }, + "ember-template-lint": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/ember-template-lint/-/ember-template-lint-1.5.0.tgz", + "integrity": "sha512-wldr1J7ABrP7Dzos5vGUz6Jqj9AOvddvQ+ngcSr0RNo2Z71j74iNsJTxGgIPaT9SJGcsxZeP5AXOanblj5n7wA==", + "dev": true, + "requires": { + "@glimmer/compiler": "^0.41.0", + "chalk": "^2.0.0", + "globby": "^9.0.0", + "minimatch": "^3.0.4", + "resolve": "^1.1.3", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ember-test-waiters": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ember-test-waiters/-/ember-test-waiters-1.0.0.tgz", + "integrity": "sha512-0VP7oTTur/wm2///9EuMwg1/6KP6yRAamyP7DaiYfrY1js1vHtZU2fDPgjwuL0QL4FG1chyUiL/Gi3+dIaqQmA==", + "dev": true, + "requires": { + "ember-cli-babel": "^7.1.2" + } + }, + "ember-toggle": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/ember-toggle/-/ember-toggle-5.3.3.tgz", + "integrity": "sha512-FhR5tIEFd3+HWro0M0frtta7pz3L+mxvRggZGyZX2YKwb0e00M2419f2HHB9MBr8catJAXQTvUPu/JFTPmhgzg==", + "dev": true, + "requires": { + "ember-cli-babel": "^7.7.3", + "ember-cli-htmlbars": "^3.0.1", + "ember-gestures": "^1.1.1", + "ember-runtime-enumerable-includes-polyfill": "^2.0.0" + } + }, + "ember-truth-helpers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ember-truth-helpers/-/ember-truth-helpers-2.1.0.tgz", + "integrity": "sha512-BQlU8aTNl1XHKTYZ243r66yqtR9JU7XKWQcmMA+vkqfkE/c9WWQ9hQZM8YABihCmbyxzzZsngvldokmeX5GhAw==", + "dev": true, + "requires": { + "ember-cli-babel": "^6.6.0" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "ember-wormhole": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/ember-wormhole/-/ember-wormhole-0.5.5.tgz", + "integrity": "sha512-z8l3gpoKmRA2BnTwvnYRk4jKVcETKHpddsD6kpS+EJ4EfyugadFS3zUqBmRDuJhFbNP8BVBLXlbbATj+Rk1Kgg==", + "dev": true, + "requires": { + "ember-cli-babel": "^6.10.0", + "ember-cli-htmlbars": "^2.0.1" + }, + "dependencies": { + "amd-name-resolver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", + "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.1" + } + }, + "babel-plugin-debug-macros": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", + "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "broccoli-babel-transpiler": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", + "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "broccoli-funnel": "^2.0.1", + "broccoli-merge-trees": "^2.0.0", + "broccoli-persistent-filter": "^1.4.3", + "clone": "^2.0.0", + "hash-for-dep": "^1.2.3", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^4.8.2", + "workerpool": "^2.3.0" + } + }, + "broccoli-merge-trees": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", + "dev": true, + "requires": { + "broccoli-plugin": "^1.3.0", + "merge-trees": "^1.0.1" + } + }, + "broccoli-persistent-filter": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", + "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", + "dev": true, + "requires": { + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" + }, + "dependencies": { + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + } + } + }, + "ember-cli-babel": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", + "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", + "dev": true, + "requires": { + "amd-name-resolver": "1.2.0", + "babel-plugin-debug-macros": "^0.2.0-beta.6", + "babel-plugin-ember-modules-api-polyfill": "^2.6.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "broccoli-babel-transpiler": "^6.5.0", + "broccoli-debug": "^0.6.4", + "broccoli-funnel": "^2.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.2", + "semver": "^5.5.0" + } + }, + "ember-cli-htmlbars": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/ember-cli-htmlbars/-/ember-cli-htmlbars-2.0.5.tgz", + "integrity": "sha512-3f3PAxdnQ/fhQa8XP/3z4RLRgLHxV8j4Ln75aHbRdemOCjBa048KxL9l+acRLhCulbGQCMnLiIUIC89PAzLrcA==", + "dev": true, + "requires": { + "broccoli-persistent-filter": "^1.4.3", + "hash-for-dep": "^1.2.3", + "json-stable-stringify": "^1.0.0", + "strip-bom": "^3.0.0" + } + }, + "ember-cli-version-checker": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", + "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", + "dev": true, + "requires": { + "resolve": "^1.3.3", + "semver": "^5.3.0" + } + }, + "merge-trees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", + "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "workerpool": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", + "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", + "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~6.1.0" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", + "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "ensure-posix-path": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz", + "integrity": "sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==", + "dev": true + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", + "dev": true, + "requires": { + "string-template": "~0.2.1", + "xtend": "~4.0.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", + "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "inquirer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "eslint-plugin-ember": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-ember/-/eslint-plugin-ember-6.7.1.tgz", + "integrity": "sha512-5qzd/5zjXRVlyWpDcRRaIdl6yAHLrUCUyNE71pnk3Egs/erqQazyQHjKKToIWjTA1a7ba/WEC72tJ8HbLsevhA==", + "dev": true, + "requires": { + "ember-rfc176-data": "^0.3.9", + "snake-case": "^2.1.0" + } + }, + "eslint-plugin-es": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", + "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", + "dev": true, + "requires": { + "eslint-utils": "^1.3.0", + "regexpp": "^2.0.1" + } + }, + "eslint-plugin-node": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", + "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", + "dev": true, + "requires": { + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^5.0.2", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "semver": "^5.5.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz", + "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.0.tgz", + "integrity": "sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true + }, + "events-to-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", + "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "exists-sync": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/exists-sync/-/exists-sync-0.0.4.tgz", + "integrity": "sha1-l0TCxCjMA7AQYNtFTUsS8O88iHk=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + }, + "dependencies": { + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fake-xml-http-request": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fake-xml-http-request/-/fake-xml-http-request-2.0.0.tgz", + "integrity": "sha512-UjNnynb6eLAB0lyh2PlTEkjRJORnNsVF1hbzU+PQv89/cyBV9GDRCy7JAcLQgeCLYT+3kaumWWZKEJvbaK74eQ==", + "dev": true + }, + "faker": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/faker/-/faker-3.1.0.tgz", + "integrity": "sha1-D5CPr05uwCUk5UpX5DLFwBPgjJ8=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fast-ordered-set": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-ordered-set/-/fast-ordered-set-1.0.3.tgz", + "integrity": "sha1-P7s2Y097555PftvbSjV97iXRhOs=", + "dev": true, + "requires": { + "blank-object": "^1.0.1" + } + }, + "fast-sourcemap-concat": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/fast-sourcemap-concat/-/fast-sourcemap-concat-1.4.0.tgz", + "integrity": "sha512-x90Wlx/2C83lfyg7h4oguTZN4MyaVfaiUSJQNpU+YEA0Odf9u659Opo44b0LfoVg9G/bOE++GdID/dkyja+XcA==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "fs-extra": "^5.0.0", + "heimdalljs-logger": "^0.1.9", + "memory-streams": "^0.1.3", + "mkdirp": "^0.5.0", + "source-map": "^0.4.2", + "source-map-url": "^0.3.0", + "sourcemap-validator": "^1.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "source-map-url": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", + "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "fastboot-transform": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fastboot-transform/-/fastboot-transform-0.1.3.tgz", + "integrity": "sha512-6otygPIJw1ARp1jJb+6KVO56iKBjhO+5x59RSC9qiZTbZRrv+HZAuP00KD3s+nWMvcFDemtdkugki9DNFTTwCQ==", + "dev": true, + "requires": { + "broccoli-stew": "^1.5.0", + "convert-source-map": "^1.5.1" + } + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "^2.0.0" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "filesize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-4.1.2.tgz", + "integrity": "sha512-iSWteWtfNcrWQTkQw8ble2bnonSl7YJImsn9OZKpE2E4IHhXI78eASpDYUljXZZdYj36QsEKjOs/CsiDqmKMJw==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "dev": true, + "requires": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "find-index": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-1.1.1.tgz", + "integrity": "sha512-XYKutXMrIK99YMUPf91KX5QVJoG31/OsgftD6YoTPAObfQIxM4ziA9f0J1AsqKhJmo+IeaIPP0CFopTD4bdUBw==", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "find-yarn-workspace-root": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz", + "integrity": "sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==", + "dev": true, + "requires": { + "fs-extra": "^4.0.3", + "micromatch": "^3.1.4" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "fireworm": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/fireworm/-/fireworm-0.7.1.tgz", + "integrity": "sha1-zPIPeUHxCIg/zduZOD2+bhhhx1g=", + "dev": true, + "requires": { + "async": "~0.2.9", + "is-type": "0.0.1", + "lodash.debounce": "^3.1.1", + "lodash.flatten": "^3.0.2", + "minimatch": "^3.0.2" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + }, + "fixturify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fixturify/-/fixturify-1.2.0.tgz", + "integrity": "sha512-b5CMQmBZKsGR6HGqdSrLOGYGHIqrR0CUrcGU/lDL0mYy+DtGm5cnb61Z0UiIUqMVZIoV0CbN+u9/Gwjj+ICg0A==", + "dev": true, + "requires": { + "@types/fs-extra": "^5.0.5", + "@types/minimatch": "^3.0.3", + "@types/rimraf": "^2.0.2", + "fs-extra": "^7.0.1", + "matcher-collection": "^2.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "matcher-collection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-2.0.0.tgz", + "integrity": "sha512-wSi4BgQGTFfBN5J+pIaS78rEKk4qIkjrw+NfJYdHsd2cRVIQsbDi3BZtNAXTFA2WHvlbS9kLGtTjv3cPJKuRSw==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "minimatch": "^3.0.2" + } + } + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "dev": true, + "requires": { + "debug": "^3.2.6" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-tree-diff": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-0.5.9.tgz", + "integrity": "sha512-872G8ax0kHh01m9n/2KDzgYwouKza0Ad9iFltBpNykvROvf2AGtoOzPJgGx125aolGPER3JuC7uZFrQ7bG1AZw==", + "dev": true, + "requires": { + "heimdalljs-logger": "^0.1.7", + "object-assign": "^4.1.0", + "path-posix": "^1.0.0", + "symlink-or-copy": "^1.1.8" + } + }, + "fs-updater": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-updater/-/fs-updater-1.0.4.tgz", + "integrity": "sha512-0pJX4mJF/qLsNEwTct8CdnnRdagfb+LmjRPJ8sO+nCnAZLW0cTmz4rTgU25n+RvTuWSITiLKrGVJceJPBIPlKg==", + "dev": true, + "requires": { + "can-symlink": "^1.0.0", + "clean-up-path": "^1.0.0", + "heimdalljs": "^0.2.5", + "heimdalljs-logger": "^0.1.9", + "rimraf": "^2.6.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", + "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", + "dev": true, + "optional": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-diff-apply": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/git-diff-apply/-/git-diff-apply-0.19.1.tgz", + "integrity": "sha512-cIV8vzH7Qpgji3ltFJFCR9r6IBvCo0ZGmt1aY8NvSVl4LtGwMQQqtxDnVUbSNZSLiBhpd6RcqXSh14YcUs2XKQ==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "fixturify": "^1.0.0", + "fs-extra": "^8.0.0", + "klaw": "^3.0.0", + "tmp": "0.1.0", + "uuid": "^3.1.0", + "yargs": "^13.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "dev": true, + "requires": { + "rimraf": "^2.6.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "git-repo-info": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/git-repo-info/-/git-repo-info-2.1.0.tgz", + "integrity": "sha512-+kigfDB7j3W80f74BoOUX+lKOmf4pR3/i2Ww6baKTCPe2hD4FRdjhV3s4P5Dy0Tak1uY1891QhKoYNtnyX2VvA==", + "dev": true + }, + "git-repo-version": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/git-repo-version/-/git-repo-version-1.0.2.tgz", + "integrity": "sha512-OPtwtHx9E8/rTMcWT+BU6GNj6Kq/O40bHJZaZAGy+pN2RXGmeKcfr0ix4M+SQuFY8vl5L/wfPSGOAtvUT/e3Qg==", + "dev": true, + "requires": { + "git-repo-info": "^1.4.1" + }, + "dependencies": { + "git-repo-info": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/git-repo-info/-/git-repo-info-1.4.1.tgz", + "integrity": "sha1-KgcoIyVKr2L88HZgB9e2ZRvUGUM=", + "dev": true + } + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=", + "dev": true + }, + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash-for-dep": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hash-for-dep/-/hash-for-dep-1.5.1.tgz", + "integrity": "sha512-/dQ/A2cl7FBPI2pO0CANkvuuVi/IFS5oTyJ0PsOb6jW6WbVW1js5qJXMJTNbWHXBIPdFTWFbabjB+mE0d+gelw==", + "dev": true, + "requires": { + "broccoli-kitchen-sink-helpers": "^0.3.1", + "heimdalljs": "^0.2.3", + "heimdalljs-logger": "^0.1.7", + "path-root": "^0.1.1", + "resolve": "^1.10.0", + "resolve-package-path": "^1.0.11" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "heimdalljs": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.6.tgz", + "integrity": "sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==", + "dev": true, + "requires": { + "rsvp": "~3.2.1" + }, + "dependencies": { + "rsvp": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", + "integrity": "sha1-B8tKXfJa3Z6Cbrxn3Mn9idsn2Eo=", + "dev": true + } + } + }, + "heimdalljs-fs-monitor": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/heimdalljs-fs-monitor/-/heimdalljs-fs-monitor-0.2.2.tgz", + "integrity": "sha512-R/VhkWs8tm4x+ekLIp+oieR8b3xYK0oFDumEraGnwNMixpiKwO3+Ms5MJzDP5W5Ui1+H/57nGW5L3lHbxi20GA==", + "dev": true, + "requires": { + "heimdalljs": "^0.2.3", + "heimdalljs-logger": "^0.1.7" + } + }, + "heimdalljs-graph": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/heimdalljs-graph/-/heimdalljs-graph-0.3.5.tgz", + "integrity": "sha512-szOy9WZUc7eUInEBQEsoa1G2d+oYHrn6ndZPf76eh8A9ID1zWUCEEsxP3F+CvQx9+EDrg1srdyLUmfVAr8EB4g==", + "dev": true + }, + "heimdalljs-logger": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz", + "integrity": "sha512-pO++cJbhIufVI/fmB/u2Yty3KJD0TqNPecehFae0/eps0hkZ3b4Zc/PezUMOpYuHFQbA7FxHZxa305EhmjLj4g==", + "dev": true, + "requires": { + "debug": "^2.2.0", + "heimdalljs": "^0.2.6" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=" + }, + "include-path-searcher": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/include-path-searcher/-/include-path-searcher-0.1.0.tgz", + "integrity": "sha1-wM8t36Fk+y6uB7x8pDp/GRy0170=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inline-source-map-comment": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/inline-source-map-comment/-/inline-source-map-comment-1.0.5.tgz", + "integrity": "sha1-UKikTCp5DfrEQbXJTszVRiY1+vY=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "get-stdin": "^4.0.1", + "minimist": "^1.1.1", + "sum-up": "^1.0.1", + "xtend": "^4.0.0" + } + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-git-url": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-git-url/-/is-git-url-1.0.0.tgz", + "integrity": "sha1-U/aEzRQyhbUsMkS05vKCU1J69ms=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-3.0.0.tgz", + "integrity": "sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-reference": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.3.tgz", + "integrity": "sha512-W1iHHv/oyBb2pPxkBxtaewxa1BC58Pn5J0hogyCdefwUIvb6R+TGbAcIa4qPNYLqLhb3EnOgUf2MQkkF76BcKw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39" + } + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-type": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/is-type/-/is-type-0.0.1.tgz", + "integrity": "sha1-9lHYXDZdRJVdFKUdjXBh8/a0d5w=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istextorbinary": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.1.0.tgz", + "integrity": "sha1-2+0qb1G+L3R1to+JRlgRFBt1iHQ=", + "dev": true, + "requires": { + "binaryextensions": "1 || 2", + "editions": "^1.1.1", + "textextensions": "1 || 2" + } + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "jquery": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==", + "dev": true + }, + "js-base64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==" + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-reporters": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/js-reporters/-/js-reporters-1.2.1.tgz", + "integrity": "sha1-+IxgjjJKM3OpW8xFrTBeXJecRZs=", + "dev": true + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsdom": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-12.2.0.tgz", + "integrity": "sha512-QPOggIJ8fquWPLaYYMoh+zqUmdphDtu1ju0QGTitZT1Yd8I5qenPpXM1etzUegu3MjVp8XPzgZxdn8Yj7e40ig==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^6.0.2", + "acorn-globals": "^4.3.0", + "array-equal": "^1.0.0", + "cssom": "^0.3.4", + "cssstyle": "^1.1.1", + "data-urls": "^1.0.1", + "domexception": "^1.0.1", + "escodegen": "^1.11.0", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.0.9", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "saxes": "^3.1.3", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.4.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0", + "ws": "^6.1.0", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "leek": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/leek/-/leek-0.0.24.tgz", + "integrity": "sha1-5ADlfw5g2O8r1NBo3EKKVDRdvNo=", + "dev": true, + "requires": { + "debug": "^2.1.0", + "lodash.assign": "^3.2.0", + "rsvp": "^3.0.21" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "loader.js": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/loader.js/-/loader.js-4.7.0.tgz", + "integrity": "sha512-9M2KvGT6duzGMgkOcTkWb+PR/Q2Oe54df/tLgHGVmFpAmtqJ553xJh6N63iFYI2yjo2PeJXbS5skHi/QpJq4vA==", + "dev": true + }, + "locate-character": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-2.0.5.tgz", + "integrity": "sha512-n2GmejDXtOPBAZdIiEFy5dJ5N38xBCXLNOtw2WpB9kGh6pnrEuKlwYI+Tkpofc4wDtVXHtoAOJaMRlYG/oYaxg==", + "dev": true + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._baseflatten": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz", + "integrity": "sha1-B3D/gBMa9uNPO1EXlqe6UhTmX/c=", + "dev": true, + "requires": { + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._createassigner": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "dev": true, + "requires": { + "lodash._bindcallback": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash.restparam": "^3.0.0" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.assign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "dev": true, + "requires": { + "lodash._baseassign": "^3.0.0", + "lodash._createassigner": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", + "dev": true + }, + "lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-3.1.1.tgz", + "integrity": "sha1-gSIRw3ipTMKdWqTjNGzwv846ffU=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "lodash.find": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", + "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=", + "dev": true + }, + "lodash.flatten": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-3.0.2.tgz", + "integrity": "sha1-3hz1d1j49EeTGdNcPpzGDEUBk4w=", + "dev": true, + "requires": { + "lodash._baseflatten": "^3.0.0", + "lodash._isiterateecall": "^3.0.0" + } + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "magic-string": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.24.1.tgz", + "integrity": "sha512-YBfNxbJiixMzxW40XqJEIldzHyh5f7CZKalo1uZffevyrPEX8Qgo9s0dmcORLHdV47UyvJg8/zD+6hQG3qvJrA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.1" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-it": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", + "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + }, + "markdown-it-terminal": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/markdown-it-terminal/-/markdown-it-terminal-0.1.0.tgz", + "integrity": "sha1-VFq9jdAcPWI1O/zqcdtYC1HSK9k=", + "dev": true, + "requires": { + "ansi-styles": "^3.0.0", + "cardinal": "^1.0.0", + "cli-table": "^0.3.1", + "lodash.merge": "^4.6.0", + "markdown-it": "^8.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "matcher-collection": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.1.2.tgz", + "integrity": "sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g==", + "dev": true, + "requires": { + "minimatch": "^3.0.2" + } + }, + "md5-hex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-2.0.0.tgz", + "integrity": "sha1-0FiOnxx0lUSS7NJKwKxs6ZfZLjM=", + "dev": true, + "requires": { + "md5-o-matic": "^0.1.1" + } + }, + "md5-o-matic": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", + "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "memory-streams": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/memory-streams/-/memory-streams-0.1.3.tgz", + "integrity": "sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA==", + "dev": true, + "requires": { + "readable-stream": "~1.0.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-package.json": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/merge-package.json/-/merge-package.json-3.0.2.tgz", + "integrity": "sha512-Aj8UmsAZ3z/Cn1xxU4ch2uVC1kqTLfWLliHwTI9GMAK8Eskz8WxyyDaBZCY4XXJSEUjwScKoSmiOG+DDx4NPUg==", + "dev": true, + "requires": { + "rfc6902-ordered": "^4.0.0", + "three-way-merger": "0.5.7" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge-trees": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-2.0.0.tgz", + "integrity": "sha512-5xBbmqYBalWqmhYm51XlohhkmVOua3VAUrrWh8t9iOkaLpS6ifqm/UVuUjQCeDVJ9Vx3g2l6ihfkbLSTeKsHbw==", + "dev": true, + "requires": { + "fs-updater": "^1.0.4", + "heimdalljs": "^0.2.5" + } + }, + "merge2": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", + "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mktemp": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/mktemp/-/mktemp-0.4.0.tgz", + "integrity": "sha1-bQUVYRyKjITkhKogABKbmOmB/ws=", + "dev": true + }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "dev": true, + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, + "mout": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mout/-/mout-1.1.0.tgz", + "integrity": "sha512-XsP0vf4As6BfqglxZqbqQ8SR6KQot2AgxvR0gG+WtUkf90vUXchMOZQtPf/Hml1rEffJupqL/tIrU6EYhsUQjw==", + "dev": true + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mustache": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.0.1.tgz", + "integrity": "sha512-jFI/4UVRsRYdUbuDTKT7KzfOp7FiD5WzYmmwNwXyUVypC0xjoTL78Fqc0jHUPIvvGD+6DQSPHIt1NE7D1ArsqA==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "git+https://github.com/nodejs/nan.git#008bc8b52bc2b125812ee9b8b8f60187c7a997f9", + "from": "git+https://github.com/nodejs/nan.git" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-ensure": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz", + "integrity": "sha1-7K52QVDemYYexcgQ/V0Jaxg5Mqc=" + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-modules-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/node-modules-path/-/node-modules-path-1.0.2.tgz", + "integrity": "sha512-6Gbjq+d7uhkO7epaKi5DNgUJn7H0gEyA4Jg0Mo1uQOi3Rk50G83LtmhhFyw0LxnAFhtlspkiiw52ISP13qzcBg==", + "dev": true + }, + "node-notifier": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", + "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-releases": { + "version": "1.1.26", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.26.tgz", + "integrity": "sha512-fZPsuhhUHMTlfkhDLGtfY80DSJTjOcx+qD1j5pqPkuhUHVS7xHZIg9EE4DHK8O3f0zTxXHX5VIkDG8pu98/wfQ==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "node-sass": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", + "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash": "^4.17.11", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + } + }, + "node-watch": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.6.0.tgz", + "integrity": "sha512-XAgTL05z75ptd7JSVejH1a2Dm1zmXYhuDr9l230Qk6Z7/7GPcnAs/UyJJ4ggsXSvWil8iOzwQLW0zuGUvHpG8g==", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, + "npm": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.10.2.tgz", + "integrity": "sha512-B6n5dgmsl1fpBYhor2OTEn9Md0r63/FpQocDn4WNT4gIQRQZLql9g+mk8s3j9qZD370kUTzwDaOBSmDdNGK3NA==", + "requires": { + "JSONStream": "^1.3.5", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "^2.0.0", + "archy": "~1.0.0", + "bin-links": "^1.1.2", + "bluebird": "^3.5.5", + "byte-size": "^5.0.1", + "cacache": "^12.0.2", + "call-limit": "^1.1.1", + "chownr": "^1.1.2", + "ci-info": "^2.0.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.5.1", + "cmd-shim": "~2.0.2", + "columnify": "~1.5.4", + "config-chain": "^1.1.12", + "debuglog": "*", + "detect-indent": "~5.0.0", + "detect-newline": "^2.1.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "gentle-fs": "^2.0.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "has-unicode": "~2.0.1", + "hosted-git-info": "^2.7.1", + "iferr": "^1.0.2", + "imurmurhash": "*", + "infer-owner": "^1.0.4", + "inflight": "~1.0.6", + "inherits": "^2.0.4", + "ini": "^1.3.5", + "init-package-json": "^1.10.3", + "is-cidr": "^3.0.0", + "json-parse-better-errors": "^1.0.2", + "lazy-property": "~1.0.0", + "libcipm": "^4.0.0", + "libnpm": "^3.0.1", + "libnpmaccess": "^3.0.2", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "libnpx": "^10.2.0", + "lock-verify": "^2.1.0", + "lockfile": "^1.0.4", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "^5.1.1", + "meant": "~1.0.1", + "mississippi": "^3.0.0", + "mkdirp": "~0.5.1", + "move-concurrently": "^1.0.1", + "node-gyp": "^5.0.3", + "nopt": "~4.0.1", + "normalize-package-data": "^2.5.0", + "npm-audit-report": "^1.3.2", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "~3.0.0", + "npm-lifecycle": "^3.1.2", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.4.4", + "npm-pick-manifest": "^2.2.3", + "npm-profile": "^4.0.2", + "npm-registry-fetch": "^4.0.0", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "^1.5.1", + "osenv": "^0.1.5", + "pacote": "^9.5.4", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "^0.12.0", + "query-string": "^6.8.1", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "~1.0.1", + "read-installed": "~4.0.3", + "read-package-json": "^2.0.13", + "read-package-tree": "^5.3.1", + "readable-stream": "^3.4.0", + "readdir-scoped-modules": "^1.1.0", + "request": "^2.88.0", + "retry": "^0.12.0", + "rimraf": "^2.6.3", + "safe-buffer": "^5.1.2", + "semver": "^5.7.0", + "sha": "^3.0.0", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "^6.0.1", + "stringify-package": "^1.0.0", + "tar": "^4.4.10", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "^1.1.1", + "unpipe": "~1.0.0", + "update-notifier": "^2.5.0", + "uuid": "^3.3.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^1.3.1", + "worker-farm": "^1.7.0", + "write-file-atomic": "^2.4.3" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + }, + "ansistyles": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz", + "integrity": "sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=" + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bin-links": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-1.1.2.tgz", + "integrity": "sha512-8eEHVgYP03nILphilltWjeIjMbKyJo3wvp9K816pHbhP301ismzw15mxAAEVQ/USUwcP++1uNrbERbp8lOA6Fg==", + "requires": { + "bluebird": "^3.5.0", + "cmd-shim": "^2.0.2", + "gentle-fs": "^2.0.0", + "graceful-fs": "^4.1.11", + "write-file-atomic": "^2.3.0" + } + }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" + }, + "byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=" + }, + "byte-size": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-5.0.1.tgz", + "integrity": "sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==" + }, + "cacache": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz", + "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==", + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "call-limit": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/call-limit/-/call-limit-1.1.1.tgz", + "integrity": "sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ==" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cidr-regex": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-2.0.10.tgz", + "integrity": "sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q==", + "requires": { + "ip-regex": "^2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, + "cli-columns": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-3.1.2.tgz", + "integrity": "sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4=", + "requires": { + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "cmd-shim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz", + "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=", + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "optional": true + }, + "columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=" + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=" + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", + "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "duplexify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", + "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=" + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "env-paths": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=" + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + }, + "find-npm-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz", + "integrity": "sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA==" + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-minipass": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "requires": { + "minipass": "^2.2.1" + } + }, + "fs-vacuum": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.10.tgz", + "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=", + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==" + }, + "gentle-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/gentle-fs/-/gentle-fs-2.0.1.tgz", + "integrity": "sha512-cEng5+3fuARewXktTEGbwsktcldA+YsnUEaXZwcK/3pjSE1X9ObnTs+/8rYf8s+RnIcQm2D5x3rwpN7Zom8Bew==", + "requires": { + "aproba": "^1.1.2", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + } + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + } + } + }, + "graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz", + "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-1.0.2.tgz", + "integrity": "sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg==" + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "init-package-json": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz", + "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "requires": { + "ci-info": "^1.0.0" + }, + "dependencies": { + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + } + } + }, + "is-cidr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-3.0.0.tgz", + "integrity": "sha512-8Xnnbjsb0x462VoYiGlhEi+drY8SFwrHiSYuzc/CEwco55vkehTaxAyIjEdpi3EMvLPPJAJi9FlzP+h+03gp0Q==", + "requires": { + "cidr-regex": "^2.0.10" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazy-property/-/lazy-property-1.0.0.tgz", + "integrity": "sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=" + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "libcipm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/libcipm/-/libcipm-4.0.0.tgz", + "integrity": "sha512-5IIamvUIqWYjfNscYdirKisXyaTMw7Mf7yuGrjHH2isz7xBZDCUOIdujZxNk2g6lBBs8AGxYW6lHpNnnt92bww==", + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "graceful-fs": "^4.1.11", + "ini": "^1.3.5", + "lock-verify": "^2.0.2", + "mkdirp": "^0.5.1", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "pacote": "^9.1.0", + "read-package-json": "^2.0.13", + "rimraf": "^2.6.2", + "worker-farm": "^1.6.0" + } + }, + "libnpm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/libnpm/-/libnpm-3.0.1.tgz", + "integrity": "sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ==", + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.3", + "find-npm-prefix": "^1.0.2", + "libnpmaccess": "^3.0.2", + "libnpmconfig": "^1.2.1", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmpublish": "^1.1.2", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "lock-verify": "^2.0.2", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "npm-profile": "^4.0.2", + "npm-registry-fetch": "^4.0.0", + "npmlog": "^4.1.2", + "pacote": "^9.5.3", + "read-package-json": "^2.0.13", + "stringify-package": "^1.0.0" + } + }, + "libnpmaccess": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-3.0.2.tgz", + "integrity": "sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ==", + "requires": { + "aproba": "^2.0.0", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmconfig": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", + "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", + "requires": { + "figgy-pudding": "^3.5.1", + "find-up": "^3.0.0", + "ini": "^1.3.5" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + } + } + }, + "libnpmhook": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-5.0.3.tgz", + "integrity": "sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA==", + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmorg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-1.0.1.tgz", + "integrity": "sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww==", + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmpublish": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-1.1.2.tgz", + "integrity": "sha512-2yIwaXrhTTcF7bkJKIKmaCV9wZOALf/gsTDxVSu/Gu/6wiG3fA8ce8YKstiWKTxSFNC0R7isPUb6tXTVFZHt2g==", + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "lodash.clonedeep": "^4.5.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0", + "semver": "^5.5.1", + "ssri": "^6.0.1" + } + }, + "libnpmsearch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-2.0.2.tgz", + "integrity": "sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg==", + "requires": { + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmteam": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-1.0.2.tgz", + "integrity": "sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA==", + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpx": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/libnpx/-/libnpx-10.2.0.tgz", + "integrity": "sha512-X28coei8/XRCt15cYStbLBph+KGhFra4VQhRBPuH/HHMkC5dxM8v24RVgUsvODKCrUZ0eTgiTqJp6zbl0sskQQ==", + "requires": { + "dotenv": "^5.0.1", + "npm-package-arg": "^6.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.3.0", + "which": "^1.3.0", + "y18n": "^4.0.0", + "yargs": "^11.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lock-verify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lock-verify/-/lock-verify-2.1.0.tgz", + "integrity": "sha512-vcLpxnGvrqisKvLQ2C2v0/u7LVly17ak2YSgoK4PrdsYBXQIax19vhKiLfvKNFx7FRrpTnitrpzF/uuCMuorIg==", + "requires": { + "npm-package-arg": "^6.1.0", + "semver": "^5.4.1" + } + }, + "lockfile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash._baseindexof": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz", + "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=" + }, + "lodash._baseuniq": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz", + "integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=", + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz", + "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=" + }, + "lodash._createcache": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash._createcache/-/lodash._createcache-3.1.2.tgz", + "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=", + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._createset": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz", + "integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=" + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "lodash.without": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz", + "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "make-fetch-happen": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz", + "integrity": "sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA==", + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "meant": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.1.tgz", + "integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==" + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mime-db": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" + }, + "mime-types": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "requires": { + "mime-db": "~1.35.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "minipass": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz", + "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" + } + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "^2.2.1" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-gyp": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.0.3.tgz", + "integrity": "sha512-z/JdtkFGUm0QaQUusvloyYuGDub3nUbOo5de1Fz57cM++osBTvQatBUSTlF1k/w8vFHPxxXW6zxGvkxXSpaBkQ==", + "requires": { + "env-paths": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^4.4.8", + "which": "1" + }, + "dependencies": { + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + } + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "npm-audit-report": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-1.3.2.tgz", + "integrity": "sha512-abeqS5ONyXNaZJPGAf6TOUMNdSe1Y6cpc9MLBRn+CuUoYbfdca6AxOyXVlfIv9OgKX+cacblbG5w7A6ccwoTPw==", + "requires": { + "cli-table3": "^0.5.0", + "console-control-strings": "^1.1.0" + } + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" + }, + "npm-cache-filename": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz", + "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=" + }, + "npm-install-checks": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-3.0.0.tgz", + "integrity": "sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc=", + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-lifecycle": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.2.tgz", + "integrity": "sha512-nhfOcoTHrW1lJJlM2o77vTE2RWR4YOVyj7YzmY0y5itsMjEuoJHteio/ez0BliENEPsNxIUQgwhyEW9dShj3Ww==", + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz", + "integrity": "sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg==" + }, + "npm-package-arg": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", + "requires": { + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", + "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz", + "integrity": "sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==", + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-profile": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-4.0.2.tgz", + "integrity": "sha512-VRsC04pvRH+9cF+PoVh2nTmJjiG21yu59IHpsBpkxk+jaGAV8lxx96G4SDc0jOHAkfWLXbc6kIph3dGAuRnotQ==", + "requires": { + "aproba": "^1.1.2 || 2", + "figgy-pudding": "^3.4.1", + "npm-registry-fetch": "^4.0.0" + } + }, + "npm-registry-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz", + "integrity": "sha512-Jllq35Jag8dtv0M17ue74XtdQTyqKzuAYGiX9mAjOhkmNjib3bBUgK6mUY61+AHnXeSRobQkpY3/xIOS/omptw==", + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-1.0.0.tgz", + "integrity": "sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE=" + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pacote": { + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.4.tgz", + "integrity": "sha512-nWr0ari6E+apbdoN0hToTKZElO5h4y8DGFa2pyNA5GQIdcP0imC96bA0bbPw1gpeguVIiUgHHaAlq/6xfPp8Qw==", + "requires": { + "bluebird": "^3.5.3", + "cacache": "^12.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^2.2.3", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.8", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" + } + } + }, + "promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "protoduck": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "requires": { + "genfun": "^5.0.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "query-string": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.1.tgz", + "integrity": "sha512-g6y0Lbq10a5pPQpjlFuojfMfV1Pd2Jw9h75ypiYPPia3Gcq2rgkKiIwbkS6JxH7c5f5u/B/sB+d13PU+g1eu4Q==", + "requires": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "qw": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/qw/-/qw-1.0.1.tgz", + "integrity": "sha1-77/cdA+a0FQwRCassYNBLMi5ltQ=" + }, + "rc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz", + "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=", + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", + "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + } + }, + "read-package-json": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.13.tgz", + "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "^1.0.1" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "^1.1.1" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "sha": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sha/-/sha-3.0.0.tgz", + "integrity": "sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw==", + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, + "smart-buffer": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz", + "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==" + }, + "socks": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", + "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", + "requires": { + "ip": "^1.1.5", + "smart-buffer": "4.0.2" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "sorted-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-2.0.1.tgz", + "integrity": "sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=" + }, + "sorted-union-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz", + "integrity": "sha1-x3lMfgd4gAUv9xqNSi27Sppjisc=", + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-1.3.0.tgz", + "integrity": "sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0=", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-iterate": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stream-iterate/-/stream-iterate-1.2.0.tgz", + "integrity": "sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE=", + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-package": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.0.tgz", + "integrity": "sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g==" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", + "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "requires": { + "execa": "^0.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tiny-relative-date": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz", + "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" + }, + "umask": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", + "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util-extend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=" + }, + "util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "requires": { + "string-width": "^1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "requires": { + "string-width": "^2.1.1" + } + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + }, + "yargs": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "npm-git-info": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-git-info/-/npm-git-info-1.0.3.tgz", + "integrity": "sha1-qTPELsMh6A02RuDW6ESv6UYw4dU=", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwsapi": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true + }, + "p-defer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-2.1.0.tgz", + "integrity": "sha512-xMwL9id1bHn/UfNGFEMFwlULOprQUEOg6vhqSfr6oKxPFB0oSh0zhGq/9/tPSE+cyij2+RW6H8+0Ke4xsPdZ7Q==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "http-cache-semantics": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", + "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", + "dev": true + }, + "normalize-url": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", + "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-ms": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", + "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", + "dev": true + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-posix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz", + "integrity": "sha1-BrJhE/Vr6rBCVFojv6iAA8ysJg8=", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pdfjs-dist": { + "version": "2.1.266", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.1.266.tgz", + "integrity": "sha512-Jy7o1wE3NezPxozexSbq4ltuLT0Z21ew/qrEiAEeUZzHxMHGk4DUV1D7RuCXg5vJDvHmjX1YssN+we9QfRRgXQ==", + "requires": { + "node-ensure": "^0.0.0", + "worker-loader": "^2.0.0" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + } + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "popper.js": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", + "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==" + }, + "portfinder": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.21.tgz", + "integrity": "sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA==", + "dev": true, + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "pretender": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretender/-/pretender-2.1.1.tgz", + "integrity": "sha512-IkidsJzaroAanw3I43tKCFm2xCpurkQr9aPXv5/jpN+LfCwDaeI8rngVWtQZTx4qqbhc5zJspnLHJ4N/25KvDQ==", + "dev": true, + "requires": { + "@xg-wang/whatwg-fetch": "^3.0.0", + "fake-xml-http-request": "^2.0.0", + "route-recognizer": "^0.3.3" + } + }, + "pretty-ms": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-3.2.0.tgz", + "integrity": "sha512-ZypexbfVUGTFxb0v+m1bUyy92DHe5SyYlnyY0msyms5zd3RwyvNgyxZZsXXgoyzlxjx5MiqtXUdhUfvQbe0A2Q==", + "dev": true, + "requires": { + "parse-ms": "^1.0.0" + } + }, + "printf": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/printf/-/printf-0.5.2.tgz", + "integrity": "sha512-Hn0UuWqTRd94HiCJoiCNGZTnSyXJdIF3t4/4I293hezIzyH4pQ3ai4TlH/SmRCiMvR5aNMxSYWshjQWWW6J8MQ==", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "process-relative-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-relative-require/-/process-relative-require-1.0.0.tgz", + "integrity": "sha1-FZDfz1uPKYO6U+OYRGtoJAtMxoo=", + "dev": true, + "requires": { + "node-modules-path": "^1.0.0" + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-map-series": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/promise-map-series/-/promise-map-series-0.2.3.tgz", + "integrity": "sha1-wtN3r8kyU/a9A9u3d1XriKsgqEc=", + "dev": true, + "requires": { + "rsvp": "^3.0.14" + } + }, + "promise.prototype.finally": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz", + "integrity": "sha512-7p/K2f6dI+dM8yjRQEGrTQs5hTQixUAdOGpMEA3+pVxpX5oHKRSKAXyLw9Q9HUWDTdwtoo39dSHGQtN90HcEwQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.9.0", + "function-bind": "^1.1.1" + } + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", + "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "quick-temp": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/quick-temp/-/quick-temp-0.1.8.tgz", + "integrity": "sha1-urAqJCq4+w3XWKPJd2sy+aXZRAg=", + "dev": true, + "requires": { + "mktemp": "~0.4.0", + "rimraf": "^2.5.4", + "underscore.string": "~3.3.4" + } + }, + "qunit": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.9.2.tgz", + "integrity": "sha512-wTOYHnioWHcx5wa85Wl15IE7D6zTZe2CQlsodS14yj7s2FZ3MviRnQluspBZsueIDEO7doiuzKlv05yfky1R7w==", + "dev": true, + "requires": { + "commander": "2.12.2", + "js-reporters": "1.2.1", + "minimatch": "3.0.4", + "node-watch": "0.6.0", + "resolve": "1.9.0" + }, + "dependencies": { + "commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", + "dev": true + }, + "resolve": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", + "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "qunit-dom": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/qunit-dom/-/qunit-dom-0.8.5.tgz", + "integrity": "sha512-I4GSy22ESUkoZYDSYsqFJoMvqhpmgd2iCYlrN7aWLEOdmumUkao3qz24/qVNZd1PAnoOQA78FefzNPRHePFx1A==", + "dev": true, + "requires": { + "broccoli-funnel": "^2.0.2", + "broccoli-merge-trees": "^3.0.1" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.1.tgz", + "integrity": "sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "redeyed": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz", + "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=", + "dev": true, + "requires": { + "esprima": "~3.0.0" + }, + "dependencies": { + "esprima": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.0.0.tgz", + "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k=", + "dev": true + } + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "dev": true, + "requires": { + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp-tree": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz", + "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "regexpu-core": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", + "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.0.2", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "registry-auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.0.0.tgz", + "integrity": "sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw==", + "dev": true, + "requires": { + "rc": "^1.2.8", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "dev": true, + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "reselect": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", + "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=", + "dev": true + }, + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-package-path": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/resolve-package-path/-/resolve-package-path-1.2.7.tgz", + "integrity": "sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q==", + "dev": true, + "requires": { + "path-root": "^0.1.1", + "resolve": "^1.10.0" + } + }, + "resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "dev": true, + "requires": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rfc6902": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/rfc6902/-/rfc6902-3.0.4.tgz", + "integrity": "sha512-OnzreaZXrwT5w2ikKXWr5QcuI7NZpL+J3hIkAwozjOnKVUL7fPsB8Vcmu8YBiiou1/r3V0Jc0T1uQDyfAPvLzA==", + "dev": true + }, + "rfc6902-ordered": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rfc6902-ordered/-/rfc6902-ordered-4.0.0.tgz", + "integrity": "sha512-uGpjTewv2UxexoQPtYDpAZKt3WX/ujxkw3TqJAZOUu3WkwCNsu67Dlk+KPn/RY851+U3PvSTNOKs58d9YBubeQ==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "rfc6902": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rollup": { + "version": "0.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.57.1.tgz", + "integrity": "sha512-I18GBqP0qJoJC1K1osYjreqA8VAKovxuI3I81RSk0Dmr4TgloI0tAULjZaox8OsJ+n7XRrhH6i0G2By/pj1LCA==", + "dev": true, + "requires": { + "@types/acorn": "^4.0.3", + "acorn": "^5.5.3", + "acorn-dynamic-import": "^3.0.0", + "date-time": "^2.1.0", + "is-reference": "^1.1.0", + "locate-character": "^2.0.5", + "pretty-ms": "^3.1.0", + "require-relative": "^0.8.7", + "rollup-pluginutils": "^2.0.1", + "signal-exit": "^3.0.2", + "sourcemap-codec": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + } + } + }, + "rollup-pluginutils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "route-recognizer": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/route-recognizer/-/route-recognizer-0.3.4.tgz", + "integrity": "sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==", + "dev": true + }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "*" + } + }, + "rxjs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "sass": { + "version": "1.22.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.22.9.tgz", + "integrity": "sha512-FzU1X2V8DlnqabrL4u7OBwD2vcOzNMongEJEx3xMEhWY/v26FFR3aG0hyeu2T965sfR0E9ufJwmG+Qjz78vFPQ==", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + } + }, + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "dev": true, + "requires": { + "xmlchars": "^2.1.1" + } + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", + "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", + "dev": true + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "silent-error": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.1.tgz", + "integrity": "sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw==", + "dev": true, + "requires": { + "debug": "^2.2.0" + } + }, + "simple-html-tokenizer": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.5.8.tgz", + "integrity": "sha512-0Sq4FvLlQEQODVA6PH2MIrc7tzYO0KT2HzzwvaVLYClWgIsuvaNUOrhrAvTi1pZHrcq7GDB4WiI3ukjqBMxcGQ==", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, + "snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", + "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", + "dev": true, + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.3.1", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.2.0", + "socket.io-parser": "~3.3.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.3.1", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-object-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.2.tgz", + "integrity": "sha1-06bEjcKsl+a8lDZ2luA/bQnTeVI=", + "dev": true + }, + "sort-package-json": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-1.22.1.tgz", + "integrity": "sha512-uVINQraFQvnlzNHFnQOT4MYy0qonIEzKwhrI2yrTiQjNo5QF4h3ffrnCk7a95QAwoK/RdkO/w8W9tJIcaOWC7g==", + "dev": true, + "requires": { + "detect-indent": "^5.0.0", + "sort-object-keys": "^1.1.2" + }, + "dependencies": { + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz", + "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==", + "dev": true + }, + "sourcemap-validator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sourcemap-validator/-/sourcemap-validator-1.1.1.tgz", + "integrity": "sha512-pq6y03Vs6HUaKo9bE0aLoksAcpeOo9HZd7I8pI6O480W/zxNZ9U32GfzgtPP0Pgc/K1JHna569nAbOk3X8/Qtw==", + "dev": true, + "requires": { + "jsesc": "~0.3.x", + "lodash.foreach": "^4.5.0", + "lodash.template": "^4.5.0", + "source-map": "~0.1.x" + }, + "dependencies": { + "jsesc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.3.0.tgz", + "integrity": "sha1-G/XuY7RTn+LibQwemcJAuXpFeXI=", + "dev": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "spawn-args": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/spawn-args/-/spawn-args-0.2.0.tgz", + "integrity": "sha1-+30L0dcP1DFr2ePew4nmX51jYbs=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "sri-toolbox": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sri-toolbox/-/sri-toolbox-0.2.0.tgz", + "integrity": "sha1-p/6lw/3lXmdc8cjAbz67XCk1g14=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stagehand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stagehand/-/stagehand-1.0.0.tgz", + "integrity": "sha512-zrXl0QixAtSHFyN1iv04xOBgplbT4HgC8T7g+q8ESZbDNi5uZbMtxLukFVXPJ5Nl7zCYvYcrT3Mj24WYCH93hw==", + "dev": true, + "requires": { + "debug": "^4.1.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "styled_string": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/styled_string/-/styled_string-0.0.1.tgz", + "integrity": "sha1-0ieCvYEpVFm8Tx3xjEutjpTdEko=", + "dev": true + }, + "sum-up": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", + "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "symlink-or-copy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz", + "integrity": "sha512-W31+GLiBmU/ZR02Ii0mVZICuNEN9daZ63xZMPDsYgPgNjMtg+atqLEGI7PPI936jYSQZxoLb/63xos8Adrx4Eg==", + "dev": true + }, + "sync-disk-cache": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/sync-disk-cache/-/sync-disk-cache-1.3.3.tgz", + "integrity": "sha512-Kp7DFemXDPRUbFW856CKamtX7bJuThZPa2dwnK2RfNqMew7Ah8xDc52SdooNlfN8oydDdDHlBPLsXTrtmA7HKw==", + "dev": true, + "requires": { + "debug": "^2.1.3", + "heimdalljs": "^0.2.3", + "mkdirp": "^0.5.0", + "rimraf": "^2.2.8", + "username-sync": "^1.0.2" + } + }, + "table": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.5.tgz", + "integrity": "sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tap-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-7.0.0.tgz", + "integrity": "sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==", + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "js-yaml": "^3.2.7", + "minipass": "^2.2.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "temp": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz", + "integrity": "sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==", + "dev": true, + "requires": { + "rimraf": "~2.6.2" + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } + }, + "terser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.2.tgz", + "integrity": "sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "testem": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/testem/-/testem-2.17.0.tgz", + "integrity": "sha512-PLkIlT523w5rTJPWwR4TL1EiAEa941ECV7d4pMqsB0YdnH+sCTz0loWMKCUSdhR+VijveAZ6anE/JHehE7KqMQ==", + "dev": true, + "requires": { + "backbone": "^1.1.2", + "bluebird": "^3.4.6", + "charm": "^1.0.0", + "commander": "^2.6.0", + "compression": "^1.7.4", + "consolidate": "^0.15.1", + "execa": "^1.0.0", + "express": "^4.10.7", + "fireworm": "^0.7.0", + "glob": "^7.0.4", + "http-proxy": "^1.13.1", + "js-yaml": "^3.2.5", + "lodash.assignin": "^4.1.0", + "lodash.castarray": "^4.4.0", + "lodash.clonedeep": "^4.4.1", + "lodash.find": "^4.5.1", + "lodash.uniqby": "^4.7.0", + "mkdirp": "^0.5.1", + "mustache": "^3.0.0", + "node-notifier": "^5.0.1", + "npmlog": "^4.0.0", + "printf": "^0.5.1", + "rimraf": "^2.4.4", + "socket.io": "^2.1.0", + "spawn-args": "^0.2.0", + "styled_string": "0.0.1", + "tap-parser": "^7.0.0", + "tmp": "0.0.33", + "xmldom": "^0.1.19" + }, + "dependencies": { + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "textextensions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.5.0.tgz", + "integrity": "sha512-1IkVr355eHcomgK7fgj1Xsokturx6L5S2JRT5WcRdA6v5shk9sxWuO/w/VbpQexwkXJMQIa/j1dBi3oo7+HhcA==", + "dev": true + }, + "three-way-merger": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/three-way-merger/-/three-way-merger-0.5.7.tgz", + "integrity": "sha512-aD2nvGowCgJxoH49Izou5uR4PLCuH2yiw6+BJPg0H7RCLzpLy/4J9onM9sPXetmsq/AVfZ8fEyf8lbGKxKPrcA==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + }, + "time-zone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", + "integrity": "sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tiny-lr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "dev": true, + "requires": { + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "tmp": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", + "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "tree-sync": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/tree-sync/-/tree-sync-1.4.0.tgz", + "integrity": "sha512-YvYllqh3qrR5TAYZZTXdspnIhlKAYezPYw11ntmweoceu4VK+keN356phHRIIo1d+RDmLpHZrUlmxga2gc9kSQ==", + "dev": true, + "requires": { + "debug": "^2.2.0", + "fs-tree-diff": "^0.5.6", + "mkdirp": "^0.5.1", + "quick-temp": "^0.1.5", + "walk-sync": "^0.3.3" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "requires": { + "glob": "^7.1.2" + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript-memoize": { + "version": "1.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.0.0-alpha.3.tgz", + "integrity": "sha1-aZpUFfiGaUqNbi5UUbwoo5prwvk=", + "dev": true, + "requires": { + "core-js": "2.4.1" + }, + "dependencies": { + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", + "dev": true + } + } + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "dev": true + }, + "underscore.string": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "dev": true, + "requires": { + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "upath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "dev": true + }, + "update-notifier": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-3.0.1.tgz", + "integrity": "sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ==", + "dev": true, + "requires": { + "boxen": "^3.0.0", + "chalk": "^2.0.1", + "configstore": "^4.0.0", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.1.0", + "is-npm": "^3.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "username-sync": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/username-sync/-/username-sync-1.0.2.tgz", + "integrity": "sha512-ayNkOJdoNSGNDBE46Nkc+l6IXmeugbzahZLSMkwvgRWv5y5ZqNY2IrzcgmkR4z32sj1W3tM3TuTUMqkqBzO+RA==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "walk-sync": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.4.tgz", + "integrity": "sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig==", + "dev": true, + "requires": { + "ensure-posix-path": "^1.0.0", + "matcher-collection": "^1.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "watch-detector": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/watch-detector/-/watch-detector-0.1.0.tgz", + "integrity": "sha512-vfzMMfpjQc88xjETwl2HuE6PjEuxCBeyC4bQmqrHrofdfYWi/4mEJklYbNgSzpqM9PxubsiPIrE5SZ1FDyiQ2w==", + "dev": true, + "requires": { + "heimdalljs-logger": "^0.1.9", + "quick-temp": "^0.1.8", + "rsvp": "^4.7.0", + "semver": "^5.4.1", + "silent-error": "^1.1.0" + }, + "dependencies": { + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + } + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz", + "integrity": "sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/wasm-edit": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + } + } + }, + "webpack-sources": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.1.tgz", + "integrity": "sha512-XSz38193PTo/1csJabKaV4b53uRVotlMgqJXm3s3eje0Bu6gQTxYDqpD38CmQfDBA+gN+QqaGjasuC8I/7eW3Q==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", + "dev": true + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "worker-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-2.0.0.tgz", + "integrity": "sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw==", + "requires": { + "loader-utils": "^1.0.0", + "schema-utils": "^0.4.0" + } + }, + "workerpool": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-3.1.2.tgz", + "integrity": "sha512-WJFA0dGqIK7qj7xPTqciWBH5DlJQzoPjsANvc3Y4hNB0SScT+Emjvt0jPPkDBUjBNngX1q9hHgt1Gfwytu6pug==", + "dev": true, + "requires": { + "@babel/core": "^7.3.4", + "object-assign": "4.1.1", + "rsvp": "^4.8.4" + }, + "dependencies": { + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + } + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlchars": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.1.1.tgz", + "integrity": "sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w==", + "dev": true + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yam": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yam/-/yam-1.0.0.tgz", + "integrity": "sha512-Hv9xxHtsJ9228wNhk03xnlDReUuWVvHwM4rIbjdAXYvHLs17xjuyF50N6XXFMN6N0omBaqgOok/MCK3At9fTAg==", + "dev": true, + "requires": { + "fs-extra": "^4.0.2", + "lodash.merge": "^4.6.0" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "requires": { + "camelcase": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/model/auth/cas.go b/model/auth/cas.go new file mode 100644 index 00000000..91391e45 --- /dev/null +++ b/model/auth/cas.go @@ -0,0 +1,13 @@ +package auth + +// CASAuthRequest data received via CAS client library +type CASAuthRequest struct { + Ticket string `json:"ticket"` + Domain string `json:"domain"` +} + +// CASConfig server configuration +type CASConfig struct { + URL string `json:"url"` + RedirectURL string `json"redirectUrl"` +} diff --git a/server/routing/routes.go b/server/routing/routes.go index afaf8fd7..0af4a165 100644 --- a/server/routing/routes.go +++ b/server/routing/routes.go @@ -17,6 +17,7 @@ import ( "github.com/documize/community/core/env" "github.com/documize/community/domain/attachment" "github.com/documize/community/domain/auth" + "github.com/documize/community/domain/auth/cas" "github.com/documize/community/domain/auth/keycloak" "github.com/documize/community/domain/auth/ldap" "github.com/documize/community/domain/backup" @@ -66,6 +67,7 @@ func RegisterEndpoints(rt *env.Runtime, s *store.Store) { setting := setting.Handler{Runtime: rt, Store: s} category := category.Handler{Runtime: rt, Store: s} keycloak := keycloak.Handler{Runtime: rt, Store: s} + cas := cas.Handler{Runtime:rt, Store: s} template := template.Handler{Runtime: rt, Store: s, Indexer: indexer} document := document.Handler{Runtime: rt, Store: s, Indexer: indexer} attachment := attachment.Handler{Runtime: rt, Store: s, Indexer: indexer} @@ -93,6 +95,7 @@ func RegisterEndpoints(rt *env.Runtime, s *store.Store) { AddPublic(rt, "authenticate/keycloak", []string{"POST", "OPTIONS"}, nil, keycloak.Authenticate) AddPublic(rt, "authenticate/ldap", []string{"POST", "OPTIONS"}, nil, ldap.Authenticate) + AddPublic(rt, "authenticate/cas", []string{"POST", "OPTIONS"}, nil, cas.Authenticate) AddPublic(rt, "authenticate", []string{"POST", "OPTIONS"}, nil, auth.Login) AddPublic(rt, "validate", []string{"GET", "OPTIONS"}, nil, auth.ValidateToken) AddPublic(rt, "forgot", []string{"POST", "OPTIONS"}, nil, user.ForgotPassword) diff --git a/vendor/github.com/denisenkom/go-mssqldb/README.md b/vendor/github.com/denisenkom/go-mssqldb/README.md index 8d530ab4..41d9461a 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/README.md +++ b/vendor/github.com/denisenkom/go-mssqldb/README.md @@ -187,6 +187,19 @@ _, err := db.ExecContext(ctx, "theproc", &rs) log.Printf("status=%d", rs) ``` +or + +``` +var rs mssql.ReturnStatus +_, err := db.QueryContext(ctx, "theproc", &rs) +for rows.Next() { + err = rows.Scan(&val) +} +log.Printf("status=%d", rs) +``` + +Limitation: ReturnStatus cannot be retrieved using `QueryRow`. + ## Parameters The `sqlserver` driver uses normal MS SQL Server syntax and expects parameters in diff --git a/vendor/github.com/denisenkom/go-mssqldb/batch/batch.go b/vendor/github.com/denisenkom/go-mssqldb/batch/batch.go deleted file mode 100644 index 5b793dcb..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/batch/batch.go +++ /dev/null @@ -1,287 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// bach splits a single script containing multiple batches separated by -// a keyword into multiple scripts. -package batch - -import ( - "bytes" - "fmt" - "strconv" - "strings" - "unicode" -) - -// Split the provided SQL into multiple sql scripts based on a given -// separator, often "GO". It also allows escaping newlines with a -// backslash. -func Split(sql, separator string) []string { - if len(separator) == 0 || len(sql) < len(separator) { - return []string{sql} - } - l := &lexer{ - Sql: sql, - Sep: separator, - At: 0, - } - state := stateWhitespace - for state != nil { - state = state(l) - } - l.AddCurrent(1) - return l.Batch -} - -const debugPrintStateName = false - -func printStateName(name string, l *lexer) { - if debugPrintStateName { - fmt.Printf("state %s At=%d\n", name, l.At) - } -} - -func hasPrefixFold(s, sep string) bool { - if len(s) < len(sep) { - return false - } - return strings.EqualFold(s[:len(sep)], sep) -} - -type lexer struct { - Sql string - Sep string - At int - Start int - - Skip []int - - Batch []string -} - -func (l *lexer) Add(b string) { - if len(b) == 0 { - return - } - l.Batch = append(l.Batch, b) -} - -func (l *lexer) Next() bool { - l.At++ - return l.At < len(l.Sql) -} - -func (l *lexer) AddCurrent(count int64) bool { - if count < 0 { - count = 0 - } - if l.At >= len(l.Sql) { - l.At = len(l.Sql) - } - text := l.Sql[l.Start:l.At] - if len(l.Skip) > 0 { - buf := &bytes.Buffer{} - nextSkipIndex := 0 - nextSkip := l.Skip[nextSkipIndex] - for i, r := range text { - if i == nextSkip { - nextSkipIndex++ - if nextSkipIndex < len(l.Skip) { - nextSkip = l.Skip[nextSkipIndex] - } - continue - } - buf.WriteRune(r) - } - text = buf.String() - l.Skip = nil - } - // Limit the number of counts for sanity. - if count > 1000 { - count = 1000 - } - for i := int64(0); i < count; i++ { - l.Add(text) - } - l.At += len(l.Sep) - l.Start = l.At - return (l.At < len(l.Sql)) -} - -type stateFn func(*lexer) stateFn - -const ( - lineComment = "--" - leftComment = "/*" - rightComment = "*/" -) - -func stateSep(l *lexer) stateFn { - printStateName("sep", l) - if l.At+len(l.Sep) >= len(l.Sql) { - return nil - } - s := l.Sql[l.At+len(l.Sep):] - - parseNumberStart := -1 -loop: - for i, r := range s { - switch { - case r == '\n', r == '\r': - l.AddCurrent(1) - return stateWhitespace - case unicode.IsSpace(r): - case unicode.IsNumber(r): - parseNumberStart = i - break loop - } - } - if parseNumberStart < 0 { - return nil - } - - parseNumberCount := 0 -numLoop: - for i, r := range s[parseNumberStart:] { - switch { - case unicode.IsNumber(r): - parseNumberCount = i - default: - break numLoop - } - } - parseNumberEnd := parseNumberStart + parseNumberCount + 1 - - count, err := strconv.ParseInt(s[parseNumberStart:parseNumberEnd], 10, 64) - if err != nil { - return stateText - } - for _, r := range s[parseNumberEnd:] { - switch { - case r == '\n', r == '\r': - l.AddCurrent(count) - l.At += parseNumberEnd - l.Start = l.At - return stateWhitespace - case unicode.IsSpace(r): - default: - return stateText - } - } - - return nil -} - -func stateText(l *lexer) stateFn { - printStateName("text", l) - for { - ch := l.Sql[l.At] - - switch { - case strings.HasPrefix(l.Sql[l.At:], lineComment): - l.At += len(lineComment) - return stateLineComment - case strings.HasPrefix(l.Sql[l.At:], leftComment): - l.At += len(leftComment) - return stateMultiComment - case ch == '\'': - l.At += 1 - return stateString - case ch == '\r', ch == '\n': - l.At += 1 - return stateWhitespace - default: - if l.Next() == false { - return nil - } - } - } -} - -func stateWhitespace(l *lexer) stateFn { - printStateName("whitespace", l) - if l.At >= len(l.Sql) { - return nil - } - ch := l.Sql[l.At] - - switch { - case unicode.IsSpace(rune(ch)): - l.At += 1 - return stateWhitespace - case hasPrefixFold(l.Sql[l.At:], l.Sep): - return stateSep - default: - return stateText - } -} - -func stateLineComment(l *lexer) stateFn { - printStateName("line-comment", l) - for { - if l.At >= len(l.Sql) { - return nil - } - ch := l.Sql[l.At] - - switch { - case ch == '\r', ch == '\n': - l.At += 1 - return stateWhitespace - default: - if l.Next() == false { - return nil - } - } - } -} - -func stateMultiComment(l *lexer) stateFn { - printStateName("multi-line-comment", l) - for { - switch { - case strings.HasPrefix(l.Sql[l.At:], rightComment): - l.At += len(leftComment) - return stateWhitespace - default: - if l.Next() == false { - return nil - } - } - } -} - -func stateString(l *lexer) stateFn { - printStateName("string", l) - for { - if l.At >= len(l.Sql) { - return nil - } - ch := l.Sql[l.At] - chNext := rune(-1) - if l.At+1 < len(l.Sql) { - chNext = rune(l.Sql[l.At+1]) - } - - switch { - case ch == '\\' && (chNext == '\r' || chNext == '\n'): - next := 2 - l.Skip = append(l.Skip, l.At, l.At+1) - if chNext == '\r' && l.At+2 < len(l.Sql) && l.Sql[l.At+2] == '\n' { - l.Skip = append(l.Skip, l.At+2) - next = 3 - } - l.At += next - case ch == '\'' && chNext == '\'': - l.At += 2 - case ch == '\'' && chNext != '\'': - l.At += 1 - return stateWhitespace - default: - if l.Next() == false { - return nil - } - } - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/batch/batch_fuzz.go b/vendor/github.com/denisenkom/go-mssqldb/batch/batch_fuzz.go deleted file mode 100644 index 150818db..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/batch/batch_fuzz.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build gofuzz - -package batch - -func Fuzz(data []byte) int { - Split(string(data), "GO") - return 0 -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/batch/batch_test.go b/vendor/github.com/denisenkom/go-mssqldb/batch/batch_test.go deleted file mode 100644 index 51978283..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/batch/batch_test.go +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package batch - -import ( - "fmt" - "testing" -) - -func TestBatchSplit(t *testing.T) { - type testItem struct { - Sql string - Expect []string - } - - list := []testItem{ - testItem{ - Sql: `use DB -go -select 1 -go -select 2 -`, - Expect: []string{`use DB -`, ` -select 1 -`, ` -select 2 -`, - }, - }, - testItem{ - Sql: `go -use DB go -`, - Expect: []string{` -use DB go -`, - }, - }, - testItem{ - Sql: `select 'It''s go time' -go -select top 1 1`, - Expect: []string{`select 'It''s go time' -`, ` -select top 1 1`, - }, - }, - testItem{ - Sql: `select 1 /* go */ -go -select top 1 1`, - Expect: []string{`select 1 /* go */ -`, ` -select top 1 1`, - }, - }, - testItem{ - Sql: `select 1 -- go -go -select top 1 1`, - Expect: []string{`select 1 -- go -`, ` -select top 1 1`, - }, - }, - testItem{Sql: `"0'"`, Expect: []string{`"0'"`}}, - testItem{Sql: "0'", Expect: []string{"0'"}}, - testItem{Sql: "--", Expect: []string{"--"}}, - testItem{Sql: "GO", Expect: nil}, - testItem{Sql: "/*", Expect: []string{"/*"}}, - testItem{Sql: "gO\x01\x00O550655490663051008\n", Expect: []string{"\n"}}, - testItem{Sql: "select 1;\nGO 2\nselect 2;", Expect: []string{"select 1;\n", "select 1;\n", "\nselect 2;"}}, - testItem{Sql: "select 'hi\\\n-hello';", Expect: []string{"select 'hi-hello';"}}, - testItem{Sql: "select 'hi\\\r\n-hello';", Expect: []string{"select 'hi-hello';"}}, - testItem{Sql: "select 'hi\\\r-hello';", Expect: []string{"select 'hi-hello';"}}, - testItem{Sql: "select 'hi\\\n\nhello';", Expect: []string{"select 'hi\nhello';"}}, - } - - index := -1 - - for i := range list { - if index >= 0 && index != i { - continue - } - sqltext := list[i].Sql - t.Run(fmt.Sprintf("index-%d", i), func(t *testing.T) { - ss := Split(sqltext, "go") - if len(ss) != len(list[i].Expect) { - t.Errorf("Test Item index %d; expect %d items, got %d %q", i, len(list[i].Expect), len(ss), ss) - return - } - for j := 0; j < len(ss); j++ { - if ss[j] != list[i].Expect[j] { - t.Errorf("Test Item index %d, batch index %d; expect <%s>, got <%s>", i, j, list[i].Expect[j], ss[j]) - } - } - }) - } -} - -func TestHasPrefixFold(t *testing.T) { - list := []struct { - s, pre string - is bool - }{ - {"h", "H", true}, - {"h", "K", false}, - {"go 5\n", "go", true}, - } - for _, item := range list { - is := hasPrefixFold(item.s, item.pre) - if is != item.is { - t.Errorf("want (%q, %q)=%t got %t", item.s, item.pre, item.is, is) - } - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/buf_test.go b/vendor/github.com/denisenkom/go-mssqldb/buf_test.go deleted file mode 100644 index 9d681665..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/buf_test.go +++ /dev/null @@ -1,284 +0,0 @@ -package mssql - -import ( - "bytes" - "errors" - "testing" -) - -type closableBuffer struct { - *bytes.Buffer -} - -func (closableBuffer) Close() error { - return nil -} - -type failBuffer struct { -} - -func (failBuffer) Read([]byte) (int, error) { - return 0, errors.New("read failed") -} - -func (failBuffer) Write([]byte) (int, error) { - return 0, errors.New("write failed") -} - -func (failBuffer) Close() error { - return nil -} - -func makeBuf(bufSize uint16, testData []byte) *tdsBuffer { - buffer := closableBuffer{bytes.NewBuffer(testData)} - return newTdsBuffer(bufSize, &buffer) -} - -func TestStreamShorterThanHeader(t *testing.T) { - //buffer := closableBuffer{*bytes.NewBuffer([]byte{0xFF, 0xFF})} - //buffer := closableBuffer{*bytes.NewBuffer([]byte{0x6F, 0x96, 0x19, 0xFF, 0x8B, 0x86, 0xD0, 0x11, 0xB4, 0x2D, 0x00, 0xC0, 0x4F, 0xC9, 0x64, 0xFF})} - //tdsBuffer := newTdsBuffer(100, &buffer) - buffer := makeBuf(100, []byte{0xFF, 0xFF}) - _, err := buffer.BeginRead() - if err == nil { - t.Fatal("BeginRead was expected to return error but it didn't") - } else { - t.Log("BeginRead failed as expected with error:", err.Error()) - } -} - -func TestInvalidLengthInHeaderTooLong(t *testing.T) { - buffer := makeBuf(8, []byte{0xFF, 0xFF, 0x0, 0x9, 0xff, 0xff, 0xff, 0xff}) - _, err := buffer.BeginRead() - if err == nil { - t.Fatal("BeginRead was expected to return error but it didn't") - } else { - if err.Error() != "Invalid packet size, it is longer than buffer size" { - t.Fatal("BeginRead failed with incorrect error", err) - } else { - t.Log("BeginRead failed as expected with error:", err.Error()) - } - } -} - -func TestInvalidLengthInHeaderTooShort(t *testing.T) { - buffer := makeBuf(100, []byte{0xFF, 0xFF, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff}) - _, err := buffer.BeginRead() - if err == nil { - t.Fatal("BeginRead was expected to return error but it didn't") - } else { - t.Log("BeginRead failed as expected with error:", err.Error()) - } -} - -func TestInvalidLengthInHeaderLongerThanIncomingBuffer(t *testing.T) { - buffer := makeBuf(9, []byte{0xFF, 0xFF, 0x0, 0x9, 0xff, 0xff, 0xff, 0xff}) - _, err := buffer.BeginRead() - if err == nil { - t.Fatal("BeginRead was expected to return error but it didn't") - } else { - t.Log("BeginRead failed as expected with error:", err.Error()) - } -} - -func TestBeginReadSucceeds(t *testing.T) { - buffer := makeBuf(9, []byte{0x01 /*id*/, 0xFF /*status*/, 0x0, 0x9 /*size*/, 0xff, 0xff, 0xff, 0xff, 0x02 /*test byte*/}) - - id, err := buffer.BeginRead() - if err != nil { - t.Fatal("BeginRead failed:", err.Error()) - } - if id != 1 { - t.Fatalf("Expected id to be 1 but it is %d", id) - } - - b, err := buffer.ReadByte() - if err != nil { - t.Fatal("ReadByte failed:", err.Error()) - } - if b != 2 { - t.Fatalf("Expected read byte to be 2 but it is %d", b) - } - - // should fail because no more bytes left - _, err = buffer.ReadByte() - if err == nil { - t.Fatal("ReadByte was expected to return error but it didn't") - } else { - t.Log("ReadByte failed as expected with error:", err.Error()) - } - - testBuf := []byte{0, 1, 2} - // should fail because no more bytes left - _, err = buffer.Read(testBuf) - if err == nil { - t.Fatal("Read was expected to return error but it didn't") - } else { - t.Log("Read failed as expected with error:", err.Error()) - } -} - -func TestReadByteFailsOnSecondPacket(t *testing.T) { - buffer := makeBuf(9, []byte{ - 0x01 /*id*/, 0x0 /*not final*/, 0x0, 0x9 /*size*/, 0xff, 0xff, 0xff, 0xff, 0x02, /*test byte*/ - 0x01 /*next id, this packet is invalid, it is too short*/}) - - _, err := buffer.BeginRead() - if err != nil { - t.Fatal("BeginRead failed:", err.Error()) - } - - _, err = buffer.ReadByte() - if err != nil { - t.Fatal("ReadByte failed:", err.Error()) - } - - _, err = buffer.ReadByte() - if err == nil { - t.Fatal("ReadByte was expected to return error but it didn't") - } else { - t.Log("ReadByte failed as expected with error:", err.Error()) - } - - t.Run("test byte() panic", func(t *testing.T) { - defer func() { - recover() - }() - buffer.byte() - t.Fatal("byte() should panic, but it didn't") - }) - - t.Run("test ReadFull() panic", func(t *testing.T) { - defer func() { - recover() - }() - buf := make([]byte, 10) - buffer.ReadFull(buf) - t.Fatal("ReadFull() should panic, but it didn't") - }) -} - -func TestReadFailsOnSecondPacket(t *testing.T) { - buffer := makeBuf(9, []byte{ - 0x01 /*id*/, 0x0 /*not final*/, 0x0, 0x9 /*size*/, 0xff, 0xff, 0xff, 0xff, 0x02, /*test byte*/ - 0x01 /*next id, this packet is invalid, it is too short*/}) - - _, err := buffer.BeginRead() - if err != nil { - t.Fatal("BeginRead failed:", err.Error()) - } - - testBuf := []byte{0} - _, err = buffer.Read(testBuf) - if err != nil { - t.Fatal("Read failed:", err.Error()) - } - if testBuf[0] != 2 { - t.Fatal("Read returned invalid value") - } - - _, err = buffer.Read(testBuf) - if err == nil { - t.Fatal("ReadByte was expected to return error but it didn't") - } else { - t.Log("ReadByte failed as expected with error:", err.Error()) - } -} - -func TestWrite(t *testing.T) { - memBuf := bytes.NewBuffer([]byte{}) - buf := newTdsBuffer(11, closableBuffer{memBuf}) - buf.BeginPacket(1, false) - err := buf.WriteByte(2) - if err != nil { - t.Fatal("WriteByte failed:", err.Error()) - } - wrote, err := buf.Write([]byte{3, 4}) - if err != nil { - t.Fatal("Write failed:", err.Error()) - } - if wrote != 2 { - t.Fatalf("Write returned invalid value of written bytes %d", wrote) - } - - err = buf.FinishPacket() - if err != nil { - t.Fatal("FinishPacket failed:", err.Error()) - } - if bytes.Compare(memBuf.Bytes(), []byte{1, 1, 0, 11, 0, 0, 1, 0, 2, 3, 4}) != 0 { - t.Fatalf("Written buffer has invalid content: %v", memBuf.Bytes()) - } - - buf.BeginPacket(2, false) - wrote, err = buf.Write([]byte{3, 4, 5, 6}) - if err != nil { - t.Fatal("Write failed:", err.Error()) - } - if wrote != 4 { - t.Fatalf("Write returned invalid value of written bytes %d", wrote) - } - err = buf.FinishPacket() - if err != nil { - t.Fatal("FinishPacket failed:", err.Error()) - } - expectedBuf := []byte{ - 1, 1, 0, 11, 0, 0, 1, 0, 2, 3, 4, // packet 1 - 2, 0, 0, 11, 0, 0, 1, 0, 3, 4, 5, // packet 2 - 2, 1, 0, 9, 0, 0, 2, 0, 6, // packet 3 - } - if bytes.Compare(memBuf.Bytes(), expectedBuf) != 0 { - t.Fatalf("Written buffer has invalid content:\n got: %v\nwant: %v", memBuf.Bytes(), expectedBuf) - } -} - -func TestWriteErrors(t *testing.T) { - // write should fail if underlying transport fails - buf := newTdsBuffer(uint16(headerSize)+1, failBuffer{}) - buf.BeginPacket(1, false) - wrote, err := buf.Write([]byte{0, 0}) - // may change from error to panic in future - if err == nil { - t.Fatal("Write should fail but it didn't") - } - if wrote != 1 { - t.Fatal("Should write 1 byte but it wrote ", wrote) - } - - // writebyte should fail if underlying transport fails - buf = newTdsBuffer(uint16(headerSize)+1, failBuffer{}) - buf.BeginPacket(1, false) - // first write should not fail because if fits in the buffer - err = buf.WriteByte(0) - if err != nil { - t.Fatal("First WriteByte should not fail because it should fit in the buffer, but it failed", err) - } - err = buf.WriteByte(0) - // may change from error to panic in future - if err == nil { - t.Fatal("Second WriteByte should fail but it didn't") - } -} - -func TestWrite_BufferBounds(t *testing.T) { - memBuf := bytes.NewBuffer([]byte{}) - buf := newTdsBuffer(11, closableBuffer{memBuf}) - - buf.BeginPacket(1, false) - // write bytes enough to complete a package - _, err := buf.Write([]byte{1, 1, 1}) - if err != nil { - t.Fatal("Write failed:", err.Error()) - } - err = buf.WriteByte(1) - if err != nil { - t.Fatal("WriteByte failed:", err.Error()) - } - _, err = buf.Write([]byte{1, 1, 1}) - if err != nil { - t.Fatal("Write failed:", err.Error()) - } - err = buf.FinishPacket() - if err != nil { - t.Fatal("FinishPacket failed:", err.Error()) - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/bulkcopy_test.go b/vendor/github.com/denisenkom/go-mssqldb/bulkcopy_test.go deleted file mode 100644 index c0c89885..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/bulkcopy_test.go +++ /dev/null @@ -1,237 +0,0 @@ -// +build go1.9 - -package mssql - -import ( - "context" - "database/sql" - "encoding/hex" - "math" - "reflect" - "strings" - "testing" - "time" -) - -func TestBulkcopy(t *testing.T) { - // TDS level Bulk Insert is not supported on Azure SQL Server. - if dsn := makeConnStr(t); strings.HasSuffix(strings.Split(dsn.Host, ":")[0], ".database.windows.net") { - t.Skip("TDS level bulk copy is not supported on Azure SQL Server") - } - type testValue struct { - colname string - val interface{} - } - - tableName := "#table_test" - geom, _ := hex.DecodeString("E6100000010C00000000000034400000000000004440") - bin, _ := hex.DecodeString("ba8b7782168d4033a299333aec17bd33") - testValues := []testValue{ - - {"test_nvarchar", "ab©ĎéⒻghïjklmnopqЯ☀tuvwxyz"}, - {"test_varchar", "abcdefg"}, - {"test_char", "abcdefg "}, - {"test_nchar", "abcdefg "}, - {"test_text", "abcdefg"}, - {"test_ntext", "abcdefg"}, - {"test_float", 1234.56}, - {"test_floatn", 1234.56}, - {"test_real", 1234.56}, - {"test_realn", 1234.56}, - {"test_bit", true}, - {"test_bitn", nil}, - {"test_smalldatetime", time.Date(2010, 11, 12, 13, 14, 0, 0, time.UTC)}, - {"test_smalldatetimen", time.Date(2010, 11, 12, 13, 14, 0, 0, time.UTC)}, - {"test_datetime", time.Date(2010, 11, 12, 13, 14, 15, 120000000, time.UTC)}, - {"test_datetimen", time.Date(2010, 11, 12, 13, 14, 15, 120000000, time.UTC)}, - {"test_datetimen_1", time.Date(4010, 11, 12, 13, 14, 15, 120000000, time.UTC)}, - {"test_datetime2_1", time.Date(2010, 11, 12, 13, 14, 15, 0, time.UTC)}, - {"test_datetime2_3", time.Date(2010, 11, 12, 13, 14, 15, 123000000, time.UTC)}, - {"test_datetime2_7", time.Date(2010, 11, 12, 13, 14, 15, 123000000, time.UTC)}, - {"test_date", time.Date(2010, 11, 12, 00, 00, 00, 0, time.UTC)}, - {"test_tinyint", 255}, - {"test_smallint", 32767}, - {"test_smallintn", nil}, - {"test_int", 2147483647}, - {"test_bigint", 9223372036854775807}, - {"test_bigintn", nil}, - {"test_geom", geom}, - {"test_uniqueidentifier", []byte{0x6F, 0x96, 0x19, 0xFF, 0x8B, 0x86, 0xD0, 0x11, 0xB4, 0x2D, 0x00, 0xC0, 0x4F, 0xC9, 0x64, 0xFF}}, - // {"test_smallmoney", 1234.56}, - // {"test_money", 1234.56}, - {"test_decimal_18_0", 1234.0001}, - {"test_decimal_9_2", 1234.560001}, - {"test_decimal_20_0", 1234.0001}, - {"test_numeric_30_10", 1234567.1234567}, - {"test_varbinary", []byte("1")}, - {"test_varbinary_16", bin}, - {"test_varbinary_max", bin}, - {"test_binary", []byte("1")}, - {"test_binary_16", bin}, - } - - columns := make([]string, len(testValues)) - for i, val := range testValues { - columns[i] = val.colname - } - - values := make([]interface{}, len(testValues)) - for i, val := range testValues { - values[i] = val.val - } - - pool := open(t) - defer pool.Close() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - // Now that session resetting is supported, the use of the per session - // temp table requires the use of a dedicated connection from the connection - // pool. - conn, err := pool.Conn(ctx) - if err != nil { - t.Fatal("failed to pull connection from pool", err) - } - defer conn.Close() - - err = setupTable(ctx, t, conn, tableName) - if err != nil { - t.Error("Setup table failed: ", err) - return - } - - t.Log("Preparing copy in statement") - - stmt, err := conn.PrepareContext(ctx, CopyIn(tableName, BulkOptions{}, columns...)) - - for i := 0; i < 10; i++ { - t.Logf("Executing copy in statement %d time with %d values", i+1, len(values)) - _, err = stmt.Exec(values...) - if err != nil { - t.Error("AddRow failed: ", err.Error()) - return - } - } - - result, err := stmt.Exec() - if err != nil { - t.Fatal("bulkcopy failed: ", err.Error()) - } - - insertedRowCount, _ := result.RowsAffected() - if insertedRowCount == 0 { - t.Fatal("0 row inserted!") - } - - //check that all rows are present - var rowCount int - err = conn.QueryRowContext(ctx, "select count(*) c from "+tableName).Scan(&rowCount) - - if rowCount != 10 { - t.Errorf("unexpected row count %d", rowCount) - } - - //data verification - rows, err := conn.QueryContext(ctx, "select "+strings.Join(columns, ",")+" from "+tableName) - if err != nil { - t.Fatal(err) - } - defer rows.Close() - for rows.Next() { - - ptrs := make([]interface{}, len(columns)) - container := make([]interface{}, len(columns)) - for i, _ := range ptrs { - ptrs[i] = &container[i] - } - if err := rows.Scan(ptrs...); err != nil { - t.Fatal(err) - } - for i, c := range testValues { - if !compareValue(container[i], c.val) { - t.Errorf("columns %s : expected: %v, got: %v\n", c.colname, c.val, container[i]) - } - } - } - if err := rows.Err(); err != nil { - t.Error(err) - } -} - -func compareValue(a interface{}, expected interface{}) bool { - switch expected := expected.(type) { - case int: - return int64(expected) == a - case int32: - return int64(expected) == a - case int64: - return int64(expected) == a - case float64: - if got, ok := a.([]uint8); ok { - var nf sql.NullFloat64 - nf.Scan(got) - a = nf.Float64 - } - return math.Abs(expected-a.(float64)) < 0.0001 - default: - return reflect.DeepEqual(expected, a) - } -} - -func setupTable(ctx context.Context, t *testing.T, conn *sql.Conn, tableName string) (err error) { - tablesql := `CREATE TABLE ` + tableName + ` ( - [id] [int] IDENTITY(1,1) NOT NULL, - [test_nvarchar] [nvarchar](50) NULL, - [test_varchar] [varchar](50) NULL, - [test_char] [char](10) NULL, - [test_nchar] [nchar](10) NULL, - [test_text] [text] NULL, - [test_ntext] [ntext] NULL, - [test_float] [float] NOT NULL, - [test_floatn] [float] NULL, - [test_real] [real] NULL, - [test_realn] [real] NULL, - [test_bit] [bit] NOT NULL, - [test_bitn] [bit] NULL, - [test_smalldatetime] [smalldatetime] NOT NULL, - [test_smalldatetimen] [smalldatetime] NULL, - [test_datetime] [datetime] NOT NULL, - [test_datetimen] [datetime] NULL, - [test_datetimen_1] [datetime] NULL, - [test_datetime2_1] [datetime2](1) NULL, - [test_datetime2_3] [datetime2](3) NULL, - [test_datetime2_7] [datetime2](7) NULL, - [test_date] [date] NULL, - [test_smallmoney] [smallmoney] NULL, - [test_money] [money] NULL, - [test_tinyint] [tinyint] NULL, - [test_smallint] [smallint] NOT NULL, - [test_smallintn] [smallint] NULL, - [test_int] [int] NULL, - [test_bigint] [bigint] NOT NULL, - [test_bigintn] [bigint] NULL, - [test_geom] [geometry] NULL, - [test_geog] [geography] NULL, - [text_xml] [xml] NULL, - [test_uniqueidentifier] [uniqueidentifier] NULL, - [test_decimal_18_0] [decimal](18, 0) NULL, - [test_decimal_9_2] [decimal](9, 2) NULL, - [test_decimal_20_0] [decimal](20, 0) NULL, - [test_numeric_30_10] [decimal](30, 10) NULL, - [test_varbinary] VARBINARY NOT NULL, - [test_varbinary_16] VARBINARY(16) NOT NULL, - [test_varbinary_max] VARBINARY(max) NOT NULL, - [test_binary] BINARY NOT NULL, - [test_binary_16] BINARY(16) NOT NULL, - CONSTRAINT [PK_` + tableName + `_id] PRIMARY KEY CLUSTERED -( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];` - _, err = conn.ExecContext(ctx, tablesql) - if err != nil { - t.Fatal("tablesql failed:", err) - } - return -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/bulkimport_example_test.go b/vendor/github.com/denisenkom/go-mssqldb/bulkimport_example_test.go deleted file mode 100644 index 4ee3df3c..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/bulkimport_example_test.go +++ /dev/null @@ -1,116 +0,0 @@ -// +build go1.10 - -package mssql_test - -import ( - "database/sql" - "flag" - "fmt" - "log" - "strings" - "unicode/utf8" - - "github.com/denisenkom/go-mssqldb" -) - -const ( - createTestTable = `CREATE TABLE test_table( - id int IDENTITY(1,1) NOT NULL, - test_nvarchar nvarchar(50) NULL, - test_varchar varchar(50) NULL, - test_float float NULL, - test_datetime2_3 datetime2(3) NULL, - test_bitn bit NULL, - test_bigint bigint NOT NULL, - test_geom geometry NULL, - CONSTRAINT PK_table_test_id PRIMARY KEY CLUSTERED - ( - id ASC - ) ON [PRIMARY]);` - dropTestTable = "IF OBJECT_ID('test_table', 'U') IS NOT NULL DROP TABLE test_table;" -) - -// This example shows how to perform bulk imports -func ExampleCopyIn() { - flag.Parse() - - if *debug { - fmt.Printf(" password:%s\n", *password) - fmt.Printf(" port:%d\n", *port) - fmt.Printf(" server:%s\n", *server) - fmt.Printf(" user:%s\n", *user) - } - - connString := makeConnURL().String() - if *debug { - fmt.Printf(" connString:%s\n", connString) - } - - db, err := sql.Open("sqlserver", connString) - if err != nil { - log.Fatal("Open connection failed:", err.Error()) - } - defer db.Close() - - txn, err := db.Begin() - if err != nil { - log.Fatal(err) - } - - // Create table - _, err = db.Exec(createTestTable) - if err != nil { - log.Fatal(err) - } - defer db.Exec(dropTestTable) - - // mssqldb.CopyIn creates string to be consumed by Prepare - stmt, err := txn.Prepare(mssql.CopyIn("test_table", mssql.BulkOptions{}, "test_varchar", "test_nvarchar", "test_float", "test_bigint")) - if err != nil { - log.Fatal(err.Error()) - } - - for i := 0; i < 10; i++ { - _, err = stmt.Exec(generateString(0, 30), generateStringUnicode(0, 30), i, i) - if err != nil { - log.Fatal(err.Error()) - } - } - - result, err := stmt.Exec() - if err != nil { - log.Fatal(err) - } - - err = stmt.Close() - if err != nil { - log.Fatal(err) - } - - err = txn.Commit() - if err != nil { - log.Fatal(err) - } - rowCount, _ := result.RowsAffected() - log.Printf("%d row copied\n", rowCount) - log.Printf("bye\n") -} - -func generateString(x int, n int) string { - letters := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - b := make([]byte, n) - for i := range b { - b[i] = letters[(x+i)%len(letters)] - } - return string(b) -} -func generateStringUnicode(x int, n int) string { - letters := []byte("ab©💾é?ghïjklmnopqЯ☀tuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") - b := &strings.Builder{} - for i := 0; i < n; i++ { - r, sz := utf8.DecodeRune(letters[x%len(letters):]) - x += sz - b.WriteRune(r) - } - return b.String() -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/datetimeoffset_example_test.go b/vendor/github.com/denisenkom/go-mssqldb/datetimeoffset_example_test.go deleted file mode 100644 index dd16e009..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/datetimeoffset_example_test.go +++ /dev/null @@ -1,121 +0,0 @@ -// +build go1.10 - -package mssql_test - -import ( - "database/sql" - "flag" - "fmt" - "log" - "time" - - "cloud.google.com/go/civil" - "github.com/denisenkom/go-mssqldb" -) - -// This example shows how to insert and retrieve date and time types data -func ExampleDateTimeOffset() { - flag.Parse() - - if *debug { - fmt.Printf(" password:%s\n", *password) - fmt.Printf(" port:%d\n", *port) - fmt.Printf(" server:%s\n", *server) - fmt.Printf(" user:%s\n", *user) - } - - connString := makeConnURL().String() - if *debug { - fmt.Printf(" connString:%s\n", connString) - } - - db, err := sql.Open("sqlserver", connString) - if err != nil { - log.Fatal("Open connection failed:", err.Error()) - } - defer db.Close() - - insertDateTime(db) - retrieveDateTime(db) - retrieveDateTimeOutParam(db) -} - -func insertDateTime(db *sql.DB) { - _, err := db.Exec("CREATE TABLE datetimeTable (timeCol TIME, dateCol DATE, smalldatetimeCol SMALLDATETIME, datetimeCol DATETIME, datetime2Col DATETIME2, datetimeoffsetCol DATETIMEOFFSET)") - if err != nil { - log.Fatal(err) - } - stmt, err := db.Prepare("INSERT INTO datetimeTable VALUES(@p1, @p2, @p3, @p4, @p5, @p6)") - if err != nil { - log.Fatal(err) - } - tin, err := time.Parse(time.RFC3339, "2006-01-02T22:04:05.787-07:00") - if err != nil { - log.Fatal(err) - } - var timeCol civil.Time = civil.TimeOf(tin) - var dateCol civil.Date = civil.DateOf(tin) - var smalldatetimeCol string = "2006-01-02 22:04:00" - var datetimeCol mssql.DateTime1 = mssql.DateTime1(tin) - var datetime2Col civil.DateTime = civil.DateTimeOf(tin) - var datetimeoffsetCol mssql.DateTimeOffset = mssql.DateTimeOffset(tin) - _, err = stmt.Exec(timeCol, dateCol, smalldatetimeCol, datetimeCol, datetime2Col, datetimeoffsetCol) - if err != nil { - log.Fatal(err) - } -} - -func retrieveDateTime(db *sql.DB) { - rows, err := db.Query("SELECT timeCol, dateCol, smalldatetimeCol, datetimeCol, datetime2Col, datetimeoffsetCol FROM datetimeTable") - if err != nil { - log.Fatal(err) - } - defer rows.Close() - var c1, c2, c3, c4, c5, c6 time.Time - for rows.Next() { - err = rows.Scan(&c1, &c2, &c3, &c4, &c5, &c6) - if err != nil { - log.Fatal(err) - } - fmt.Printf("c1: %+v; c2: %+v; c3: %+v; c4: %+v; c5: %+v; c6: %+v;\n", c1, c2, c3, c4, c5, c6) - } -} - -func retrieveDateTimeOutParam(db *sql.DB) { - CreateProcSql := ` - CREATE PROCEDURE OutDatetimeProc - @timeOutParam TIME OUTPUT, - @dateOutParam DATE OUTPUT, - @smalldatetimeOutParam SMALLDATETIME OUTPUT, - @datetimeOutParam DATETIME OUTPUT, - @datetime2OutParam DATETIME2 OUTPUT, - @datetimeoffsetOutParam DATETIMEOFFSET OUTPUT - AS - SET NOCOUNT ON - SET @timeOutParam = '22:04:05.7870015' - SET @dateOutParam = '2006-01-02' - SET @smalldatetimeOutParam = '2006-01-02 22:04:00' - SET @datetimeOutParam = '2006-01-02 22:04:05.787' - SET @datetime2OutParam = '2006-01-02 22:04:05.7870015' - SET @datetimeoffsetOutParam = '2006-01-02 22:04:05.7870015 -07:00'` - _, err := db.Exec(CreateProcSql) - if err != nil { - log.Fatal(err) - } - var ( - timeOutParam, datetime2OutParam, datetimeoffsetOutParam mssql.DateTimeOffset - dateOutParam, datetimeOutParam mssql.DateTime1 - smalldatetimeOutParam string - ) - _, err = db.Exec("OutDatetimeProc", - sql.Named("timeOutParam", sql.Out{Dest: &timeOutParam}), - sql.Named("dateOutParam", sql.Out{Dest: &dateOutParam}), - sql.Named("smalldatetimeOutParam", sql.Out{Dest: &smalldatetimeOutParam}), - sql.Named("datetimeOutParam", sql.Out{Dest: &datetimeOutParam}), - sql.Named("datetime2OutParam", sql.Out{Dest: &datetime2OutParam}), - sql.Named("datetimeoffsetOutParam", sql.Out{Dest: &datetimeoffsetOutParam})) - if err != nil { - log.Fatal(err) - } - fmt.Printf("timeOutParam: %+v; dateOutParam: %+v; smalldatetimeOutParam: %s; datetimeOutParam: %+v; datetime2OutParam: %+v; datetimeoffsetOutParam: %+v;\n", time.Time(timeOutParam), time.Time(dateOutParam), smalldatetimeOutParam, time.Time(datetimeOutParam), time.Time(datetime2OutParam), time.Time(datetimeoffsetOutParam)) -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/decimal_test.go b/vendor/github.com/denisenkom/go-mssqldb/decimal_test.go deleted file mode 100644 index bf38d20d..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/decimal_test.go +++ /dev/null @@ -1,107 +0,0 @@ -package mssql - -import ( - "math" - "testing" -) - -func TestToString(t *testing.T) { - values := []struct { - dec Decimal - s string - }{ - {Decimal{positive: true, prec: 10, scale: 0, integer: [4]uint32{1, 0, 0, 0}}, "1"}, - {Decimal{positive: false, prec: 10, scale: 0, integer: [4]uint32{1, 0, 0, 0}}, "-1"}, - {Decimal{positive: true, prec: 10, scale: 1, integer: [4]uint32{1, 0, 0, 0}}, "0.1"}, - {Decimal{positive: true, prec: 10, scale: 2, integer: [4]uint32{1, 0, 0, 0}}, "0.01"}, - {Decimal{positive: false, prec: 10, scale: 1, integer: [4]uint32{1, 0, 0, 0}}, "-0.1"}, - {Decimal{positive: true, prec: 10, scale: 2, integer: [4]uint32{100, 0, 0, 0}}, "1.00"}, - {Decimal{positive: false, prec: 10, scale: 2, integer: [4]uint32{100, 0, 0, 0}}, "-1.00"}, - {Decimal{positive: true, prec: 30, scale: 0, integer: [4]uint32{0, 1, 0, 0}}, "4294967296"}, // 2^32 - {Decimal{positive: true, prec: 30, scale: 0, integer: [4]uint32{0, 0, 1, 0}}, "18446744073709551616"}, // 2^64 - {Decimal{positive: true, prec: 30, scale: 0, integer: [4]uint32{0, 1, 1, 0}}, "18446744078004518912"}, // 2^64+2^32 - } - for _, v := range values { - if v.dec.String() != v.s { - t.Error("String values don't match ", v.dec.String(), v.s) - } - } -} - -func TestToFloat64(t *testing.T) { - values := []struct { - dec Decimal - flt float64 - }{ - {Decimal{positive: true, prec: 1}, - 0.0}, - {Decimal{positive: true, prec: 1, integer: [4]uint32{1}}, - 1.0}, - {Decimal{positive: false, prec: 1, integer: [4]uint32{1}}, - -1.0}, - {Decimal{positive: true, prec: 1, scale: 1, integer: [4]uint32{5}}, - 0.5}, - {Decimal{positive: true, prec: 38, integer: [4]uint32{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, - 3.402823669209385e+38}, - {Decimal{positive: true, prec: 38, scale: 3, integer: [4]uint32{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, - 3.402823669209385e+35}, - } - for _, v := range values { - if v.dec.ToFloat64() != v.flt { - t.Error("ToFloat values don't match ", v.dec.ToFloat64(), v.flt) - } - } -} - -func TestFromFloat64(t *testing.T) { - values := []struct { - dec Decimal - flt float64 - }{ - {Decimal{positive: true, prec: 20}, - 0.0}, - {Decimal{positive: true, prec: 20, integer: [4]uint32{1}}, - 1.0}, - {Decimal{positive: false, prec: 20, integer: [4]uint32{1}}, - -1.0}, - {Decimal{positive: true, prec: 20, scale: 1, integer: [4]uint32{5}}, - 0.5}, - {Decimal{positive: true, prec: 20, integer: [4]uint32{0, 0, 0xfffff000, 0xffffffff}}, - 3.402823669209384e+38}, - //{Decimal{positive: true, prec: 20, scale: 3, integer: [4]uint32{0, 0, 0xfffff000, 0xffffffff}}, - // 3.402823669209385e+35}, - } - for _, v := range values { - decfromflt, err := Float64ToDecimal(v.flt) - if err == nil { - if decfromflt != v.dec { - t.Error("FromFloat values don't match ", decfromflt, v.dec) - } - } else { - t.Error("Float64ToDecimal failed with error:", err.Error()) - } - } - - _, err := Float64ToDecimal(math.NaN()) - if err == nil { - t.Error("Expected to get error for conversion from NaN, but didn't") - } - - _, err = Float64ToDecimal(math.Inf(1)) - if err == nil { - t.Error("Expected to get error for conversion from positive infinity, but didn't") - } - - _, err = Float64ToDecimal(math.Inf(-1)) - if err == nil { - t.Error("Expected to get error for conversion from negative infinity, but didn't") - } - _, err = Float64ToDecimal(3.402823669209386e+38) - if err == nil { - t.Error("Expected to get error for conversion from too big number, but didn't") - } - _, err = Float64ToDecimal(-3.402823669209386e+38) - if err == nil { - t.Error("Expected to get error for conversion from too big number, but didn't") - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-handle-date-and-time-types.md b/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-handle-date-and-time-types.md deleted file mode 100644 index 33a993bd..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-handle-date-and-time-types.md +++ /dev/null @@ -1,70 +0,0 @@ -# How to Handle Date and Time Types - -SQL Server has six date and time datatypes: date, time, smalldatetime, datetime, datetime2 and datetimeoffset. Some of these datatypes may contain more information than others (for example, datetimeoffset is the only type that has time zone awareness), higher ranges, or larger precisions. In a Go application using the mssql driver, the data types used to hold these data must be chosen carefully so no data is lost. - -## Inserting Date and Time Data - -The following is a list of datatypes that can be used to insert data into a SQL Server date and/or time type column: -- string -- time.Time -- mssql.DateTime1 -- mssql.DateTimeOffset -- "cloud.google.com/go/civil".Date -- "cloud.google.com/go/civil".Time -- "cloud.google.com/go/civil".DateTime - -`time.Time` and `mssql.DateTimeOffset` contain the most information (time zone and over 7 digits precision). Designed to match the SQL Server `datetime` type, `mssql.DateTime1` does not have time zone information, only has up to 3 digits precision and they are rouded to increments of .000, .003 or .007 seconds when the data is passed to SQL Server. If you use `mssql.DateTime1` to hold time zone information or very precised time data (more than 3 decimal digits), you will see data lost when inserting into columns with types that can hold more information. For example: - -``` -// all these types have up to 7 digits precision points -// datetimeoffset can hold information about time zone -_, err := db.Exec("CREATE TABLE datetimeTable (timeCol TIME, datetime2Col DATETIME2, datetimeoffsetCol DATETIMEOFFSET)") -stmt, err := db.Prepare("INSERT INTO datetimeTable VALUES (@p1, @p2, @p3)) -tin, err := time.Parse(time.RFC3339, "2006-01-02T22:04:05.7870015-07:00") // data containing 7 decimal digits and has time zone awareness -param := mssql.DateTime1(tin) // data is stored in mssql.DateTime1 type -_, err = stmt.Exec(param, param, param) -// result in database: -// timeCol: 22:04:05.7866667 -// datetime2Col: 2006-01-02 22:04:05.7866667 -// datetimeoffsetCol: 2006-01-02 22:04:05.7866667 +00:00 -// precisions are lost in all columns. Also, time zone information is lost in datetimeoffsetCol -``` - - `"cloud.google.com/go/civil".DateTime` does not have time zone information. `"cloud.google.com/go/civil".Date` only has the date information, and `"cloud.google.com/go/civil".Time` only has the time information. `string` can also be used to insert data into date and time types columns, but you have to make sure the format is accepted by SQL Server. - -## Retrieving Date and Time Data - -The following is a list of datatypes that can be used to retrieved data from a SQL Server date and/or time type column: -- string -- sql.RawBytes -- time.Time -- mssql.DateTime1 -- mssql.DateTiimeOffset - -When using these data types to retrieve information from a date and/or time type column, you may end up with some extra unexpected information. For example, if you use Go type `time.Time` to retrieve information from a SQL Server `date` column: - -``` -var c2 time.Time -rows, err := db.Query("SELECT dateCol FROM datetimeTable") // dateCol has data `2006-01-02` -for rows.Next() { - err = rows.Scan(&c1) - fmr.Printf("c2: %+v") - // c2: 2006-01-02 00:00:00 +0000 UTC - // you get extra time and time zone information defaulty set to 0 -} -``` - -## Output parameters with Date and Time Data - -The following is a list of datatypes that can be used as buffer to hold a output parameter of SQL Server date and/or time type -- string -- time.Time -- mssql.DateTime1 -- mssql.DateTimeOffset - -The only type that can be used to retrieve an output of `smalldatetime` is `string`, otherwise you will get a `mssql: Error converting data type datetimeoffset/datetime1 to smalldatetime` error. Furthermore, `string` and `mssql.DateTime1` are the only types that can be used to retrieve output of `datetime` type, otherwise you will get a `mssql: Error converting data type datetimeoffset to datetime` error. - -Similar to retrieving data from a result set, when retrieving data as a output parameter, you may end up with some extra unexpected information when the Go type you use contains more information than the data you retrieved from SQL Server. - -## Example -[DateTime handling example](../datetimeoffset_example_test.go) \ No newline at end of file diff --git a/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-perform-bulk-imports.md b/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-perform-bulk-imports.md deleted file mode 100644 index 34f570cd..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-perform-bulk-imports.md +++ /dev/null @@ -1,48 +0,0 @@ -# How to perform bulk imports - -To use the bulk imports feature in go-mssqldb, you need to import the sql and go-mssqldb packages. - -``` -import ( - "database/sql" - "github.com/denisenkom/go-mssqldb" -) -``` - -The `mssql.CopyIn` function creates a string which can be prepared by passing it to `Prepare`. The string returned contains information such as the name of the table and columns to bulk import data into, and bulk options. - -``` -bulkImportStr := mssql.CopyIn("tablename", mssql.BulkOptions{}, "column1", "column2", "column3") -stmt, err := db.Prepare(bulkImportStr) -``` - -Bulk options can be specified using the `mssql.BulkOptions` type. The following is how the `BulkOptions` type is defined: - -``` -type BulkOptions struct { - CheckConstraints bool - FireTriggers bool - KeepNulls bool - KilobytesPerBatch int - RowsPerBatch int - Order []string - Tablock bool -} -``` - -The statement can be executed many times to copy data into the table specified. - -``` -for i := 0; i < 10; i++ { - _, err = stmt.Exec(col1Data[i], col2Data[i], col3Data[i]) -} -``` - -After all the data is processed, call `Exec` once with no arguments to flush all the buffered data. - -``` -_, err = stmt.Exec() -``` - -## Example -[Bulk import example](../bulkimport_example_test.go) \ No newline at end of file diff --git a/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-use-newconnector.md b/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-use-newconnector.md deleted file mode 100644 index 0273d89d..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-use-newconnector.md +++ /dev/null @@ -1,32 +0,0 @@ -# How to use the Connector object - -A Connector holds information in a DSN and is ready to make a new connection at any time. Connector implements the database/sql/driver Connector interface so it can be passed to the database/sql `OpenDB` function. One property on the Connector is the `SessionInitSQL` field, which may be used to set any options that cannot be passed through a DSN string. - -To use the Connector type, first you need to import the sql and go-mssqldb packages - -``` -import ( - "database/sql" - "github.com/denisenkom/go-mssqldb" -) -``` - -Now you can create a Connector object by calling `NewConnector`, which creates a new connector from a DSN. - -``` -dsn := "sqlserver://username:password@hostname/instance?database=databasename" -connector, err := mssql.NewConnector(dsn) -``` - -You can set `connector.SessionInitSQL` for any options that cannot be passed through in the dsn string. - -`connector.SessionInitSQL = "SET ANSI_NULLS ON"` - -Open a database by passing connector to `sql.OpenDB`. - -`db := sql.OpenDB(connector)` - -The returned DB maintains its own pool of idle connections. Now you can use the `sql.DB` object for querying and executing queries. - -## Example -[NewConnector example](../newconnector_example_test.go) diff --git a/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-use-table-valued-parameters.md b/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-use-table-valued-parameters.md deleted file mode 100644 index 98b30e16..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/doc/how-to-use-table-valued-parameters.md +++ /dev/null @@ -1,91 +0,0 @@ -# How to use Table-Valued Parameters - -Table-valued parameters are declared by using user-defined table types. You can use table-valued parameters to send multiple rows of data to a Transact-SQL statement or a routine, such as a stored procedure or function, without creating a temporary table or many parameters. - -To make use of the TVP functionality, first you need to create a table type, and a procedure or function to receive data from the table-valued parameter. - -``` -createTVP = "CREATE TYPE LocationTableType AS TABLE (LocationName VARCHAR(50), CostRate INT)" -_, err = db.Exec(createTable) - -createProc = ` -CREATE PROCEDURE dbo.usp_InsertProductionLocation -@TVP LocationTableType READONLY -AS -SET NOCOUNT ON -INSERT INTO Location -( - Name, - CostRate, - Availability, - ModifiedDate) -SELECT *, 0,GETDATE() -FROM @TVP` -_, err = db.Exec(createProc) -``` - -In your go application, create a struct that corresponds to the table type you have created. Create a slice of these structs which contain the data you want to pass to the stored procedure. - -``` -type LocationTableTvp struct { - LocationName string - CostRate int64 -} - -locationTableTypeData := []LocationTableTvp{ - { - LocationName: "Alberta", - CostRate: 0, - }, - { - LocationName: "British Columbia", - CostRate: 1, - }, -} -``` - -Create a `mssql.TVP` object, and pass the slice of structs into the `Value` member. Set `TypeName` to the table type name. - -``` -tvpType := mssql.TVP{ - TypeName: "LocationTableType", - Value: locationTableTypeData, -} -``` - -Finally, execute the stored procedure and pass the `mssql.TVPType` object you have created as a parameter. - -`_, err = db.Exec("exec dbo.usp_InsertProductionLocation @TVP;", sql.Named("TVP", tvpType))` - -## Using Tags to Omit Fields in a Struct - -Sometimes users may find it useful to include fields in the struct that do not have corresponding columns in the table type. The driver supports this feature by using tags. To omit a field from a struct, use the `json` or `tvp` tag key and the `"-"` tag value. - -For example, the user wants to define a struct with two more fields: `LocationCountry` and `Currency`. However, the `LocationTableType` table type do not have these corresponding columns. The user can omit the two new fields from being read by using the `json` or `tvp` tag. - -``` -type LocationTableTvpDetailed struct { - LocationName string - LocationCountry string `tvp:"-"` - CostRate int64 - Currency string `json:"-"` -} -``` - -The `tvp` tag is the highest priority. Therefore if there is a field with tag `json:"-" tvp:"any"`, the field is not omitted. The following struct demonstrates different scenarios of using the `json` and `tvp` tags. - -``` -type T struct { - F1 string `json:"f1" tvp:"f1"` // not omitted - F2 string `json:"-" tvp:"f2"` // tvp tag takes precedence; not omitted - F3 string `json:"f3" tvp:"-"` // tvp tag takes precedence; omitted - F4 string `json:"-" tvp:"-"` // omitted - F5 string `json:"f5"` // not omitted - F6 string `json:"-"` // omitted - F7 string `tvp:"f7"` // not omitted - F8 string `tvp:"-"` // omitted -} -``` - -## Example -[TVPType example](../tvp_example_test.go) diff --git a/vendor/github.com/denisenkom/go-mssqldb/error_example_test.go b/vendor/github.com/denisenkom/go-mssqldb/error_example_test.go deleted file mode 100644 index 05549755..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/error_example_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package mssql - -import "fmt" - -func ExampleError_1() { - // call a function that might return a mssql error - err := callUsingMSSQL() - - type ErrorWithNumber interface { - SQLErrorNumber() int32 - } - - if errorWithNumber, ok := err.(ErrorWithNumber); ok { - if errorWithNumber.SQLErrorNumber() == 1205 { - fmt.Println("deadlock error") - } - } -} - -func ExampleError_2() { - // call a function that might return a mssql error - err := callUsingMSSQL() - - type SQLError interface { - SQLErrorNumber() int32 - SQLErrorMessage() string - } - - if sqlError, ok := err.(SQLError); ok { - if sqlError.SQLErrorNumber() == 1205 { - fmt.Println("deadlock error", sqlError.SQLErrorMessage()) - } - } -} - -func callUsingMSSQL() error { - return nil -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/examples/bulk/bulk.go b/vendor/github.com/denisenkom/go-mssqldb/examples/bulk/bulk.go deleted file mode 100644 index 8ce12388..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/examples/bulk/bulk.go +++ /dev/null @@ -1,111 +0,0 @@ -package main - -import ( - "database/sql" - "flag" - "fmt" - "log" - - "github.com/denisenkom/go-mssqldb" -) - -var ( - debug = flag.Bool("debug", true, "enable debugging") - password = flag.String("password", "osmtest", "the database password") - port *int = flag.Int("port", 1433, "the database port") - server = flag.String("server", "localhost", "the database server") - user = flag.String("user", "osmtest", "the database user") - database = flag.String("database", "bulktest", "the database name") -) - -/* - CREATE TABLE test_table( - [id] [int] IDENTITY(1,1) NOT NULL, - [test_nvarchar] [nvarchar](50) NULL, - [test_varchar] [varchar](50) NULL, - [test_float] [float] NULL, - [test_datetime2_3] [datetime2](3) NULL, - [test_bitn] [bit] NULL, - [test_bigint] [bigint] NOT NULL, - [test_geom] [geometry] NULL, - CONSTRAINT [PK_table_test_id] PRIMARY KEY CLUSTERED - ( - [id] ASC - ) ON [PRIMARY]); -*/ - -func main() { - flag.Parse() - - if *debug { - fmt.Printf(" password:%s\n", *password) - fmt.Printf(" port:%d\n", *port) - fmt.Printf(" server:%s\n", *server) - fmt.Printf(" user:%s\n", *user) - fmt.Printf(" database:%s\n", *database) - } - - connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s", *server, *user, *password, *port, *database) - if *debug { - fmt.Printf("connString:%s\n", connString) - } - conn, err := sql.Open("mssql", connString) - if err != nil { - log.Fatal("Open connection failed:", err.Error()) - } - defer conn.Close() - - txn, err := conn.Begin() - if err != nil { - log.Fatal(err) - } - - stmt, err := txn.Prepare(mssql.CopyIn("test_table", mssql.BulkOptions{}, "test_varchar", "test_nvarchar", "test_float", "test_bigint")) - if err != nil { - log.Fatal(err.Error()) - } - - for i := 0; i < 10; i++ { - _, err = stmt.Exec(generateString(0, 30), generateStringUnicode(0, 30), i, i) - if err != nil { - log.Fatal(err.Error()) - } - } - - result, err := stmt.Exec() - if err != nil { - log.Fatal(err) - } - - err = stmt.Close() - if err != nil { - log.Fatal(err) - } - - err = txn.Commit() - if err != nil { - log.Fatal(err) - } - rowCount, _ := result.RowsAffected() - log.Printf("%d row copied\n", rowCount) - log.Printf("bye\n") - -} - -func generateString(x int, n int) string { - letters := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - b := make([]byte, n) - for i := range b { - b[i] = letters[i%len(letters)] - } - return string(b) -} -func generateStringUnicode(x int, n int) string { - letters := "ab©💾é?ghïjklmnopqЯ☀tuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - - b := make([]byte, n) - for i := range b { - b[i] = letters[i%len(letters)] - } - return string(b) -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/examples/simple/simple.go b/vendor/github.com/denisenkom/go-mssqldb/examples/simple/simple.go deleted file mode 100644 index 67f88aa4..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/examples/simple/simple.go +++ /dev/null @@ -1,57 +0,0 @@ -package main - -import ( - "database/sql" - "flag" - "fmt" - "log" - - _ "github.com/denisenkom/go-mssqldb" -) - -var ( - debug = flag.Bool("debug", false, "enable debugging") - password = flag.String("password", "", "the database password") - port *int = flag.Int("port", 1433, "the database port") - server = flag.String("server", "", "the database server") - user = flag.String("user", "", "the database user") -) - -func main() { - flag.Parse() - - if *debug { - fmt.Printf(" password:%s\n", *password) - fmt.Printf(" port:%d\n", *port) - fmt.Printf(" server:%s\n", *server) - fmt.Printf(" user:%s\n", *user) - } - - connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d", *server, *user, *password, *port) - if *debug { - fmt.Printf(" connString:%s\n", connString) - } - conn, err := sql.Open("mssql", connString) - if err != nil { - log.Fatal("Open connection failed:", err.Error()) - } - defer conn.Close() - - stmt, err := conn.Prepare("select 1, 'abc'") - if err != nil { - log.Fatal("Prepare failed:", err.Error()) - } - defer stmt.Close() - - row := stmt.QueryRow() - var somenumber int64 - var somechars string - err = row.Scan(&somenumber, &somechars) - if err != nil { - log.Fatal("Scan failed:", err.Error()) - } - fmt.Printf("somenumber:%d\n", somenumber) - fmt.Printf("somechars:%s\n", somechars) - - fmt.Printf("bye\n") -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/examples/tsql/tsql.go b/vendor/github.com/denisenkom/go-mssqldb/examples/tsql/tsql.go deleted file mode 100644 index 409404a0..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/examples/tsql/tsql.go +++ /dev/null @@ -1,119 +0,0 @@ -package main - -import ( - "bufio" - "database/sql" - "flag" - "fmt" - "io" - "os" - "time" - - _ "github.com/denisenkom/go-mssqldb" -) - -func main() { - var ( - userid = flag.String("U", "", "login_id") - password = flag.String("P", "", "password") - server = flag.String("S", "localhost", "server_name[\\instance_name]") - database = flag.String("d", "", "db_name") - ) - flag.Parse() - - dsn := "server=" + *server + ";user id=" + *userid + ";password=" + *password + ";database=" + *database - db, err := sql.Open("mssql", dsn) - if err != nil { - fmt.Println("Cannot connect: ", err.Error()) - return - } - err = db.Ping() - if err != nil { - fmt.Println("Cannot connect: ", err.Error()) - return - } - defer db.Close() - r := bufio.NewReader(os.Stdin) - for { - _, err = os.Stdout.Write([]byte("> ")) - if err != nil { - fmt.Println(err) - return - } - cmd, err := r.ReadString('\n') - if err != nil { - if err == io.EOF { - fmt.Println() - return - } - fmt.Println(err) - return - } - err = exec(db, cmd) - if err != nil { - fmt.Println(err) - } - } -} - -func exec(db *sql.DB, cmd string) error { - rows, err := db.Query(cmd) - if err != nil { - return err - } - defer rows.Close() - cols, err := rows.Columns() - if err != nil { - return err - } - if cols == nil { - return nil - } - vals := make([]interface{}, len(cols)) - for i := 0; i < len(cols); i++ { - vals[i] = new(interface{}) - if i != 0 { - fmt.Print("\t") - } - fmt.Print(cols[i]) - } - fmt.Println() - for rows.Next() { - err = rows.Scan(vals...) - if err != nil { - fmt.Println(err) - continue - } - for i := 0; i < len(vals); i++ { - if i != 0 { - fmt.Print("\t") - } - printValue(vals[i].(*interface{})) - } - fmt.Println() - - } - if rows.Err() != nil { - return rows.Err() - } - return nil -} - -func printValue(pval *interface{}) { - switch v := (*pval).(type) { - case nil: - fmt.Print("NULL") - case bool: - if v { - fmt.Print("1") - } else { - fmt.Print("0") - } - case []byte: - fmt.Print(string(v)) - case time.Time: - fmt.Print(v.Format("2006-01-02 15:04:05.999")) - default: - fmt.Print(v) - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/examples/tvp/tvp.go b/vendor/github.com/denisenkom/go-mssqldb/examples/tvp/tvp.go deleted file mode 100644 index a07bb652..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/examples/tvp/tvp.go +++ /dev/null @@ -1,151 +0,0 @@ -package main - -import ( - "database/sql" - "flag" - "fmt" - "github.com/denisenkom/go-mssqldb" - "log" -) - -var ( - debug = flag.Bool("debug", false, "enable debugging") - password = flag.String("password", "", "the database password") - port = flag.Int("port", 1433, "the database port") - server = flag.String("server", "", "the database server") - user = flag.String("user", "", "the database user") -) - -type TvpExample struct { - MessageWithoutAnyTag string - MessageWithJSONTag string `json:"message"` - MessageWithTVPTag string `tvp:"message"` - MessageJSONSkipWithTVPTag string `json:"-" tvp:"message"` - - OmitFieldJSONTag string `json:"-"` - OmitFieldTVPTag string `json:"any" tvp:"-"` - OmitFieldTVPTag2 string `tvp:"-"` -} - -const ( - crateSchema = `create schema TestTVPSchema;` - - dropSchema = `drop schema TestTVPSchema;` - - createTVP = ` - CREATE TYPE TestTVPSchema.exampleTVP AS TABLE - ( - message1 NVARCHAR(100), - message2 NVARCHAR(100), - message3 NVARCHAR(100), - message4 NVARCHAR(100) - )` - - dropTVP = `DROP TYPE TestTVPSchema.exampleTVP;` - - procedureWithTVP = ` - CREATE PROCEDURE ExecTVP - @param1 TestTVPSchema.exampleTVP READONLY - AS - BEGIN - SET NOCOUNT ON; - SELECT * FROM @param1; - END; - ` - - dropProcedure = `drop PROCEDURE ExecTVP` - - execTvp = `exec ExecTVP @param1;` -) - -func main() { - flag.Parse() - - if *debug { - fmt.Printf(" password:%s\n", *password) - fmt.Printf(" port:%d\n", *port) - fmt.Printf(" server:%s\n", *server) - fmt.Printf(" user:%s\n", *user) - } - - connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d", *server, *user, *password, *port) - if *debug { - fmt.Printf(" connString:%s\n", connString) - } - conn, err := sql.Open("sqlserver", connString) - if err != nil { - log.Fatal("Open connection failed:", err.Error()) - } - defer conn.Close() - - _, err = conn.Exec(crateSchema) - if err != nil { - log.Println(err) - return - } - defer conn.Exec(dropSchema) - - _, err = conn.Exec(createTVP) - if err != nil { - log.Println(err) - return - } - defer conn.Exec(dropTVP) - - _, err = conn.Exec(procedureWithTVP) - if err != nil { - log.Println(err) - return - } - defer conn.Exec(dropProcedure) - - exampleData := []TvpExample{ - { - MessageWithoutAnyTag: "Hello1", - MessageWithJSONTag: "Hello2", - MessageWithTVPTag: "Hello3", - MessageJSONSkipWithTVPTag: "Hello4", - OmitFieldJSONTag: "Hello5", - OmitFieldTVPTag: "Hello6", - OmitFieldTVPTag2: "Hello7", - }, - { - MessageWithoutAnyTag: "World1", - MessageWithJSONTag: "World2", - MessageWithTVPTag: "World3", - MessageJSONSkipWithTVPTag: "World4", - OmitFieldJSONTag: "World5", - OmitFieldTVPTag: "World6", - OmitFieldTVPTag2: "World7", - }, - } - - tvpType := mssql.TVP{ - TypeName: "TestTVPSchema.exampleTVP", - Value: exampleData, - } - - rows, err := conn.Query(execTvp, - sql.Named("param1", tvpType), - ) - if err != nil { - log.Println(err) - return - } - - tvpResult := make([]TvpExample, 0) - for rows.Next() { - tvpExample := TvpExample{} - err = rows.Scan(&tvpExample.MessageWithoutAnyTag, - &tvpExample.MessageWithJSONTag, - &tvpExample.MessageWithTVPTag, - &tvpExample.MessageJSONSkipWithTVPTag, - ) - if err != nil { - log.Println(err) - return - } - tvpResult = append(tvpResult, tvpExample) - } - fmt.Println(tvpResult) -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/go.mod b/vendor/github.com/denisenkom/go-mssqldb/go.mod index 1a6a38f9..096fc96b 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/go.mod +++ b/vendor/github.com/denisenkom/go-mssqldb/go.mod @@ -1,6 +1,6 @@ module github.com/denisenkom/go-mssqldb -go 1.12 +go 1.11 require ( cloud.google.com/go v0.37.4 diff --git a/vendor/github.com/denisenkom/go-mssqldb/parser.go b/vendor/github.com/denisenkom/go-mssqldb/internal/querytext/parser.go similarity index 89% rename from vendor/github.com/denisenkom/go-mssqldb/parser.go rename to vendor/github.com/denisenkom/go-mssqldb/internal/querytext/parser.go index 8021ca60..14650e38 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/parser.go +++ b/vendor/github.com/denisenkom/go-mssqldb/internal/querytext/parser.go @@ -1,4 +1,8 @@ -package mssql +// Package querytext is the old query parser and parameter substitute process. +// Do not use on new code. +// +// This package is not subject to any API compatibility guarantee. +package querytext import ( "bytes" @@ -40,7 +44,11 @@ func (p *parser) write(ch rune) { type stateFunc func(*parser) stateFunc -func parseParams(query string) (string, int) { +// ParseParams rewrites the query from using "?" placeholders +// to using "@pN" parameter names that SQL Server will accept. +// +// This function and package is not subject to any API compatibility guarantee. +func ParseParams(query string) (string, int) { p := &parser{ r: bytes.NewReader([]byte(query)), namedParams: map[string]bool{}, diff --git a/vendor/github.com/denisenkom/go-mssqldb/mssql.go b/vendor/github.com/denisenkom/go-mssqldb/mssql.go index 9065da53..e9d2bfd7 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/mssql.go +++ b/vendor/github.com/denisenkom/go-mssqldb/mssql.go @@ -14,6 +14,8 @@ import ( "strings" "time" "unicode" + + "github.com/denisenkom/go-mssqldb/internal/querytext" ) // ReturnStatus may be used to return the return value from a proc. @@ -351,7 +353,6 @@ func (d *Driver) connect(ctx context.Context, c *Connector, params connectParams processQueryText: d.processQueryText, connectionGood: true, } - conn.sess.log = d.log return conn, nil } @@ -386,7 +387,7 @@ func (c *Conn) Prepare(query string) (driver.Stmt, error) { func (c *Conn) prepareContext(ctx context.Context, query string) (*Stmt, error) { paramCount := -1 if c.processQueryText { - query, paramCount = parseParams(query) + query, paramCount = querytext.ParseParams(query) } return &Stmt{c, query, paramCount, nil}, nil } @@ -456,13 +457,13 @@ func (s *Stmt) sendQuery(args []namedValue) (err error) { var params []param if isProc(s.query) { proc.name = s.query - params, _, err = s.makeRPCParams(args, 0) + params, _, err = s.makeRPCParams(args, true) if err != nil { return } } else { var decls []string - params, decls, err = s.makeRPCParams(args, 2) + params, decls, err = s.makeRPCParams(args, false) if err != nil { return } @@ -534,8 +535,12 @@ func isProc(s string) bool { return true } -func (s *Stmt) makeRPCParams(args []namedValue, offset int) ([]param, []string, error) { +func (s *Stmt) makeRPCParams(args []namedValue, isProc bool) ([]param, []string, error) { var err error + var offset int + if !isProc { + offset = 2 + } params := make([]param, len(args)+offset) decls := make([]string, len(args)) for i, val := range args { @@ -546,7 +551,7 @@ func (s *Stmt) makeRPCParams(args []namedValue, offset int) ([]param, []string, var name string if len(val.Name) > 0 { name = "@" + val.Name - } else { + } else if !isProc { name = fmt.Sprintf("@p%d", val.Ordinal) } params[i+offset].Name = name @@ -711,6 +716,8 @@ func (rc *Rows) Next(dest []driver.Value) error { if tokdata.isError() { return rc.stmt.c.checkBadConn(tokdata.getError()) } + case ReturnStatus: + rc.stmt.c.setReturnStatus(tokdata) case error: return rc.stmt.c.checkBadConn(tokdata) } diff --git a/vendor/github.com/denisenkom/go-mssqldb/mssql_test.go b/vendor/github.com/denisenkom/go-mssqldb/mssql_test.go deleted file mode 100644 index 2ec8b956..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/mssql_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package mssql - -import ( - "context" - "testing" -) - -func TestBadOpen(t *testing.T) { - drv := driverWithProcess(t) - _, err := drv.open(context.Background(), "port=bad") - if err == nil { - t.Fail() - } -} - -func TestIsProc(t *testing.T) { - list := []struct { - s string - is bool - }{ - {"proc", true}, - {"select 1;", false}, - {"select 1", false}, - {"[proc 1]", true}, - {"[proc\n1]", false}, - {"schema.name", true}, - {"[schema].[name]", true}, - {"schema.[name]", true}, - {"[schema].name", true}, - {"schema.[proc name]", true}, - } - - for _, item := range list { - got := isProc(item.s) - if got != item.is { - t.Errorf("for %q, got %t want %t", item.s, got, item.is) - } - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/newconnector_example_test.go b/vendor/github.com/denisenkom/go-mssqldb/newconnector_example_test.go deleted file mode 100644 index 613866bb..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/newconnector_example_test.go +++ /dev/null @@ -1,143 +0,0 @@ -// +build go1.10 - -package mssql_test - -import ( - "context" - "database/sql" - "flag" - "fmt" - "log" - "net/url" - "strconv" - - mssql "github.com/denisenkom/go-mssqldb" -) - -var ( - debug = flag.Bool("debug", false, "enable debugging") - password = flag.String("password", "", "the database password") - port *int = flag.Int("port", 1433, "the database port") - server = flag.String("server", "", "the database server") - user = flag.String("user", "", "the database user") -) - -const ( - createTableSql = "CREATE TABLE TestAnsiNull (bitcol bit, charcol char(1));" - dropTableSql = "IF OBJECT_ID('TestAnsiNull', 'U') IS NOT NULL DROP TABLE TestAnsiNull;" - insertQuery1 = "INSERT INTO TestAnsiNull VALUES (0, NULL);" - insertQuery2 = "INSERT INTO TestAnsiNull VALUES (1, 'a');" - selectNullFilter = "SELECT bitcol FROM TestAnsiNull WHERE charcol = NULL;" - selectNotNullFilter = "SELECT bitcol FROM TestAnsiNull WHERE charcol <> NULL;" -) - -func makeConnURL() *url.URL { - return &url.URL{ - Scheme: "sqlserver", - Host: *server + ":" + strconv.Itoa(*port), - User: url.UserPassword(*user, *password), - } -} - -// This example shows the usage of Connector type -func ExampleConnector() { - flag.Parse() - - if *debug { - fmt.Printf(" password:%s\n", *password) - fmt.Printf(" port:%d\n", *port) - fmt.Printf(" server:%s\n", *server) - fmt.Printf(" user:%s\n", *user) - } - - connString := makeConnURL().String() - if *debug { - fmt.Printf(" connString:%s\n", connString) - } - - // Create a new connector object by calling NewConnector - connector, err := mssql.NewConnector(connString) - if err != nil { - log.Println(err) - return - } - - // Use SessionInitSql to set any options that cannot be set with the dsn string - // With ANSI_NULLS set to ON, compare NULL data with = NULL or <> NULL will return 0 rows - connector.SessionInitSQL = "SET ANSI_NULLS ON" - - // Pass connector to sql.OpenDB to get a sql.DB object - db := sql.OpenDB(connector) - defer db.Close() - - // Create and populate table - _, err = db.Exec(createTableSql) - if err != nil { - log.Println(err) - return - } - defer db.Exec(dropTableSql) - _, err = db.Exec(insertQuery1) - if err != nil { - log.Println(err) - return - } - _, err = db.Exec(insertQuery2) - if err != nil { - log.Println(err) - return - } - - var bitval bool - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - // (*Row) Scan should return ErrNoRows since ANSI_NULLS is set to ON - err = db.QueryRowContext(ctx, selectNullFilter).Scan(&bitval) - if err != nil { - if err.Error() != "sql: no rows in result set" { - log.Println(err) - return - } - } else { - log.Println("Expects an ErrNoRows error. No error is returned") - return - } - - // (*Row) Scan should return ErrNoRows since ANSI_NULLS is set to ON - err = db.QueryRowContext(ctx, selectNotNullFilter).Scan(&bitval) - if err != nil { - if err.Error() != "sql: no rows in result set" { - log.Println(err) - return - } - } else { - log.Println("Expects an ErrNoRows error. No error is returned") - return - } - - // Set ANSI_NULLS to OFF - connector.SessionInitSQL = "SET ANSI_NULLS OFF" - - // (*Row) Scan should copy data to bitval - err = db.QueryRowContext(ctx, selectNullFilter).Scan(&bitval) - if err != nil { - log.Println(err) - return - } - if bitval != false { - log.Println("Incorrect value retrieved.") - return - } - - // (*Row) Scan should copy data to bitval - err = db.QueryRowContext(ctx, selectNotNullFilter).Scan(&bitval) - if err != nil { - log.Println(err) - return - } - if bitval != true { - log.Println("Incorrect value retrieved.") - return - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/ntlm_test.go b/vendor/github.com/denisenkom/go-mssqldb/ntlm_test.go deleted file mode 100644 index db56f4e3..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/ntlm_test.go +++ /dev/null @@ -1,76 +0,0 @@ -// +build !windows - -package mssql - -import ( - "encoding/hex" - "testing" -) - -func TestLMOWFv1(t *testing.T) { - hash := lmHash("Password") - val := [21]byte{ - 0xe5, 0x2c, 0xac, 0x67, 0x41, 0x9a, 0x9a, 0x22, - 0x4a, 0x3b, 0x10, 0x8f, 0x3f, 0xa6, 0xcb, 0x6d, - 0, 0, 0, 0, 0, - } - if hash != val { - t.Errorf("got:\n%sexpected:\n%s", hex.Dump(hash[:]), hex.Dump(val[:])) - } -} - -func TestNTLMOWFv1(t *testing.T) { - hash := ntlmHash("Password") - val := [21]byte{ - 0xa4, 0xf4, 0x9c, 0x40, 0x65, 0x10, 0xbd, 0xca, 0xb6, 0x82, 0x4e, 0xe7, 0xc3, 0x0f, 0xd8, 0x52, - 0, 0, 0, 0, 0, - } - if hash != val { - t.Errorf("got:\n%sexpected:\n%s", hex.Dump(hash[:]), hex.Dump(val[:])) - } -} - -func TestNTLMv1Response(t *testing.T) { - challenge := [8]byte{ - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - } - nt := ntResponse(challenge, "Password") - val := [24]byte{ - 0x67, 0xc4, 0x30, 0x11, 0xf3, 0x02, 0x98, 0xa2, 0xad, 0x35, 0xec, 0xe6, 0x4f, 0x16, 0x33, 0x1c, - 0x44, 0xbd, 0xbe, 0xd9, 0x27, 0x84, 0x1f, 0x94, - } - if nt != val { - t.Errorf("got:\n%sexpected:\n%s", hex.Dump(nt[:]), hex.Dump(val[:])) - } -} - -func TestLMv1Response(t *testing.T) { - challenge := [8]byte{ - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - } - nt := lmResponse(challenge, "Password") - val := [24]byte{ - 0x98, 0xde, 0xf7, 0xb8, 0x7f, 0x88, 0xaa, 0x5d, 0xaf, 0xe2, 0xdf, 0x77, 0x96, 0x88, 0xa1, 0x72, - 0xde, 0xf1, 0x1c, 0x7d, 0x5c, 0xcd, 0xef, 0x13, - } - if nt != val { - t.Errorf("got:\n%sexpected:\n%s", hex.Dump(nt[:]), hex.Dump(val[:])) - } -} - -func TestNTLMSessionResponse(t *testing.T) { - challenge := [8]byte{ - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - } - nonce := [8]byte{ - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - } - nt := ntlmSessionResponse(nonce, challenge, "Password") - val := [24]byte{ - 0x75, 0x37, 0xf8, 0x03, 0xae, 0x36, 0x71, 0x28, 0xca, 0x45, 0x82, 0x04, 0xbd, 0xe7, 0xca, 0xf8, - 0x1e, 0x97, 0xed, 0x26, 0x83, 0x26, 0x72, 0x32, - } - if nt != val { - t.Errorf("got:\n%sexpected:\n%s", hex.Dump(nt[:]), hex.Dump(val[:])) - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/parser_test.go b/vendor/github.com/denisenkom/go-mssqldb/parser_test.go deleted file mode 100644 index d09250df..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/parser_test.go +++ /dev/null @@ -1,60 +0,0 @@ -package mssql - -import ( - "testing" -) - -func TestParseParams(t *testing.T) { - values := []struct { - s string - d string - n int - }{ - {"select ?", "select @p1", 1}, - {"select ?, ?", "select @p1, @p2", 2}, - {"select ? -- ?", "select @p1 -- ?", 1}, - {"select ? -- ?\n, ?", "select @p1 -- ?\n, @p2", 2}, - {"select ? - ?", "select @p1 - @p2", 2}, - {"select ? /* ? */, ?", "select @p1 /* ? */, @p2", 2}, - {"select ? /* ? * ? */, ?", "select @p1 /* ? * ? */, @p2", 2}, - {"select \"foo?\", [foo?], 'foo?', ?", "select \"foo?\", [foo?], 'foo?', @p1", 1}, - {"select \"x\"\"y\", [x]]y], 'x''y', ?", "select \"x\"\"y\", [x]]y], 'x''y', @p1", 1}, - {"select \"foo?\", ?", "select \"foo?\", @p1", 1}, - {"select 'foo?', ?", "select 'foo?', @p1", 1}, - {"select [foo?], ?", "select [foo?], @p1", 1}, - {"select $1", "select @p1", 1}, - {"select $1, $2", "select @p1, @p2", 2}, - {"select $1, $1", "select @p1, @p1", 1}, - {"select :1", "select @p1", 1}, - {"select :1, :2", "select @p1, @p2", 2}, - {"select :1, :1", "select @p1, @p1", 1}, - {"select ?1", "select @p1", 1}, - {"select ?1, ?2", "select @p1, @p2", 2}, - {"select ?1, ?1", "select @p1, @p1", 1}, - {"select $12", "select @p12", 12}, - {"select ? /* ? /* ? */ ? */ ?", "select @p1 /* ? /* ? */ ? */ @p2", 2}, - {"select ? /* ? / ? */ ?", "select @p1 /* ? / ? */ @p2", 2}, - {"select $", "select $", 0}, - {"select x::y", "select x:@y", 1}, - {"select '", "select '", 0}, - {"select \"", "select \"", 0}, - {"select [", "select [", 0}, - {"select []", "select []", 0}, - {"select -", "select -", 0}, - {"select /", "select /", 0}, - {"select 1/1", "select 1/1", 0}, - {"select /*", "select /*", 0}, - {"select /**", "select /**", 0}, - {"select /*/", "select /*/", 0}, - } - - for _, v := range values { - d, n := parseParams(v.s) - if d != v.d { - t.Errorf("Parse params don't match for %s, got %s but expected %s", v.s, d, v.d) - } - if n != v.n { - t.Errorf("Parse number of params don't match for %s, got %d but expected %d", v.s, n, v.n) - } - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/queries_go110_test.go b/vendor/github.com/denisenkom/go-mssqldb/queries_go110_test.go deleted file mode 100644 index 197ddedb..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/queries_go110_test.go +++ /dev/null @@ -1,189 +0,0 @@ -// +build go1.10 - -package mssql - -import ( - "context" - "database/sql" - "strings" - "testing" - "time" - - "cloud.google.com/go/civil" -) - -func TestSessionInitSQL(t *testing.T) { - checkConnStr(t) - SetLogger(testLogger{t}) - - d := &Driver{} - connector, err := d.OpenConnector(makeConnStr(t).String()) - if err != nil { - t.Fatal("unable to open connector", err) - } - - // Do not use these settings in your application - // unless you know what they do. - // Thes are for this unit test only. - // - // Sessions will be reset even if SessionInitSQL is not set. - connector.SessionInitSQL = ` -SET XACT_ABORT ON; -- 16384 -SET ANSI_NULLS ON; -- 32 -SET ARITHIGNORE ON; -- 128 -` - - pool := sql.OpenDB(connector) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - var opt int32 - err = pool.QueryRowContext(ctx, ` -select Options = @@OPTIONS; -`).Scan(&opt) - if err != nil { - t.Fatal("failed to run query", err) - } - mask := int32(16384 | 128 | 32) - - if opt&mask != mask { - t.Fatal("incorrect session settings", opt) - } -} - -func TestParameterTypes(t *testing.T) { - checkConnStr(t) - pool, err := sql.Open("sqlserver", makeConnStr(t).String()) - if err != nil { - t.Fatal(err) - } - defer pool.Close() - - tin, err := time.Parse(time.RFC3339, "2006-01-02T22:04:05-07:00") - if err != nil { - t.Fatal(err) - } - - var nv, v, nvcm, vcm, dt1, dt2, tm, d, dto string - row := pool.QueryRow(` -select - nv = SQL_VARIANT_PROPERTY(@nv,'BaseType'), - v = SQL_VARIANT_PROPERTY(@v,'BaseType'), - @nvcm, - @vcm, - dt1 = SQL_VARIANT_PROPERTY(@dt1,'BaseType'), - dt2 = SQL_VARIANT_PROPERTY(@dt2,'BaseType'), - d = SQL_VARIANT_PROPERTY(@d,'BaseType'), - tm = SQL_VARIANT_PROPERTY(@tm,'BaseType'), - dto = SQL_VARIANT_PROPERTY(@dto,'BaseType') -; - `, - sql.Named("nv", "base type nvarchar"), - sql.Named("v", VarChar("base type varchar")), - sql.Named("nvcm", NVarCharMax(strings.Repeat("x", 5000))), - sql.Named("vcm", VarCharMax(strings.Repeat("x", 5000))), - sql.Named("dt1", DateTime1(tin)), - sql.Named("dt2", civil.DateTimeOf(tin)), - sql.Named("d", civil.DateOf(tin)), - sql.Named("tm", civil.TimeOf(tin)), - sql.Named("dto", DateTimeOffset(tin)), - ) - err = row.Scan(&nv, &v, &nvcm, &vcm, &dt1, &dt2, &d, &tm, &dto) - if err != nil { - t.Fatal(err) - } - - if nv != "nvarchar" { - t.Errorf(`want "nvarchar" got %q`, nv) - } - if v != "varchar" { - t.Errorf(`want "varchar" got %q`, v) - } - if nvcm != strings.Repeat("x", 5000) { - t.Errorf(`incorrect value returned for nvarchar(max): %q`, nvcm) - } - if vcm != strings.Repeat("x", 5000) { - t.Errorf(`incorrect value returned for varchar(max): %q`, vcm) - } - if dt1 != "datetime" { - t.Errorf(`want "datetime" got %q`, dt1) - } - if dt2 != "datetime2" { - t.Errorf(`want "datetime2" got %q`, dt2) - } - if d != "date" { - t.Errorf(`want "date" got %q`, d) - } - if tm != "time" { - t.Errorf(`want "time" got %q`, tm) - } - if dto != "datetimeoffset" { - t.Errorf(`want "datetimeoffset" got %q`, dto) - } -} - -func TestParameterValues(t *testing.T) { - checkConnStr(t) - pool, err := sql.Open("sqlserver", makeConnStr(t).String()) - if err != nil { - t.Fatal(err) - } - defer pool.Close() - - sin := "high five" - tin, err := time.Parse(time.RFC3339, "2006-01-02T22:04:05-07:00") - if err != nil { - t.Fatal(err) - } - - var nv, v, tgo, dt1, dt2, tm, d, dto string - err = pool.QueryRow(` -select - nv = @nv, - v = @v, - tgo = @tgo, - dt1 = convert(nvarchar(200), @dt1, 121), - dt2 = convert(nvarchar(200), @dt2, 121), - d = convert(nvarchar(200), @d, 121), - tm = convert(nvarchar(200), @tm, 121), - dto = convert(nvarchar(200), @dto, 121) -; - `, - sql.Named("nv", sin), - sql.Named("v", sin), - sql.Named("tgo", tin), - sql.Named("dt1", DateTime1(tin)), - sql.Named("dt2", civil.DateTimeOf(tin)), - sql.Named("d", civil.DateOf(tin)), - sql.Named("tm", civil.TimeOf(tin)), - sql.Named("dto", DateTimeOffset(tin)), - ).Scan(&nv, &v, &tgo, &dt1, &dt2, &d, &tm, &dto) - if err != nil { - t.Fatal(err) - } - if want := sin; nv != want { - t.Errorf(`want %q got %q`, want, nv) - } - if want := sin; v != want { - t.Errorf(`want %q got %q`, want, v) - } - if want := "2006-01-02T22:04:05-07:00"; tgo != want { - t.Errorf(`want %q got %q`, want, tgo) - } - if want := "2006-01-02 22:04:05.000"; dt1 != want { - t.Errorf(`want %q got %q`, want, dt1) - } - if want := "2006-01-02 22:04:05.0000000"; dt2 != want { - t.Errorf(`want %q got %q`, want, dt2) - } - if want := "2006-01-02"; d != want { - t.Errorf(`want %q got %q`, want, d) - } - if want := "22:04:05.0000000"; tm != want { - t.Errorf(`want %q got %q`, want, tm) - } - if want := "2006-01-02 22:04:05.0000000 -07:00"; dto != want { - t.Errorf(`want %q got %q`, want, dto) - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/queries_go19_test.go b/vendor/github.com/denisenkom/go-mssqldb/queries_go19_test.go deleted file mode 100644 index 5b35a86b..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/queries_go19_test.go +++ /dev/null @@ -1,924 +0,0 @@ -// +build go1.9 - -package mssql - -import ( - "bytes" - "context" - "database/sql" - "fmt" - "regexp" - "testing" - "time" -) - -func TestOutputParam(t *testing.T) { - checkConnStr(t) - SetLogger(testLogger{t}) - - db, err := sql.Open("sqlserver", makeConnStr(t).String()) - if err != nil { - t.Fatalf("failed to open driver sqlserver") - } - defer db.Close() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - t.Run("sp with rows", func(t *testing.T) { - sqltextcreate := ` -CREATE PROCEDURE spwithrows - @intparam INT = NULL OUTPUT -AS -BEGIN - -- return 2 rows - SELECT @intparam - union - SELECT 20 - - -- set output parameter value - SELECT @intparam = 10 -END; -` - sqltextdrop := `DROP PROCEDURE spwithrows;` - sqltextrun := `spwithrows` - - db.ExecContext(ctx, sqltextdrop) - _, err = db.ExecContext(ctx, sqltextcreate) - if err != nil { - t.Fatal(err) - } - defer db.ExecContext(ctx, sqltextdrop) - if err != nil { - t.Error(err) - } - - var intparam int = 5 - rows, err := db.QueryContext(ctx, sqltextrun, - sql.Named("intparam", sql.Out{Dest: &intparam}), - ) - if err != nil { - t.Error(err) - } - // reading first row - if !rows.Next() { - t.Error("Next returned false") - } - var rowval int - err = rows.Scan(&rowval) - if err != nil { - t.Error(err) - } - if rowval != 5 { - t.Errorf("expected 5, got %d", rowval) - } - - // if uncommented would trigger race condition warning - //if intparam != 10 { - // t.Log("output parameter value is not yet 10, it is ", intparam) - //} - - // reading second row - if !rows.Next() { - t.Error("Next returned false") - } - err = rows.Scan(&rowval) - if err != nil { - t.Error(err) - } - if rowval != 20 { - t.Errorf("expected 20, got %d", rowval) - } - - if rows.Next() { - t.Error("Next returned true but should return false after last row was returned") - } - - if intparam != 10 { - t.Errorf("expected 10, got %d", intparam) - } - }) - - t.Run("sp with no rows", func(t *testing.T) { - sqltextcreate := ` -CREATE PROCEDURE abassign - @aid INT = 5, - @bid INT = NULL OUTPUT, - @cstr NVARCHAR(2000) = NULL OUTPUT, - @datetime datetime = NULL OUTPUT -AS -BEGIN - SELECT @bid = @aid, @cstr = 'OK', @datetime = '2010-01-01T00:00:00'; -END; -` - sqltextdrop := `DROP PROCEDURE abassign;` - sqltextrun := `abassign` - - db.ExecContext(ctx, sqltextdrop) - _, err = db.ExecContext(ctx, sqltextcreate) - if err != nil { - t.Fatal(err) - } - defer db.ExecContext(ctx, sqltextdrop) - if err != nil { - t.Error(err) - } - - t.Run("should work", func(t *testing.T) { - var bout int64 - var cout string - _, err = db.ExecContext(ctx, sqltextrun, - sql.Named("aid", 5), - sql.Named("bid", sql.Out{Dest: &bout}), - sql.Named("cstr", sql.Out{Dest: &cout}), - ) - if err != nil { - t.Error(err) - } - - if bout != 5 { - t.Errorf("expected 5, got %d", bout) - } - - if cout != "OK" { - t.Errorf("expected OK, got %s", cout) - } - }) - - t.Run("should work if aid is not passed", func(t *testing.T) { - var bout int64 - var cout string - _, err = db.ExecContext(ctx, sqltextrun, - sql.Named("bid", sql.Out{Dest: &bout}), - sql.Named("cstr", sql.Out{Dest: &cout}), - ) - if err != nil { - t.Error(err) - } - - if bout != 5 { - t.Errorf("expected 5, got %d", bout) - } - - if cout != "OK" { - t.Errorf("expected OK, got %s", cout) - } - }) - - t.Run("should work for DateTime1 parameter", func(t *testing.T) { - tin, err := time.Parse(time.RFC3339, "2006-01-02T22:04:05-07:00") - if err != nil { - t.Fatal(err) - } - expected, err := time.Parse(time.RFC3339, "2010-01-01T00:00:00-00:00") - if err != nil { - t.Fatal(err) - } - var datetime_param DateTime1 - datetime_param = DateTime1(tin) - _, err = db.ExecContext(ctx, sqltextrun, - sql.Named("datetime", sql.Out{Dest: &datetime_param}), - ) - if err != nil { - t.Error(err) - } - if time.Time(datetime_param).UTC() != expected.UTC() { - t.Errorf("Datetime returned '%v' does not match expected value '%v'", - time.Time(datetime_param).UTC(), expected.UTC()) - } - }) - - t.Run("destination is not a pointer", func(t *testing.T) { - var int_out int64 - var str_out string - // test when destination is not a pointer - _, actual := db.ExecContext(ctx, sqltextrun, - sql.Named("bid", sql.Out{Dest: int_out}), - sql.Named("cstr", sql.Out{Dest: &str_out}), - ) - pattern := ".*destination not a pointer.*" - match, err := regexp.MatchString(pattern, actual.Error()) - if err != nil { - t.Error(err) - } - if !match { - t.Errorf("Error '%v', does not match pattern '%v'.", actual, pattern) - } - }) - - t.Run("should convert int64 to int", func(t *testing.T) { - var bout int - var cout string - _, err := db.ExecContext(ctx, sqltextrun, - sql.Named("bid", sql.Out{Dest: &bout}), - sql.Named("cstr", sql.Out{Dest: &cout}), - ) - if err != nil { - t.Error(err) - } - - if bout != 5 { - t.Errorf("expected 5, got %d", bout) - } - }) - - t.Run("should fail if destination has invalid type", func(t *testing.T) { - // Error type should not be supported - var err_out Error - _, err := db.ExecContext(ctx, sqltextrun, - sql.Named("bid", sql.Out{Dest: &err_out}), - ) - if err == nil { - t.Error("Expected to fail but it didn't") - } - - // double inderection should not work - var out_out = sql.Out{Dest: &err_out} - _, err = db.ExecContext(ctx, sqltextrun, - sql.Named("bid", sql.Out{Dest: out_out}), - ) - if err == nil { - t.Error("Expected to fail but it didn't") - } - }) - - t.Run("should fail if parameter has invalid type", func(t *testing.T) { - // passing invalid parameter type - var err_val Error - _, err = db.ExecContext(ctx, sqltextrun, err_val) - if err == nil { - t.Error("Expected to fail but it didn't") - } - }) - - t.Run("destination is a nil pointer", func(t *testing.T) { - var str_out string - // test when destination is nil pointer - _, actual := db.ExecContext(ctx, sqltextrun, - sql.Named("bid", sql.Out{Dest: nil}), - sql.Named("cstr", sql.Out{Dest: &str_out}), - ) - pattern := ".*destination is a nil pointer.*" - match, err := regexp.MatchString(pattern, actual.Error()) - if err != nil { - t.Error(err) - } - if !match { - t.Errorf("Error '%v', does not match pattern '%v'.", actual, pattern) - } - }) - - t.Run("destination is a nil pointer 2", func(t *testing.T) { - var int_ptr *int - _, actual := db.ExecContext(ctx, sqltextrun, - sql.Named("bid", sql.Out{Dest: int_ptr}), - ) - pattern := ".*destination is a nil pointer.*" - match, err := regexp.MatchString(pattern, actual.Error()) - if err != nil { - t.Error(err) - } - if !match { - t.Errorf("Error '%v', does not match pattern '%v'.", actual, pattern) - } - }) - - t.Run("pointer to a pointer", func(t *testing.T) { - var str_out *string - _, actual := db.ExecContext(ctx, sqltextrun, - sql.Named("cstr", sql.Out{Dest: &str_out}), - ) - pattern := ".*destination is a pointer to a pointer.*" - match, err := regexp.MatchString(pattern, actual.Error()) - if err != nil { - t.Error(err) - } - if !match { - t.Errorf("Error '%v', does not match pattern '%v'.", actual, pattern) - } - }) - }) -} - -func TestOutputINOUTParam(t *testing.T) { - sqltextcreate := ` -CREATE PROCEDURE abinout - @aid INT = 1, - @bid INT = 2 OUTPUT, - @cstr NVARCHAR(2000) = NULL OUTPUT, - @vout VARCHAR(2000) = NULL OUTPUT, - @nullint INT = NULL OUTPUT, - @nullfloat FLOAT = NULL OUTPUT, - @nullstr NVARCHAR(10) = NULL OUTPUT, - @nullbit BIT = NULL OUTPUT, - @varbin VARBINARY(10) = NULL OUTPUT -AS -BEGIN - SELECT - @bid = @aid + @bid, - @cstr = 'OK', - @Vout = 'DREAM' - ; -END; -` - sqltextdrop := `DROP PROCEDURE abinout;` - sqltextrun := `abinout` - - checkConnStr(t) - SetLogger(testLogger{t}) - - db, err := sql.Open("sqlserver", makeConnStr(t).String()) - if err != nil { - t.Fatalf("failed to open driver sqlserver") - } - defer db.Close() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - db.ExecContext(ctx, sqltextdrop) - _, err = db.ExecContext(ctx, sqltextcreate) - if err != nil { - t.Fatal(err) - } - defer db.ExecContext(ctx, sqltextdrop) - - t.Run("original test", func(t *testing.T) { - var bout int64 = 3 - var cout string - var vout VarChar - _, err = db.ExecContext(ctx, sqltextrun, - sql.Named("aid", 5), - sql.Named("bid", sql.Out{Dest: &bout}), - sql.Named("cstr", sql.Out{Dest: &cout}), - sql.Named("vout", sql.Out{Dest: &vout}), - ) - if err != nil { - t.Error(err) - } - - if bout != 8 { - t.Errorf("expected 8, got %d", bout) - } - - if cout != "OK" { - t.Errorf("expected OK, got %s", cout) - } - if string(vout) != "DREAM" { - t.Errorf("expected DREAM, got %s", vout) - } - }) - - t.Run("test null values returned into nullable", func(t *testing.T) { - var nullint sql.NullInt64 - var nullfloat sql.NullFloat64 - var nullstr sql.NullString - var nullbit sql.NullBool - _, err = db.ExecContext(ctx, sqltextrun, - sql.Named("nullint", sql.Out{Dest: &nullint}), - sql.Named("nullfloat", sql.Out{Dest: &nullfloat}), - sql.Named("nullstr", sql.Out{Dest: &nullstr}), - sql.Named("nullbit", sql.Out{Dest: &nullbit}), - ) - if err != nil { - t.Error(err) - } - - if nullint.Valid { - t.Errorf("expected NULL, got %v", nullint) - } - if nullfloat.Valid { - t.Errorf("expected NULL, got %v", nullfloat) - } - if nullstr.Valid { - t.Errorf("expected NULL, got %v", nullstr) - } - if nullbit.Valid { - t.Errorf("expected NULL, got %v", nullbit) - } - }) - - // Not yet supported - //t.Run("test null values returned into pointers", func(t *testing.T) { - // var nullint *int64 - // var nullfloat *float64 - // var nullstr *string - // var nullbit *bool - // _, err = db.ExecContext(ctx, sqltextrun, - // sql.Named("nullint", sql.Out{Dest: &nullint}), - // sql.Named("nullfloat", sql.Out{Dest: &nullfloat}), - // sql.Named("nullstr", sql.Out{Dest: &nullstr}), - // sql.Named("nullbit", sql.Out{Dest: &nullbit}), - // ) - // if err != nil { - // t.Error(err) - // } - - // if nullint != nil { - // t.Errorf("expected NULL, got %v", nullint) - // } - // if nullfloat != nil { - // t.Errorf("expected NULL, got %v", nullfloat) - // } - // if nullstr != nil { - // t.Errorf("expected NULL, got %v", nullstr) - // } - // if nullbit != nil { - // t.Errorf("expected NULL, got %v", nullbit) - // } - //}) - - t.Run("test non null values into nullable", func(t *testing.T) { - nullint := sql.NullInt64{10, true} - nullfloat := sql.NullFloat64{1.5, true} - nullstr := sql.NullString{"hello", true} - nullbit := sql.NullBool{true, true} - _, err = db.ExecContext(ctx, sqltextrun, - sql.Named("nullint", sql.Out{Dest: &nullint}), - sql.Named("nullfloat", sql.Out{Dest: &nullfloat}), - sql.Named("nullstr", sql.Out{Dest: &nullstr}), - sql.Named("nullbit", sql.Out{Dest: &nullbit}), - ) - if err != nil { - t.Error(err) - } - if !nullint.Valid { - t.Error("expected non null value, but got null") - } - if nullint.Int64 != 10 { - t.Errorf("expected 10, got %d", nullint.Int64) - } - if !nullfloat.Valid { - t.Error("expected non null value, but got null") - } - if nullfloat.Float64 != 1.5 { - t.Errorf("expected 1.5, got %v", nullfloat.Float64) - } - if !nullstr.Valid { - t.Error("expected non null value, but got null") - } - if nullstr.String != "hello" { - t.Errorf("expected hello, got %s", nullstr.String) - } - }) - t.Run("test return into byte[]", func(t *testing.T) { - cstr := []byte{1, 2, 3} - _, err = db.ExecContext(ctx, sqltextrun, - sql.Named("varbin", sql.Out{Dest: &cstr}), - ) - if err != nil { - t.Error(err) - } - expected := []byte{1, 2, 3} - if bytes.Compare(cstr, expected) != 0 { - t.Errorf("expected [1,2,3], got %v", cstr) - } - }) - t.Run("test int into string", func(t *testing.T) { - var str string - _, err = db.ExecContext(ctx, sqltextrun, - sql.Named("bid", sql.Out{Dest: &str}), - ) - if err != nil { - t.Error(err) - } - if str != "1" { - t.Errorf("expected '1', got %v", str) - } - }) - t.Run("typeless null for output parameter should return error", func(t *testing.T) { - var val interface{} - _, actual := db.ExecContext(ctx, sqltextrun, - sql.Named("bid", sql.Out{Dest: &val}), - ) - if actual == nil { - t.Error("Expected to fail but didn't") - } - pattern := ".*MSSQL does not allow NULL value without type for OUTPUT parameters.*" - match, err := regexp.MatchString(pattern, actual.Error()) - if err != nil { - t.Error(err) - } - if !match { - t.Errorf("Error '%v', does not match pattern '%v'.", actual, pattern) - } - }) -} - -// TestOutputParamWithRows tests reading output parameter before and after -// retrieving rows from the result set of a stored procedure. SQL Server sends output -// parameters after all the rows are returned. Therefore, if the output parameter -// is read before all the rows are retrieved, the value will be incorrect. -// -// Issue https://github.com/denisenkom/go-mssqldb/issues/378 -func TestOutputParamWithRows(t *testing.T) { - sqltextcreate := ` - CREATE PROCEDURE spwithoutputandrows - @bitparam BIT OUTPUT - AS BEGIN - SET @bitparam = 1 - SELECT 'Row 1' - END - ` - sqltextdrop := `DROP PROCEDURE spwithoutputandrows;` - sqltextrun := `spwithoutputandrows` - - checkConnStr(t) - SetLogger(testLogger{t}) - - db, err := sql.Open("sqlserver", makeConnStr(t).String()) - if err != nil { - t.Fatalf("failed to open driver sqlserver") - } - defer db.Close() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - db.ExecContext(ctx, sqltextdrop) - _, err = db.ExecContext(ctx, sqltextcreate) - if err != nil { - t.Fatal(err) - } - defer db.ExecContext(ctx, sqltextdrop) - - t.Run("Retrieve output after reading rows", func(t *testing.T) { - var bitout int64 = 5 - rows, err := db.QueryContext(ctx, sqltextrun, sql.Named("bitparam", sql.Out{Dest: &bitout})) - if err != nil { - t.Error(err) - } else { - defer rows.Close() - var strrow string - for rows.Next() { - err = rows.Scan(&strrow) - } - if bitout != 1 { - t.Errorf("expected 1, got %d", bitout) - } - } - }) - - t.Run("Retrieve output before reading rows", func(t *testing.T) { - var bitout int64 = 5 - rows, err := db.QueryContext(ctx, sqltextrun, sql.Named("bitparam", sql.Out{Dest: &bitout})) - if err != nil { - t.Error(err) - } else { - defer rows.Close() - if bitout != 5 { - t.Errorf("expected 5, got %d", bitout) - } - } - }) -} - -// TestTLSServerReadClose tests writing to an encrypted database connection. -// Currently the database server will close the connection while the server is -// reading the TDS packets and before any of the data has been parsed. -// -// When two queries are sent in reverse order, they PASS, but if we send only -// a single ping (SELECT 1;) first, then the long query the query fails. -// -// The long query text is never parsed. In fact, you can comment out, return -// early, or have malformed sql in the long query text. Just the length matters. -// The error happens when sending the TDS Batch packet to SQL Server the server -// closes the connection.. -// -// It appears the driver sends valid TDS packets. In fact, if prefixed with 4 -// "SELECT 1;" TDS Batch queries then the long query works, but if zero or one -// "SELECT 1;" TDS Batch queries are send prior the long query fails to send. -// -// Lastly, this only manafests itself with an encrypted connection. This has been -// observed with SQL Server Azure, SQL Server 13.0.1742 on Windows, and SQL Server -// 14.0.900.75 on Linux. It also fails when using the "dev.boringcrypto" (a C based -// TLS crypto). I haven't found any knobs on SQL Server to expose the error message -// nor have I found a good way to decrypt the TDS stream. KeyLogWriter in the TLS -// config may help with that, but wireshark wasn't decrypting TDS based TLS streams -// even when using that. -// -// Issue https://github.com/denisenkom/go-mssqldb/issues/166 -func TestTLSServerReadClose(t *testing.T) { - query := ` -with - config_cte (config) as ( - select * - from ( values - ('_partition:{\"Fill\":{\"PatternType\":\"solid\",\"FgColor\":\"99ff99\"}}') - , ('_separation:{\"Fill\":{\"PatternType\":\"solid\",\"FgColor\":\"99ffff\"}}') - , ('Monthly Earnings:\$#,##0.00 ;(\$#,##0.00)') - , ('Weekly Earnings:\$#,##0.00 ;(\$#,##0.00)') - , ('Total Earnings:\$#,##0.00 ;(\$#,##0.00)') - , ('Average Earnings:\$#,##0.00 ;(\$#,##0.00)') - , ('Last Month Earning:#,##0.00 ;(#,##0.00)') - , ('Award:\$#,##0.00 ;(\$#,##0.00)') - , ('Amount:\$#,##0.00 ;(\$#,##0.00)') - , ('Grand Total:\$#,##0.00 ;(\$#,##0.00)') - , ('Total:\$#,##0.00 ;(\$#,##0.00)') - , ('Price Each:\$#,##0.00 ;(\$#,##0.00)') - , ('Hyperwallet:\$#,##0.00 ;(\$#,##0.00)') - , ('Credit/Debit:\$#,##0.00 ;(\$#,##0.00)') - , ('Earning:#,##0.00 ;(#,##0.00)') - , ('Change Earning:#,##0.00 ;(#,##0.00)') - , ('CheckAmount:#,##0.00 ;(#,##0.00)') - , ('Residual:#,##0.00 ;(#,##0.00)') - , ('Prev Residual:#,##0.00 ;(#,##0.00)') - , ('Team Bonuses:#,##0.00 ;(#,##0.00)') - , ('Change:#,##0.00 ;(#,##0.00)') - , ('Shipping Total:#,##0.00 ;(#,##0.00)') - , ('SubTotal:\$#,##0.00 ;(\$#,##0.00)') - , ('Total Diff:#,##0.00 ;(#,##0.00)') - , ('SubTotal Diff:#,##0.00 ;(#,##0.00)') - , ('Return Total:#,##0.00 ;(#,##0.00)') - , ('Return SubTotal:#,##0.00 ;(#,##0.00)') - , ('Return Total Diff:#,##0.00 ;(#,##0.00)') - , ('Return SubTotal Diff:#,##0.00 ;(#,##0.00)') - , ('Cancel Total:#,##0.00 ;(#,##0.00)') - , ('Cancel SubTotal:#,##0.00 ;(#,##0.00)') - , ('Cancel Total Diff:#,##0.00 ;(#,##0.00)') - , ('Cancel SubTotal Diff:#,##0.00 ;(#,##0.00)') - , ('Replacement Total:#,##0.00 ;(#,##0.00)') - , ('Replacement SubTotal:#,##0.00 ;(#,##0.00)') - , ('Replacement Total Diff:#,##0.00 ;(#,##0.00)') - , ('Replacement SubTotal Diff:#,##0.00 ;(#,##0.00)') - , ('Jan Residual:#,##0.00 ;(#,##0.00)') - , ('Jan Bonus:#,##0.00 ;(#,##0.00)') - , ('Jan Total:#,##0.00 ;(#,##0.00)') - , ('January Residual:#,##0.00 ;(#,##0.00)') - , ('Feb Residual:#,##0.00 ;(#,##0.00)') - , ('Feb Bonus:#,##0.00 ;(#,##0.00)') - , ('Feb Total:#,##0.00 ;(#,##0.00)') - , ('February Residual:#,##0.00 ;(#,##0.00)') - , ('Mar Residual:#,##0.00 ;(#,##0.00)') - , ('Mar Bonus:#,##0.00 ;(#,##0.00)') - , ('Mar Total:#,##0.00 ;(#,##0.00)') - , ('March Residual:#,##0.00 ;(#,##0.00)') - , ('Apr Residual:#,##0.00 ;(#,##0.00)') - , ('Apr Bonus:#,##0.00 ;(#,##0.00)') - , ('Apr Total:#,##0.00 ;(#,##0.00)') - , ('April Residual:#,##0.00 ;(#,##0.00)') - , ('May Residual:#,##0.00 ;(#,##0.00)') - , ('May Bonus:#,##0.00 ;(#,##0.00)') - , ('May Total:#,##0.00 ;(#,##0.00)') - , ('Jun Residual:#,##0.00 ;(#,##0.00)') - , ('Jun Bonus:#,##0.00 ;(#,##0.00)') - , ('Jun Total:#,##0.00 ;(#,##0.00)') - , ('June Residual:#,##0.00 ;(#,##0.00)') - , ('Jul Residual:#,##0.00 ;(#,##0.00)') - , ('Jul Bonus:#,##0.00 ;(#,##0.00)') - , ('Jul Total:#,##0.00 ;(#,##0.00)') - , ('July Residual:#,##0.00 ;(#,##0.00)') - , ('Aug Residual:#,##0.00 ;(#,##0.00)') - , ('Aug Bonus:#,##0.00 ;(#,##0.00)') - , ('Aug Total:#,##0.00 ;(#,##0.00)') - , ('August Residual:#,##0.00 ;(#,##0.00)') - , ('Sep Residual:#,##0.00 ;(#,##0.00)') - , ('Sep Bonus:#,##0.00 ;(#,##0.00)') - , ('Sep Total:#,##0.00 ;(#,##0.00)') - , ('September Residual:#,##0.00 ;(#,##0.00)') - , ('Oct Residual:#,##0.00 ;(#,##0.00)') - , ('Oct Bonus:#,##0.00 ;(#,##0.00)') - , ('Oct Total:#,##0.00 ;(#,##0.00)') - , ('October Residual:#,##0.00 ;(#,##0.00)') - , ('Nov Residual:#,##0.00 ;(#,##0.00)') - , ('Nov Bonus:#,##0.00 ;(#,##0.00)') - , ('Nov Total:#,##0.00 ;(#,##0.00)') - , ('November Residual:#,##0.00 ;(#,##0.00)') - , ('Dec Residual:#,##0.00 ;(#,##0.00)') - , ('Dec Bonus:#,##0.00 ;(#,##0.00)') - , ('Dec Total:#,##0.00 ;(#,##0.00)') - , ('December Residual:#,##0.00 ;(#,##0.00)') - , ('January Bonus:#,##0.00 ;(#,##0.00)') - , ('February Bonus:#,##0.00 ;(#,##0.00)') - , ('March Bonus:#,##0.00 ;(#,##0.00)') - , ('April Bonus:#,##0.00 ;(#,##0.00)') - , ('May Bonus:#,##0.00 ;(#,##0.00)') - , ('June Bonus:#,##0.00 ;(#,##0.00)') - , ('July Bonus:#,##0.00 ;(#,##0.00)') - , ('August Bonus:#,##0.00 ;(#,##0.00)') - , ('September Bonus:#,##0.00 ;(#,##0.00)') - , ('October Bonus:#,##0.00 ;(#,##0.00)') - , ('November Bonus:#,##0.00 ;(#,##0.00)') - , ('December Bonus:#,##0.00 ;(#,##0.00)') - , ('January Adj:#,##0.00 ;(#,##0.00)') - , ('February Adj:#,##0.00 ;(#,##0.00)') - , ('March Adj:#,##0.00 ;(#,##0.00)') - , ('April Adj:#,##0.00 ;(#,##0.00)') - , ('May Adj:#,##0.00 ;(#,##0.00)') - , ('June Adj:#,##0.00 ;(#,##0.00)') - , ('July Adj:#,##0.00 ;(#,##0.00)') - , ('August Adj:#,##0.00 ;(#,##0.00)') - , ('September Adj:#,##0.00 ;(#,##0.00)') - , ('October Adj:#,##0.00 ;(#,##0.00)') - , ('November Adj:#,##0.00 ;(#,##0.00)') - , ('December Adj:#,##0.00 ;(#,##0.00)') - , ('2016- 2015 YTD Dif:#,##0.00 ;(#,##0.00)') - , ('2017- 2016 YTD Dif:#,##0.00 ;(#,##0.00)') - , ('2018- 2017 YTD Dif:#,##0.00 ;(#,##0.00)') - , ('Dec to Jan Dif Residual:#,##0.00 ;(#,##0.00)') - , ('Jan to Feb Dif Residual:#,##0.00 ;(#,##0.00)') - , ('Feb to Mar Dif Residual:#,##0.00 ;(#,##0.00)') - , ('Mar to Apr Dif Residual:#,##0.00 ;(#,##0.00)') - , ('Apr to May Dif Residual:#,##0.00 ;(#,##0.00)') - , ('May to Jun Dif Residual:#,##0.00 ;(#,##0.00)') - , ('Jun to Jul Dif Residual:#,##0.00 ;(#,##0.00)') - , ('Jul to Aug Dif Residual:#,##0.00 ;(#,##0.00)') - , ('Aug to Sep Dif Residual:#,##0.00 ;(#,##0.00)') - , ('Sep to Oct Dif Residual:#,##0.00 ;(#,##0.00)') - , ('Oct to Nov Dif Residual:#,##0.00 ;(#,##0.00)') - , ('Nov to Dec Dif Residual:#,##0.00 ;(#,##0.00)') - , ('Dec to Jan Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('Jan to Feb Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('Feb to Mar Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('Mar to Apr Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('Apr to May Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('May to Jun Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('Jun to Jul Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('Jul to Aug Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('Aug to Sep Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('Sep to Oct Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('Oct to Nov Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('Nov to Dec Dif Bonus:#,##0.00 ;(#,##0.00)') - , ('Dec to Jan Dif Total:#,##0.00 ;(#,##0.00)') - , ('Jan to Feb Dif Total:#,##0.00 ;(#,##0.00)') - , ('Feb to Mar Dif Total:#,##0.00 ;(#,##0.00)') - , ('Mar to Apr Dif Total:#,##0.00 ;(#,##0.00)') - , ('Apr to May Dif Total:#,##0.00 ;(#,##0.00)') - , ('May to Jun Dif Total:#,##0.00 ;(#,##0.00)') - , ('Jun to Jul Dif Total:#,##0.00 ;(#,##0.00)') - , ('Jul to Aug Dif Total:#,##0.00 ;(#,##0.00)') - , ('Aug to Sep Dif Total:#,##0.00 ;(#,##0.00)') - , ('Sep to Oct Dif Total:#,##0.00 ;(#,##0.00)') - , ('Oct to Nov Dif Total:#,##0.00 ;(#,##0.00)') - , ('Nov to Dec Dif Total:#,##0.00 ;(#,##0.00)') - , ('Jan Refund Cnt:#,##0 ;(#,##0)') - , ('Feb Refund Cnt:#,##0 ;(#,##0)') - , ('Mar Refund Cnt:#,##0 ;(#,##0)') - , ('Apr Refund Cnt:#,##0 ;(#,##0)') - , ('May Refund Cnt:#,##0 ;(#,##0)') - , ('Jun Refund Cnt:#,##0 ;(#,##0)') - , ('Jul Refund Cnt:#,##0 ;(#,##0)') - , ('Aug Refund Cnt:#,##0 ;(#,##0)') - , ('Sep Refund Cnt:#,##0 ;(#,##0)') - , ('Oct Refund Cnt:#,##0 ;(#,##0)') - , ('Nov Refund Cnt:#,##0 ;(#,##0)') - , ('Dec Refund Cnt:#,##0 ;(#,##0)') - , ('Jan Purchase Cnt:#,##0 ;(#,##0)') - , ('Feb Purchase Cnt:#,##0 ;(#,##0)') - , ('Mar Purchase Cnt:#,##0 ;(#,##0)') - , ('Apr Purchase Cnt:#,##0 ;(#,##0)') - , ('May Purchase Cnt:#,##0 ;(#,##0)') - , ('Jun Purchase Cnt:#,##0 ;(#,##0)') - , ('Jul Purchase Cnt:#,##0 ;(#,##0)') - , ('Aug Purchase Cnt:#,##0 ;(#,##0)') - , ('Sep Purchase Cnt:#,##0 ;(#,##0)') - , ('Oct Purchase Cnt:#,##0 ;(#,##0)') - , ('Nov Purchase Cnt:#,##0 ;(#,##0)') - , ('Dec Purchase Cnt:#,##0 ;(#,##0)') - , ('Jan Refund Amt:#,##0.00 ;(#,##0.00)') - , ('Feb Refund Amt:#,##0.00 ;(#,##0.00)') - , ('Mar Refund Amt:#,##0.00 ;(#,##0.00)') - , ('Apr Refund Amt:#,##0.00 ;(#,##0.00)') - , ('May Refund Amt:#,##0.00 ;(#,##0.00)') - , ('Jun Refund Amt:#,##0.00 ;(#,##0.00)') - , ('Jul Refund Amt:#,##0.00 ;(#,##0.00)') - , ('Aug Refund Amt:#,##0.00 ;(#,##0.00)') - , ('Sep Refund Amt:#,##0.00 ;(#,##0.00)') - , ('Oct Refund Amt:#,##0.00 ;(#,##0.00)') - , ('Nov Refund Amt:#,##0.00 ;(#,##0.00)') - , ('Dec Refund Amt:#,##0.00 ;(#,##0.00)') - , ('Jan Purchase Amt:#,##0.00 ;(#,##0.00)') - , ('Feb Purchase Amt:#,##0.00 ;(#,##0.00)') - , ('Mar Purchase Amt:#,##0.00 ;(#,##0.00)') - , ('Apr Purchase Amt:#,##0.00 ;(#,##0.00)') - , ('May Purchase Amt:#,##0.00 ;(#,##0.00)') - , ('Jun Purchase Amt:#,##0.00 ;(#,##0.00)') - , ('Jul Purchase Amt:#,##0.00 ;(#,##0.00)') - , ('Aug Purchase Amt:#,##0.00 ;(#,##0.00)') - , ('Sep Purchase Amt:#,##0.00 ;(#,##0.00)') - , ('Oct Purchase Amt:#,##0.00 ;(#,##0.00)') - , ('Nov Purchase Amt:#,##0.00 ;(#,##0.00)') - , ('Dec Purchase Amt:#,##0.00 ;(#,##0.00)') - ) X(a)) - select * from config_cte - ` - t.Logf("query len (utf16 bytes)=%d, len/4096=%f\n", len(query)*2, float64(len(query)*2)/4096) - - db := open(t) - defer db.Close() - - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - type run struct { - name string - pings []int - pass bool - - conn *sql.Conn - } - - // Use separate Conns from the connection pool to ensure separation. - runs := []*run{ - {name: "rev", pings: []int{4, 1}, pass: true}, - {name: "forward", pings: []int{1}, pass: true}, - } - for _, r := range runs { - var err error - r.conn, err = db.Conn(ctx) - if err != nil { - t.Fatal(err) - } - defer r.conn.Close() - } - - for _, r := range runs { - for _, ping := range r.pings { - t.Run(fmt.Sprintf("%s-ping-%d", r.name, ping), func(t *testing.T) { - for i := 0; i < ping; i++ { - if err := r.conn.PingContext(ctx); err != nil { - if r.pass { - t.Error("failed to ping server", err) - } else { - t.Log("failed to ping server", err) - } - return - } - } - - rows, err := r.conn.QueryContext(ctx, query) - if err != nil { - if r.pass { - t.Errorf("QueryContext: %+v", err) - } else { - t.Logf("QueryContext: %+v", err) - } - return - } - for rows.Next() { - // Nothing. - } - rows.Close() - }) - } - } -} - -func TestDateTimeParam19(t *testing.T) { - conn := open(t) - defer conn.Close() - - // testing DateTime1, only supported on go 1.9 - var emptydate time.Time - mindate1 := time.Date(1753, 1, 1, 0, 0, 0, 0, time.UTC) - maxdate1 := time.Date(9999, 12, 31, 23, 59, 59, 997000000, time.UTC) - testdates1 := []DateTime1{ - DateTime1(mindate1), - DateTime1(maxdate1), - DateTime1(time.Date(1752, 12, 31, 23, 59, 59, 997000000, time.UTC)), // just a little below minimum date - DateTime1(time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC)), // just a little over maximum date - DateTime1(emptydate), - } - - for _, test := range testdates1 { - t.Run(fmt.Sprintf("Test datetime for %v", test), func(t *testing.T) { - var res time.Time - expected := time.Time(test) - queryParamRoundTrip(conn, test, &res) - // clip value - if expected.Before(mindate1) { - expected = mindate1 - } - if expected.After(maxdate1) { - expected = maxdate1 - } - if expected.Sub(res) != 0 { - t.Errorf("expected: '%s', got: '%s' delta: %d", expected, res, expected.Sub(res)) - } - }) - } -} - -func TestReturnStatus(t *testing.T) { - conn := open(t) - defer conn.Close() - - _, err := conn.Exec("if object_id('retstatus') is not null drop proc retstatus;") - if err != nil { - t.Fatal(err) - } - _, err = conn.Exec("create proc retstatus as return 2;") - if err != nil { - t.Fatal(err) - } - - var rs ReturnStatus - _, err = conn.Exec("retstatus", &rs) - conn.Exec("drop proc retstatus;") - if err != nil { - t.Fatal(err) - } - if rs != 2 { - t.Errorf("expected status=2, got %d", rs) - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/queries_test.go b/vendor/github.com/denisenkom/go-mssqldb/queries_test.go deleted file mode 100644 index 255de306..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/queries_test.go +++ /dev/null @@ -1,2186 +0,0 @@ -package mssql - -import ( - "bytes" - "context" - "database/sql" - "database/sql/driver" - "fmt" - "log" - "math" - "net" - "reflect" - "strings" - "sync" - "testing" - "time" -) - -func driverWithProcess(t *testing.T) *Driver { - return &Driver{ - log: optionalLogger{testLogger{t}}, - processQueryText: true, - } -} -func driverNoProcess(t *testing.T) *Driver { - return &Driver{ - log: optionalLogger{testLogger{t}}, - processQueryText: false, - } -} - -func TestSelect(t *testing.T) { - conn := open(t) - defer conn.Close() - - t.Run("scan into interface{}", func(t *testing.T) { - type testStruct struct { - sql string - val interface{} - } - - longstr := strings.Repeat("x", 10000) - - values := []testStruct{ - {"1", int64(1)}, - {"-1", int64(-1)}, - {"cast(1 as int)", int64(1)}, - {"cast(-1 as int)", int64(-1)}, - {"cast(1 as tinyint)", int64(1)}, - {"cast(255 as tinyint)", int64(255)}, - {"cast(1 as smallint)", int64(1)}, - {"cast(-1 as smallint)", int64(-1)}, - {"cast(1 as bigint)", int64(1)}, - {"cast(-1 as bigint)", int64(-1)}, - {"cast(1 as bit)", true}, - {"cast(0 as bit)", false}, - {"'abc'", string("abc")}, - {"cast(0.5 as float)", float64(0.5)}, - {"cast(0.5 as real)", float64(0.5)}, - {"cast(1 as decimal)", []byte("1")}, - {"cast(1.2345 as money)", []byte("1.2345")}, - {"cast(-1.2345 as money)", []byte("-1.2345")}, - {"cast(1.2345 as smallmoney)", []byte("1.2345")}, - {"cast(-1.2345 as smallmoney)", []byte("-1.2345")}, - {"cast(0.5 as decimal(18,1))", []byte("0.5")}, - {"cast(-0.5 as decimal(18,1))", []byte("-0.5")}, - {"cast(-0.5 as numeric(18,1))", []byte("-0.5")}, - {"cast(4294967296 as numeric(20,0))", []byte("4294967296")}, - {"cast(-0.5 as numeric(18,2))", []byte("-0.50")}, - {"N'abc'", string("abc")}, - {"cast(null as nvarchar(3))", nil}, - {"NULL", nil}, - {"cast('1753-01-01' as datetime)", time.Date(1753, 1, 1, 0, 0, 0, 0, time.UTC)}, - {"cast('2000-01-01' as datetime)", time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)}, - {"cast('2000-01-01T12:13:14.12' as datetime)", - time.Date(2000, 1, 1, 12, 13, 14, 120000000, time.UTC)}, - {"cast('2014-06-26 11:08:09.673' as datetime)", time.Date(2014, 06, 26, 11, 8, 9, 673000000, time.UTC)}, - {"cast('9999-12-31T23:59:59.997' as datetime)", time.Date(9999, 12, 31, 23, 59, 59, 997000000, time.UTC)}, - {"cast(NULL as datetime)", nil}, - {"cast('1900-01-01T00:00:00' as smalldatetime)", - time.Date(1900, 1, 1, 0, 0, 0, 0, time.UTC)}, - {"cast('2000-01-01T12:13:00' as smalldatetime)", - time.Date(2000, 1, 1, 12, 13, 0, 0, time.UTC)}, - {"cast('2079-06-06T23:59:00' as smalldatetime)", - time.Date(2079, 6, 6, 23, 59, 0, 0, time.UTC)}, - {"cast(NULL as smalldatetime)", nil}, - {"cast(0x6F9619FF8B86D011B42D00C04FC964FF as uniqueidentifier)", - []byte{0x6F, 0x96, 0x19, 0xFF, 0x8B, 0x86, 0xD0, 0x11, 0xB4, 0x2D, 0x00, 0xC0, 0x4F, 0xC9, 0x64, 0xFF}}, - {"cast(NULL as uniqueidentifier)", nil}, - {"cast(0x1234 as varbinary(2))", []byte{0x12, 0x34}}, - {"cast(N'abc' as nvarchar(max))", "abc"}, - {"cast(null as nvarchar(max))", nil}, - {"cast('' as xml)", ""}, - {"cast('abc' as text)", "abc"}, - {"cast(null as text)", nil}, - {"cast(N'abc' as ntext)", "abc"}, - {"cast(0x1234 as image)", []byte{0x12, 0x34}}, - {"cast('abc' as char(3))", "abc"}, - {"cast('abc' as varchar(3))", "abc"}, - {"cast(N'проверка' as nvarchar(max))", "проверка"}, - {"cast(N'Δοκιμή' as nvarchar(max))", "Δοκιμή"}, - {"cast(cast(N'สวัสดี' as nvarchar(max)) collate Thai_CI_AI as varchar(max))", "สวัสดี"}, // cp874 - {"cast(cast(N'你好' as nvarchar(max)) collate Chinese_PRC_CI_AI as varchar(max))", "你好"}, // cp936 - {"cast(cast(N'こんにちは' as nvarchar(max)) collate Japanese_CI_AI as varchar(max))", "こんにちは"}, // cp939 - {"cast(cast(N'안녕하세요.' as nvarchar(max)) collate Korean_90_CI_AI as varchar(max))", "안녕하세요."}, // cp949 - {"cast(cast(N'你好' as nvarchar(max)) collate Chinese_Hong_Kong_Stroke_90_CI_AI as varchar(max))", "你好"}, // cp950 - {"cast(cast(N'cześć' as nvarchar(max)) collate Polish_CI_AI as varchar(max))", "cześć"}, // cp1250 - {"cast(cast(N'Алло' as nvarchar(max)) collate Cyrillic_General_CI_AI as varchar(max))", "Алло"}, // cp1251 - {"cast(cast(N'Bonjour' as nvarchar(max)) collate French_CI_AI as varchar(max))", "Bonjour"}, // cp1252 - {"cast(cast(N'Γεια σας' as nvarchar(max)) collate Greek_CI_AI as varchar(max))", "Γεια σας"}, // cp1253 - {"cast(cast(N'Merhaba' as nvarchar(max)) collate Turkish_CI_AI as varchar(max))", "Merhaba"}, // cp1254 - {"cast(cast(N'שלום' as nvarchar(max)) collate Hebrew_CI_AI as varchar(max))", "שלום"}, // cp1255 - {"cast(cast(N'مرحبا' as nvarchar(max)) collate Arabic_CI_AI as varchar(max))", "مرحبا"}, // cp1256 - {"cast(cast(N'Sveiki' as nvarchar(max)) collate Lithuanian_CI_AI as varchar(max))", "Sveiki"}, // cp1257 - {"cast(cast(N'chào' as nvarchar(max)) collate Vietnamese_CI_AI as varchar(max))", "chào"}, // cp1258 - {fmt.Sprintf("cast(N'%s' as nvarchar(max))", longstr), longstr}, - {"cast(NULL as sql_variant)", nil}, - {"cast(cast(0x6F9619FF8B86D011B42D00C04FC964FF as uniqueidentifier) as sql_variant)", - []byte{0x6F, 0x96, 0x19, 0xFF, 0x8B, 0x86, 0xD0, 0x11, 0xB4, 0x2D, 0x00, 0xC0, 0x4F, 0xC9, 0x64, 0xFF}}, - {"cast(cast(1 as bit) as sql_variant)", true}, - {"cast(cast(10 as tinyint) as sql_variant)", int64(10)}, - {"cast(cast(-10 as smallint) as sql_variant)", int64(-10)}, - {"cast(cast(-20 as int) as sql_variant)", int64(-20)}, - {"cast(cast(-20 as bigint) as sql_variant)", int64(-20)}, - {"cast(cast('2000-01-01' as datetime) as sql_variant)", time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)}, - {"cast(cast('2000-01-01T12:13:00' as smalldatetime) as sql_variant)", - time.Date(2000, 1, 1, 12, 13, 0, 0, time.UTC)}, - {"cast(cast(0.125 as real) as sql_variant)", float64(0.125)}, - {"cast(cast(0.125 as float) as sql_variant)", float64(0.125)}, - {"cast(cast(1.2345 as smallmoney) as sql_variant)", []byte("1.2345")}, - {"cast(cast(1.2345 as money) as sql_variant)", []byte("1.2345")}, - {"cast(cast(0x1234 as varbinary(2)) as sql_variant)", []byte{0x12, 0x34}}, - {"cast(cast(0x1234 as binary(2)) as sql_variant)", []byte{0x12, 0x34}}, - {"cast(cast(-0.5 as decimal(18,1)) as sql_variant)", []byte("-0.5")}, - {"cast(cast(-0.5 as numeric(18,1)) as sql_variant)", []byte("-0.5")}, - {"cast(cast('abc' as varchar(3)) as sql_variant)", "abc"}, - {"cast(cast('abc' as char(3)) as sql_variant)", "abc"}, - {"cast(N'abc' as sql_variant)", "abc"}, - } - - for _, test := range values { - t.Run(test.sql, func(t *testing.T) { - stmt, err := conn.Prepare("select " + test.sql) - if err != nil { - t.Error("Prepare failed:", test.sql, err.Error()) - return - } - defer stmt.Close() - - row := stmt.QueryRow() - var retval interface{} - err = row.Scan(&retval) - if err != nil { - t.Error("Scan failed:", test.sql, err.Error()) - return - } - var same bool - switch decodedval := retval.(type) { - case []byte: - switch decodedvaltest := test.val.(type) { - case []byte: - same = bytes.Equal(decodedval, decodedvaltest) - default: - same = false - } - default: - same = retval == test.val - } - if !same { - t.Errorf("Values don't match '%s' '%s' for test: %s", retval, test.val, test.sql) - return - } - }) - } - }) - t.Run("scan into *int64", func(t *testing.T) { - t.Run("from integer", func(t *testing.T) { - row := conn.QueryRow("select 11") - var retval *int64 - err := row.Scan(&retval) - if err != nil { - t.Error("Scan failed", err.Error()) - return - } - if *retval != 11 { - t.Errorf("Expected 11, got %v", retval) - } - }) - t.Run("from null", func(t *testing.T) { - row := conn.QueryRow("select null") - var retval *int64 - err := row.Scan(&retval) - if err != nil { - t.Error("Scan failed", err.Error()) - return - } - if retval != nil { - t.Errorf("Expected nil, got %v", retval) - } - }) - }) -} - -func TestSelectDateTimeOffset(t *testing.T) { - type testStruct struct { - sql string - val time.Time - } - values := []testStruct{ - {"cast('2010-11-15T11:56:45.123+14:00' as datetimeoffset(3))", - time.Date(2010, 11, 15, 11, 56, 45, 123000000, time.FixedZone("", 14*60*60))}, - {"cast(cast('2010-11-15T11:56:45.123-14:00' as datetimeoffset(3)) as sql_variant)", - time.Date(2010, 11, 15, 11, 56, 45, 123000000, time.FixedZone("", -14*60*60))}, - {"cast('0001-01-01T00:00:00.0000000+00:00' as datetimeoffset(7))", - time.Date(1, 1, 1, 0, 0, 0, 0, time.FixedZone("", 0))}, - {"cast('9999-12-31T23:59:59.9999999+00:00' as datetimeoffset(7))", - time.Date(9999, 12, 31, 23, 59, 59, 999999900, time.FixedZone("", 0))}, - } - - conn := open(t) - defer conn.Close() - for _, test := range values { - row := conn.QueryRow("select " + test.sql) - var retval interface{} - err := row.Scan(&retval) - if err != nil { - t.Error("Scan failed:", test.sql, err.Error()) - continue - } - retvalDate := retval.(time.Time) - if retvalDate.UTC() != test.val.UTC() { - t.Errorf("UTC values don't match '%v' '%v' for test: %s", retvalDate, test.val, test.sql) - continue - } - if retvalDate.String() != test.val.String() { - t.Errorf("Locations don't match '%v' '%v' for test: %s", retvalDate.String(), test.val.String(), test.sql) - continue - } - } -} - -func TestSelectNewTypes(t *testing.T) { - conn := open(t) - defer conn.Close() - var ver string - err := conn.QueryRow("select SERVERPROPERTY('productversion')").Scan(&ver) - if err != nil { - t.Fatalf("cannot select productversion: %s", err) - } - var n int - _, err = fmt.Sscanf(ver, "%d", &n) - if err != nil { - t.Fatalf("cannot parse productversion: %s", err) - } - // 8 is SQL 2000, 9 is SQL 2005, 10 is SQL 2008, 11 is SQL 2012 - if n < 10 { - return - } - // run tests for new data types available only in SQL Server 2008 and later - type testStruct struct { - sql string - val interface{} - } - values := []testStruct{ - {"cast('0001-01-01' as date)", - time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC)}, - {"cast('2000-01-01' as date)", - time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)}, - {"cast('9999-12-31' as date)", - time.Date(9999, 12, 31, 0, 0, 0, 0, time.UTC)}, - {"cast(NULL as date)", nil}, - {"cast('00:00:00.0000000' as time(7))", - time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC)}, - {"cast('00:00:45.123' as time(3))", - time.Date(1, 1, 1, 00, 00, 45, 123000000, time.UTC)}, - {"cast('11:56:45.123' as time(3))", - time.Date(1, 1, 1, 11, 56, 45, 123000000, time.UTC)}, - {"cast('11:56:45' as time(0))", - time.Date(1, 1, 1, 11, 56, 45, 0, time.UTC)}, - {"cast('23:59:59.9999999' as time(7))", - time.Date(1, 1, 1, 23, 59, 59, 999999900, time.UTC)}, - {"cast(null as time(0))", nil}, - {"cast('0001-01-01T00:00:00.0000000' as datetime2(7))", - time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC)}, - {"cast('2010-11-15T11:56:45.123' as datetime2(3))", - time.Date(2010, 11, 15, 11, 56, 45, 123000000, time.UTC)}, - {"cast('2010-11-15T11:56:45' as datetime2(0))", - time.Date(2010, 11, 15, 11, 56, 45, 0, time.UTC)}, - {"cast(cast('2000-01-01' as date) as sql_variant)", - time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)}, - {"cast(cast('00:00:45.123' as time(3)) as sql_variant)", - time.Date(1, 1, 1, 00, 00, 45, 123000000, time.UTC)}, - {"cast(cast('2010-11-15T11:56:45.123' as datetime2(3)) as sql_variant)", - time.Date(2010, 11, 15, 11, 56, 45, 123000000, time.UTC)}, - {"cast('9999-12-31T23:59:59.9999999' as datetime2(7))", - time.Date(9999, 12, 31, 23, 59, 59, 999999900, time.UTC)}, - {"cast(null as datetime2(3))", nil}, - } - for _, test := range values { - stmt, err := conn.Prepare("select " + test.sql) - if err != nil { - t.Error("Prepare failed:", test.sql, err.Error()) - return - } - defer stmt.Close() - - row := stmt.QueryRow() - var retval interface{} - err = row.Scan(&retval) - if err != nil { - t.Error("Scan failed:", test.sql, err.Error()) - continue - } - if retval != test.val { - t.Errorf("Values don't match '%s' '%s' for test: %s", retval, test.val, test.sql) - continue - } - } -} - -func TestTrans(t *testing.T) { - conn := open(t) - defer conn.Close() - - var tx *sql.Tx - var err error - if tx, err = conn.Begin(); err != nil { - t.Fatal("Begin failed", err.Error()) - } - if err = tx.Commit(); err != nil { - t.Fatal("Commit failed", err.Error()) - } - - if tx, err = conn.Begin(); err != nil { - t.Fatal("Begin failed", err.Error()) - } - if _, err = tx.Exec("create table #abc (fld int)"); err != nil { - t.Fatal("Create table failed", err.Error()) - } - if err = tx.Rollback(); err != nil { - t.Fatal("Rollback failed", err.Error()) - } -} - -func TestNull(t *testing.T) { - conn := open(t) - defer conn.Close() - - t.Run("scan into interface{}", func(t *testing.T) { - types := []string{ - "tinyint", - "smallint", - "int", - "bigint", - "real", - "float", - "smallmoney", - "money", - "decimal", - //"varbinary(15)", - //"binary(15)", - "nvarchar(15)", - "nchar(15)", - "varchar(15)", - "char(15)", - "bit", - "smalldatetime", - "date", - "time", - "datetime", - "datetime2", - "datetimeoffset", - "uniqueidentifier", - "sql_variant", - } - for _, typ := range types { - t.Run(typ, func(t *testing.T) { - row := conn.QueryRow("declare @x "+typ+" = ?; select @x", nil) - var retval interface{} - err := row.Scan(&retval) - if err != nil { - t.Error("Scan failed for type "+typ, err.Error()) - return - } - if retval != nil { - t.Error("Value should be nil, but it is ", retval) - return - } - }) - } - }) - - t.Run("scan into NullInt64", func(t *testing.T) { - types := []string{ - "tinyint", - "smallint", - "int", - "bigint", - "real", - "float", - "smallmoney", - "money", - "decimal", - //"varbinary(15)", - //"binary(15)", - "nvarchar(15)", - "nchar(15)", - "varchar(15)", - "char(15)", - "bit", - "smalldatetime", - "date", - "time", - "datetime", - "datetime2", - "datetimeoffset", - "uniqueidentifier", - "sql_variant", - } - for _, typ := range types { - row := conn.QueryRow("declare @x "+typ+" = ?; select @x", nil) - var retval sql.NullInt64 - err := row.Scan(&retval) - if err != nil { - t.Error("Scan failed for type "+typ, err.Error()) - return - } - if retval.Valid { - t.Error("Value should be nil, but it is ", retval) - return - } - } - }) - - t.Run("scan into *int", func(t *testing.T) { - types := []string{ - "tinyint", - "smallint", - "int", - "bigint", - "real", - "float", - "smallmoney", - "money", - "decimal", - //"varbinary(15)", - //"binary(15)", - "nvarchar(15)", - "nchar(15)", - "varchar(15)", - "char(15)", - "bit", - "smalldatetime", - "date", - "time", - "datetime", - "datetime2", - "datetimeoffset", - "uniqueidentifier", - "sql_variant", - } - for _, typ := range types { - row := conn.QueryRow("declare @x "+typ+" = ?; select @x", nil) - var retval *int - err := row.Scan(&retval) - if err != nil { - t.Error("Scan failed for type "+typ, err.Error()) - return - } - if retval != nil { - t.Error("Value should be nil, but it is ", retval) - return - } - } - }) -} - -func TestParams(t *testing.T) { - longstr := strings.Repeat("x", 10000) - longbytes := make([]byte, 10000) - testdate, err := time.Parse(time.RFC3339, "2010-01-01T00:00:00-00:00") - if err != nil { - t.Fatal(err) - } - values := []interface{}{ - int64(5), - "hello", - "", - []byte{1, 2, 3}, - []byte{}, - float64(1.12313554), - true, - false, - nil, - longstr, - longbytes, - testdate.UTC(), - } - - conn := open(t) - defer conn.Close() - - for _, val := range values { - t.Run(fmt.Sprintf("%T:%#v", val, val), func(t *testing.T) { - row := conn.QueryRow("select ?", val) - var retval interface{} - err := row.Scan(&retval) - if err != nil { - t.Error("Scan failed", err.Error()) - return - } - var same bool - switch decodedval := retval.(type) { - case []byte: - switch decodedvaltest := val.(type) { - case []byte: - same = bytes.Equal(decodedval, decodedvaltest) - default: - same = false - } - case time.Time: - same = decodedval.UTC() == val - default: - same = retval == val - } - if !same { - t.Error("Value don't match", retval, val) - return - } - }) - } -} - -func TestExec(t *testing.T) { - conn := open(t) - defer conn.Close() - - res, err := conn.Exec("create table #abc (fld int)") - if err != nil { - t.Fatal("Exec failed", err.Error()) - } - _ = res -} - -func TestShortTimeout(t *testing.T) { - if testing.Short() { - t.Skip("short") - } - checkConnStr(t) - SetLogger(testLogger{t}) - dsn := makeConnStr(t) - dsnParams := dsn.Query() - dsnParams.Set("Connection Timeout", "2") - dsn.RawQuery = dsnParams.Encode() - conn, err := sql.Open("mssql", dsn.String()) - if err != nil { - t.Fatal("Open connection failed:", err.Error()) - } - defer conn.Close() - - _, err = conn.Exec("waitfor delay '00:00:15'") - if err == nil { - t.Fatal("Exec should fail with timeout, but no failure occurred") - } - if neterr, ok := err.(net.Error); !ok || !neterr.Timeout() { - t.Fatal("failure not a timeout, failed with", err) - } - - // connection should be usable after timeout - row := conn.QueryRow("select 1") - var val int64 - err = row.Scan(&val) - if err != nil { - t.Fatal("Scan failed with", err) - } -} - -func TestTwoQueries(t *testing.T) { - conn := open(t) - defer conn.Close() - - rows, err := conn.Query("select 1") - if err != nil { - t.Fatal("First exec failed", err) - } - if !rows.Next() { - t.Fatal("First query didn't return row") - } - var i int - if err = rows.Scan(&i); err != nil { - t.Fatal("Scan failed", err) - } - if i != 1 { - t.Fatalf("Wrong value returned %d, should be 1", i) - } - - if rows, err = conn.Query("select 2"); err != nil { - t.Fatal("Second query failed", err) - } - if !rows.Next() { - t.Fatal("Second query didn't return row") - } - if err = rows.Scan(&i); err != nil { - t.Fatal("Scan failed", err) - } - if i != 2 { - t.Fatalf("Wrong value returned %d, should be 2", i) - } -} - -func TestError(t *testing.T) { - conn := open(t) - defer conn.Close() - - _, err := conn.Query("exec bad") - if err == nil { - t.Fatal("Query should fail") - } - - if sqlerr, ok := err.(Error); !ok { - t.Fatalf("Should be sql error, actually %T, %v", err, err) - } else { - if sqlerr.Number != 2812 { // Could not find stored procedure 'bad' - t.Fatalf("Should be specific error code 2812, actually %d %s", sqlerr.Number, sqlerr) - } - } -} - -func TestQueryNoRows(t *testing.T) { - conn := open(t) - defer conn.Close() - - var rows *sql.Rows - var err error - if rows, err = conn.Query("create table #abc (fld int)"); err != nil { - t.Fatal("Query failed", err) - } - if rows.Next() { - t.Fatal("Query shoulnd't return any rows") - } -} - -func TestQueryManyNullsRow(t *testing.T) { - conn := open(t) - defer conn.Close() - - var row *sql.Row - var err error - if row = conn.QueryRow("select null, null, null, null, null, null, null, null"); err != nil { - t.Fatal("Query failed", err) - } - var v [8]sql.NullInt64 - if err = row.Scan(&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7]); err != nil { - t.Fatal("Scan failed", err) - } -} - -func TestOrderBy(t *testing.T) { - conn := open(t) - defer conn.Close() - - tx, err := conn.Begin() - if err != nil { - t.Fatal("Begin tran failed", err) - } - defer tx.Rollback() - - _, err = tx.Exec("if (exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME='tbl')) drop table tbl") - if err != nil { - t.Fatal("Drop table failed", err) - } - - _, err = tx.Exec("create table tbl (fld1 int primary key, fld2 int)") - if err != nil { - t.Fatal("Create table failed", err) - } - _, err = tx.Exec("insert into tbl (fld1, fld2) values (1, 2)") - if err != nil { - t.Fatal("Insert failed", err) - } - _, err = tx.Exec("insert into tbl (fld1, fld2) values (2, 1)") - if err != nil { - t.Fatal("Insert failed", err) - } - - rows, err := tx.Query("select * from tbl order by fld1") - if err != nil { - t.Fatal("Query failed", err) - } - - for rows.Next() { - var fld1 int32 - var fld2 int32 - err = rows.Scan(&fld1, &fld2) - if err != nil { - t.Fatal("Scan failed", err) - } - } - - err = rows.Err() - if err != nil { - t.Fatal("Rows have errors", err) - } -} - -func TestScanDecimal(t *testing.T) { - conn := open(t) - defer conn.Close() - - var f float64 - err := conn.QueryRow("select cast(0.5 as numeric(25,1))").Scan(&f) - if err != nil { - t.Error("query row / scan failed:", err.Error()) - return - } - if math.Abs(f-0.5) > 0.000001 { - t.Error("Value is not 0.5:", f) - return - } - - var s string - err = conn.QueryRow("select cast(-0.05 as numeric(25,2))").Scan(&s) - if err != nil { - t.Error("query row / scan failed:", err.Error()) - return - } - if s != "-0.05" { - t.Error("Value is not -0.05:", s) - return - } -} - -func TestAffectedRows(t *testing.T) { - conn := open(t) - defer conn.Close() - - tx, err := conn.Begin() - if err != nil { - t.Fatal("Begin tran failed", err) - } - defer tx.Rollback() - - res, err := tx.Exec("create table #foo (bar int)") - if err != nil { - t.Fatal("create table failed") - } - n, err := res.RowsAffected() - if err != nil { - t.Fatal("rows affected failed") - } - if n != 0 { - t.Error("Expected 0 rows affected, got ", n) - } - - res, err = tx.Exec("insert into #foo (bar) values (1)") - if err != nil { - t.Fatal("insert failed") - } - n, err = res.RowsAffected() - if err != nil { - t.Fatal("rows affected failed") - } - if n != 1 { - t.Error("Expected 1 row affected, got ", n) - } - - res, err = tx.Exec("insert into #foo (bar) values (?)", 2) - if err != nil { - t.Fatal("insert failed", err) - } - n, err = res.RowsAffected() - if err != nil { - t.Fatal("rows affected failed") - } - if n != 1 { - t.Error("Expected 1 row affected, got ", n) - } -} - -func TestIdentity(t *testing.T) { - conn := open(t) - defer conn.Close() - - tx, err := conn.Begin() - if err != nil { - t.Fatal("Begin tran failed", err) - } - defer tx.Rollback() - - res, err := tx.Exec("create table #foo (bar int identity, baz int unique)") - if err != nil { - t.Fatal("create table failed") - } - - res, err = tx.Exec("insert into #foo (baz) values (1)") - if err != nil { - t.Fatal("insert failed") - } - n, err := res.LastInsertId() - if err != nil { - t.Fatal("last insert id failed") - } - if n != 1 { - t.Error("Expected 1 for identity, got ", n) - } - - res, err = tx.Exec("insert into #foo (baz) values (20)") - if err != nil { - t.Fatal("insert failed") - } - n, err = res.LastInsertId() - if err != nil { - t.Fatal("last insert id failed") - } - if n != 2 { - t.Error("Expected 2 for identity, got ", n) - } - - res, err = tx.Exec("insert into #foo (baz) values (1)") - if err == nil { - t.Fatal("insert should fail") - } - - res, err = tx.Exec("insert into #foo (baz) values (?)", 1) - if err == nil { - t.Fatal("insert should fail") - } -} - -func queryParamRoundTrip(db *sql.DB, param interface{}, dest interface{}) { - err := db.QueryRow("select ?", param).Scan(dest) - if err != nil { - log.Panicf("select / scan failed: %v", err.Error()) - } -} - -func TestDateTimeParam(t *testing.T) { - conn := open(t) - defer conn.Close() - type testStruct struct { - t time.Time - } - var emptydate time.Time - mindate := time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC) - maxdate := time.Date(9999, 12, 31, 23, 59, 59, 999999900, time.UTC) - values := []testStruct{ - {time.Date(2015, time.October, 12, 10, 22, 0, 0, time.FixedZone("PST", -8*60*60))}, // back to the future day - {time.Date(1961, time.April, 12, 9, 7, 0, 0, time.FixedZone("MSK", 3*60*60))}, // First man in space - {time.Date(1969, time.July, 20, 20, 18, 0, 0, time.UTC)}, // First man on the Moon - {time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC)}, // UNIX date - {time.Date(1982, 1, 3, 12, 13, 14, 300, time.FixedZone("YAKT", 9*60*60))}, // some random date - {time.Date(4, 6, 3, 12, 13, 14, 150000000, time.UTC)}, // some random date - {mindate}, // minimal value - {maxdate}, // maximum value - {time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC)}, // just over limit - {emptydate}, - } - for _, test := range values { - t.Run(fmt.Sprintf("Test for %v", test.t), func(t *testing.T) { - var t2 time.Time - queryParamRoundTrip(conn, test.t, &t2) - expected := test.t - // clip value - if test.t.Before(mindate) { - expected = mindate - } - if test.t.After(maxdate) { - expected = maxdate - } - - if expected.Sub(t2) != 0 { - t.Errorf("expected: '%s', got: '%s' delta: %d", expected, t2, expected.Sub(t2)) - } - }) - } - -} - -func TestUniqueIdentifierParam(t *testing.T) { - conn := open(t) - defer conn.Close() - type testStruct struct { - name string - uuid interface{} - } - - expected := UniqueIdentifier{0x01, 0x23, 0x45, 0x67, - 0x89, 0xAB, - 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - } - - values := []testStruct{ - { - "[]byte", - []byte{0x67, 0x45, 0x23, 0x01, - 0xAB, 0x89, - 0xEF, 0xCD, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}}, - { - "string", - "01234567-89ab-cdef-0123-456789abcdef"}, - } - - for _, test := range values { - t.Run(test.name, func(t *testing.T) { - var uuid2 UniqueIdentifier - err := conn.QueryRow("select ?", test.uuid).Scan(&uuid2) - if err != nil { - t.Fatal("select / scan failed", err.Error()) - } - - if expected != uuid2 { - t.Errorf("uniqueidentifier does not match: '%s' '%s'", expected, uuid2) - } - }) - } -} - -func TestBigQuery(t *testing.T) { - conn := open(t) - defer conn.Close() - rows, err := conn.Query(`WITH n(n) AS - ( - SELECT 1 - UNION ALL - SELECT n+1 FROM n WHERE n < 10000 - ) - SELECT n, @@version FROM n ORDER BY n - OPTION (MAXRECURSION 10000);`) - if err != nil { - t.Fatal("cannot exec query", err) - } - rows.Next() - rows.Close() - var res int - err = conn.QueryRow("select 0").Scan(&res) - if err != nil { - t.Fatal("cannot scan value", err) - } - if res != 0 { - t.Fatal("expected 0, got ", res) - } -} - -func TestBug32(t *testing.T) { - conn := open(t) - defer conn.Close() - - tx, err := conn.Begin() - if err != nil { - t.Fatal("Begin tran failed", err) - } - defer tx.Rollback() - - _, err = tx.Exec("if (exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME='tbl')) drop table tbl") - if err != nil { - t.Fatal("Drop table failed", err) - } - - _, err = tx.Exec("create table tbl(a int primary key,fld bit null)") - if err != nil { - t.Fatal("Create table failed", err) - } - - _, err = tx.Exec("insert into tbl (a,fld) values (1,nullif(?, ''))", "") - if err != nil { - t.Fatal("Insert failed", err) - } -} - -func TestIgnoreEmptyResults(t *testing.T) { - conn := open(t) - defer conn.Close() - rows, err := conn.Query("set nocount on; select 2") - if err != nil { - t.Fatal("Query failed", err.Error()) - } - if !rows.Next() { - t.Fatal("Query didn't return row") - } - var fld1 int32 - err = rows.Scan(&fld1) - if err != nil { - t.Fatal("Scan failed", err) - } - if fld1 != 2 { - t.Fatal("Returned value doesn't match") - } -} - -func TestStmt_SetQueryNotification(t *testing.T) { - checkConnStr(t) - mssqldriver := driverWithProcess(t) - cn, err := mssqldriver.Open(makeConnStr(t).String()) - if err != nil { - t.Fatalf("failed to open connection: %v", err) - } - stmt, err := cn.Prepare("SELECT 1") - if err != nil { - t.Error("Connection failed", err) - } - - sqlstmt := stmt.(*Stmt) - sqlstmt.SetQueryNotification("ABC", "service=WebCacheNotifications", time.Hour) - - rows, err := sqlstmt.Query(nil) - if err == nil { - rows.Close() - } - // notifications are sent to Service Broker - // see for more info: https://github.com/denisenkom/go-mssqldb/pull/90 -} - -func TestErrorInfo(t *testing.T) { - conn := open(t) - defer conn.Close() - - _, err := conn.Exec("select bad") - if sqlError, ok := err.(Error); ok { - if sqlError.SQLErrorNumber() != 207 /*invalid column name*/ { - t.Errorf("Query failed with unexpected error number %d %s", sqlError.SQLErrorNumber(), sqlError.SQLErrorMessage()) - } - if sqlError.SQLErrorLineNo() != 1 { - t.Errorf("Unexpected line number returned %v, expected %v", sqlError.SQLErrorLineNo(), 1) - } - } else { - t.Error("Failed to convert error to SQLErorr", err) - } - _, err = conn.Exec("RAISERROR('test message', 18, 111)") - if sqlError, ok := err.(Error); ok { - if sqlError.SQLErrorNumber() != 50000 { - t.Errorf("Query failed with unexpected error number %d %s", sqlError.SQLErrorNumber(), sqlError.SQLErrorMessage()) - } - if sqlError.SQLErrorMessage() != "test message" { - t.Fail() - } - if sqlError.SQLErrorClass() != 18 { - t.Fail() - } - if sqlError.SQLErrorState() != 111 { - t.Fail() - } - if sqlError.SQLErrorLineNo() != 1 { - t.Errorf("Unexpected line number returned %v, expected %v", sqlError.SQLErrorLineNo(), 1) - } - // just call those methods to make sure we have some coverage for them - sqlError.SQLErrorServerName() - sqlError.SQLErrorProcName() - } else { - t.Error("Failed to convert error to SQLErorr", err) - } -} - -func TestSetLanguage(t *testing.T) { - conn := open(t) - defer conn.Close() - - _, err := conn.Exec("set language russian") - if err != nil { - t.Errorf("Query failed with unexpected error %s", err) - } - - row := conn.QueryRow("select cast(getdate() as varchar(50))") - var val interface{} - err = row.Scan(&val) - if err != nil { - t.Errorf("Query failed with unexpected error %s", err) - } - t.Log("Returned value", val) -} - -func TestConnectionClosing(t *testing.T) { - pool := open(t) - defer pool.Close() - for i := 1; i <= 100; i++ { - if pool.Stats().OpenConnections > 1 { - t.Errorf("Open connections is expected to stay <= 1, but it is %d", pool.Stats().OpenConnections) - return - } - - stmt, err := pool.Query("select 1") - if err != nil { - t.Fatalf("Query failed with unexpected error %s", err) - } - for stmt.Next() { - var val interface{} - err := stmt.Scan(&val) - if err != nil { - t.Fatalf("Query failed with unexpected error %s", err) - } - } - } -} - -func TestBeginTranError(t *testing.T) { - checkConnStr(t) - drv := driverWithProcess(t) - conn, err := drv.open(context.Background(), makeConnStr(t).String()) - if err != nil { - t.Fatalf("Open failed with error %v", err) - } - - defer conn.Close() - // close actual connection to make begin transaction to fail during sending of a packet - conn.sess.buf.transport.Close() - - ctx := context.Background() - _, err = conn.begin(ctx, isolationSnapshot) - if err == nil || conn.connectionGood == true { - t.Errorf("begin should fail as a bad connection, err=%v", err) - } - - // reopen connection - conn, err = drv.open(context.Background(), makeConnStr(t).String()) - if err != nil { - t.Fatalf("Open failed with error %v", err) - } - err = conn.sendBeginRequest(ctx, isolationSerializable) - if err != nil { - t.Fatalf("sendBeginRequest failed with error %v", err) - } - - // close connection to cause processBeginResponse to fail - conn.sess.buf.transport.Close() - _, err = conn.processBeginResponse(ctx) - switch err { - case nil: - t.Error("processBeginResponse should fail but it succeeded") - case driver.ErrBadConn: - t.Error("processBeginResponse should fail with error different from ErrBadConn but it did") - } - - if conn.connectionGood { - t.Fatal("Connection should be in a bad state") - } -} - -func TestCommitTranError(t *testing.T) { - checkConnStr(t) - drv := driverWithProcess(t) - conn, err := drv.open(context.Background(), makeConnStr(t).String()) - if err != nil { - t.Fatalf("Open failed with error %v", err) - } - - defer conn.Close() - // close actual connection to make commit transaction to fail during sending of a packet - conn.sess.buf.transport.Close() - - ctx := context.Background() - err = conn.Commit() - if err == nil || conn.connectionGood { - t.Errorf("begin should fail and set the connection to bad, but it returned %v", err) - } - - // reopen connection - conn, err = drv.open(context.Background(), makeConnStr(t).String()) - if err != nil { - t.Fatalf("Open failed with error %v", err) - } - err = conn.sendCommitRequest() - if err != nil { - t.Fatalf("sendCommitRequest failed with error %v", err) - } - - // close connection to cause processBeginResponse to fail - conn.sess.buf.transport.Close() - err = conn.simpleProcessResp(ctx) - switch err { - case nil: - t.Error("simpleProcessResp should fail but it succeeded") - case driver.ErrBadConn: - t.Error("simpleProcessResp should fail with error different from ErrBadConn but it did") - } - - if conn.connectionGood { - t.Fatal("Connection should be in a bad state") - } - - // reopen connection - conn, err = drv.open(context.Background(), makeConnStr(t).String()) - defer conn.Close() - if err != nil { - t.Fatalf("Open failed with error %v", err) - } - // should fail because there is no transaction - err = conn.Commit() - switch err { - case nil: - t.Error("Commit should fail but it succeeded") - case driver.ErrBadConn: - t.Error("Commit should fail with error different from ErrBadConn but it did") - } -} - -func TestRollbackTranError(t *testing.T) { - checkConnStr(t) - drv := driverWithProcess(t) - conn, err := drv.open(context.Background(), makeConnStr(t).String()) - if err != nil { - t.Fatalf("Open failed with error %v", err) - } - - defer conn.Close() - // close actual connection to make commit transaction to fail during sending of a packet - conn.sess.buf.transport.Close() - - ctx := context.Background() - err = conn.Rollback() - if err == nil || conn.connectionGood { - t.Errorf("Rollback should fail and set connection to bad but it returned %v", err) - } - - // reopen connection - conn, err = drv.open(context.Background(), makeConnStr(t).String()) - if err != nil { - t.Fatalf("Open failed with error %v", err) - } - err = conn.sendRollbackRequest() - if err != nil { - t.Fatalf("sendCommitRequest failed with error %v", err) - } - - // close connection to cause processBeginResponse to fail - conn.sess.buf.transport.Close() - err = conn.simpleProcessResp(ctx) - switch err { - case nil: - t.Error("simpleProcessResp should fail but it succeeded") - case driver.ErrBadConn: - t.Error("simpleProcessResp should fail with error different from ErrBadConn but it did") - } - - if conn.connectionGood { - t.Fatal("Connection should be in a bad state") - } - - // reopen connection - conn, err = drv.open(context.Background(), makeConnStr(t).String()) - defer conn.Close() - if err != nil { - t.Fatalf("Open failed with error %v", err) - } - // should fail because there is no transaction - err = conn.Rollback() - switch err { - case nil: - t.Error("Commit should fail but it succeeded") - case driver.ErrBadConn: - t.Error("Commit should fail with error different from ErrBadConn but it did") - } -} - -func TestSendQueryErrors(t *testing.T) { - checkConnStr(t) - drv := driverWithProcess(t) - conn, err := drv.open(context.Background(), makeConnStr(t).String()) - if err != nil { - t.FailNow() - } - - defer conn.Close() - stmt, err := conn.prepareContext(context.Background(), "select 1") - if err != nil { - t.FailNow() - } - - // should fail because parameter is invalid - _, err = stmt.Query([]driver.Value{conn}) - if err == nil { - t.Fail() - } - - // close actual connection to make commit transaction to fail during sending of a packet - conn.sess.buf.transport.Close() - - // should fail because connection is closed - _, err = stmt.Query([]driver.Value{}) - if err == nil || stmt.c.connectionGood { - t.Fail() - } - - stmt, err = conn.prepareContext(context.Background(), "select ?") - if err != nil { - t.FailNow() - } - // should fail because connection is closed - _, err = stmt.Query([]driver.Value{int64(1)}) - if err == nil || stmt.c.connectionGood { - t.Fail() - } -} - -func TestProcessQueryErrors(t *testing.T) { - checkConnStr(t) - drv := driverWithProcess(t) - conn, err := drv.open(context.Background(), makeConnStr(t).String()) - if err != nil { - t.Fatal("open expected to succeed, but it failed with", err) - } - stmt, err := conn.prepareContext(context.Background(), "select 1") - if err != nil { - t.Fatal("prepareContext expected to succeed, but it failed with", err) - } - err = stmt.sendQuery([]namedValue{}) - if err != nil { - t.Fatal("sendQuery expected to succeed, but it failed with", err) - } - // close actual connection to make reading response to fail - conn.sess.buf.transport.Close() - _, err = stmt.processQueryResponse(context.Background()) - if err == nil { - t.Error("processQueryResponse expected to fail but it succeeded") - } - // should not fail with ErrBadConn because query was successfully sent to server - if err == driver.ErrBadConn { - t.Error("processQueryResponse expected to fail with error other than ErrBadConn but it failed with it") - } - - if conn.connectionGood { - t.Fatal("Connection should be in a bad state") - } -} - -func TestSendExecErrors(t *testing.T) { - checkConnStr(t) - drv := driverWithProcess(t) - conn, err := drv.open(context.Background(), makeConnStr(t).String()) - if err != nil { - t.FailNow() - } - - defer conn.Close() - stmt, err := conn.prepareContext(context.Background(), "select 1") - if err != nil { - t.FailNow() - } - - // should fail because parameter is invalid - _, err = stmt.Exec([]driver.Value{conn}) - if err == nil { - t.Fail() - } - - // close actual connection to make commit transaction to fail during sending of a packet - conn.sess.buf.transport.Close() - - // should fail because connection is closed - _, err = stmt.Exec([]driver.Value{}) - if err == nil || stmt.c.connectionGood { - t.Fail() - } - - stmt, err = conn.prepareContext(context.Background(), "select ?") - if err != nil { - t.FailNow() - } - // should fail because connection is closed - _, err = stmt.Exec([]driver.Value{int64(1)}) - if err == nil || stmt.c.connectionGood { - t.Fail() - } -} - -func TestLongConnection(t *testing.T) { - checkConnStr(t) - - list := []struct { - connTimeout string - queryTimeout string - ctxTimeout time.Duration - wantFail bool - }{ - {"1", "00:00:02", 6 * time.Second, true}, - {"2", "00:00:01", 6 * time.Second, false}, - - // Check no connection timeout. - {"0", "00:00:01", 2 * time.Second, false}, - // {"0", "00:00:45", 60 * time.Second, false}, // Skip for normal testing to limit time. - } - - for i, item := range list { - t.Run(fmt.Sprintf("item-index-%d,want-fail=%t", i, item.wantFail), func(t *testing.T) { - dsn := makeConnStr(t) - dsnParams := dsn.Query() - dsnParams.Set("connection timeout", item.connTimeout) - dsn.RawQuery = dsnParams.Encode() - - db, err := sql.Open("sqlserver", dsn.String()) - if err != nil { - t.Fatalf("failed to open driver sqlserver") - } - defer db.Close() - - ctx, cancel := context.WithTimeout(context.Background(), item.ctxTimeout) - defer cancel() - - _, err = db.ExecContext(ctx, "WAITFOR DELAY '"+item.queryTimeout+"';") - if item.wantFail && err == nil { - t.Fatal("exec no error") - } - if !item.wantFail && err != nil { - t.Fatal("exec error", err) - } - }) - } -} - -func TestNextResultSet(t *testing.T) { - conn := open(t) - defer conn.Close() - rows, err := conn.Query("select 1; select 2") - if err != nil { - t.Fatal("Query failed", err.Error()) - } - defer func() { - err := rows.Err() - if err != nil { - t.Error("unexpected error:", err) - } - }() - - defer rows.Close() - - if !rows.Next() { - t.Fatal("Query didn't return row") - } - var fld1, fld2 int32 - err = rows.Scan(&fld1) - if err != nil { - t.Fatal("Scan failed", err) - } - if fld1 != 1 { - t.Fatal("Returned value doesn't match") - } - if rows.Next() { - t.Fatal("Query returned unexpected second row.") - } - // calling next again should still return false - if rows.Next() { - t.Fatal("Query returned unexpected second row.") - } - if !rows.NextResultSet() { - t.Fatal("NextResultSet should return true but returned false") - } - if !rows.Next() { - t.Fatal("Query didn't return row") - } - err = rows.Scan(&fld2) - if err != nil { - t.Fatal("Scan failed", err) - } - if fld2 != 2 { - t.Fatal("Returned value doesn't match") - } - if rows.NextResultSet() { - t.Fatal("NextResultSet should return false but returned true") - } -} - -func TestColumnTypeIntrospection(t *testing.T) { - type tst struct { - expr string - typeName string - reflType reflect.Type - hasSize bool - size int64 - hasPrecScale bool - precision int64 - scale int64 - } - tests := []tst{ - {"cast(1 as bit)", "BIT", reflect.TypeOf(true), false, 0, false, 0, 0}, - {"cast(1 as tinyint)", "TINYINT", reflect.TypeOf(int64(0)), false, 0, false, 0, 0}, - {"cast(1 as smallint)", "SMALLINT", reflect.TypeOf(int64(0)), false, 0, false, 0, 0}, - {"1", "INT", reflect.TypeOf(int64(0)), false, 0, false, 0, 0}, - {"cast(1 as bigint)", "BIGINT", reflect.TypeOf(int64(0)), false, 0, false, 0, 0}, - {"cast(1 as real)", "REAL", reflect.TypeOf(0.0), false, 0, false, 0, 0}, - {"cast(1 as float)", "FLOAT", reflect.TypeOf(0.0), false, 0, false, 0, 0}, - {"cast('abc' as varbinary(3))", "VARBINARY", reflect.TypeOf([]byte{}), true, 3, false, 0, 0}, - {"cast('abc' as varbinary(max))", "VARBINARY", reflect.TypeOf([]byte{}), true, 2147483645, false, 0, 0}, - {"cast(1 as datetime)", "DATETIME", reflect.TypeOf(time.Time{}), false, 0, false, 0, 0}, - {"cast(1 as smalldatetime)", "SMALLDATETIME", reflect.TypeOf(time.Time{}), false, 0, false, 0, 0}, - {"cast(getdate() as datetime2(7))", "DATETIME2", reflect.TypeOf(time.Time{}), false, 0, false, 0, 0}, - {"cast(getdate() as datetimeoffset(7))", "DATETIMEOFFSET", reflect.TypeOf(time.Time{}), false, 0, false, 0, 0}, - {"cast(getdate() as date)", "DATE", reflect.TypeOf(time.Time{}), false, 0, false, 0, 0}, - {"cast(getdate() as time)", "TIME", reflect.TypeOf(time.Time{}), false, 0, false, 0, 0}, - {"'abc'", "VARCHAR", reflect.TypeOf(""), true, 3, false, 0, 0}, - {"cast('abc' as varchar(max))", "VARCHAR", reflect.TypeOf(""), true, 2147483645, false, 0, 0}, - {"N'abc'", "NVARCHAR", reflect.TypeOf(""), true, 3, false, 0, 0}, - {"cast(N'abc' as NVARCHAR(MAX))", "NVARCHAR", reflect.TypeOf(""), true, 1073741822, false, 0, 0}, - {"cast(1 as decimal)", "DECIMAL", reflect.TypeOf([]byte{}), false, 0, true, 18, 0}, - {"cast(1 as decimal(5, 2))", "DECIMAL", reflect.TypeOf([]byte{}), false, 0, true, 5, 2}, - {"cast(1 as numeric(10, 4))", "DECIMAL", reflect.TypeOf([]byte{}), false, 0, true, 10, 4}, - {"cast(1 as money)", "MONEY", reflect.TypeOf([]byte{}), false, 0, false, 0, 0}, - {"cast(1 as smallmoney)", "SMALLMONEY", reflect.TypeOf([]byte{}), false, 0, false, 0, 0}, - {"cast(0x6F9619FF8B86D011B42D00C04FC964FF as uniqueidentifier)", "UNIQUEIDENTIFIER", reflect.TypeOf([]byte{}), false, 0, false, 0, 0}, - {"cast('' as xml)", "XML", reflect.TypeOf(""), true, 1073741822, false, 0, 0}, - {"cast('abc' as text)", "TEXT", reflect.TypeOf(""), true, 2147483647, false, 0, 0}, - {"cast(N'abc' as ntext)", "NTEXT", reflect.TypeOf(""), true, 1073741823, false, 0, 0}, - {"cast('abc' as image)", "IMAGE", reflect.TypeOf([]byte{}), true, 2147483647, false, 0, 0}, - {"cast('abc' as char(3))", "CHAR", reflect.TypeOf(""), true, 3, false, 0, 0}, - {"cast(N'abc' as nchar(3))", "NCHAR", reflect.TypeOf(""), true, 3, false, 0, 0}, - {"cast(1 as sql_variant)", "SQL_VARIANT", reflect.TypeOf(nil), false, 0, false, 0, 0}, - } - conn := open(t) - defer conn.Close() - for _, tt := range tests { - rows, err := conn.Query("select " + tt.expr) - if err != nil { - t.Fatalf("Query failed with unexpected error %s", err) - } - ct, err := rows.ColumnTypes() - if err != nil { - t.Fatalf("Query failed with unexpected error %s", err) - } - if ct[0].DatabaseTypeName() != tt.typeName { - t.Errorf("Expected type %s but returned %s", tt.typeName, ct[0].DatabaseTypeName()) - } - size, ok := ct[0].Length() - if ok != tt.hasSize { - t.Errorf("Expected has size %v but returned %v for %s", tt.hasSize, ok, tt.expr) - } else { - if ok && size != tt.size { - t.Errorf("Expected size %d but returned %d for %s", tt.size, size, tt.expr) - } - } - - prec, scale, ok := ct[0].DecimalSize() - if ok != tt.hasPrecScale { - t.Errorf("Expected has prec/scale %v but returned %v for %s", tt.hasPrecScale, ok, tt.expr) - } else { - if ok && prec != tt.precision { - t.Errorf("Expected precision %d but returned %d for %s", tt.precision, prec, tt.expr) - } - if ok && scale != tt.scale { - t.Errorf("Expected scale %d but returned %d for %s", tt.scale, scale, tt.expr) - } - } - - if ct[0].ScanType() != tt.reflType { - t.Errorf("Expected ScanType %v but got %v for %s", tt.reflType, ct[0].ScanType(), tt.expr) - } - } -} - -func TestColumnIntrospection(t *testing.T) { - type tst struct { - expr string - fieldName string - typeName string - nullable bool - hasSize bool - size int64 - hasPrecScale bool - precision int64 - scale int64 - } - tests := []tst{ - {"f1 int null", "f1", "INT", true, false, 0, false, 0, 0}, - {"f2 varchar(15) not null", "f2", "VARCHAR", false, true, 15, false, 0, 0}, - {"f3 decimal(5, 2) null", "f3", "DECIMAL", true, false, 0, true, 5, 2}, - } - conn := open(t) - defer conn.Close() - - // making table variable with specified fields and making a select from it - exprs := make([]string, len(tests)) - for i, test := range tests { - exprs[i] = test.expr - } - exprJoined := strings.Join(exprs, ",") - rows, err := conn.Query(fmt.Sprintf("declare @tbl table(%s); select * from @tbl", exprJoined)) - if err != nil { - t.Fatalf("Query failed with unexpected error %s", err) - } - - ct, err := rows.ColumnTypes() - if err != nil { - t.Fatalf("ColumnTypes failed with unexpected error %s", err) - } - for i, test := range tests { - if ct[i].Name() != test.fieldName { - t.Errorf("Field expected have name %s but it has name %s", test.fieldName, ct[i].Name()) - } - - if ct[i].DatabaseTypeName() != test.typeName { - t.Errorf("Invalid type name returned %s expected %s", ct[i].DatabaseTypeName(), test.typeName) - } - - nullable, ok := ct[i].Nullable() - if ok { - if nullable != test.nullable { - t.Errorf("Invalid nullable value returned %v", nullable) - } - } else { - t.Error("Nullable was expected to support Nullable but it didn't") - } - - size, ok := ct[i].Length() - if ok != test.hasSize { - t.Errorf("Expected has size %v but returned %v for %s", test.hasSize, ok, test.expr) - } else { - if ok && size != test.size { - t.Errorf("Expected size %d but returned %d for %s", test.size, size, test.expr) - } - } - - prec, scale, ok := ct[i].DecimalSize() - if ok != test.hasPrecScale { - t.Errorf("Expected has prec/scale %v but returned %v for %s", test.hasPrecScale, ok, test.expr) - } else { - if ok && prec != test.precision { - t.Errorf("Expected precision %d but returned %d for %s", test.precision, prec, test.expr) - } - if ok && scale != test.scale { - t.Errorf("Expected scale %d but returned %d for %s", test.scale, scale, test.expr) - } - } - } -} - -func TestContext(t *testing.T) { - conn := open(t) - defer conn.Close() - - opts := &sql.TxOptions{ - Isolation: sql.LevelSerializable, - } - ctx := context.Background() - tx, err := conn.BeginTx(ctx, opts) - if err != nil { - t.Errorf("BeginTx failed with unexpected error %s", err) - return - } - rows, err := tx.QueryContext(ctx, "DBCC USEROPTIONS") - properties := make(map[string]string) - for rows.Next() { - var name, value string - if err = rows.Scan(&name, &value); err != nil { - t.Errorf("Scan failed with unexpected error %s", err) - } - properties[name] = value - } - - if properties["isolation level"] != "serializable" { - t.Errorf("Expected isolation level to be serializable but it is %s", properties["isolation level"]) - } - - row := tx.QueryRowContext(ctx, "select 1") - var val int64 - if err = row.Scan(&val); err != nil { - t.Errorf("QueryRowContext failed with unexpected error %s", err) - } - if val != 1 { - t.Error("Incorrect value returned from query") - } - - _, err = tx.ExecContext(ctx, "select 1") - if err != nil { - t.Errorf("ExecContext failed with unexpected error %s", err) - return - } - - _, err = tx.PrepareContext(ctx, "select 1") - if err != nil { - t.Errorf("PrepareContext failed with unexpected error %s", err) - return - } -} - -func TestBeginTxtReadOnlyNotSupported(t *testing.T) { - conn := open(t) - defer conn.Close() - opts := &sql.TxOptions{ReadOnly: true} - _, err := conn.BeginTx(context.Background(), opts) - if err == nil { - t.Error("BeginTx expected to fail for read only transaction because MSSQL doesn't support it, but it succeeded") - } -} - -func TestConn_BeginTx(t *testing.T) { - conn := open(t) - defer conn.Close() - _, err := conn.Exec("create table test (f int)") - defer conn.Exec("drop table test") - if err != nil { - t.Fatal("create table failed with error", err) - } - - tx1, err := conn.BeginTx(context.Background(), nil) - if err != nil { - t.Fatal("BeginTx failed with error", err) - } - tx2, err := conn.BeginTx(context.Background(), nil) - if err != nil { - t.Fatal("BeginTx failed with error", err) - } - _, err = tx1.Exec("insert into test (f) values (1)") - if err != nil { - t.Fatal("insert failed with error", err) - } - _, err = tx2.Exec("insert into test (f) values (2)") - if err != nil { - t.Fatal("insert failed with error", err) - } - tx1.Rollback() - tx2.Commit() - - rows, err := conn.Query("select f from test") - if err != nil { - t.Fatal("select failed with error", err) - } - values := []int64{} - for rows.Next() { - var val int64 - err = rows.Scan(&val) - if err != nil { - t.Fatal("scan failed with error", err) - } - values = append(values, val) - } - if !reflect.DeepEqual(values, []int64{2}) { - t.Errorf("Values is expected to be [1] but it is %v", values) - } -} - -func TestNamedParameters(t *testing.T) { - conn := open(t) - defer conn.Close() - row := conn.QueryRow( - "select :param2, :param1, :param2", - sql.Named("param1", 1), - sql.Named("param2", 2)) - var col1, col2, col3 int64 - err := row.Scan(&col1, &col2, &col3) - if err != nil { - t.Errorf("Scan failed with unexpected error %s", err) - return - } - if col1 != 2 || col2 != 1 || col3 != 2 { - t.Errorf("Unexpected values returned col1=%d, col2=%d, col3=%d", col1, col2, col3) - } -} - -func TestBadNamedParameters(t *testing.T) { - conn := open(t) - defer conn.Close() - row := conn.QueryRow( - "select :param2, :param1, :param2", - sql.Named("badparam1", 1), - sql.Named("param2", 2)) - var col1, col2, col3 int64 - err := row.Scan(&col1, &col2, &col3) - if err == nil { - t.Error("Scan succeeded unexpectedly") - return - } - t.Logf("Scan failed as expected with error %s", err) -} - -func TestMixedParameters(t *testing.T) { - conn := open(t) - defer conn.Close() - row := conn.QueryRow( - "select :2, :param1, :param2", - 5, // this parameter will be unused - 6, - sql.Named("param1", 1), - sql.Named("param2", 2)) - var col1, col2, col3 int64 - err := row.Scan(&col1, &col2, &col3) - if err != nil { - t.Errorf("Scan failed with unexpected error %s", err) - return - } - if col1 != 6 || col2 != 1 || col3 != 2 { - t.Errorf("Unexpected values returned col1=%d, col2=%d, col3=%d", col1, col2, col3) - } -} - -/* -func TestMixedParametersExample(t *testing.T) { - conn := open(t) - defer conn.Close() - row := conn.QueryRow( - "select :id, ?", - sql.Named("id", 1), - 2, - ) - var col1, col2 int64 - err := row.Scan(&col1, &col2) - if err != nil { - t.Errorf("Scan failed with unexpected error %s", err) - return - } - if col1 != 1 || col2 != 2 { - t.Errorf("Unexpected values returned col1=%d, col2=%d", col1, col2) - } -} -*/ - -func TestPinger(t *testing.T) { - conn := open(t) - defer conn.Close() - err := conn.Ping() - if err != nil { - t.Errorf("Failed to hit database") - } -} - -func TestQueryCancelLowLevel(t *testing.T) { - checkConnStr(t) - drv := driverWithProcess(t) - conn, err := drv.open(context.Background(), makeConnStr(t).String()) - if err != nil { - t.Fatalf("Open failed with error %v", err) - } - - defer conn.Close() - ctx, cancel := context.WithCancel(context.Background()) - stmt, err := conn.prepareContext(ctx, "waitfor delay '00:00:03'") - if err != nil { - t.Fatalf("Prepare failed with error %v", err) - } - err = stmt.sendQuery([]namedValue{}) - if err != nil { - t.Fatalf("sendQuery failed with error %v", err) - } - - cancel() - - _, err = stmt.processExec(ctx) - if err != context.Canceled { - t.Errorf("Expected error to be Cancelled but got %v", err) - } - - // same connection should be usable again after it was cancelled - stmt, err = conn.prepareContext(context.Background(), "select 1") - if err != nil { - t.Fatalf("Prepare failed with error %v", err) - } - rows, err := stmt.Query([]driver.Value{}) - if err != nil { - t.Fatalf("Query failed with error %v", err) - } - - values := []driver.Value{nil} - err = rows.Next(values) - if err != nil { - t.Fatalf("Next failed with error %v", err) - } -} - -func TestQueryCancelHighLevel(t *testing.T) { - conn := open(t) - defer conn.Close() - - ctx, cancel := context.WithCancel(context.Background()) - go func() { - time.Sleep(200 * time.Millisecond) - cancel() - }() - _, err := conn.ExecContext(ctx, "waitfor delay '00:00:03'") - if err != context.Canceled { - t.Errorf("ExecContext expected to fail with Cancelled but it returned %v", err) - } - - // connection should be usable after timeout - row := conn.QueryRow("select 1") - var val int64 - err = row.Scan(&val) - if err != nil { - t.Fatal("Scan failed with", err) - } -} - -func TestQueryTimeout(t *testing.T) { - conn := open(t) - defer conn.Close() - ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) - defer cancel() - _, err := conn.ExecContext(ctx, "waitfor delay '00:00:03'") - if err != context.DeadlineExceeded { - t.Errorf("ExecContext expected to fail with DeadlineExceeded but it returned %v", err) - } - - // connection should be usable after timeout - row := conn.QueryRow("select 1") - var val int64 - err = row.Scan(&val) - if err != nil { - t.Fatal("Scan failed with", err) - } -} - -func TestDriverParams(t *testing.T) { - checkConnStr(t) - SetLogger(testLogger{t}) - type sqlCmd struct { - Name string - Driver string - Query string - Param []interface{} - Expect []interface{} - } - - list := []sqlCmd{ - { - Name: "preprocess-ordinal", - Driver: "mssql", - Query: `select V1=:1`, - Param: []interface{}{"abc"}, - Expect: []interface{}{"abc"}, - }, - { - Name: "preprocess-name", - Driver: "mssql", - Query: `select V1=:First`, - Param: []interface{}{sql.Named("First", "abc")}, - Expect: []interface{}{"abc"}, - }, - { - Name: "raw-ordinal", - Driver: "sqlserver", - Query: `select V1=@p1`, - Param: []interface{}{"abc"}, - Expect: []interface{}{"abc"}, - }, - { - Name: "raw-name", - Driver: "sqlserver", - Query: `select V1=@First`, - Param: []interface{}{sql.Named("First", "abc")}, - Expect: []interface{}{"abc"}, - }, - } - - for cmdIndex, cmd := range list { - t.Run(cmd.Name, func(t *testing.T) { - db, err := sql.Open(cmd.Driver, makeConnStr(t).String()) - if err != nil { - t.Fatalf("failed to open driver %q", cmd.Driver) - } - defer db.Close() - - rows, err := db.Query(cmd.Query, cmd.Param...) - if err != nil { - t.Fatalf("failed to run query %q %v", cmd.Query, err) - } - defer rows.Close() - - columns, err := rows.Columns() - if err != nil { - t.Fatalf("failed to get column schema %v", err) - } - clen := len(columns) - - if clen != len(cmd.Expect) { - t.Fatalf("query column has %d, expect %d columns", clen, len(cmd.Expect)) - } - - values := make([]interface{}, clen) - into := make([]interface{}, clen) - for i := 0; i < clen; i++ { - into[i] = &values[i] - } - for rows.Next() { - err = rows.Scan(into...) - if err != nil { - t.Fatalf("failed to scan into row for %d %q", cmdIndex, cmd.Driver) - } - for i := range cmd.Expect { - if values[i] != cmd.Expect[i] { - t.Fatalf("expected value in index %d %v != actual value %v", i, cmd.Expect[i], values[i]) - } - } - } - }) - } -} - -type connInterrupt struct { - net.Conn - - mu sync.Mutex - disruptRead bool - disruptWrite bool -} - -func (c *connInterrupt) Interrupt(write bool) { - c.mu.Lock() - if write { - c.disruptWrite = true - } else { - c.disruptRead = true - } - c.mu.Unlock() -} - -func (c *connInterrupt) Read(b []byte) (n int, err error) { - c.mu.Lock() - dis := c.disruptRead - c.mu.Unlock() - if dis { - return 0, disconnectError{} - } - return c.Conn.Read(b) -} - -func (c *connInterrupt) Write(b []byte) (n int, err error) { - c.mu.Lock() - dis := c.disruptWrite - c.mu.Unlock() - if dis { - return 0, disconnectError{} - } - return c.Conn.Write(b) -} - -type dialerInterrupt struct { - nd netDialer - - mu sync.Mutex - list []*connInterrupt -} - -func (d *dialerInterrupt) DialContext(ctx context.Context, network, addr string) (net.Conn, error) { - conn, err := d.nd.DialContext(ctx, network, addr) - if err != nil { - return nil, err - } - ci := &connInterrupt{Conn: conn} - d.mu.Lock() - d.list = append(d.list, ci) - d.mu.Unlock() - return ci, err -} - -func (d *dialerInterrupt) Interrupt(write bool) { - d.mu.Lock() - defer d.mu.Unlock() - - for _, ci := range d.list { - ci.Interrupt(write) - } -} - -var _ net.Error = disconnectError{} - -type disconnectError struct{} - -func (disconnectError) Error() string { - return "disconnect" -} - -func (disconnectError) Timeout() bool { - return true -} - -func (disconnectError) Temporary() bool { - return true -} - -// TestDisconnect1 ensures errors and states are handled correctly if -// the server is disconnected mid-query. -func TestDisconnect1(t *testing.T) { - if testing.Short() { - t.Skip("short") - } - checkConnStr(t) - SetLogger(testLogger{t}) - - // Revert to the normal dialer after the test is done. - normalCreateDialer := createDialer - defer func() { - createDialer = normalCreateDialer - }() - - waitDisrupt := make(chan struct{}) - ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) - defer cancel() - - createDialer = func(p *connectParams) Dialer { - nd := netDialer{&net.Dialer{Timeout: p.dial_timeout, KeepAlive: p.keepAlive}} - di := &dialerInterrupt{nd: nd} - go func() { - <-waitDisrupt - di.Interrupt(true) - di.Interrupt(false) - }() - return di - } - db, err := sql.Open("sqlserver", makeConnStr(t).String()) - if err != nil { - t.Fatal(err) - } - - if err := db.PingContext(ctx); err != nil { - t.Fatal(err) - } - defer db.Close() - - _, err = db.ExecContext(ctx, `SET LOCK_TIMEOUT 1800;`) - if err != nil { - t.Fatal(err) - } - - go func() { - time.Sleep(time.Second * 1) - close(waitDisrupt) - }() - t.Log("prepare for query") - _, err = db.ExecContext(ctx, `waitfor delay '00:00:3';`) - if err != nil { - t.Log("expected error after disconnect", err) - return - } - t.Fatal("wanted error after Exec") -} - -// TestDisconnect2 tests a read error so the query is started -// but results cannot be read. -func TestDisconnect2(t *testing.T) { - if testing.Short() { - t.Skip("short") - } - checkConnStr(t) - SetLogger(testLogger{t}) - - // Revert to the normal dialer after the test is done. - normalCreateDialer := createDialer - defer func() { - createDialer = normalCreateDialer - }() - - end := make(chan error) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - go func() { - waitDisrupt := make(chan struct{}) - ctx, cancel = context.WithTimeout(ctx, time.Second*2) - defer cancel() - - createDialer = func(p *connectParams) Dialer { - nd := netDialer{&net.Dialer{Timeout: p.dial_timeout, KeepAlive: p.keepAlive}} - di := &dialerInterrupt{nd: nd} - go func() { - <-waitDisrupt - di.Interrupt(false) - }() - return di - } - db, err := sql.Open("sqlserver", makeConnStr(t).String()) - if err != nil { - t.Fatal(err) - } - - if err := db.PingContext(ctx); err != nil { - t.Fatal(err) - } - defer db.Close() - - _, err = db.ExecContext(ctx, `SET LOCK_TIMEOUT 1800;`) - if err != nil { - t.Fatal(err) - } - close(waitDisrupt) - - _, err = db.ExecContext(ctx, `waitfor delay '00:00:3';`) - end <- err - }() - - timeout := time.After(10 * time.Second) - select { - case err := <-end: - if err == nil { - t.Fatal("test err") - } - case <-timeout: - t.Fatal("timeout") - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/tds.go b/vendor/github.com/denisenkom/go-mssqldb/tds.go index 16d9ca82..a924e901 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/tds.go +++ b/vendor/github.com/denisenkom/go-mssqldb/tds.go @@ -655,28 +655,29 @@ func sendAttention(buf *tdsBuffer) error { } type connectParams struct { - logFlags uint64 - port uint64 - host string - instance string - database string - user string - password string - dial_timeout time.Duration - conn_timeout time.Duration - keepAlive time.Duration - encrypt bool - disableEncryption bool - trustServerCertificate bool - certificate string - hostInCertificate string - serverSPN string - workstation string - appname string - typeFlags uint8 - failOverPartner string - failOverPort uint64 - packetSize uint16 + logFlags uint64 + port uint64 + host string + instance string + database string + user string + password string + dial_timeout time.Duration + conn_timeout time.Duration + keepAlive time.Duration + encrypt bool + disableEncryption bool + trustServerCertificate bool + certificate string + hostInCertificate string + hostInCertificateProvided bool + serverSPN string + workstation string + appname string + typeFlags uint8 + failOverPartner string + failOverPort uint64 + packetSize uint16 } func splitConnectionString(dsn string) (res map[string]string) { @@ -1050,8 +1051,11 @@ func parseConnectParams(dsn string) (connectParams, error) { } p.certificate = params["certificate"] p.hostInCertificate, ok = params["hostnameincertificate"] - if !ok { + if ok { + p.hostInCertificateProvided = true + } else { p.hostInCertificate = p.host + p.hostInCertificateProvided = false } serverSPN, ok := params["serverspn"] @@ -1318,42 +1322,43 @@ initiate_connection: } // processing login response - var sspi_msg []byte -continue_login: - tokchan := make(chan tokenStruct, 5) - go processResponse(context.Background(), &sess, tokchan, nil) success := false - for tok := range tokchan { - switch token := tok.(type) { - case sspiMsg: - sspi_msg, err = auth.NextBytes(token) - if err != nil { - return nil, err - } - case loginAckStruct: - success = true - sess.loginAck = token - case error: - return nil, fmt.Errorf("Login error: %s", token.Error()) - case doneStruct: - if token.isError() { - return nil, fmt.Errorf("Login error: %s", token.getError()) + for { + tokchan := make(chan tokenStruct, 5) + go processResponse(context.Background(), &sess, tokchan, nil) + for tok := range tokchan { + switch token := tok.(type) { + case sspiMsg: + sspi_msg, err := auth.NextBytes(token) + if err != nil { + return nil, err + } + if sspi_msg != nil && len(sspi_msg) > 0 { + outbuf.BeginPacket(packSSPIMessage, false) + _, err = outbuf.Write(sspi_msg) + if err != nil { + return nil, err + } + err = outbuf.FinishPacket() + if err != nil { + return nil, err + } + sspi_msg = nil + } + case loginAckStruct: + success = true + sess.loginAck = token + case error: + return nil, fmt.Errorf("Login error: %s", token.Error()) + case doneStruct: + if token.isError() { + return nil, fmt.Errorf("Login error: %s", token.getError()) + } + goto loginEnd } } } - if sspi_msg != nil { - outbuf.BeginPacket(packSSPIMessage, false) - _, err = outbuf.Write(sspi_msg) - if err != nil { - return nil, err - } - err = outbuf.FinishPacket() - if err != nil { - return nil, err - } - sspi_msg = nil - goto continue_login - } +loginEnd: if !success { return nil, fmt.Errorf("Login failed") } @@ -1361,6 +1366,9 @@ continue_login: toconn.Close() p.host = sess.routedServer p.port = uint64(sess.routedPort) + if !p.hostInCertificateProvided { + p.hostInCertificate = sess.routedServer + } goto initiate_connection } return &sess, nil diff --git a/vendor/github.com/denisenkom/go-mssqldb/tds_test.go b/vendor/github.com/denisenkom/go-mssqldb/tds_test.go deleted file mode 100644 index eeb3dfd6..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/tds_test.go +++ /dev/null @@ -1,522 +0,0 @@ -package mssql - -import ( - "bytes" - "context" - "database/sql" - "encoding/hex" - "fmt" - "net/url" - "os" - "testing" - "time" -) - -type MockTransport struct { - bytes.Buffer -} - -func (t *MockTransport) Close() error { - return nil -} - -func TestSendLogin(t *testing.T) { - memBuf := new(MockTransport) - buf := newTdsBuffer(1024, memBuf) - login := login{ - TDSVersion: verTDS73, - PacketSize: 0x1000, - ClientProgVer: 0x01060100, - ClientPID: 100, - ClientTimeZone: -4 * 60, - ClientID: [6]byte{0x12, 0x34, 0x56, 0x78, 0x90, 0xab}, - OptionFlags1: 0xe0, - OptionFlags3: 8, - HostName: "subdev1", - UserName: "test", - Password: "testpwd", - AppName: "appname", - ServerName: "servername", - CtlIntName: "library", - Language: "en", - Database: "database", - ClientLCID: 0x204, - AtchDBFile: "filepath", - } - err := sendLogin(buf, login) - if err != nil { - t.Error("sendLogin should succeed") - } - ref := []byte{ - 16, 1, 0, 222, 0, 0, 1, 0, 198 + 16, 0, 0, 0, 3, 0, 10, 115, 0, 16, 0, 0, 0, 1, - 6, 1, 100, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 8, 16, 255, 255, 255, 4, 2, 0, - 0, 94, 0, 7, 0, 108, 0, 4, 0, 116, 0, 7, 0, 130, 0, 7, 0, 144, 0, 10, 0, 0, - 0, 0, 0, 164, 0, 7, 0, 178, 0, 2, 0, 182, 0, 8, 0, 18, 52, 86, 120, 144, 171, - 198, 0, 0, 0, 198, 0, 8, 0, 214, 0, 0, 0, 0, 0, 0, 0, 115, 0, 117, 0, 98, - 0, 100, 0, 101, 0, 118, 0, 49, 0, 116, 0, 101, 0, 115, 0, 116, 0, 226, 165, - 243, 165, 146, 165, 226, 165, 162, 165, 210, 165, 227, 165, 97, 0, 112, - 0, 112, 0, 110, 0, 97, 0, 109, 0, 101, 0, 115, 0, 101, 0, 114, 0, 118, 0, - 101, 0, 114, 0, 110, 0, 97, 0, 109, 0, 101, 0, 108, 0, 105, 0, 98, 0, 114, - 0, 97, 0, 114, 0, 121, 0, 101, 0, 110, 0, 100, 0, 97, 0, 116, 0, 97, 0, 98, - 0, 97, 0, 115, 0, 101, 0, 102, 0, 105, 0, 108, 0, 101, 0, 112, 0, 97, 0, - 116, 0, 104, 0} - out := memBuf.Bytes() - if !bytes.Equal(ref, out) { - fmt.Println("Expected:") - fmt.Print(hex.Dump(ref)) - fmt.Println("Returned:") - fmt.Print(hex.Dump(out)) - t.Error("input output don't match") - } -} - -func TestSendSqlBatch(t *testing.T) { - checkConnStr(t) - p, err := parseConnectParams(makeConnStr(t).String()) - if err != nil { - t.Error("parseConnectParams failed:", err.Error()) - return - } - - conn, err := connect(context.Background(), nil, optionalLogger{testLogger{t}}, p) - if err != nil { - t.Error("Open connection failed:", err.Error()) - return - } - defer conn.buf.transport.Close() - - headers := []headerStruct{ - {hdrtype: dataStmHdrTransDescr, - data: transDescrHdr{0, 1}.pack()}, - } - err = sendSqlBatch72(conn.buf, "select 1", headers, true) - if err != nil { - t.Error("Sending sql batch failed", err.Error()) - return - } - - ch := make(chan tokenStruct, 5) - go processResponse(context.Background(), conn, ch, nil) - - var lastRow []interface{} -loop: - for tok := range ch { - switch token := tok.(type) { - case doneStruct: - break loop - case []columnStruct: - conn.columns = token - case []interface{}: - lastRow = token - default: - fmt.Println("unknown token", tok) - } - } - - if len(lastRow) == 0 { - t.Fatal("expected row but no row set") - } - - switch value := lastRow[0].(type) { - case int32: - if value != 1 { - t.Error("Invalid value returned, should be 1", value) - return - } - } -} - -func checkConnStr(t *testing.T) { - if len(os.Getenv("SQLSERVER_DSN")) > 0 { - return - } - if len(os.Getenv("HOST")) > 0 && len(os.Getenv("DATABASE")) > 0 { - return - } - t.Skip("no database connection string") -} - -// makeConnStr returns a URL struct so it may be modified by various -// tests before used as a DSN. -func makeConnStr(t *testing.T) *url.URL { - dsn := os.Getenv("SQLSERVER_DSN") - if len(dsn) > 0 { - parsed, err := url.Parse(dsn) - if err != nil { - t.Fatal("unable to parse SQLSERVER_DSN as URL", err) - } - values := parsed.Query() - if values.Get("log") == "" { - values.Set("log", "127") - } - parsed.RawQuery = values.Encode() - return parsed - } - values := url.Values{} - values.Set("log", "127") - values.Set("database", os.Getenv("DATABASE")) - return &url.URL{ - Scheme: "sqlserver", - Host: os.Getenv("HOST"), - Path: os.Getenv("INSTANCE"), - User: url.UserPassword(os.Getenv("SQLUSER"), os.Getenv("SQLPASSWORD")), - RawQuery: values.Encode(), - } -} - -type testLogger struct { - t *testing.T -} - -func (l testLogger) Printf(format string, v ...interface{}) { - l.t.Logf(format, v...) -} - -func (l testLogger) Println(v ...interface{}) { - l.t.Log(v...) -} - -func open(t *testing.T) *sql.DB { - checkConnStr(t) - SetLogger(testLogger{t}) - conn, err := sql.Open("mssql", makeConnStr(t).String()) - if err != nil { - t.Error("Open connection failed:", err.Error()) - return nil - } - - return conn -} - -func TestConnect(t *testing.T) { - checkConnStr(t) - SetLogger(testLogger{t}) - conn, err := sql.Open("mssql", makeConnStr(t).String()) - if err != nil { - t.Error("Open connection failed:", err.Error()) - return - } - defer conn.Close() -} - -func simpleQuery(conn *sql.DB, t *testing.T) (stmt *sql.Stmt) { - stmt, err := conn.Prepare("select 1 as a") - if err != nil { - t.Error("Prepare failed:", err.Error()) - return nil - } - return stmt -} - -func checkSimpleQuery(rows *sql.Rows, t *testing.T) { - numrows := 0 - for rows.Next() { - var val int - err := rows.Scan(&val) - if err != nil { - t.Error("Scan failed:", err.Error()) - } - if val != 1 { - t.Error("query should return 1") - } - numrows++ - } - if numrows != 1 { - t.Error("query should return 1 row, returned", numrows) - } -} - -func TestQuery(t *testing.T) { - conn := open(t) - if conn == nil { - return - } - defer conn.Close() - - stmt := simpleQuery(conn, t) - if stmt == nil { - return - } - defer stmt.Close() - - rows, err := stmt.Query() - if err != nil { - t.Error("Query failed:", err.Error()) - } - defer rows.Close() - - columns, err := rows.Columns() - if err != nil { - t.Error("getting columns failed", err.Error()) - } - if len(columns) != 1 && columns[0] != "a" { - t.Error("returned incorrect columns (expected ['a']):", columns) - } - - checkSimpleQuery(rows, t) -} - -func TestMultipleQueriesSequentialy(t *testing.T) { - - conn := open(t) - defer conn.Close() - - stmt, err := conn.Prepare("select 1 as a") - if err != nil { - t.Error("Prepare failed:", err.Error()) - return - } - defer stmt.Close() - - rows, err := stmt.Query() - if err != nil { - t.Error("Query failed:", err.Error()) - return - } - defer rows.Close() - checkSimpleQuery(rows, t) - - rows, err = stmt.Query() - if err != nil { - t.Error("Query failed:", err.Error()) - return - } - defer rows.Close() - checkSimpleQuery(rows, t) -} - -func TestMultipleQueryClose(t *testing.T) { - conn := open(t) - defer conn.Close() - - stmt, err := conn.Prepare("select 1 as a") - if err != nil { - t.Error("Prepare failed:", err.Error()) - return - } - defer stmt.Close() - - rows, err := stmt.Query() - if err != nil { - t.Error("Query failed:", err.Error()) - return - } - rows.Close() - - rows, err = stmt.Query() - if err != nil { - t.Error("Query failed:", err.Error()) - return - } - defer rows.Close() - checkSimpleQuery(rows, t) -} - -func TestPing(t *testing.T) { - conn := open(t) - defer conn.Close() - conn.Ping() -} - -func TestSecureWithInvalidHostName(t *testing.T) { - checkConnStr(t) - SetLogger(testLogger{t}) - - dsn := makeConnStr(t) - dsnParams := dsn.Query() - dsnParams.Set("encrypt", "true") - dsnParams.Set("TrustServerCertificate", "false") - dsnParams.Set("hostNameInCertificate", "foo.bar") - dsn.RawQuery = dsnParams.Encode() - - conn, err := sql.Open("mssql", dsn.String()) - if err != nil { - t.Fatal("Open connection failed:", err.Error()) - } - defer conn.Close() - err = conn.Ping() - if err == nil { - t.Fatal("Connected to fake foo.bar server") - } -} - -func TestSecureConnection(t *testing.T) { - checkConnStr(t) - SetLogger(testLogger{t}) - - dsn := makeConnStr(t) - dsnParams := dsn.Query() - dsnParams.Set("encrypt", "true") - dsnParams.Set("TrustServerCertificate", "true") - dsn.RawQuery = dsnParams.Encode() - - conn, err := sql.Open("mssql", dsn.String()) - if err != nil { - t.Fatal("Open connection failed:", err.Error()) - } - defer conn.Close() - var msg string - err = conn.QueryRow("select 'secret'").Scan(&msg) - if err != nil { - t.Fatal("cannot scan value", err) - } - if msg != "secret" { - t.Fatal("expected secret, got: ", msg) - } - var secure bool - err = conn.QueryRow("select encrypt_option from sys.dm_exec_connections where session_id=@@SPID").Scan(&secure) - if err != nil { - t.Fatal("cannot scan value", err) - } - if !secure { - t.Fatal("connection is not encrypted") - } -} - -func TestInvalidConnectionString(t *testing.T) { - connStrings := []string{ - "log=invalid", - "port=invalid", - "packet size=invalid", - "connection timeout=invalid", - "dial timeout=invalid", - "keepalive=invalid", - "encrypt=invalid", - "trustservercertificate=invalid", - "failoverport=invalid", - - // ODBC mode - "odbc:password={", - "odbc:password={somepass", - "odbc:password={somepass}}", - "odbc:password={some}pass", - } - for _, connStr := range connStrings { - _, err := parseConnectParams(connStr) - if err == nil { - t.Errorf("Connection expected to fail for connection string %s but it didn't", connStr) - continue - } else { - t.Logf("Connection failed for %s as expected with error %v", connStr, err) - } - } -} - -func TestValidConnectionString(t *testing.T) { - type testStruct struct { - connStr string - check func(connectParams) bool - } - connStrings := []testStruct{ - {"server=server\\instance;database=testdb;user id=tester;password=pwd", func(p connectParams) bool { - return p.host == "server" && p.instance == "instance" && p.user == "tester" && p.password == "pwd" - }}, - {"server=.", func(p connectParams) bool { return p.host == "localhost" }}, - {"server=(local)", func(p connectParams) bool { return p.host == "localhost" }}, - {"ServerSPN=serverspn;Workstation ID=workstid", func(p connectParams) bool { return p.serverSPN == "serverspn" && p.workstation == "workstid" }}, - {"failoverpartner=fopartner;failoverport=2000", func(p connectParams) bool { return p.failOverPartner == "fopartner" && p.failOverPort == 2000 }}, - {"app name=appname;applicationintent=ReadOnly", func(p connectParams) bool { return p.appname == "appname" && (p.typeFlags&fReadOnlyIntent != 0) }}, - {"encrypt=disable", func(p connectParams) bool { return p.disableEncryption }}, - {"encrypt=true", func(p connectParams) bool { return p.encrypt && !p.disableEncryption }}, - {"encrypt=false", func(p connectParams) bool { return !p.encrypt && !p.disableEncryption }}, - {"trustservercertificate=true", func(p connectParams) bool { return p.trustServerCertificate }}, - {"trustservercertificate=false", func(p connectParams) bool { return !p.trustServerCertificate }}, - {"certificate=abc", func(p connectParams) bool { return p.certificate == "abc" }}, - {"hostnameincertificate=abc", func(p connectParams) bool { return p.hostInCertificate == "abc" }}, - {"connection timeout=3;dial timeout=4;keepalive=5", func(p connectParams) bool { - return p.conn_timeout == 3*time.Second && p.dial_timeout == 4*time.Second && p.keepAlive == 5*time.Second - }}, - {"log=63", func(p connectParams) bool { return p.logFlags == 63 && p.port == 1433 }}, - {"log=63;port=1000", func(p connectParams) bool { return p.logFlags == 63 && p.port == 1000 }}, - {"log=64", func(p connectParams) bool { return p.logFlags == 64 && p.packetSize == 4096 }}, - {"log=64;packet size=0", func(p connectParams) bool { return p.logFlags == 64 && p.packetSize == 512 }}, - {"log=64;packet size=300", func(p connectParams) bool { return p.logFlags == 64 && p.packetSize == 512 }}, - {"log=64;packet size=8192", func(p connectParams) bool { return p.logFlags == 64 && p.packetSize == 8192 }}, - {"log=64;packet size=48000", func(p connectParams) bool { return p.logFlags == 64 && p.packetSize == 32767 }}, - - // those are supported currently, but maybe should not be - {"someparam", func(p connectParams) bool { return true }}, - {";;=;", func(p connectParams) bool { return true }}, - - // ODBC mode - {"odbc:server=somehost;user id=someuser;password=somepass", func(p connectParams) bool { - return p.host == "somehost" && p.user == "someuser" && p.password == "somepass" - }}, - {"odbc:server=somehost;user id=someuser;password=some{pass", func(p connectParams) bool { - return p.host == "somehost" && p.user == "someuser" && p.password == "some{pass" - }}, - {"odbc:server={somehost};user id={someuser};password={somepass}", func(p connectParams) bool { - return p.host == "somehost" && p.user == "someuser" && p.password == "somepass" - }}, - {"odbc:server={somehost};user id={someuser};password={some=pass}", func(p connectParams) bool { - return p.host == "somehost" && p.user == "someuser" && p.password == "some=pass" - }}, - {"odbc:server={somehost};user id={someuser};password={some;pass}", func(p connectParams) bool { - return p.host == "somehost" && p.user == "someuser" && p.password == "some;pass" - }}, - {"odbc:server={somehost};user id={someuser};password={some{pass}", func(p connectParams) bool { - return p.host == "somehost" && p.user == "someuser" && p.password == "some{pass" - }}, - {"odbc:server={somehost};user id={someuser};password={some}}pass}", func(p connectParams) bool { - return p.host == "somehost" && p.user == "someuser" && p.password == "some}pass" - }}, - {"odbc:server={somehost};user id={someuser};password={some{}}p=a;ss}", func(p connectParams) bool { - return p.host == "somehost" && p.user == "someuser" && p.password == "some{}p=a;ss" - }}, - {"odbc: server = somehost; user id = someuser ; password = {some pass } ", func(p connectParams) bool { - return p.host == "somehost" && p.user == "someuser" && p.password == "some pass " - }}, - - // URL mode - {"sqlserver://somehost?connection+timeout=30", func(p connectParams) bool { - return p.host == "somehost" && p.port == 1433 && p.instance == "" && p.conn_timeout == 30*time.Second - }}, - {"sqlserver://someuser@somehost?connection+timeout=30", func(p connectParams) bool { - return p.host == "somehost" && p.port == 1433 && p.instance == "" && p.user == "someuser" && p.password == "" && p.conn_timeout == 30*time.Second - }}, - {"sqlserver://someuser:@somehost?connection+timeout=30", func(p connectParams) bool { - return p.host == "somehost" && p.port == 1433 && p.instance == "" && p.user == "someuser" && p.password == "" && p.conn_timeout == 30*time.Second - }}, - {"sqlserver://someuser:foo%3A%2F%5C%21~%40;bar@somehost?connection+timeout=30", func(p connectParams) bool { - return p.host == "somehost" && p.port == 1433 && p.instance == "" && p.user == "someuser" && p.password == "foo:/\\!~@;bar" && p.conn_timeout == 30*time.Second - }}, - {"sqlserver://someuser:foo%3A%2F%5C%21~%40;bar@somehost:1434?connection+timeout=30", func(p connectParams) bool { - return p.host == "somehost" && p.port == 1434 && p.instance == "" && p.user == "someuser" && p.password == "foo:/\\!~@;bar" && p.conn_timeout == 30*time.Second - }}, - {"sqlserver://someuser:foo%3A%2F%5C%21~%40;bar@somehost:1434/someinstance?connection+timeout=30", func(p connectParams) bool { - return p.host == "somehost" && p.port == 1434 && p.instance == "someinstance" && p.user == "someuser" && p.password == "foo:/\\!~@;bar" && p.conn_timeout == 30*time.Second - }}, - } - for _, ts := range connStrings { - p, err := parseConnectParams(ts.connStr) - if err == nil { - t.Logf("Connection string was parsed successfully %s", ts.connStr) - } else { - t.Errorf("Connection string %s failed to parse with error %s", ts.connStr, err) - continue - } - - if !ts.check(p) { - t.Errorf("Check failed on conn str %s", ts.connStr) - } - } -} - -func TestBadConnect(t *testing.T) { - checkConnStr(t) - SetLogger(testLogger{t}) - connURL := makeConnStr(t) - connURL.User = url.UserPassword("baduser", "badpwd") - badDSN := connURL.String() - - conn, err := sql.Open("mssql", badDSN) - if err != nil { - t.Error("Open connection failed:", err.Error()) - } - defer conn.Close() - - err = conn.Ping() - if err == nil { - t.Error("Ping should fail for connection: ", badDSN) - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/tvp_example_test.go b/vendor/github.com/denisenkom/go-mssqldb/tvp_example_test.go deleted file mode 100644 index 99cb1f5c..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/tvp_example_test.go +++ /dev/null @@ -1,114 +0,0 @@ -// +build go1.10 - -package mssql_test - -import ( - "database/sql" - "flag" - "fmt" - "log" - - mssql "github.com/denisenkom/go-mssqldb" -) - -// This example shows how to use tvp type -func ExampleTVP() { - const ( - createTable = "CREATE TABLE Location (Name VARCHAR(50), CostRate INT, Availability BIT, ModifiedDate DATETIME2)" - - dropTable = "IF OBJECT_ID('Location', 'U') IS NOT NULL DROP TABLE Location" - - createTVP = `CREATE TYPE LocationTableType AS TABLE - (LocationName VARCHAR(50), - CostRate INT)` - - dropTVP = "IF type_id('LocationTableType') IS NOT NULL DROP TYPE LocationTableType" - - createProc = `CREATE PROCEDURE dbo.usp_InsertProductionLocation - @TVP LocationTableType READONLY - AS - SET NOCOUNT ON - INSERT INTO Location - ( - Name, - CostRate, - Availability, - ModifiedDate) - SELECT *, 0,GETDATE() - FROM @TVP` - - dropProc = "IF OBJECT_ID('dbo.usp_InsertProductionLocation', 'P') IS NOT NULL DROP PROCEDURE dbo.usp_InsertProductionLocation" - - execTvp = "exec dbo.usp_InsertProductionLocation @TVP;" - ) - type LocationTableTvp struct { - LocationName string - LocationCountry string `tvp:"-"` - CostRate int64 - Currency string `json:"-"` - } - - flag.Parse() - - if *debug { - fmt.Printf(" password:%s\n", *password) - fmt.Printf(" port:%d\n", *port) - fmt.Printf(" server:%s\n", *server) - fmt.Printf(" user:%s\n", *user) - } - - connString := makeConnURL().String() - if *debug { - fmt.Printf(" connString:%s\n", connString) - } - - db, err := sql.Open("sqlserver", connString) - if err != nil { - log.Fatal("Open connection failed:", err.Error()) - } - defer db.Close() - - _, err = db.Exec(createTable) - if err != nil { - log.Fatal(err) - } - _, err = db.Exec(createTVP) - if err != nil { - log.Fatal(err) - } - defer db.Exec(dropTVP) - _, err = db.Exec(createProc) - if err != nil { - log.Fatal(err) - } - defer db.Exec(dropProc) - - locationTableTypeData := []LocationTableTvp{ - { - LocationName: "Alberta", - LocationCountry: "Canada", - CostRate: 0, - Currency: "CAD", - }, - { - LocationName: "British Columbia", - LocationCountry: "Canada", - CostRate: 1, - Currency: "CAD", - }, - } - - tvpType := mssql.TVP{ - TypeName: "LocationTableType", - Value: locationTableTypeData, - } - - _, err = db.Exec(execTvp, sql.Named("TVP", tvpType)) - if err != nil { - log.Fatal(err) - } else { - for _, locationData := range locationTableTypeData { - fmt.Printf("Data for location %s, %s has been inserted.\n", locationData.LocationName, locationData.LocationCountry) - } - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/tvp_go19_db_test.go b/vendor/github.com/denisenkom/go-mssqldb/tvp_go19_db_test.go deleted file mode 100644 index 85886bdf..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/tvp_go19_db_test.go +++ /dev/null @@ -1,751 +0,0 @@ -// +build go1.9 - -package mssql - -import ( - "context" - "database/sql" - "log" - "reflect" - "testing" - "time" -) - -const ( - crateSchema = `create schema TestTVPSchema;` - - dropSchema = `drop schema TestTVPSchema;` - - createTVP = ` - CREATE TYPE TestTVPSchema.exempleTVP AS TABLE - ( - message NVARCHAR(100) - )` - - dropTVP = `DROP TYPE TestTVPSchema.exempleTVP;` - - procedureWithTVP = ` - CREATE PROCEDURE ExecTVP - @param1 TestTVPSchema.exempleTVP READONLY - AS - BEGIN - SET NOCOUNT ON; - SELECT * FROM @param1; - END; - ` - - dropProcedure = `drop PROCEDURE ExecTVP` - - execTvp = `exec ExecTVP @param1;` -) - -type TvptableRow struct { - PBinary []byte `db:"p_binary"` - PVarchar string `db:"p_varchar"` - PVarcharNull *string `db:"p_varcharNull"` - PNvarchar string `db:"p_nvarchar"` - PNvarcharNull *string `db:"p_nvarcharNull"` - PID UniqueIdentifier `db:"p_id"` - PIDNull *UniqueIdentifier `db:"p_idNull"` - PVarbinary []byte `db:"p_varbinary"` - PTinyint int8 `db:"p_tinyint"` - PTinyintNull *int8 `db:"p_tinyintNull"` - PSmallint int16 `db:"p_smallint"` - PSmallintNull *int16 `db:"p_smallintNull"` - PInt int32 `db:"p_int"` - PIntNull *int32 `db:"p_intNull"` - PBigint int64 `db:"p_bigint"` - PBigintNull *int64 `db:"p_bigintNull"` - PBit bool `db:"p_bit"` - PBitNull *bool `db:"p_bitNull"` - PFloat32 float32 `db:"p_float32"` - PFloatNull32 *float32 `db:"p_floatNull32"` - PFloat64 float64 `db:"p_float64"` - PFloatNull64 *float64 `db:"p_floatNull64"` - DTime time.Time `db:"p_timeNull"` - DTimeNull *time.Time `db:"p_time"` - Pint int `db:"pInt"` - PintNull *int `db:"pIntNull"` -} - -type TvptableRowWithSkipTag struct { - PBinary []byte `db:"p_binary"` - SkipPBinary []byte `json:"-"` - PVarchar string `db:"p_varchar"` - SkipPVarchar string `tvp:"-"` - PVarcharNull *string `db:"p_varcharNull"` - SkipPVarcharNull *string `json:"-" tvp:"-"` - PNvarchar string `db:"p_nvarchar"` - SkipPNvarchar string `json:"-"` - PNvarcharNull *string `db:"p_nvarcharNull"` - SkipPNvarcharNull *string `json:"-"` - PID UniqueIdentifier `db:"p_id"` - SkipPID UniqueIdentifier `json:"-"` - PIDNull *UniqueIdentifier `db:"p_idNull"` - SkipPIDNull *UniqueIdentifier `tvp:"-"` - PVarbinary []byte `db:"p_varbinary"` - SkipPVarbinary []byte `json:"-" tvp:"-"` - PTinyint int8 `db:"p_tinyint"` - SkipPTinyint int8 `tvp:"-"` - PTinyintNull *int8 `db:"p_tinyintNull"` - SkipPTinyintNull *int8 `tvp:"-" json:"any"` - PSmallint int16 `db:"p_smallint"` - SkipPSmallint int16 `json:"-"` - PSmallintNull *int16 `db:"p_smallintNull"` - SkipPSmallintNull *int16 `tvp:"-"` - PInt int32 `db:"p_int"` - SkipPInt int32 `json:"-"` - PIntNull *int32 `db:"p_intNull"` - SkipPIntNull *int32 `tvp:"-"` - PBigint int64 `db:"p_bigint"` - SkipPBigint int64 `tvp:"-"` - PBigintNull *int64 `db:"p_bigintNull"` - SkipPBigintNull *int64 `json:"any" tvp:"-"` - PBit bool `db:"p_bit"` - SkipPBit bool `json:"-"` - PBitNull *bool `db:"p_bitNull"` - SkipPBitNull *bool `json:"-"` - PFloat32 float32 `db:"p_float32"` - SkipPFloat32 float32 `tvp:"-"` - PFloatNull32 *float32 `db:"p_floatNull32"` - SkipPFloatNull32 *float32 `tvp:"-"` - PFloat64 float64 `db:"p_float64"` - SkipPFloat64 float64 `tvp:"-"` - PFloatNull64 *float64 `db:"p_floatNull64"` - SkipPFloatNull64 *float64 `tvp:"-"` - DTime time.Time `db:"p_timeNull"` - SkipDTime time.Time `tvp:"-"` - DTimeNull *time.Time `db:"p_time"` - SkipDTimeNull *time.Time `tvp:"-"` - Pint int `db:"p_int_null"` - SkipPint int `tvp:"-"` - PintNull *int `db:"p_int_"` - SkipPintNull *int `tvp:"-"` -} - -func TestTVP(t *testing.T) { - checkConnStr(t) - SetLogger(testLogger{t}) - - db, err := sql.Open("sqlserver", makeConnStr(t).String()) - if err != nil { - t.Fatalf("failed to open driver sqlserver") - } - defer db.Close() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - sqltextcreatetable := ` - CREATE TYPE tvptable AS TABLE - ( - p_binary BINARY(3), - p_varchar VARCHAR(500), - p_varcharNull VARCHAR(500), - p_nvarchar NVARCHAR(100), - p_nvarcharNull NVARCHAR(100), - p_id UNIQUEIDENTIFIER, - p_idNull UNIQUEIDENTIFIER, - p_varbinary VARBINARY(MAX), - p_tinyint TINYINT, - p_tinyintNull TINYINT, - p_smallint SMALLINT, - p_smallintNull SMALLINT, - p_int INT, - p_intNull INT, - p_bigint BIGINT, - p_bigintNull BIGINT, - p_bit BIT, - p_bitNull BIT, - p_float32 FLOAT, - p_floatNull32 FLOAT, - p_float64 FLOAT, - p_floatNull64 FLOAT, - p_time datetime2, - p_timeNull datetime2, - pInt INT, - pIntNull INT - ); ` - - sqltextdroptable := `DROP TYPE tvptable;` - - sqltextcreatesp := ` - CREATE PROCEDURE spwithtvp - @param1 tvptable READONLY, - @param2 tvptable READONLY, - @param3 NVARCHAR(10) - AS - BEGIN - SET NOCOUNT ON; - SELECT * FROM @param1; - SELECT * FROM @param2; - SELECT @param3; - END;` - - sqltextdropsp := `DROP PROCEDURE spwithtvp;` - - db.ExecContext(ctx, sqltextdropsp) - db.ExecContext(ctx, sqltextdroptable) - - _, err = db.ExecContext(ctx, sqltextcreatetable) - if err != nil { - t.Fatal(err) - } - defer db.ExecContext(ctx, sqltextdroptable) - - _, err = db.ExecContext(ctx, sqltextcreatesp) - if err != nil { - t.Fatal(err) - } - defer db.ExecContext(ctx, sqltextdropsp) - varcharNull := "aaa" - nvarchar := "bbb" - bytesMock := []byte("ddd") - i8 := int8(1) - i16 := int16(2) - i32 := int32(3) - i64 := int64(4) - i := int(5) - bFalse := false - floatValue64 := 0.123 - floatValue32 := float32(-10.123) - timeNow := time.Now().UTC() - param1 := []TvptableRow{ - { - PBinary: []byte("ccc"), - PVarchar: varcharNull, - PNvarchar: nvarchar, - PID: UniqueIdentifier{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, - PVarbinary: bytesMock, - PTinyint: i8, - PSmallint: i16, - PInt: i32, - PBigint: i64, - PBit: bFalse, - PFloat32: floatValue32, - PFloat64: floatValue64, - DTime: timeNow, - Pint: 355, - }, - { - PBinary: []byte("www"), - PVarchar: "eee", - PNvarchar: "lll", - PID: UniqueIdentifier{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, - PVarbinary: []byte("zzz"), - PTinyint: 5, - PSmallint: 16000, - PInt: 20000000, - PBigint: 2000000020000000, - PBit: true, - PFloat32: -123.45, - PFloat64: -123.45, - DTime: time.Date(2001, 11, 16, 23, 59, 39, 0, time.UTC), - Pint: 455, - }, - { - PBinary: nil, - PVarcharNull: &varcharNull, - PNvarcharNull: &nvarchar, - PIDNull: &UniqueIdentifier{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, - PTinyintNull: &i8, - PSmallintNull: &i16, - PIntNull: &i32, - PBigintNull: &i64, - PBitNull: &bFalse, - PFloatNull32: &floatValue32, - PFloatNull64: &floatValue64, - DTime: timeNow, - DTimeNull: &timeNow, - PintNull: &i, - }, - { - PBinary: []byte("www"), - PVarchar: "eee", - PNvarchar: "lll", - PIDNull: &UniqueIdentifier{}, - PVarbinary: []byte("zzz"), - PTinyint: 5, - PSmallint: 16000, - PInt: 20000000, - PBigint: 2000000020000000, - PBit: true, - PFloat64: 123.45, - DTime: time.Date(2001, 11, 16, 23, 59, 39, 0, time.UTC), - PVarcharNull: &varcharNull, - PNvarcharNull: &nvarchar, - PTinyintNull: &i8, - PSmallintNull: &i16, - PIntNull: &i32, - PBigintNull: &i64, - PBitNull: &bFalse, - PFloatNull32: &floatValue32, - PFloatNull64: &floatValue64, - DTimeNull: &timeNow, - PintNull: &i, - }, - } - - tvpType := TVP{ - TypeName: "tvptable", - Value: param1, - } - tvpTypeEmpty := TVP{ - TypeName: "tvptable", - Value: []TvptableRow{}, - } - - rows, err := db.QueryContext(ctx, - "exec spwithtvp @param1, @param2, @param3", - sql.Named("param1", tvpType), - sql.Named("param2", tvpTypeEmpty), - sql.Named("param3", "test"), - ) - - if err != nil { - t.Fatal(err) - } - - var result1 []TvptableRow - for rows.Next() { - var val TvptableRow - err := rows.Scan( - &val.PBinary, - &val.PVarchar, - &val.PVarcharNull, - &val.PNvarchar, - &val.PNvarcharNull, - &val.PID, - &val.PIDNull, - &val.PVarbinary, - &val.PTinyint, - &val.PTinyintNull, - &val.PSmallint, - &val.PSmallintNull, - &val.PInt, - &val.PIntNull, - &val.PBigint, - &val.PBigintNull, - &val.PBit, - &val.PBitNull, - &val.PFloat32, - &val.PFloatNull32, - &val.PFloat64, - &val.PFloatNull64, - &val.DTime, - &val.DTimeNull, - &val.Pint, - &val.PintNull, - ) - if err != nil { - t.Fatalf("scan failed with error: %s", err) - } - - result1 = append(result1, val) - } - - if !reflect.DeepEqual(param1, result1) { - t.Logf("expected: %+v", param1) - t.Logf("actual: %+v", result1) - t.Errorf("first resultset did not match param1") - } - - if !rows.NextResultSet() { - t.Errorf("second resultset did not exist") - } - - if rows.Next() { - t.Errorf("second resultset was not empty") - } - - if !rows.NextResultSet() { - t.Errorf("third resultset did not exist") - } - - if !rows.Next() { - t.Errorf("third resultset was empty") - } - - var result3 string - if err := rows.Scan(&result3); err != nil { - t.Errorf("error scanning third result set: %s", err) - } - if result3 != "test" { - t.Errorf("third result set had wrong value expected: %s actual: %s", "test", result3) - } -} - -func TestTVP_WithTag(t *testing.T) { - checkConnStr(t) - SetLogger(testLogger{t}) - - db, err := sql.Open("sqlserver", makeConnStr(t).String()) - if err != nil { - t.Fatalf("failed to open driver sqlserver") - } - defer db.Close() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - sqltextcreatetable := ` - CREATE TYPE tvptable AS TABLE - ( - p_binary BINARY(3), - p_varchar VARCHAR(500), - p_varcharNull VARCHAR(500), - p_nvarchar NVARCHAR(100), - p_nvarcharNull NVARCHAR(100), - p_id UNIQUEIDENTIFIER, - p_idNull UNIQUEIDENTIFIER, - p_varbinary VARBINARY(MAX), - p_tinyint TINYINT, - p_tinyintNull TINYINT, - p_smallint SMALLINT, - p_smallintNull SMALLINT, - p_int INT, - p_intNull INT, - p_bigint BIGINT, - p_bigintNull BIGINT, - p_bit BIT, - p_bitNull BIT, - p_float32 FLOAT, - p_floatNull32 FLOAT, - p_float64 FLOAT, - p_floatNull64 FLOAT, - p_time datetime2, - p_timeNull datetime2, - pInt INT, - pIntNull INT - ); ` - - sqltextdroptable := `DROP TYPE tvptable;` - - sqltextcreatesp := ` - CREATE PROCEDURE spwithtvp - @param1 tvptable READONLY, - @param2 tvptable READONLY, - @param3 NVARCHAR(10) - AS - BEGIN - SET NOCOUNT ON; - SELECT * FROM @param1; - SELECT * FROM @param2; - SELECT @param3; - END;` - - sqltextdropsp := `DROP PROCEDURE spwithtvp;` - - db.ExecContext(ctx, sqltextdropsp) - db.ExecContext(ctx, sqltextdroptable) - - _, err = db.ExecContext(ctx, sqltextcreatetable) - if err != nil { - t.Fatal(err) - } - defer db.ExecContext(ctx, sqltextdroptable) - - _, err = db.ExecContext(ctx, sqltextcreatesp) - if err != nil { - t.Fatal(err) - } - defer db.ExecContext(ctx, sqltextdropsp) - - varcharNull := "aaa" - nvarchar := "bbb" - bytesMock := []byte("ddd") - i8 := int8(1) - i16 := int16(2) - i32 := int32(3) - i64 := int64(4) - i := int(355) - bFalse := false - floatValue64 := 0.123 - floatValue32 := float32(-10.123) - timeNow := time.Now().UTC() - param1 := []TvptableRowWithSkipTag{ - { - PBinary: []byte("ccc"), - PVarchar: varcharNull, - PNvarchar: nvarchar, - PID: UniqueIdentifier{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, - PVarbinary: bytesMock, - PTinyint: i8, - PSmallint: i16, - PInt: i32, - PBigint: i64, - PBit: bFalse, - PFloat32: floatValue32, - PFloat64: floatValue64, - DTime: timeNow, - Pint: i, - PintNull: &i, - }, - { - PBinary: []byte("www"), - PVarchar: "eee", - PNvarchar: "lll", - PID: UniqueIdentifier{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, - PVarbinary: []byte("zzz"), - PTinyint: 5, - PSmallint: 16000, - PInt: 20000000, - PBigint: 2000000020000000, - PBit: true, - PFloat32: -123.45, - PFloat64: -123.45, - DTime: time.Date(2001, 11, 16, 23, 59, 39, 0, time.UTC), - Pint: 3669, - PintNull: &i, - }, - { - PBinary: nil, - PVarcharNull: &varcharNull, - PNvarcharNull: &nvarchar, - PIDNull: &UniqueIdentifier{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, - PTinyintNull: &i8, - PSmallintNull: &i16, - PIntNull: &i32, - PBigintNull: &i64, - PBitNull: &bFalse, - PFloatNull32: &floatValue32, - PFloatNull64: &floatValue64, - DTime: timeNow, - DTimeNull: &timeNow, - Pint: 969, - }, - { - PBinary: []byte("www"), - PVarchar: "eee", - PNvarchar: "lll", - PIDNull: &UniqueIdentifier{}, - PVarbinary: []byte("zzz"), - PTinyint: 5, - PSmallint: 16000, - PInt: 20000000, - PBigint: 2000000020000000, - PBit: true, - PFloat64: 123.45, - DTime: time.Date(2001, 11, 16, 23, 59, 39, 0, time.UTC), - PVarcharNull: &varcharNull, - PNvarcharNull: &nvarchar, - PTinyintNull: &i8, - PSmallintNull: &i16, - PIntNull: &i32, - PBigintNull: &i64, - PBitNull: &bFalse, - PFloatNull32: &floatValue32, - PFloatNull64: &floatValue64, - DTimeNull: &timeNow, - PintNull: &i, - }, - } - - tvpType := TVP{ - TypeName: "tvptable", - Value: param1, - } - tvpTypeEmpty := TVP{ - TypeName: "tvptable", - Value: []TvptableRowWithSkipTag{}, - } - - rows, err := db.QueryContext(ctx, - "exec spwithtvp @param1, @param2, @param3", - sql.Named("param1", tvpType), - sql.Named("param2", tvpTypeEmpty), - sql.Named("param3", "test"), - ) - - if err != nil { - t.Fatal(err) - } - - var result1 []TvptableRowWithSkipTag - for rows.Next() { - var val TvptableRowWithSkipTag - err := rows.Scan( - &val.PBinary, - &val.PVarchar, - &val.PVarcharNull, - &val.PNvarchar, - &val.PNvarcharNull, - &val.PID, - &val.PIDNull, - &val.PVarbinary, - &val.PTinyint, - &val.PTinyintNull, - &val.PSmallint, - &val.PSmallintNull, - &val.PInt, - &val.PIntNull, - &val.PBigint, - &val.PBigintNull, - &val.PBit, - &val.PBitNull, - &val.PFloat32, - &val.PFloatNull32, - &val.PFloat64, - &val.PFloatNull64, - &val.DTime, - &val.DTimeNull, - &val.Pint, - &val.PintNull, - ) - if err != nil { - t.Fatalf("scan failed with error: %s", err) - } - - result1 = append(result1, val) - } - - if !reflect.DeepEqual(param1, result1) { - t.Logf("expected: %+v", param1) - t.Logf("actual: %+v", result1) - t.Errorf("first resultset did not match param1") - } - - if !rows.NextResultSet() { - t.Errorf("second resultset did not exist") - } - - if rows.Next() { - t.Errorf("second resultset was not empty") - } - - if !rows.NextResultSet() { - t.Errorf("third resultset did not exist") - } - - if !rows.Next() { - t.Errorf("third resultset was empty") - } - - var result3 string - if err := rows.Scan(&result3); err != nil { - t.Errorf("error scanning third result set: %s", err) - } - if result3 != "test" { - t.Errorf("third result set had wrong value expected: %s actual: %s", "test", result3) - } -} - -type TvpExample struct { - Message string -} - -func TestTVPSchema(t *testing.T) { - checkConnStr(t) - SetLogger(testLogger{t}) - - conn, err := sql.Open("sqlserver", makeConnStr(t).String()) - if err != nil { - log.Fatal("Open connection failed:", err.Error()) - } - defer conn.Close() - - _, err = conn.Exec(crateSchema) - if err != nil { - log.Println(err) - return - } - defer conn.Exec(dropSchema) - - _, err = conn.Exec(createTVP) - if err != nil { - log.Println(err) - return - } - defer conn.Exec(dropTVP) - - _, err = conn.Exec(procedureWithTVP) - if err != nil { - log.Println(err) - return - } - defer conn.Exec(dropProcedure) - - exempleData := []TvpExample{ - { - Message: "Hello", - }, - { - Message: "World", - }, - { - Message: "TVP", - }, - } - - tvpType := TVP{ - TypeName: "exempleTVP", - Value: exempleData, - } - - rows, err := conn.Query(execTvp, - sql.Named("param1", tvpType), - ) - if err != nil { - log.Println(err) - return - } - - tvpResult := make([]TvpExample, 0) - for rows.Next() { - tvpExemple := TvpExample{} - err = rows.Scan(&tvpExemple.Message) - if err != nil { - log.Println(err) - return - } - tvpResult = append(tvpResult, tvpExemple) - } - log.Println(tvpResult) -} - -func TestTVPObject(t *testing.T) { - checkConnStr(t) - SetLogger(testLogger{t}) - - conn, err := sql.Open("sqlserver", makeConnStr(t).String()) - if err != nil { - log.Fatal("Open connection failed:", err.Error()) - } - defer conn.Close() - - tests := []struct { - name string - tvp TVP - wantErr bool - }{ - { - name: "empty name", - wantErr: true, - tvp: TVP{TypeName: ""}, - }, - { - name: "value is wrong type", - wantErr: true, - tvp: TVP{TypeName: "type", Value: "wrong type"}, - }, - { - name: "tvp type is wrong", - wantErr: true, - tvp: TVP{TypeName: "[type", Value: []TvpExample{{}}}, - }, - { - name: "tvp type is wrong", - wantErr: true, - tvp: TVP{TypeName: "[type", Value: []TestFieldsUnsupportedTypes{{}}}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - _, err := conn.Exec("somequery", tt.tvp) - if (err != nil) != tt.wantErr { - t.Errorf("TVP.encode() error = %v, wantErr %v", err, tt.wantErr) - return - } - }) - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/tvp_go19_test.go b/vendor/github.com/denisenkom/go-mssqldb/tvp_go19_test.go deleted file mode 100644 index df2c02b9..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/tvp_go19_test.go +++ /dev/null @@ -1,578 +0,0 @@ -// +build go1.9 - -package mssql - -import ( - "reflect" - "testing" - "time" -) - -type TestFields struct { - PBinary []byte `tvp:"p_binary"` - PVarchar string `json:"p_varchar"` - PNvarchar *string `json:"p_nvarchar"` - TimeValue time.Time `echo:"-"` - TimeNullValue *time.Time -} - -type TestFieldError struct { - ErrorValue []*byte -} - -type TestFieldsUnsupportedTypes struct { - ErrorType TestFieldError -} - -func TestTVPType_columnTypes(t *testing.T) { - type customTypeAllFieldsSkipOne struct { - SkipTest int `tvp:"-"` - } - type customTypeAllFieldsSkipMoreOne struct { - SkipTest int `tvp:"-"` - SkipTest1 int `json:"-"` - } - type skipWrongField struct { - SkipTest int - SkipTest1 []*byte `json:"skip_test" tvp:"-"` - } - type structType struct { - SkipTest int `json:"-" tvp:"test"` - SkipTest1 []*skipWrongField `json:"any" tvp:"tvp"` - } - type skipWithAnotherTagValue struct { - SkipTest int `json:"-" tvp:"test"` - } - - type fields struct { - TVPName string - TVPValue interface{} - } - tests := []struct { - name string - fields fields - want []columnStruct - wantErr bool - }{ - { - name: "Test Pass", - fields: fields{ - TVPValue: []TestFields{TestFields{}}, - }, - }, - { - name: "Value has wrong field type", - fields: fields{ - TVPValue: []TestFieldError{TestFieldError{}}, - }, - wantErr: true, - }, - { - name: "Value has wrong type", - fields: fields{ - TVPValue: []TestFieldsUnsupportedTypes{}, - }, - wantErr: true, - }, - { - name: "Value has wrong type", - fields: fields{ - TVPValue: []structType{}, - }, - wantErr: true, - }, - { - name: "CustomTag all fields are skip, single field", - fields: fields{ - TVPValue: []customTypeAllFieldsSkipOne{}, - }, - wantErr: true, - }, - { - name: "CustomTag all fields are skip, > 1 field", - fields: fields{ - TVPValue: []customTypeAllFieldsSkipMoreOne{}, - }, - wantErr: true, - }, - { - name: "CustomTag all fields are skip wrong field type", - fields: fields{ - TVPValue: []skipWrongField{}, - }, - wantErr: false, - }, - { - name: "CustomTag tag value is not -", - fields: fields{ - TVPValue: []skipWithAnotherTagValue{}, - }, - wantErr: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - tvp := TVP{ - TypeName: tt.fields.TVPName, - Value: tt.fields.TVPValue, - } - _, _, err := tvp.columnTypes() - if (err != nil) != tt.wantErr { - t.Errorf("TVP.columnTypes() error = %v, wantErr %v", err, tt.wantErr) - return - } - }) - } -} - -func TestTVPType_check(t *testing.T) { - type fields struct { - TVPName string - TVPValue interface{} - } - - var nullSlice []*string - - tests := []struct { - name string - fields fields - wantErr bool - }{ - { - name: "TypeName is nil", - wantErr: true, - }, - { - name: "Value is nil", - fields: fields{ - TVPName: "Test", - TVPValue: nil, - }, - wantErr: true, - }, - { - name: "Value is nil", - fields: fields{ - TVPName: "Test", - }, - wantErr: true, - }, - { - name: "Value isn't slice", - fields: fields{ - TVPName: "Test", - TVPValue: "", - }, - wantErr: true, - }, - { - name: "Value isn't slice", - fields: fields{ - TVPName: "Test", - TVPValue: 12345, - }, - wantErr: true, - }, - { - name: "Value isn't slice", - fields: fields{ - TVPName: "Test", - TVPValue: nullSlice, - }, - wantErr: true, - }, - { - name: "Value isn't right", - fields: fields{ - TVPName: "Test", - TVPValue: []*fields{}, - }, - wantErr: true, - }, - { - name: "Value is right", - fields: fields{ - TVPName: "Test", - TVPValue: []fields{}, - }, - wantErr: false, - }, - { - name: "Value is right", - fields: fields{ - TVPName: "Test", - TVPValue: []fields{}, - }, - wantErr: false, - }, - { - name: "Value is right", - fields: fields{ - TVPName: "[Test]", - TVPValue: []fields{}, - }, - wantErr: false, - }, - { - name: "Value is right", - fields: fields{ - TVPName: "[123].[Test]", - TVPValue: []fields{}, - }, - wantErr: false, - }, - { - name: "TVP name is right", - fields: fields{ - TVPName: "[123].Test", - TVPValue: []fields{}, - }, - wantErr: false, - }, - { - name: "TVP name is right", - fields: fields{ - TVPName: "123.[Test]", - TVPValue: []fields{}, - }, - wantErr: false, - }, - { - name: "TVP name is wrong", - fields: fields{ - TVPName: "123.[Test\n]", - TVPValue: []fields{}, - }, - wantErr: true, - }, - { - name: "TVP name is wrong", - fields: fields{ - TVPName: "123.[Test].456", - TVPValue: []fields{}, - }, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - tvp := TVP{ - TypeName: tt.fields.TVPName, - Value: tt.fields.TVPValue, - } - if err := tvp.check(); (err != nil) != tt.wantErr { - t.Errorf("TVP.check() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -func BenchmarkTVPType_check(b *testing.B) { - type val struct { - Value string - } - tvp := TVP{ - TypeName: "Test", - Value: []val{}, - } - for i := 0; i < b.N; i++ { - err := tvp.check() - if err != nil { - b.Fail() - } - } -} - -func BenchmarkColumnTypes(b *testing.B) { - type str struct { - bytes byte - bytesNull *byte - bytesSlice []byte - - int8s int8 - int8sNull *int8 - uint8s uint8 - uint8sNull *uint8 - - int16s int16 - int16sNull *int16 - uint16s uint16 - uint16sNull *uint16 - - int32s int32 - int32sNull *int32 - uint32s uint32 - uint32sNull *uint32 - - int64s int64 - int64sNull *int64 - uint64s uint64 - uint64sNull *uint64 - - stringVal string - stringValNull *string - - bools bool - boolsNull *bool - } - wal := make([]str, 100) - tvp := TVP{ - TypeName: "Test", - Value: wal, - } - for i := 0; i < b.N; i++ { - _, _, err := tvp.columnTypes() - if err != nil { - b.Error(err) - } - } -} - -func TestIsSkipField(t *testing.T) { - type args struct { - tvpTagValue string - isTvpValue bool - jsonTagValue string - isJsonTagValue bool - } - tests := []struct { - name string - args args - want bool - }{ - { - name: "Empty tags", - want: false, - }, - { - name: "tvp is skip", - want: true, - args: args{ - isTvpValue: true, - tvpTagValue: skipTagValue, - }, - }, - { - name: "tvp is any", - want: false, - args: args{ - isTvpValue: true, - tvpTagValue: "tvp", - }, - }, - { - name: "Json is skip", - want: true, - args: args{ - isJsonTagValue: true, - jsonTagValue: skipTagValue, - }, - }, - { - name: "Json is any", - want: false, - args: args{ - isJsonTagValue: true, - jsonTagValue: "any", - }, - }, - { - name: "Json is skip tvp is skip", - want: true, - args: args{ - isJsonTagValue: true, - jsonTagValue: skipTagValue, - isTvpValue: true, - tvpTagValue: skipTagValue, - }, - }, - { - name: "Json is skip tvp is any", - want: false, - args: args{ - isJsonTagValue: true, - jsonTagValue: skipTagValue, - isTvpValue: true, - tvpTagValue: "tvp", - }, - }, - { - name: "Json is any tvp is skip", - want: true, - args: args{ - isJsonTagValue: true, - jsonTagValue: "json", - isTvpValue: true, - tvpTagValue: skipTagValue, - }, - }, - { - name: "Json is any tvp is skip", - want: false, - args: args{ - isJsonTagValue: true, - jsonTagValue: "json", - isTvpValue: true, - tvpTagValue: "tvp", - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := IsSkipField(tt.args.tvpTagValue, tt.args.isTvpValue, tt.args.jsonTagValue, tt.args.isJsonTagValue); got != tt.want { - t.Errorf("IsSkipField() = %v, schema %v", got, tt.want) - } - }) - } -} - -func Test_getSchemeAndName(t *testing.T) { - type args struct { - tvpName string - } - tests := []struct { - name string - args args - schema string - tvpName string - wantErr bool - }{ - { - name: "Empty object name", - wantErr: true, - }, - { - name: "Wrong object name", - wantErr: true, - args: args{ - tvpName: "1.2.3", - }, - }, - { - name: "Schema+name", - wantErr: false, - args: args{ - tvpName: "obj.tvp", - }, - schema: "obj", - tvpName: "tvp", - }, - { - name: "Schema+name", - wantErr: false, - args: args{ - tvpName: "[obj].[tvp]", - }, - schema: "obj", - tvpName: "tvp", - }, - { - name: "only name", - wantErr: false, - args: args{ - tvpName: "tvp", - }, - schema: "", - tvpName: "tvp", - }, - { - name: "only name", - wantErr: false, - args: args{ - tvpName: "[tvp]", - }, - schema: "", - tvpName: "tvp", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - schema, name, err := getSchemeAndName(tt.args.tvpName) - if (err != nil) != tt.wantErr { - t.Errorf("getSchemeAndName() error = %v, wantErr %v", err, tt.wantErr) - return - } - if schema != tt.schema { - t.Errorf("getSchemeAndName() schema = %v, schema %v", schema, tt.schema) - } - if name != tt.tvpName { - t.Errorf("getSchemeAndName() name = %v, schema %v", name, tt.tvpName) - } - }) - } -} - -func TestTVP_encode(t *testing.T) { - type fields struct { - TypeName string - Value interface{} - } - type args struct { - schema string - name string - columnStr []columnStruct - tvpFieldIndexes []int - } - tests := []struct { - name string - fields fields - args args - want []byte - wantErr bool - wantPanic bool - }{ - { - name: "column and indexes are nil", - wantErr: true, - args: args{ - tvpFieldIndexes: []int{1, 2}, - }, - }, - { - name: "column and indexes are nil", - wantErr: true, - args: args{ - tvpFieldIndexes: []int{1, 2}, - columnStr: []columnStruct{columnStruct{}}, - }, - }, - { - name: "column and indexes are nil", - wantErr: true, - args: args{ - columnStr: []columnStruct{columnStruct{}}, - }, - }, - { - name: "column and indexes are nil", - wantErr: true, - wantPanic: true, - args: args{ - schema: string(make([]byte, 256)), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if tt.wantPanic { - defer func() { - if r := recover(); r == nil { - t.Errorf("Want panic") - } - }() - } - tvp := TVP{ - TypeName: tt.fields.TypeName, - Value: tt.fields.Value, - } - got, err := tvp.encode(tt.args.schema, tt.args.name, tt.args.columnStr, tt.args.tvpFieldIndexes) - if (err != nil) != tt.wantErr { - t.Errorf("TVP.encode() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("TVP.encode() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/types_test.go b/vendor/github.com/denisenkom/go-mssqldb/types_test.go deleted file mode 100644 index 38d8a4b5..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/types_test.go +++ /dev/null @@ -1,123 +0,0 @@ -package mssql - -import ( - "reflect" - "testing" - "time" -) - -func TestMakeGoLangScanType(t *testing.T) { - if (reflect.TypeOf(int64(0)) != makeGoLangScanType(typeInfo{TypeId: typeInt8})) { - t.Errorf("invalid type returned for typeDateTime") - } - if (reflect.TypeOf(float64(0)) != makeGoLangScanType(typeInfo{TypeId: typeFlt4})) { - t.Errorf("invalid type returned for typeDateTime") - } - if (reflect.TypeOf(float64(0)) != makeGoLangScanType(typeInfo{TypeId: typeFlt8})) { - t.Errorf("invalid type returned for typeDateTime") - } - if (reflect.TypeOf("") != makeGoLangScanType(typeInfo{TypeId: typeVarChar})) { - t.Errorf("invalid type returned for typeDateTime") - } - if (reflect.TypeOf(time.Time{}) != makeGoLangScanType(typeInfo{TypeId: typeDateTime})) { - t.Errorf("invalid type returned for typeDateTime") - } - if (reflect.TypeOf(time.Time{}) != makeGoLangScanType(typeInfo{TypeId: typeDateTim4})) { - t.Errorf("invalid type returned for typeDateTim4") - } - if (reflect.TypeOf(int64(0)) != makeGoLangScanType(typeInfo{TypeId: typeInt1})) { - t.Errorf("invalid type returned for typeInt1") - } - if (reflect.TypeOf(int64(0)) != makeGoLangScanType(typeInfo{TypeId: typeInt2})) { - t.Errorf("invalid type returned for typeInt2") - } - if (reflect.TypeOf(int64(0)) != makeGoLangScanType(typeInfo{TypeId: typeInt4})) { - t.Errorf("invalid type returned for typeInt4") - } - if (reflect.TypeOf(int64(0)) != makeGoLangScanType(typeInfo{TypeId: typeIntN, Size: 4})) { - t.Errorf("invalid type returned for typeIntN") - } - if (reflect.TypeOf([]byte{}) != makeGoLangScanType(typeInfo{TypeId: typeMoney, Size: 8})) { - t.Errorf("invalid type returned for typeIntN") - } -} - -func TestMakeGoLangTypeName(t *testing.T) { - defer handlePanic(t) - - tests := []struct { - typeName string - typeString string - typeID uint8 - }{ - {"typeDateTime", "DATETIME", typeDateTime}, - {"typeDateTim4", "SMALLDATETIME", typeDateTim4}, - {"typeBigBinary", "BINARY", typeBigBinary}, - //TODO: Add other supported types - } - - for _, tt := range tests { - if makeGoLangTypeName(typeInfo{TypeId: tt.typeID}) != tt.typeString { - t.Errorf("invalid type name returned for %s", tt.typeName) - } - } -} - -func TestMakeGoLangTypeLength(t *testing.T) { - defer handlePanic(t) - - tests := []struct { - typeName string - typeVarLen bool - typeLen int64 - typeID uint8 - }{ - {"typeDateTime", false, 0, typeDateTime}, - {"typeDateTim4", false, 0, typeDateTim4}, - {"typeBigBinary", false, 0, typeBigBinary}, - //TODO: Add other supported types - } - - for _, tt := range tests { - n, v := makeGoLangTypeLength(typeInfo{TypeId: tt.typeID}) - if v != tt.typeVarLen { - t.Errorf("invalid type length variability returned for %s", tt.typeName) - } - if n != tt.typeLen { - t.Errorf("invalid type length returned for %s", tt.typeName) - } - } -} - -func TestMakeGoLangTypePrecisionScale(t *testing.T) { - defer handlePanic(t) - - tests := []struct { - typeName string - typeID uint8 - typeVarLen bool - typePrec int64 - typeScale int64 - }{ - {"typeDateTime", typeDateTime, false, 0, 0}, - {"typeDateTim4", typeDateTim4, false, 0, 0}, - {"typeBigBinary", typeBigBinary, false, 0, 0}, - //TODO: Add other supported types - } - - for _, tt := range tests { - prec, scale, varLen := makeGoLangTypePrecisionScale(typeInfo{TypeId: tt.typeID}) - if varLen != tt.typeVarLen { - t.Errorf("invalid type length variability returned for %s", tt.typeName) - } - if prec != tt.typePrec || scale != tt.typeScale { - t.Errorf("invalid type precision and/or scale returned for %s", tt.typeName) - } - } -} - -func handlePanic(t *testing.T) { - if r := recover(); r != nil { - t.Errorf("recovered panic") - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/uniqueidentifier_test.go b/vendor/github.com/denisenkom/go-mssqldb/uniqueidentifier_test.go deleted file mode 100644 index 2a29133a..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/uniqueidentifier_test.go +++ /dev/null @@ -1,70 +0,0 @@ -package mssql - -import ( - "bytes" - "database/sql" - "database/sql/driver" - "fmt" - "testing" -) - -func TestUniqueIdentifier(t *testing.T) { - dbUUID := UniqueIdentifier{0x67, 0x45, 0x23, 0x01, - 0xAB, 0x89, - 0xEF, 0xCD, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - } - - uuid := UniqueIdentifier{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF} - - t.Run("Scan", func(t *testing.T) { - t.Run("[]byte", func(t *testing.T) { - var sut UniqueIdentifier - if err := sut.Scan(dbUUID[:]); err != nil { - t.Fatal(err) - } - if sut != uuid { - t.Errorf("bytes not swapped correctly: got %q; want %q", sut, uuid) - } - }) - - t.Run("string", func(t *testing.T) { - var sut UniqueIdentifier - if err := sut.Scan(uuid.String()); err != nil { - t.Fatal(err) - } - if sut != uuid { - t.Errorf("string not scanned correctly: got %q; want %q", sut, uuid) - } - }) - }) - - t.Run("Value", func(t *testing.T) { - sut := uuid - v, err := sut.Value() - if err != nil { - t.Fatal(err) - } - - b, ok := v.([]byte) - if !ok { - t.Fatalf("(%T) is not []byte", v) - } - - if !bytes.Equal(b, dbUUID[:]) { - t.Errorf("got %q; want %q", b, dbUUID) - } - }) -} - -func TestUniqueIdentifierString(t *testing.T) { - sut := UniqueIdentifier{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF} - expected := "01234567-89AB-CDEF-0123-456789ABCDEF" - if actual := sut.String(); actual != expected { - t.Errorf("sut.String() = %s; want %s", sut, expected) - } -} - -var _ fmt.Stringer = UniqueIdentifier{} -var _ sql.Scanner = &UniqueIdentifier{} -var _ driver.Valuer = UniqueIdentifier{} diff --git a/vendor/github.com/go-sql-driver/mysql/AUTHORS b/vendor/github.com/go-sql-driver/mysql/AUTHORS index bfe74c4e..73ff68fb 100644 --- a/vendor/github.com/go-sql-driver/mysql/AUTHORS +++ b/vendor/github.com/go-sql-driver/mysql/AUTHORS @@ -27,7 +27,6 @@ Daniël van Eeden Dave Protasowski DisposaBoy Egor Smolyakov -Erwan Martin Evan Shaw Frederick Mayle Gustavo Kristic @@ -35,15 +34,12 @@ Hajime Nakagami Hanno Braun Henri Yandell Hirotaka Yamamoto -Huyiguang ICHINOSE Shogo -Ilia Cimpoes INADA Naoki Jacek Szwec James Harr Jeff Hodges Jeffrey Charles -Jerome Meyer Jian Zhen Joshua Prunier Julien Lefevre @@ -73,14 +69,9 @@ Richard Wilkes Robert Russell Runrioter Wung Shuode Li -Simon J Mudd Soroush Pour Stan Putrya Stanley Gunawan -Steven Hartland -Thomas Wodarek -Tim Ruffles -Tom Jenkinson Xiangyu Hu Xiaobing Jiang Xiuming Chen @@ -90,12 +81,9 @@ Zhenye Xie Barracuda Networks, Inc. Counting Ltd. -Facebook Inc. -GitHub Inc. Google Inc. InfoSum Ltd. Keybase Inc. -Multiplay Ltd. Percona LLC Pivotal Inc. Stripe Inc. diff --git a/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md b/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md index 2d87d74c..ce1b5330 100644 --- a/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md +++ b/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md @@ -1,3 +1,14 @@ +## Version 1.4.1 (2018-11-14) + +Bugfixes: + + - Fix TIME format for binary columns (#818) + - Fix handling of empty auth plugin names (#835) + - Fix caching_sha2_password with empty password (#826) + - Fix canceled context broke mysqlConn (#862) + - Fix OldAuthSwitchRequest support (#870) + - Fix Auth Response packet for cleartext password (#887) + ## Version 1.4 (2018-06-03) Changes: diff --git a/vendor/github.com/go-sql-driver/mysql/README.md b/vendor/github.com/go-sql-driver/mysql/README.md index c6adf1d6..2e9b07ee 100644 --- a/vendor/github.com/go-sql-driver/mysql/README.md +++ b/vendor/github.com/go-sql-driver/mysql/README.md @@ -40,7 +40,7 @@ A MySQL-Driver for Go's [database/sql](https://golang.org/pkg/database/sql/) pac * Optional placeholder interpolation ## Requirements - * Go 1.9 or higher. We aim to support the 3 latest versions of Go. + * Go 1.7 or higher. We aim to support the 3 latest versions of Go. * MySQL (4.1+), MariaDB, Percona Server, Google CloudSQL or Sphinx (2.2.3+) --------------------------------------- @@ -171,18 +171,13 @@ Unless you need the fallback behavior, please use `collation` instead. ``` Type: string Valid Values: -Default: utf8mb4_general_ci +Default: utf8_general_ci ``` Sets the collation used for client-server interaction on connection. In contrast to `charset`, `collation` does not issue additional queries. If the specified collation is unavailable on the target server, the connection will fail. A list of valid charsets for a server is retrievable with `SHOW COLLATION`. -The default collation (`utf8mb4_general_ci`) is supported from MySQL 5.5. You should use an older collation (e.g. `utf8_general_ci`) for older MySQL. - -Collations for charset "ucs2", "utf16", "utf16le", and "utf32" can not be used ([ref](https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset-connection-impermissible-client-charset)). - - ##### `clientFoundRows` ``` @@ -333,11 +328,11 @@ Timeout for establishing connections, aka dial timeout. The value must be a deci ``` Type: bool / string -Valid Values: true, false, skip-verify, preferred, +Valid Values: true, false, skip-verify, Default: false ``` -`tls=true` enables TLS / SSL encrypted connection to the server. Use `skip-verify` if you want to use a self-signed or invalid certificate (server side) or use `preferred` to use TLS only when advertised by the server. This is similar to `skip-verify`, but additionally allows a fallback to a connection which is not encrypted. Neither `skip-verify` nor `preferred` add any reliable security. You can use a custom TLS config after registering it with [`mysql.RegisterTLSConfig`](https://godoc.org/github.com/go-sql-driver/mysql#RegisterTLSConfig). +`tls=true` enables TLS / SSL encrypted connection to the server. Use `skip-verify` if you want to use a self-signed or invalid certificate (server side). Use a custom value registered with [`mysql.RegisterTLSConfig`](https://godoc.org/github.com/go-sql-driver/mysql#RegisterTLSConfig). ##### `writeTimeout` @@ -449,7 +444,7 @@ See the [godoc of Go-MySQL-Driver](https://godoc.org/github.com/go-sql-driver/my ### `time.Time` support The default internal output type of MySQL `DATE` and `DATETIME` values is `[]byte` which allows you to scan the value into a `[]byte`, `string` or `sql.RawBytes` variable in your program. -However, many want to scan MySQL `DATE` and `DATETIME` values into `time.Time` variables, which is the logical equivalent in Go to `DATE` and `DATETIME` in MySQL. You can do that by changing the internal output type from `[]byte` to `time.Time` with the DSN parameter `parseTime=true`. You can set the default [`time.Time` location](https://golang.org/pkg/time/#Location) with the `loc` DSN parameter. +However, many want to scan MySQL `DATE` and `DATETIME` values into `time.Time` variables, which is the logical opposite in Go to `DATE` and `DATETIME` in MySQL. You can do that by changing the internal output type from `[]byte` to `time.Time` with the DSN parameter `parseTime=true`. You can set the default [`time.Time` location](https://golang.org/pkg/time/#Location) with the `loc` DSN parameter. **Caution:** As of Go 1.1, this makes `time.Time` the only variable type you can scan `DATE` and `DATETIME` values into. This breaks for example [`sql.RawBytes` support](https://github.com/go-sql-driver/mysql/wiki/Examples#rawbytes). diff --git a/vendor/github.com/go-sql-driver/mysql/appengine.go b/vendor/github.com/go-sql-driver/mysql/appengine.go index 914e6623..be41f2ee 100644 --- a/vendor/github.com/go-sql-driver/mysql/appengine.go +++ b/vendor/github.com/go-sql-driver/mysql/appengine.go @@ -11,15 +11,9 @@ package mysql import ( - "context" - "net" - "google.golang.org/appengine/cloudsql" ) func init() { - RegisterDialContext("cloudsql", func(_ context.Context, instance string) (net.Conn, error) { - // XXX: the cloudsql driver still does not export a Context-aware dialer. - return cloudsql.Dial(instance) - }) + RegisterDial("cloudsql", cloudsql.Dial) } diff --git a/vendor/github.com/go-sql-driver/mysql/auth.go b/vendor/github.com/go-sql-driver/mysql/auth.go index fec7040d..14f678a8 100644 --- a/vendor/github.com/go-sql-driver/mysql/auth.go +++ b/vendor/github.com/go-sql-driver/mysql/auth.go @@ -360,15 +360,13 @@ func (mc *mysqlConn) handleAuthResult(oldAuthData []byte, plugin string) error { pubKey := mc.cfg.pubKey if pubKey == nil { // request public key from server - data, err := mc.buf.takeSmallBuffer(4 + 1) - if err != nil { - return err - } + data := mc.buf.takeSmallBuffer(4 + 1) data[4] = cachingSha2PasswordRequestPublicKey mc.writePacket(data) // parse public key - if data, err = mc.readPacket(); err != nil { + data, err := mc.readPacket() + if err != nil { return err } diff --git a/vendor/github.com/go-sql-driver/mysql/auth_test.go b/vendor/github.com/go-sql-driver/mysql/auth_test.go deleted file mode 100644 index 1920ef39..00000000 --- a/vendor/github.com/go-sql-driver/mysql/auth_test.go +++ /dev/null @@ -1,1330 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2018 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "bytes" - "crypto/rsa" - "crypto/tls" - "crypto/x509" - "encoding/pem" - "fmt" - "testing" -) - -var testPubKey = []byte("-----BEGIN PUBLIC KEY-----\n" + - "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAol0Z8G8U+25Btxk/g/fm\n" + - "UAW/wEKjQCTjkibDE4B+qkuWeiumg6miIRhtilU6m9BFmLQSy1ltYQuu4k17A4tQ\n" + - "rIPpOQYZges/qsDFkZh3wyK5jL5WEFVdOasf6wsfszExnPmcZS4axxoYJfiuilrN\n" + - "hnwinBAqfi3S0sw5MpSI4Zl1AbOrHG4zDI62Gti2PKiMGyYDZTS9xPrBLbN95Kby\n" + - "FFclQLEzA9RJcS1nHFsWtRgHjGPhhjCQxEm9NQ1nePFhCfBfApyfH1VM2VCOQum6\n" + - "Ci9bMuHWjTjckC84mzF99kOxOWVU7mwS6gnJqBzpuz8t3zq8/iQ2y7QrmZV+jTJP\n" + - "WQIDAQAB\n" + - "-----END PUBLIC KEY-----\n") - -var testPubKeyRSA *rsa.PublicKey - -func init() { - block, _ := pem.Decode(testPubKey) - pub, err := x509.ParsePKIXPublicKey(block.Bytes) - if err != nil { - panic(err) - } - testPubKeyRSA = pub.(*rsa.PublicKey) -} - -func TestScrambleOldPass(t *testing.T) { - scramble := []byte{9, 8, 7, 6, 5, 4, 3, 2} - vectors := []struct { - pass string - out string - }{ - {" pass", "47575c5a435b4251"}, - {"pass ", "47575c5a435b4251"}, - {"123\t456", "575c47505b5b5559"}, - {"C0mpl!ca ted#PASS123", "5d5d554849584a45"}, - } - for _, tuple := range vectors { - ours := scrambleOldPassword(scramble, tuple.pass) - if tuple.out != fmt.Sprintf("%x", ours) { - t.Errorf("Failed old password %q", tuple.pass) - } - } -} - -func TestScrambleSHA256Pass(t *testing.T) { - scramble := []byte{10, 47, 74, 111, 75, 73, 34, 48, 88, 76, 114, 74, 37, 13, 3, 80, 82, 2, 23, 21} - vectors := []struct { - pass string - out string - }{ - {"secret", "f490e76f66d9d86665ce54d98c78d0acfe2fb0b08b423da807144873d30b312c"}, - {"secret2", "abc3934a012cf342e876071c8ee202de51785b430258a7a0138bc79c4d800bc6"}, - } - for _, tuple := range vectors { - ours := scrambleSHA256Password(scramble, tuple.pass) - if tuple.out != fmt.Sprintf("%x", ours) { - t.Errorf("Failed SHA256 password %q", tuple.pass) - } - } -} - -func TestAuthFastCachingSHA256PasswordCached(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "secret" - - authData := []byte{90, 105, 74, 126, 30, 48, 37, 56, 3, 23, 115, 127, 69, - 22, 41, 84, 32, 123, 43, 118} - plugin := "caching_sha2_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - expectedAuthResp := []byte{102, 32, 5, 35, 143, 161, 140, 241, 171, 232, 56, - 139, 43, 14, 107, 196, 249, 170, 147, 60, 220, 204, 120, 178, 214, 15, - 184, 150, 26, 61, 57, 235} - if writtenAuthRespLen != 32 || !bytes.Equal(writtenAuthResp, expectedAuthResp) { - t.Fatalf("unexpected written auth response (%d bytes): %v", writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response - conn.data = []byte{ - 2, 0, 0, 2, 1, 3, // Fast Auth Success - 7, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, // OK - } - conn.maxReads = 1 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } -} - -func TestAuthFastCachingSHA256PasswordEmpty(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "" - - authData := []byte{90, 105, 74, 126, 30, 48, 37, 56, 3, 23, 115, 127, 69, - 22, 41, 84, 32, 123, 43, 118} - plugin := "caching_sha2_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - if writtenAuthRespLen != 0 { - t.Fatalf("unexpected written auth response (%d bytes): %v", - writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response - conn.data = []byte{ - 7, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, // OK - } - conn.maxReads = 1 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } -} - -func TestAuthFastCachingSHA256PasswordFullRSA(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "secret" - - authData := []byte{6, 81, 96, 114, 14, 42, 50, 30, 76, 47, 1, 95, 126, 81, - 62, 94, 83, 80, 52, 85} - plugin := "caching_sha2_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - expectedAuthResp := []byte{171, 201, 138, 146, 89, 159, 11, 170, 0, 67, 165, - 49, 175, 94, 218, 68, 177, 109, 110, 86, 34, 33, 44, 190, 67, 240, 70, - 110, 40, 139, 124, 41} - if writtenAuthRespLen != 32 || !bytes.Equal(writtenAuthResp, expectedAuthResp) { - t.Fatalf("unexpected written auth response (%d bytes): %v", writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response - conn.data = []byte{ - 2, 0, 0, 2, 1, 4, // Perform Full Authentication - } - conn.queuedReplies = [][]byte{ - // pub key response - append([]byte{byte(1 + len(testPubKey)), 1, 0, 4, 1}, testPubKey...), - - // OK - {7, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0}, - } - conn.maxReads = 3 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - if !bytes.HasPrefix(conn.written, []byte{1, 0, 0, 3, 2, 0, 1, 0, 5}) { - t.Errorf("unexpected written data: %v", conn.written) - } -} - -func TestAuthFastCachingSHA256PasswordFullRSAWithKey(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "secret" - mc.cfg.pubKey = testPubKeyRSA - - authData := []byte{6, 81, 96, 114, 14, 42, 50, 30, 76, 47, 1, 95, 126, 81, - 62, 94, 83, 80, 52, 85} - plugin := "caching_sha2_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - expectedAuthResp := []byte{171, 201, 138, 146, 89, 159, 11, 170, 0, 67, 165, - 49, 175, 94, 218, 68, 177, 109, 110, 86, 34, 33, 44, 190, 67, 240, 70, - 110, 40, 139, 124, 41} - if writtenAuthRespLen != 32 || !bytes.Equal(writtenAuthResp, expectedAuthResp) { - t.Fatalf("unexpected written auth response (%d bytes): %v", writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response - conn.data = []byte{ - 2, 0, 0, 2, 1, 4, // Perform Full Authentication - } - conn.queuedReplies = [][]byte{ - // OK - {7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}, - } - conn.maxReads = 2 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - if !bytes.HasPrefix(conn.written, []byte{0, 1, 0, 3}) { - t.Errorf("unexpected written data: %v", conn.written) - } -} - -func TestAuthFastCachingSHA256PasswordFullSecure(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "secret" - - authData := []byte{6, 81, 96, 114, 14, 42, 50, 30, 76, 47, 1, 95, 126, 81, - 62, 94, 83, 80, 52, 85} - plugin := "caching_sha2_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // Hack to make the caching_sha2_password plugin believe that the connection - // is secure - mc.cfg.tls = &tls.Config{InsecureSkipVerify: true} - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - expectedAuthResp := []byte{171, 201, 138, 146, 89, 159, 11, 170, 0, 67, 165, - 49, 175, 94, 218, 68, 177, 109, 110, 86, 34, 33, 44, 190, 67, 240, 70, - 110, 40, 139, 124, 41} - if writtenAuthRespLen != 32 || !bytes.Equal(writtenAuthResp, expectedAuthResp) { - t.Fatalf("unexpected written auth response (%d bytes): %v", writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response - conn.data = []byte{ - 2, 0, 0, 2, 1, 4, // Perform Full Authentication - } - conn.queuedReplies = [][]byte{ - // OK - {7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}, - } - conn.maxReads = 3 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - if !bytes.Equal(conn.written, []byte{7, 0, 0, 3, 115, 101, 99, 114, 101, 116, 0}) { - t.Errorf("unexpected written data: %v", conn.written) - } -} - -func TestAuthFastCleartextPasswordNotAllowed(t *testing.T) { - _, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "secret" - - authData := []byte{70, 114, 92, 94, 1, 38, 11, 116, 63, 114, 23, 101, 126, - 103, 26, 95, 81, 17, 24, 21} - plugin := "mysql_clear_password" - - // Send Client Authentication Packet - _, err := mc.auth(authData, plugin) - if err != ErrCleartextPassword { - t.Errorf("expected ErrCleartextPassword, got %v", err) - } -} - -func TestAuthFastCleartextPassword(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "secret" - mc.cfg.AllowCleartextPasswords = true - - authData := []byte{70, 114, 92, 94, 1, 38, 11, 116, 63, 114, 23, 101, 126, - 103, 26, 95, 81, 17, 24, 21} - plugin := "mysql_clear_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - expectedAuthResp := []byte{115, 101, 99, 114, 101, 116, 0} - if writtenAuthRespLen != 7 || !bytes.Equal(writtenAuthResp, expectedAuthResp) { - t.Fatalf("unexpected written auth response (%d bytes): %v", writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response - conn.data = []byte{ - 7, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, // OK - } - conn.maxReads = 1 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } -} - -func TestAuthFastCleartextPasswordEmpty(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "" - mc.cfg.AllowCleartextPasswords = true - - authData := []byte{70, 114, 92, 94, 1, 38, 11, 116, 63, 114, 23, 101, 126, - 103, 26, 95, 81, 17, 24, 21} - plugin := "mysql_clear_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - expectedAuthResp := []byte{0} - if writtenAuthRespLen != 1 || !bytes.Equal(writtenAuthResp, expectedAuthResp) { - t.Fatalf("unexpected written auth response (%d bytes): %v", writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response - conn.data = []byte{ - 7, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, // OK - } - conn.maxReads = 1 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } -} - -func TestAuthFastNativePasswordNotAllowed(t *testing.T) { - _, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "secret" - mc.cfg.AllowNativePasswords = false - - authData := []byte{70, 114, 92, 94, 1, 38, 11, 116, 63, 114, 23, 101, 126, - 103, 26, 95, 81, 17, 24, 21} - plugin := "mysql_native_password" - - // Send Client Authentication Packet - _, err := mc.auth(authData, plugin) - if err != ErrNativePassword { - t.Errorf("expected ErrNativePassword, got %v", err) - } -} - -func TestAuthFastNativePassword(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "secret" - - authData := []byte{70, 114, 92, 94, 1, 38, 11, 116, 63, 114, 23, 101, 126, - 103, 26, 95, 81, 17, 24, 21} - plugin := "mysql_native_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - expectedAuthResp := []byte{53, 177, 140, 159, 251, 189, 127, 53, 109, 252, - 172, 50, 211, 192, 240, 164, 26, 48, 207, 45} - if writtenAuthRespLen != 20 || !bytes.Equal(writtenAuthResp, expectedAuthResp) { - t.Fatalf("unexpected written auth response (%d bytes): %v", writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response - conn.data = []byte{ - 7, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, // OK - } - conn.maxReads = 1 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } -} - -func TestAuthFastNativePasswordEmpty(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "" - - authData := []byte{70, 114, 92, 94, 1, 38, 11, 116, 63, 114, 23, 101, 126, - 103, 26, 95, 81, 17, 24, 21} - plugin := "mysql_native_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - if writtenAuthRespLen != 0 { - t.Fatalf("unexpected written auth response (%d bytes): %v", - writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response - conn.data = []byte{ - 7, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, // OK - } - conn.maxReads = 1 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } -} - -func TestAuthFastSHA256PasswordEmpty(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "" - - authData := []byte{6, 81, 96, 114, 14, 42, 50, 30, 76, 47, 1, 95, 126, 81, - 62, 94, 83, 80, 52, 85} - plugin := "sha256_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - expectedAuthResp := []byte{0} - if writtenAuthRespLen != 1 || !bytes.Equal(writtenAuthResp, expectedAuthResp) { - t.Fatalf("unexpected written auth response (%d bytes): %v", writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response (pub key response) - conn.data = append([]byte{byte(1 + len(testPubKey)), 1, 0, 2, 1}, testPubKey...) - conn.queuedReplies = [][]byte{ - // OK - {7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}, - } - conn.maxReads = 2 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - if !bytes.HasPrefix(conn.written, []byte{0, 1, 0, 3}) { - t.Errorf("unexpected written data: %v", conn.written) - } -} - -func TestAuthFastSHA256PasswordRSA(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "secret" - - authData := []byte{6, 81, 96, 114, 14, 42, 50, 30, 76, 47, 1, 95, 126, 81, - 62, 94, 83, 80, 52, 85} - plugin := "sha256_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - expectedAuthResp := []byte{1} - if writtenAuthRespLen != 1 || !bytes.Equal(writtenAuthResp, expectedAuthResp) { - t.Fatalf("unexpected written auth response (%d bytes): %v", writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response (pub key response) - conn.data = append([]byte{byte(1 + len(testPubKey)), 1, 0, 2, 1}, testPubKey...) - conn.queuedReplies = [][]byte{ - // OK - {7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}, - } - conn.maxReads = 2 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - if !bytes.HasPrefix(conn.written, []byte{0, 1, 0, 3}) { - t.Errorf("unexpected written data: %v", conn.written) - } -} - -func TestAuthFastSHA256PasswordRSAWithKey(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "secret" - mc.cfg.pubKey = testPubKeyRSA - - authData := []byte{6, 81, 96, 114, 14, 42, 50, 30, 76, 47, 1, 95, 126, 81, - 62, 94, 83, 80, 52, 85} - plugin := "sha256_password" - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // auth response (OK) - conn.data = []byte{7, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0} - conn.maxReads = 1 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } -} - -func TestAuthFastSHA256PasswordSecure(t *testing.T) { - conn, mc := newRWMockConn(1) - mc.cfg.User = "root" - mc.cfg.Passwd = "secret" - - // hack to make the caching_sha2_password plugin believe that the connection - // is secure - mc.cfg.tls = &tls.Config{InsecureSkipVerify: true} - - authData := []byte{6, 81, 96, 114, 14, 42, 50, 30, 76, 47, 1, 95, 126, 81, - 62, 94, 83, 80, 52, 85} - plugin := "sha256_password" - - // send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - t.Fatal(err) - } - - // unset TLS config to prevent the actual establishment of a TLS wrapper - mc.cfg.tls = nil - - err = mc.writeHandshakeResponsePacket(authResp, plugin) - if err != nil { - t.Fatal(err) - } - - // check written auth response - authRespStart := 4 + 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 - authRespEnd := authRespStart + 1 + len(authResp) - writtenAuthRespLen := conn.written[authRespStart] - writtenAuthResp := conn.written[authRespStart+1 : authRespEnd] - expectedAuthResp := []byte{115, 101, 99, 114, 101, 116, 0} - if writtenAuthRespLen != 7 || !bytes.Equal(writtenAuthResp, expectedAuthResp) { - t.Fatalf("unexpected written auth response (%d bytes): %v", writtenAuthRespLen, writtenAuthResp) - } - conn.written = nil - - // auth response (OK) - conn.data = []byte{7, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0} - conn.maxReads = 1 - - // Handle response to auth packet - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - if !bytes.Equal(conn.written, []byte{}) { - t.Errorf("unexpected written data: %v", conn.written) - } -} - -func TestAuthSwitchCachingSHA256PasswordCached(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.Passwd = "secret" - - // auth switch request - conn.data = []byte{44, 0, 0, 2, 254, 99, 97, 99, 104, 105, 110, 103, 95, - 115, 104, 97, 50, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 101, - 11, 26, 18, 94, 97, 22, 72, 2, 46, 70, 106, 29, 55, 45, 94, 76, 90, 84, - 50, 0} - - // auth response - conn.queuedReplies = [][]byte{ - {7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}, // OK - } - conn.maxReads = 3 - - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReply := []byte{ - // 1. Packet: Hash - 32, 0, 0, 3, 129, 93, 132, 95, 114, 48, 79, 215, 128, 62, 193, 118, 128, - 54, 75, 208, 159, 252, 227, 215, 129, 15, 242, 97, 19, 159, 31, 20, 58, - 153, 9, 130, - } - if !bytes.Equal(conn.written, expectedReply) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchCachingSHA256PasswordEmpty(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.Passwd = "" - - // auth switch request - conn.data = []byte{44, 0, 0, 2, 254, 99, 97, 99, 104, 105, 110, 103, 95, - 115, 104, 97, 50, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 101, - 11, 26, 18, 94, 97, 22, 72, 2, 46, 70, 106, 29, 55, 45, 94, 76, 90, 84, - 50, 0} - - // auth response - conn.queuedReplies = [][]byte{{7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}} - conn.maxReads = 2 - - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReply := []byte{0, 0, 0, 3} - if !bytes.Equal(conn.written, expectedReply) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchCachingSHA256PasswordFullRSA(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.Passwd = "secret" - - // auth switch request - conn.data = []byte{44, 0, 0, 2, 254, 99, 97, 99, 104, 105, 110, 103, 95, - 115, 104, 97, 50, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 101, - 11, 26, 18, 94, 97, 22, 72, 2, 46, 70, 106, 29, 55, 45, 94, 76, 90, 84, - 50, 0} - - conn.queuedReplies = [][]byte{ - // Perform Full Authentication - {2, 0, 0, 4, 1, 4}, - - // Pub Key Response - append([]byte{byte(1 + len(testPubKey)), 1, 0, 6, 1}, testPubKey...), - - // OK - {7, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0}, - } - conn.maxReads = 4 - - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReplyPrefix := []byte{ - // 1. Packet: Hash - 32, 0, 0, 3, 129, 93, 132, 95, 114, 48, 79, 215, 128, 62, 193, 118, 128, - 54, 75, 208, 159, 252, 227, 215, 129, 15, 242, 97, 19, 159, 31, 20, 58, - 153, 9, 130, - - // 2. Packet: Pub Key Request - 1, 0, 0, 5, 2, - - // 3. Packet: Encrypted Password - 0, 1, 0, 7, // [changing bytes] - } - if !bytes.HasPrefix(conn.written, expectedReplyPrefix) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchCachingSHA256PasswordFullRSAWithKey(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.Passwd = "secret" - mc.cfg.pubKey = testPubKeyRSA - - // auth switch request - conn.data = []byte{44, 0, 0, 2, 254, 99, 97, 99, 104, 105, 110, 103, 95, - 115, 104, 97, 50, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 101, - 11, 26, 18, 94, 97, 22, 72, 2, 46, 70, 106, 29, 55, 45, 94, 76, 90, 84, - 50, 0} - - conn.queuedReplies = [][]byte{ - // Perform Full Authentication - {2, 0, 0, 4, 1, 4}, - - // OK - {7, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0}, - } - conn.maxReads = 3 - - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReplyPrefix := []byte{ - // 1. Packet: Hash - 32, 0, 0, 3, 129, 93, 132, 95, 114, 48, 79, 215, 128, 62, 193, 118, 128, - 54, 75, 208, 159, 252, 227, 215, 129, 15, 242, 97, 19, 159, 31, 20, 58, - 153, 9, 130, - - // 2. Packet: Encrypted Password - 0, 1, 0, 5, // [changing bytes] - } - if !bytes.HasPrefix(conn.written, expectedReplyPrefix) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchCachingSHA256PasswordFullSecure(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.Passwd = "secret" - - // Hack to make the caching_sha2_password plugin believe that the connection - // is secure - mc.cfg.tls = &tls.Config{InsecureSkipVerify: true} - - // auth switch request - conn.data = []byte{44, 0, 0, 2, 254, 99, 97, 99, 104, 105, 110, 103, 95, - 115, 104, 97, 50, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 101, - 11, 26, 18, 94, 97, 22, 72, 2, 46, 70, 106, 29, 55, 45, 94, 76, 90, 84, - 50, 0} - - // auth response - conn.queuedReplies = [][]byte{ - {2, 0, 0, 4, 1, 4}, // Perform Full Authentication - {7, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0}, // OK - } - conn.maxReads = 3 - - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReply := []byte{ - // 1. Packet: Hash - 32, 0, 0, 3, 129, 93, 132, 95, 114, 48, 79, 215, 128, 62, 193, 118, 128, - 54, 75, 208, 159, 252, 227, 215, 129, 15, 242, 97, 19, 159, 31, 20, 58, - 153, 9, 130, - - // 2. Packet: Cleartext password - 7, 0, 0, 5, 115, 101, 99, 114, 101, 116, 0, - } - if !bytes.Equal(conn.written, expectedReply) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchCleartextPasswordNotAllowed(t *testing.T) { - conn, mc := newRWMockConn(2) - - conn.data = []byte{22, 0, 0, 2, 254, 109, 121, 115, 113, 108, 95, 99, 108, - 101, 97, 114, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0} - conn.maxReads = 1 - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - err := mc.handleAuthResult(authData, plugin) - if err != ErrCleartextPassword { - t.Errorf("expected ErrCleartextPassword, got %v", err) - } -} - -func TestAuthSwitchCleartextPassword(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.AllowCleartextPasswords = true - mc.cfg.Passwd = "secret" - - // auth switch request - conn.data = []byte{22, 0, 0, 2, 254, 109, 121, 115, 113, 108, 95, 99, 108, - 101, 97, 114, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0} - - // auth response - conn.queuedReplies = [][]byte{{7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}} - conn.maxReads = 2 - - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReply := []byte{7, 0, 0, 3, 115, 101, 99, 114, 101, 116, 0} - if !bytes.Equal(conn.written, expectedReply) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchCleartextPasswordEmpty(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.AllowCleartextPasswords = true - mc.cfg.Passwd = "" - - // auth switch request - conn.data = []byte{22, 0, 0, 2, 254, 109, 121, 115, 113, 108, 95, 99, 108, - 101, 97, 114, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0} - - // auth response - conn.queuedReplies = [][]byte{{7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}} - conn.maxReads = 2 - - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReply := []byte{1, 0, 0, 3, 0} - if !bytes.Equal(conn.written, expectedReply) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchNativePasswordNotAllowed(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.AllowNativePasswords = false - - conn.data = []byte{44, 0, 0, 2, 254, 109, 121, 115, 113, 108, 95, 110, 97, - 116, 105, 118, 101, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 96, - 71, 63, 8, 1, 58, 75, 12, 69, 95, 66, 60, 117, 31, 48, 31, 89, 39, 55, - 31, 0} - conn.maxReads = 1 - authData := []byte{96, 71, 63, 8, 1, 58, 75, 12, 69, 95, 66, 60, 117, 31, - 48, 31, 89, 39, 55, 31} - plugin := "caching_sha2_password" - err := mc.handleAuthResult(authData, plugin) - if err != ErrNativePassword { - t.Errorf("expected ErrNativePassword, got %v", err) - } -} - -func TestAuthSwitchNativePassword(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.AllowNativePasswords = true - mc.cfg.Passwd = "secret" - - // auth switch request - conn.data = []byte{44, 0, 0, 2, 254, 109, 121, 115, 113, 108, 95, 110, 97, - 116, 105, 118, 101, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 96, - 71, 63, 8, 1, 58, 75, 12, 69, 95, 66, 60, 117, 31, 48, 31, 89, 39, 55, - 31, 0} - - // auth response - conn.queuedReplies = [][]byte{{7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}} - conn.maxReads = 2 - - authData := []byte{96, 71, 63, 8, 1, 58, 75, 12, 69, 95, 66, 60, 117, 31, - 48, 31, 89, 39, 55, 31} - plugin := "caching_sha2_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReply := []byte{20, 0, 0, 3, 202, 41, 195, 164, 34, 226, 49, 103, - 21, 211, 167, 199, 227, 116, 8, 48, 57, 71, 149, 146} - if !bytes.Equal(conn.written, expectedReply) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchNativePasswordEmpty(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.AllowNativePasswords = true - mc.cfg.Passwd = "" - - // auth switch request - conn.data = []byte{44, 0, 0, 2, 254, 109, 121, 115, 113, 108, 95, 110, 97, - 116, 105, 118, 101, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 96, - 71, 63, 8, 1, 58, 75, 12, 69, 95, 66, 60, 117, 31, 48, 31, 89, 39, 55, - 31, 0} - - // auth response - conn.queuedReplies = [][]byte{{7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}} - conn.maxReads = 2 - - authData := []byte{96, 71, 63, 8, 1, 58, 75, 12, 69, 95, 66, 60, 117, 31, - 48, 31, 89, 39, 55, 31} - plugin := "caching_sha2_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReply := []byte{0, 0, 0, 3} - if !bytes.Equal(conn.written, expectedReply) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchOldPasswordNotAllowed(t *testing.T) { - conn, mc := newRWMockConn(2) - - conn.data = []byte{41, 0, 0, 2, 254, 109, 121, 115, 113, 108, 95, 111, 108, - 100, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 95, 84, 103, 43, 61, - 49, 123, 61, 91, 50, 40, 113, 35, 84, 96, 101, 92, 123, 121, 107, 0} - conn.maxReads = 1 - authData := []byte{95, 84, 103, 43, 61, 49, 123, 61, 91, 50, 40, 113, 35, - 84, 96, 101, 92, 123, 121, 107} - plugin := "mysql_native_password" - err := mc.handleAuthResult(authData, plugin) - if err != ErrOldPassword { - t.Errorf("expected ErrOldPassword, got %v", err) - } -} - -// Same to TestAuthSwitchOldPasswordNotAllowed, but use OldAuthSwitch request. -func TestOldAuthSwitchNotAllowed(t *testing.T) { - conn, mc := newRWMockConn(2) - - // OldAuthSwitch request - conn.data = []byte{1, 0, 0, 2, 0xfe} - conn.maxReads = 1 - authData := []byte{95, 84, 103, 43, 61, 49, 123, 61, 91, 50, 40, 113, 35, - 84, 96, 101, 92, 123, 121, 107} - plugin := "mysql_native_password" - err := mc.handleAuthResult(authData, plugin) - if err != ErrOldPassword { - t.Errorf("expected ErrOldPassword, got %v", err) - } -} - -func TestAuthSwitchOldPassword(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.AllowOldPasswords = true - mc.cfg.Passwd = "secret" - - // auth switch request - conn.data = []byte{41, 0, 0, 2, 254, 109, 121, 115, 113, 108, 95, 111, 108, - 100, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 95, 84, 103, 43, 61, - 49, 123, 61, 91, 50, 40, 113, 35, 84, 96, 101, 92, 123, 121, 107, 0} - - // auth response - conn.queuedReplies = [][]byte{{8, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0}} - conn.maxReads = 2 - - authData := []byte{95, 84, 103, 43, 61, 49, 123, 61, 91, 50, 40, 113, 35, - 84, 96, 101, 92, 123, 121, 107} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReply := []byte{9, 0, 0, 3, 86, 83, 83, 79, 74, 78, 65, 66, 0} - if !bytes.Equal(conn.written, expectedReply) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -// Same to TestAuthSwitchOldPassword, but use OldAuthSwitch request. -func TestOldAuthSwitch(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.AllowOldPasswords = true - mc.cfg.Passwd = "secret" - - // OldAuthSwitch request - conn.data = []byte{1, 0, 0, 2, 0xfe} - - // auth response - conn.queuedReplies = [][]byte{{8, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0}} - conn.maxReads = 2 - - authData := []byte{95, 84, 103, 43, 61, 49, 123, 61, 91, 50, 40, 113, 35, - 84, 96, 101, 92, 123, 121, 107} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReply := []byte{9, 0, 0, 3, 86, 83, 83, 79, 74, 78, 65, 66, 0} - if !bytes.Equal(conn.written, expectedReply) { - t.Errorf("got unexpected data: %v", conn.written) - } -} -func TestAuthSwitchOldPasswordEmpty(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.AllowOldPasswords = true - mc.cfg.Passwd = "" - - // auth switch request - conn.data = []byte{41, 0, 0, 2, 254, 109, 121, 115, 113, 108, 95, 111, 108, - 100, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 95, 84, 103, 43, 61, - 49, 123, 61, 91, 50, 40, 113, 35, 84, 96, 101, 92, 123, 121, 107, 0} - - // auth response - conn.queuedReplies = [][]byte{{8, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0}} - conn.maxReads = 2 - - authData := []byte{95, 84, 103, 43, 61, 49, 123, 61, 91, 50, 40, 113, 35, - 84, 96, 101, 92, 123, 121, 107} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReply := []byte{1, 0, 0, 3, 0} - if !bytes.Equal(conn.written, expectedReply) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -// Same to TestAuthSwitchOldPasswordEmpty, but use OldAuthSwitch request. -func TestOldAuthSwitchPasswordEmpty(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.AllowOldPasswords = true - mc.cfg.Passwd = "" - - // OldAuthSwitch request. - conn.data = []byte{1, 0, 0, 2, 0xfe} - - // auth response - conn.queuedReplies = [][]byte{{8, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0}} - conn.maxReads = 2 - - authData := []byte{95, 84, 103, 43, 61, 49, 123, 61, 91, 50, 40, 113, 35, - 84, 96, 101, 92, 123, 121, 107} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReply := []byte{1, 0, 0, 3, 0} - if !bytes.Equal(conn.written, expectedReply) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchSHA256PasswordEmpty(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.Passwd = "" - - // auth switch request - conn.data = []byte{38, 0, 0, 2, 254, 115, 104, 97, 50, 53, 54, 95, 112, 97, - 115, 115, 119, 111, 114, 100, 0, 78, 82, 62, 40, 100, 1, 59, 31, 44, 69, - 33, 112, 8, 81, 51, 96, 65, 82, 16, 114, 0} - - conn.queuedReplies = [][]byte{ - // OK - {7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}, - } - conn.maxReads = 3 - - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReplyPrefix := []byte{ - // 1. Packet: Empty Password - 1, 0, 0, 3, 0, - } - if !bytes.HasPrefix(conn.written, expectedReplyPrefix) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchSHA256PasswordRSA(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.Passwd = "secret" - - // auth switch request - conn.data = []byte{38, 0, 0, 2, 254, 115, 104, 97, 50, 53, 54, 95, 112, 97, - 115, 115, 119, 111, 114, 100, 0, 78, 82, 62, 40, 100, 1, 59, 31, 44, 69, - 33, 112, 8, 81, 51, 96, 65, 82, 16, 114, 0} - - conn.queuedReplies = [][]byte{ - // Pub Key Response - append([]byte{byte(1 + len(testPubKey)), 1, 0, 4, 1}, testPubKey...), - - // OK - {7, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0}, - } - conn.maxReads = 3 - - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReplyPrefix := []byte{ - // 1. Packet: Pub Key Request - 1, 0, 0, 3, 1, - - // 2. Packet: Encrypted Password - 0, 1, 0, 5, // [changing bytes] - } - if !bytes.HasPrefix(conn.written, expectedReplyPrefix) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchSHA256PasswordRSAWithKey(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.Passwd = "secret" - mc.cfg.pubKey = testPubKeyRSA - - // auth switch request - conn.data = []byte{38, 0, 0, 2, 254, 115, 104, 97, 50, 53, 54, 95, 112, 97, - 115, 115, 119, 111, 114, 100, 0, 78, 82, 62, 40, 100, 1, 59, 31, 44, 69, - 33, 112, 8, 81, 51, 96, 65, 82, 16, 114, 0} - - conn.queuedReplies = [][]byte{ - // OK - {7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}, - } - conn.maxReads = 2 - - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReplyPrefix := []byte{ - // 1. Packet: Encrypted Password - 0, 1, 0, 3, // [changing bytes] - } - if !bytes.HasPrefix(conn.written, expectedReplyPrefix) { - t.Errorf("got unexpected data: %v", conn.written) - } -} - -func TestAuthSwitchSHA256PasswordSecure(t *testing.T) { - conn, mc := newRWMockConn(2) - mc.cfg.Passwd = "secret" - - // Hack to make the caching_sha2_password plugin believe that the connection - // is secure - mc.cfg.tls = &tls.Config{InsecureSkipVerify: true} - - // auth switch request - conn.data = []byte{38, 0, 0, 2, 254, 115, 104, 97, 50, 53, 54, 95, 112, 97, - 115, 115, 119, 111, 114, 100, 0, 78, 82, 62, 40, 100, 1, 59, 31, 44, 69, - 33, 112, 8, 81, 51, 96, 65, 82, 16, 114, 0} - - conn.queuedReplies = [][]byte{ - // OK - {7, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0}, - } - conn.maxReads = 2 - - authData := []byte{123, 87, 15, 84, 20, 58, 37, 121, 91, 117, 51, 24, 19, - 47, 43, 9, 41, 112, 67, 110} - plugin := "mysql_native_password" - - if err := mc.handleAuthResult(authData, plugin); err != nil { - t.Errorf("got error: %v", err) - } - - expectedReplyPrefix := []byte{ - // 1. Packet: Cleartext Password - 7, 0, 0, 3, 115, 101, 99, 114, 101, 116, 0, - } - if !bytes.Equal(conn.written, expectedReplyPrefix) { - t.Errorf("got unexpected data: %v", conn.written) - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/benchmark_test.go b/vendor/github.com/go-sql-driver/mysql/benchmark_test.go deleted file mode 100644 index 3e25a3bf..00000000 --- a/vendor/github.com/go-sql-driver/mysql/benchmark_test.go +++ /dev/null @@ -1,373 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "bytes" - "context" - "database/sql" - "database/sql/driver" - "fmt" - "math" - "runtime" - "strings" - "sync" - "sync/atomic" - "testing" - "time" -) - -type TB testing.B - -func (tb *TB) check(err error) { - if err != nil { - tb.Fatal(err) - } -} - -func (tb *TB) checkDB(db *sql.DB, err error) *sql.DB { - tb.check(err) - return db -} - -func (tb *TB) checkRows(rows *sql.Rows, err error) *sql.Rows { - tb.check(err) - return rows -} - -func (tb *TB) checkStmt(stmt *sql.Stmt, err error) *sql.Stmt { - tb.check(err) - return stmt -} - -func initDB(b *testing.B, queries ...string) *sql.DB { - tb := (*TB)(b) - db := tb.checkDB(sql.Open("mysql", dsn)) - for _, query := range queries { - if _, err := db.Exec(query); err != nil { - b.Fatalf("error on %q: %v", query, err) - } - } - return db -} - -const concurrencyLevel = 10 - -func BenchmarkQuery(b *testing.B) { - tb := (*TB)(b) - b.StopTimer() - b.ReportAllocs() - db := initDB(b, - "DROP TABLE IF EXISTS foo", - "CREATE TABLE foo (id INT PRIMARY KEY, val CHAR(50))", - `INSERT INTO foo VALUES (1, "one")`, - `INSERT INTO foo VALUES (2, "two")`, - ) - db.SetMaxIdleConns(concurrencyLevel) - defer db.Close() - - stmt := tb.checkStmt(db.Prepare("SELECT val FROM foo WHERE id=?")) - defer stmt.Close() - - remain := int64(b.N) - var wg sync.WaitGroup - wg.Add(concurrencyLevel) - defer wg.Wait() - b.StartTimer() - - for i := 0; i < concurrencyLevel; i++ { - go func() { - for { - if atomic.AddInt64(&remain, -1) < 0 { - wg.Done() - return - } - - var got string - tb.check(stmt.QueryRow(1).Scan(&got)) - if got != "one" { - b.Errorf("query = %q; want one", got) - wg.Done() - return - } - } - }() - } -} - -func BenchmarkExec(b *testing.B) { - tb := (*TB)(b) - b.StopTimer() - b.ReportAllocs() - db := tb.checkDB(sql.Open("mysql", dsn)) - db.SetMaxIdleConns(concurrencyLevel) - defer db.Close() - - stmt := tb.checkStmt(db.Prepare("DO 1")) - defer stmt.Close() - - remain := int64(b.N) - var wg sync.WaitGroup - wg.Add(concurrencyLevel) - defer wg.Wait() - b.StartTimer() - - for i := 0; i < concurrencyLevel; i++ { - go func() { - for { - if atomic.AddInt64(&remain, -1) < 0 { - wg.Done() - return - } - - if _, err := stmt.Exec(); err != nil { - b.Fatal(err.Error()) - } - } - }() - } -} - -// data, but no db writes -var roundtripSample []byte - -func initRoundtripBenchmarks() ([]byte, int, int) { - if roundtripSample == nil { - roundtripSample = []byte(strings.Repeat("0123456789abcdef", 1024*1024)) - } - return roundtripSample, 16, len(roundtripSample) -} - -func BenchmarkRoundtripTxt(b *testing.B) { - b.StopTimer() - sample, min, max := initRoundtripBenchmarks() - sampleString := string(sample) - b.ReportAllocs() - tb := (*TB)(b) - db := tb.checkDB(sql.Open("mysql", dsn)) - defer db.Close() - b.StartTimer() - var result string - for i := 0; i < b.N; i++ { - length := min + i - if length > max { - length = max - } - test := sampleString[0:length] - rows := tb.checkRows(db.Query(`SELECT "` + test + `"`)) - if !rows.Next() { - rows.Close() - b.Fatalf("crashed") - } - err := rows.Scan(&result) - if err != nil { - rows.Close() - b.Fatalf("crashed") - } - if result != test { - rows.Close() - b.Errorf("mismatch") - } - rows.Close() - } -} - -func BenchmarkRoundtripBin(b *testing.B) { - b.StopTimer() - sample, min, max := initRoundtripBenchmarks() - b.ReportAllocs() - tb := (*TB)(b) - db := tb.checkDB(sql.Open("mysql", dsn)) - defer db.Close() - stmt := tb.checkStmt(db.Prepare("SELECT ?")) - defer stmt.Close() - b.StartTimer() - var result sql.RawBytes - for i := 0; i < b.N; i++ { - length := min + i - if length > max { - length = max - } - test := sample[0:length] - rows := tb.checkRows(stmt.Query(test)) - if !rows.Next() { - rows.Close() - b.Fatalf("crashed") - } - err := rows.Scan(&result) - if err != nil { - rows.Close() - b.Fatalf("crashed") - } - if !bytes.Equal(result, test) { - rows.Close() - b.Errorf("mismatch") - } - rows.Close() - } -} - -func BenchmarkInterpolation(b *testing.B) { - mc := &mysqlConn{ - cfg: &Config{ - InterpolateParams: true, - Loc: time.UTC, - }, - maxAllowedPacket: maxPacketSize, - maxWriteSize: maxPacketSize - 1, - buf: newBuffer(nil), - } - - args := []driver.Value{ - int64(42424242), - float64(math.Pi), - false, - time.Unix(1423411542, 807015000), - []byte("bytes containing special chars ' \" \a \x00"), - "string containing special chars ' \" \a \x00", - } - q := "SELECT ?, ?, ?, ?, ?, ?" - - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := mc.interpolateParams(q, args) - if err != nil { - b.Fatal(err) - } - } -} - -func benchmarkQueryContext(b *testing.B, db *sql.DB, p int) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - db.SetMaxIdleConns(p * runtime.GOMAXPROCS(0)) - - tb := (*TB)(b) - stmt := tb.checkStmt(db.PrepareContext(ctx, "SELECT val FROM foo WHERE id=?")) - defer stmt.Close() - - b.SetParallelism(p) - b.ReportAllocs() - b.ResetTimer() - b.RunParallel(func(pb *testing.PB) { - var got string - for pb.Next() { - tb.check(stmt.QueryRow(1).Scan(&got)) - if got != "one" { - b.Fatalf("query = %q; want one", got) - } - } - }) -} - -func BenchmarkQueryContext(b *testing.B) { - db := initDB(b, - "DROP TABLE IF EXISTS foo", - "CREATE TABLE foo (id INT PRIMARY KEY, val CHAR(50))", - `INSERT INTO foo VALUES (1, "one")`, - `INSERT INTO foo VALUES (2, "two")`, - ) - defer db.Close() - for _, p := range []int{1, 2, 3, 4} { - b.Run(fmt.Sprintf("%d", p), func(b *testing.B) { - benchmarkQueryContext(b, db, p) - }) - } -} - -func benchmarkExecContext(b *testing.B, db *sql.DB, p int) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - db.SetMaxIdleConns(p * runtime.GOMAXPROCS(0)) - - tb := (*TB)(b) - stmt := tb.checkStmt(db.PrepareContext(ctx, "DO 1")) - defer stmt.Close() - - b.SetParallelism(p) - b.ReportAllocs() - b.ResetTimer() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - if _, err := stmt.ExecContext(ctx); err != nil { - b.Fatal(err) - } - } - }) -} - -func BenchmarkExecContext(b *testing.B) { - db := initDB(b, - "DROP TABLE IF EXISTS foo", - "CREATE TABLE foo (id INT PRIMARY KEY, val CHAR(50))", - `INSERT INTO foo VALUES (1, "one")`, - `INSERT INTO foo VALUES (2, "two")`, - ) - defer db.Close() - for _, p := range []int{1, 2, 3, 4} { - b.Run(fmt.Sprintf("%d", p), func(b *testing.B) { - benchmarkQueryContext(b, db, p) - }) - } -} - -// BenchmarkQueryRawBytes benchmarks fetching 100 blobs using sql.RawBytes. -// "size=" means size of each blobs. -func BenchmarkQueryRawBytes(b *testing.B) { - var sizes []int = []int{100, 1000, 2000, 4000, 8000, 12000, 16000, 32000, 64000, 256000} - db := initDB(b, - "DROP TABLE IF EXISTS bench_rawbytes", - "CREATE TABLE bench_rawbytes (id INT PRIMARY KEY, val LONGBLOB)", - ) - defer db.Close() - - blob := make([]byte, sizes[len(sizes)-1]) - for i := range blob { - blob[i] = 42 - } - for i := 0; i < 100; i++ { - _, err := db.Exec("INSERT INTO bench_rawbytes VALUES (?, ?)", i, blob) - if err != nil { - b.Fatal(err) - } - } - - for _, s := range sizes { - b.Run(fmt.Sprintf("size=%v", s), func(b *testing.B) { - db.SetMaxIdleConns(0) - db.SetMaxIdleConns(1) - b.ReportAllocs() - b.ResetTimer() - - for j := 0; j < b.N; j++ { - rows, err := db.Query("SELECT LEFT(val, ?) as v FROM bench_rawbytes", s) - if err != nil { - b.Fatal(err) - } - nrows := 0 - for rows.Next() { - var buf sql.RawBytes - err := rows.Scan(&buf) - if err != nil { - b.Fatal(err) - } - if len(buf) != s { - b.Fatalf("size mismatch: expected %v, got %v", s, len(buf)) - } - nrows++ - } - rows.Close() - if nrows != 100 { - b.Fatalf("numbers of rows mismatch: expected %v, got %v", 100, nrows) - } - } - }) - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/buffer.go b/vendor/github.com/go-sql-driver/mysql/buffer.go index 0774c5c8..eb4748bf 100644 --- a/vendor/github.com/go-sql-driver/mysql/buffer.go +++ b/vendor/github.com/go-sql-driver/mysql/buffer.go @@ -15,69 +15,47 @@ import ( ) const defaultBufSize = 4096 -const maxCachedBufSize = 256 * 1024 // A buffer which is used for both reading and writing. // This is possible since communication on each connection is synchronous. // In other words, we can't write and read simultaneously on the same connection. // The buffer is similar to bufio.Reader / Writer but zero-copy-ish // Also highly optimized for this particular use case. -// This buffer is backed by two byte slices in a double-buffering scheme type buffer struct { - buf []byte // buf is a byte buffer who's length and capacity are equal. + buf []byte nc net.Conn idx int length int timeout time.Duration - dbuf [2][]byte // dbuf is an array with the two byte slices that back this buffer - flipcnt uint // flipccnt is the current buffer counter for double-buffering } -// newBuffer allocates and returns a new buffer. func newBuffer(nc net.Conn) buffer { - fg := make([]byte, defaultBufSize) + var b [defaultBufSize]byte return buffer{ - buf: fg, - nc: nc, - dbuf: [2][]byte{fg, nil}, + buf: b[:], + nc: nc, } } -// flip replaces the active buffer with the background buffer -// this is a delayed flip that simply increases the buffer counter; -// the actual flip will be performed the next time we call `buffer.fill` -func (b *buffer) flip() { - b.flipcnt += 1 -} - // fill reads into the buffer until at least _need_ bytes are in it func (b *buffer) fill(need int) error { n := b.length - // fill data into its double-buffering target: if we've called - // flip on this buffer, we'll be copying to the background buffer, - // and then filling it with network data; otherwise we'll just move - // the contents of the current buffer to the front before filling it - dest := b.dbuf[b.flipcnt&1] - // grow buffer if necessary to fit the whole packet. - if need > len(dest) { + // move existing data to the beginning + if n > 0 && b.idx > 0 { + copy(b.buf[0:n], b.buf[b.idx:]) + } + + // grow buffer if necessary + // TODO: let the buffer shrink again at some point + // Maybe keep the org buf slice and swap back? + if need > len(b.buf) { // Round up to the next multiple of the default size - dest = make([]byte, ((need/defaultBufSize)+1)*defaultBufSize) - - // if the allocated buffer is not too large, move it to backing storage - // to prevent extra allocations on applications that perform large reads - if len(dest) <= maxCachedBufSize { - b.dbuf[b.flipcnt&1] = dest - } + newBuf := make([]byte, ((need/defaultBufSize)+1)*defaultBufSize) + copy(newBuf, b.buf) + b.buf = newBuf } - // if we're filling the fg buffer, move the existing data to the start of it. - // if we're filling the bg buffer, copy over the data - if n > 0 { - copy(dest[:n], b.buf[b.idx:]) - } - - b.buf = dest b.idx = 0 for { @@ -127,56 +105,43 @@ func (b *buffer) readNext(need int) ([]byte, error) { return b.buf[offset:b.idx], nil } -// takeBuffer returns a buffer with the requested size. +// returns a buffer with the requested size. // If possible, a slice from the existing buffer is returned. // Otherwise a bigger buffer is made. // Only one buffer (total) can be used at a time. -func (b *buffer) takeBuffer(length int) ([]byte, error) { +func (b *buffer) takeBuffer(length int) []byte { if b.length > 0 { - return nil, ErrBusyBuffer + return nil } // test (cheap) general case first - if length <= cap(b.buf) { - return b.buf[:length], nil + if length <= defaultBufSize || length <= cap(b.buf) { + return b.buf[:length] } if length < maxPacketSize { b.buf = make([]byte, length) - return b.buf, nil + return b.buf } - - // buffer is larger than we want to store. - return make([]byte, length), nil + return make([]byte, length) } -// takeSmallBuffer is shortcut which can be used if length is -// known to be smaller than defaultBufSize. +// shortcut which can be used if the requested buffer is guaranteed to be +// smaller than defaultBufSize // Only one buffer (total) can be used at a time. -func (b *buffer) takeSmallBuffer(length int) ([]byte, error) { +func (b *buffer) takeSmallBuffer(length int) []byte { if b.length > 0 { - return nil, ErrBusyBuffer + return nil } - return b.buf[:length], nil + return b.buf[:length] } // takeCompleteBuffer returns the complete existing buffer. // This can be used if the necessary buffer size is unknown. -// cap and len of the returned buffer will be equal. // Only one buffer (total) can be used at a time. -func (b *buffer) takeCompleteBuffer() ([]byte, error) { +func (b *buffer) takeCompleteBuffer() []byte { if b.length > 0 { - return nil, ErrBusyBuffer + return nil } - return b.buf, nil -} - -// store stores buf, an updated buffer, if its suitable to do so. -func (b *buffer) store(buf []byte) error { - if b.length > 0 { - return ErrBusyBuffer - } else if cap(buf) <= maxPacketSize && cap(buf) > cap(b.buf) { - b.buf = buf[:cap(buf)] - } - return nil + return b.buf } diff --git a/vendor/github.com/go-sql-driver/mysql/collations.go b/vendor/github.com/go-sql-driver/mysql/collations.go index 8d2b5567..136c9e4d 100644 --- a/vendor/github.com/go-sql-driver/mysql/collations.go +++ b/vendor/github.com/go-sql-driver/mysql/collations.go @@ -8,190 +8,183 @@ package mysql -const defaultCollation = "utf8mb4_general_ci" +const defaultCollation = "utf8_general_ci" const binaryCollation = "binary" // A list of available collations mapped to the internal ID. // To update this map use the following MySQL query: -// SELECT COLLATION_NAME, ID FROM information_schema.COLLATIONS WHERE ID<256 ORDER BY ID -// -// Handshake packet have only 1 byte for collation_id. So we can't use collations with ID > 255. -// -// ucs2, utf16, and utf32 can't be used for connection charset. -// https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset-connection-impermissible-client-charset -// They are commented out to reduce this map. +// SELECT COLLATION_NAME, ID FROM information_schema.COLLATIONS var collations = map[string]byte{ - "big5_chinese_ci": 1, - "latin2_czech_cs": 2, - "dec8_swedish_ci": 3, - "cp850_general_ci": 4, - "latin1_german1_ci": 5, - "hp8_english_ci": 6, - "koi8r_general_ci": 7, - "latin1_swedish_ci": 8, - "latin2_general_ci": 9, - "swe7_swedish_ci": 10, - "ascii_general_ci": 11, - "ujis_japanese_ci": 12, - "sjis_japanese_ci": 13, - "cp1251_bulgarian_ci": 14, - "latin1_danish_ci": 15, - "hebrew_general_ci": 16, - "tis620_thai_ci": 18, - "euckr_korean_ci": 19, - "latin7_estonian_cs": 20, - "latin2_hungarian_ci": 21, - "koi8u_general_ci": 22, - "cp1251_ukrainian_ci": 23, - "gb2312_chinese_ci": 24, - "greek_general_ci": 25, - "cp1250_general_ci": 26, - "latin2_croatian_ci": 27, - "gbk_chinese_ci": 28, - "cp1257_lithuanian_ci": 29, - "latin5_turkish_ci": 30, - "latin1_german2_ci": 31, - "armscii8_general_ci": 32, - "utf8_general_ci": 33, - "cp1250_czech_cs": 34, - //"ucs2_general_ci": 35, - "cp866_general_ci": 36, - "keybcs2_general_ci": 37, - "macce_general_ci": 38, - "macroman_general_ci": 39, - "cp852_general_ci": 40, - "latin7_general_ci": 41, - "latin7_general_cs": 42, - "macce_bin": 43, - "cp1250_croatian_ci": 44, - "utf8mb4_general_ci": 45, - "utf8mb4_bin": 46, - "latin1_bin": 47, - "latin1_general_ci": 48, - "latin1_general_cs": 49, - "cp1251_bin": 50, - "cp1251_general_ci": 51, - "cp1251_general_cs": 52, - "macroman_bin": 53, - //"utf16_general_ci": 54, - //"utf16_bin": 55, - //"utf16le_general_ci": 56, - "cp1256_general_ci": 57, - "cp1257_bin": 58, - "cp1257_general_ci": 59, - //"utf32_general_ci": 60, - //"utf32_bin": 61, - //"utf16le_bin": 62, - "binary": 63, - "armscii8_bin": 64, - "ascii_bin": 65, - "cp1250_bin": 66, - "cp1256_bin": 67, - "cp866_bin": 68, - "dec8_bin": 69, - "greek_bin": 70, - "hebrew_bin": 71, - "hp8_bin": 72, - "keybcs2_bin": 73, - "koi8r_bin": 74, - "koi8u_bin": 75, - "utf8_tolower_ci": 76, - "latin2_bin": 77, - "latin5_bin": 78, - "latin7_bin": 79, - "cp850_bin": 80, - "cp852_bin": 81, - "swe7_bin": 82, - "utf8_bin": 83, - "big5_bin": 84, - "euckr_bin": 85, - "gb2312_bin": 86, - "gbk_bin": 87, - "sjis_bin": 88, - "tis620_bin": 89, - //"ucs2_bin": 90, - "ujis_bin": 91, - "geostd8_general_ci": 92, - "geostd8_bin": 93, - "latin1_spanish_ci": 94, - "cp932_japanese_ci": 95, - "cp932_bin": 96, - "eucjpms_japanese_ci": 97, - "eucjpms_bin": 98, - "cp1250_polish_ci": 99, - //"utf16_unicode_ci": 101, - //"utf16_icelandic_ci": 102, - //"utf16_latvian_ci": 103, - //"utf16_romanian_ci": 104, - //"utf16_slovenian_ci": 105, - //"utf16_polish_ci": 106, - //"utf16_estonian_ci": 107, - //"utf16_spanish_ci": 108, - //"utf16_swedish_ci": 109, - //"utf16_turkish_ci": 110, - //"utf16_czech_ci": 111, - //"utf16_danish_ci": 112, - //"utf16_lithuanian_ci": 113, - //"utf16_slovak_ci": 114, - //"utf16_spanish2_ci": 115, - //"utf16_roman_ci": 116, - //"utf16_persian_ci": 117, - //"utf16_esperanto_ci": 118, - //"utf16_hungarian_ci": 119, - //"utf16_sinhala_ci": 120, - //"utf16_german2_ci": 121, - //"utf16_croatian_ci": 122, - //"utf16_unicode_520_ci": 123, - //"utf16_vietnamese_ci": 124, - //"ucs2_unicode_ci": 128, - //"ucs2_icelandic_ci": 129, - //"ucs2_latvian_ci": 130, - //"ucs2_romanian_ci": 131, - //"ucs2_slovenian_ci": 132, - //"ucs2_polish_ci": 133, - //"ucs2_estonian_ci": 134, - //"ucs2_spanish_ci": 135, - //"ucs2_swedish_ci": 136, - //"ucs2_turkish_ci": 137, - //"ucs2_czech_ci": 138, - //"ucs2_danish_ci": 139, - //"ucs2_lithuanian_ci": 140, - //"ucs2_slovak_ci": 141, - //"ucs2_spanish2_ci": 142, - //"ucs2_roman_ci": 143, - //"ucs2_persian_ci": 144, - //"ucs2_esperanto_ci": 145, - //"ucs2_hungarian_ci": 146, - //"ucs2_sinhala_ci": 147, - //"ucs2_german2_ci": 148, - //"ucs2_croatian_ci": 149, - //"ucs2_unicode_520_ci": 150, - //"ucs2_vietnamese_ci": 151, - //"ucs2_general_mysql500_ci": 159, - //"utf32_unicode_ci": 160, - //"utf32_icelandic_ci": 161, - //"utf32_latvian_ci": 162, - //"utf32_romanian_ci": 163, - //"utf32_slovenian_ci": 164, - //"utf32_polish_ci": 165, - //"utf32_estonian_ci": 166, - //"utf32_spanish_ci": 167, - //"utf32_swedish_ci": 168, - //"utf32_turkish_ci": 169, - //"utf32_czech_ci": 170, - //"utf32_danish_ci": 171, - //"utf32_lithuanian_ci": 172, - //"utf32_slovak_ci": 173, - //"utf32_spanish2_ci": 174, - //"utf32_roman_ci": 175, - //"utf32_persian_ci": 176, - //"utf32_esperanto_ci": 177, - //"utf32_hungarian_ci": 178, - //"utf32_sinhala_ci": 179, - //"utf32_german2_ci": 180, - //"utf32_croatian_ci": 181, - //"utf32_unicode_520_ci": 182, - //"utf32_vietnamese_ci": 183, + "big5_chinese_ci": 1, + "latin2_czech_cs": 2, + "dec8_swedish_ci": 3, + "cp850_general_ci": 4, + "latin1_german1_ci": 5, + "hp8_english_ci": 6, + "koi8r_general_ci": 7, + "latin1_swedish_ci": 8, + "latin2_general_ci": 9, + "swe7_swedish_ci": 10, + "ascii_general_ci": 11, + "ujis_japanese_ci": 12, + "sjis_japanese_ci": 13, + "cp1251_bulgarian_ci": 14, + "latin1_danish_ci": 15, + "hebrew_general_ci": 16, + "tis620_thai_ci": 18, + "euckr_korean_ci": 19, + "latin7_estonian_cs": 20, + "latin2_hungarian_ci": 21, + "koi8u_general_ci": 22, + "cp1251_ukrainian_ci": 23, + "gb2312_chinese_ci": 24, + "greek_general_ci": 25, + "cp1250_general_ci": 26, + "latin2_croatian_ci": 27, + "gbk_chinese_ci": 28, + "cp1257_lithuanian_ci": 29, + "latin5_turkish_ci": 30, + "latin1_german2_ci": 31, + "armscii8_general_ci": 32, + "utf8_general_ci": 33, + "cp1250_czech_cs": 34, + "ucs2_general_ci": 35, + "cp866_general_ci": 36, + "keybcs2_general_ci": 37, + "macce_general_ci": 38, + "macroman_general_ci": 39, + "cp852_general_ci": 40, + "latin7_general_ci": 41, + "latin7_general_cs": 42, + "macce_bin": 43, + "cp1250_croatian_ci": 44, + "utf8mb4_general_ci": 45, + "utf8mb4_bin": 46, + "latin1_bin": 47, + "latin1_general_ci": 48, + "latin1_general_cs": 49, + "cp1251_bin": 50, + "cp1251_general_ci": 51, + "cp1251_general_cs": 52, + "macroman_bin": 53, + "utf16_general_ci": 54, + "utf16_bin": 55, + "utf16le_general_ci": 56, + "cp1256_general_ci": 57, + "cp1257_bin": 58, + "cp1257_general_ci": 59, + "utf32_general_ci": 60, + "utf32_bin": 61, + "utf16le_bin": 62, + "binary": 63, + "armscii8_bin": 64, + "ascii_bin": 65, + "cp1250_bin": 66, + "cp1256_bin": 67, + "cp866_bin": 68, + "dec8_bin": 69, + "greek_bin": 70, + "hebrew_bin": 71, + "hp8_bin": 72, + "keybcs2_bin": 73, + "koi8r_bin": 74, + "koi8u_bin": 75, + "latin2_bin": 77, + "latin5_bin": 78, + "latin7_bin": 79, + "cp850_bin": 80, + "cp852_bin": 81, + "swe7_bin": 82, + "utf8_bin": 83, + "big5_bin": 84, + "euckr_bin": 85, + "gb2312_bin": 86, + "gbk_bin": 87, + "sjis_bin": 88, + "tis620_bin": 89, + "ucs2_bin": 90, + "ujis_bin": 91, + "geostd8_general_ci": 92, + "geostd8_bin": 93, + "latin1_spanish_ci": 94, + "cp932_japanese_ci": 95, + "cp932_bin": 96, + "eucjpms_japanese_ci": 97, + "eucjpms_bin": 98, + "cp1250_polish_ci": 99, + "utf16_unicode_ci": 101, + "utf16_icelandic_ci": 102, + "utf16_latvian_ci": 103, + "utf16_romanian_ci": 104, + "utf16_slovenian_ci": 105, + "utf16_polish_ci": 106, + "utf16_estonian_ci": 107, + "utf16_spanish_ci": 108, + "utf16_swedish_ci": 109, + "utf16_turkish_ci": 110, + "utf16_czech_ci": 111, + "utf16_danish_ci": 112, + "utf16_lithuanian_ci": 113, + "utf16_slovak_ci": 114, + "utf16_spanish2_ci": 115, + "utf16_roman_ci": 116, + "utf16_persian_ci": 117, + "utf16_esperanto_ci": 118, + "utf16_hungarian_ci": 119, + "utf16_sinhala_ci": 120, + "utf16_german2_ci": 121, + "utf16_croatian_ci": 122, + "utf16_unicode_520_ci": 123, + "utf16_vietnamese_ci": 124, + "ucs2_unicode_ci": 128, + "ucs2_icelandic_ci": 129, + "ucs2_latvian_ci": 130, + "ucs2_romanian_ci": 131, + "ucs2_slovenian_ci": 132, + "ucs2_polish_ci": 133, + "ucs2_estonian_ci": 134, + "ucs2_spanish_ci": 135, + "ucs2_swedish_ci": 136, + "ucs2_turkish_ci": 137, + "ucs2_czech_ci": 138, + "ucs2_danish_ci": 139, + "ucs2_lithuanian_ci": 140, + "ucs2_slovak_ci": 141, + "ucs2_spanish2_ci": 142, + "ucs2_roman_ci": 143, + "ucs2_persian_ci": 144, + "ucs2_esperanto_ci": 145, + "ucs2_hungarian_ci": 146, + "ucs2_sinhala_ci": 147, + "ucs2_german2_ci": 148, + "ucs2_croatian_ci": 149, + "ucs2_unicode_520_ci": 150, + "ucs2_vietnamese_ci": 151, + "ucs2_general_mysql500_ci": 159, + "utf32_unicode_ci": 160, + "utf32_icelandic_ci": 161, + "utf32_latvian_ci": 162, + "utf32_romanian_ci": 163, + "utf32_slovenian_ci": 164, + "utf32_polish_ci": 165, + "utf32_estonian_ci": 166, + "utf32_spanish_ci": 167, + "utf32_swedish_ci": 168, + "utf32_turkish_ci": 169, + "utf32_czech_ci": 170, + "utf32_danish_ci": 171, + "utf32_lithuanian_ci": 172, + "utf32_slovak_ci": 173, + "utf32_spanish2_ci": 174, + "utf32_roman_ci": 175, + "utf32_persian_ci": 176, + "utf32_esperanto_ci": 177, + "utf32_hungarian_ci": 178, + "utf32_sinhala_ci": 179, + "utf32_german2_ci": 180, + "utf32_croatian_ci": 181, + "utf32_unicode_520_ci": 182, + "utf32_vietnamese_ci": 183, "utf8_unicode_ci": 192, "utf8_icelandic_ci": 193, "utf8_latvian_ci": 194, @@ -241,25 +234,18 @@ var collations = map[string]byte{ "utf8mb4_croatian_ci": 245, "utf8mb4_unicode_520_ci": 246, "utf8mb4_vietnamese_ci": 247, - "gb18030_chinese_ci": 248, - "gb18030_bin": 249, - "gb18030_unicode_520_ci": 250, - "utf8mb4_0900_ai_ci": 255, } // A blacklist of collations which is unsafe to interpolate parameters. // These multibyte encodings may contains 0x5c (`\`) in their trailing bytes. var unsafeCollations = map[string]bool{ - "big5_chinese_ci": true, - "sjis_japanese_ci": true, - "gbk_chinese_ci": true, - "big5_bin": true, - "gb2312_bin": true, - "gbk_bin": true, - "sjis_bin": true, - "cp932_japanese_ci": true, - "cp932_bin": true, - "gb18030_chinese_ci": true, - "gb18030_bin": true, - "gb18030_unicode_520_ci": true, + "big5_chinese_ci": true, + "sjis_japanese_ci": true, + "gbk_chinese_ci": true, + "big5_bin": true, + "gb2312_bin": true, + "gbk_bin": true, + "sjis_bin": true, + "cp932_japanese_ci": true, + "cp932_bin": true, } diff --git a/vendor/github.com/go-sql-driver/mysql/conncheck.go b/vendor/github.com/go-sql-driver/mysql/conncheck.go deleted file mode 100644 index cc47aa55..00000000 --- a/vendor/github.com/go-sql-driver/mysql/conncheck.go +++ /dev/null @@ -1,53 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2019 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build !windows,!appengine - -package mysql - -import ( - "errors" - "io" - "net" - "syscall" -) - -var errUnexpectedRead = errors.New("unexpected read from socket") - -func connCheck(c net.Conn) error { - var ( - n int - err error - buff [1]byte - ) - - sconn, ok := c.(syscall.Conn) - if !ok { - return nil - } - rc, err := sconn.SyscallConn() - if err != nil { - return err - } - rerr := rc.Read(func(fd uintptr) bool { - n, err = syscall.Read(int(fd), buff[:]) - return true - }) - switch { - case rerr != nil: - return rerr - case n == 0 && err == nil: - return io.EOF - case n > 0: - return errUnexpectedRead - case err == syscall.EAGAIN || err == syscall.EWOULDBLOCK: - return nil - default: - return err - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/conncheck_dummy.go b/vendor/github.com/go-sql-driver/mysql/conncheck_dummy.go deleted file mode 100644 index fd01f64c..00000000 --- a/vendor/github.com/go-sql-driver/mysql/conncheck_dummy.go +++ /dev/null @@ -1,17 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2019 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build windows appengine - -package mysql - -import "net" - -func connCheck(c net.Conn) error { - return nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/conncheck_test.go b/vendor/github.com/go-sql-driver/mysql/conncheck_test.go deleted file mode 100644 index b7234b0f..00000000 --- a/vendor/github.com/go-sql-driver/mysql/conncheck_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build go1.10,!windows - -package mysql - -import ( - "testing" - "time" -) - -func TestStaleConnectionChecks(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("SET @@SESSION.wait_timeout = 2") - - if err := dbt.db.Ping(); err != nil { - dbt.Fatal(err) - } - - // wait for MySQL to close our connection - time.Sleep(3 * time.Second) - - tx, err := dbt.db.Begin() - if err != nil { - dbt.Fatal(err) - } - - if err := tx.Rollback(); err != nil { - dbt.Fatal(err) - } - }) -} diff --git a/vendor/github.com/go-sql-driver/mysql/connection.go b/vendor/github.com/go-sql-driver/mysql/connection.go index 565a5480..e5706141 100644 --- a/vendor/github.com/go-sql-driver/mysql/connection.go +++ b/vendor/github.com/go-sql-driver/mysql/connection.go @@ -9,8 +9,6 @@ package mysql import ( - "context" - "database/sql" "database/sql/driver" "io" "net" @@ -19,10 +17,19 @@ import ( "time" ) +// a copy of context.Context for Go 1.7 and earlier +type mysqlContext interface { + Done() <-chan struct{} + Err() error + + // defined in context.Context, but not used in this driver: + // Deadline() (deadline time.Time, ok bool) + // Value(key interface{}) interface{} +} + type mysqlConn struct { buf buffer netConn net.Conn - rawConn net.Conn // underlying connection when netConn is TLS connection. affectedRows uint64 insertId uint64 cfg *Config @@ -33,11 +40,10 @@ type mysqlConn struct { status statusFlag sequence uint8 parseTime bool - reset bool // set when the Go SQL package calls ResetSession // for context support (Go 1.8+) watching bool - watcher chan<- context.Context + watcher chan<- mysqlContext closech chan struct{} finished chan<- struct{} canceled atomicError // set non-nil if conn is canceled @@ -184,10 +190,10 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin return "", driver.ErrSkip } - buf, err := mc.buf.takeCompleteBuffer() - if err != nil { + buf := mc.buf.takeCompleteBuffer() + if buf == nil { // can not take the buffer. Something must be wrong with the connection - errLog.Print(err) + errLog.Print(ErrBusyBuffer) return "", ErrInvalidConn } buf = buf[:0] @@ -213,9 +219,6 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin switch v := arg.(type) { case int64: buf = strconv.AppendInt(buf, v, 10) - case uint64: - // Handle uint64 explicitly because our custom ConvertValue emits unsigned values - buf = strconv.AppendUint(buf, v, 10) case float64: buf = strconv.AppendFloat(buf, v, 'g', -1, 64) case bool: @@ -456,194 +459,3 @@ func (mc *mysqlConn) finish() { case <-mc.closech: } } - -// Ping implements driver.Pinger interface -func (mc *mysqlConn) Ping(ctx context.Context) (err error) { - if mc.closed.IsSet() { - errLog.Print(ErrInvalidConn) - return driver.ErrBadConn - } - - if err = mc.watchCancel(ctx); err != nil { - return - } - defer mc.finish() - - if err = mc.writeCommandPacket(comPing); err != nil { - return mc.markBadConn(err) - } - - return mc.readResultOK() -} - -// BeginTx implements driver.ConnBeginTx interface -func (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - defer mc.finish() - - if sql.IsolationLevel(opts.Isolation) != sql.LevelDefault { - level, err := mapIsolationLevel(opts.Isolation) - if err != nil { - return nil, err - } - err = mc.exec("SET TRANSACTION ISOLATION LEVEL " + level) - if err != nil { - return nil, err - } - } - - return mc.begin(opts.ReadOnly) -} - -func (mc *mysqlConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - - rows, err := mc.query(query, dargs) - if err != nil { - mc.finish() - return nil, err - } - rows.finish = mc.finish - return rows, err -} - -func (mc *mysqlConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - defer mc.finish() - - return mc.Exec(query, dargs) -} - -func (mc *mysqlConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - - stmt, err := mc.Prepare(query) - mc.finish() - if err != nil { - return nil, err - } - - select { - default: - case <-ctx.Done(): - stmt.Close() - return nil, ctx.Err() - } - return stmt, nil -} - -func (stmt *mysqlStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := stmt.mc.watchCancel(ctx); err != nil { - return nil, err - } - - rows, err := stmt.query(dargs) - if err != nil { - stmt.mc.finish() - return nil, err - } - rows.finish = stmt.mc.finish - return rows, err -} - -func (stmt *mysqlStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := stmt.mc.watchCancel(ctx); err != nil { - return nil, err - } - defer stmt.mc.finish() - - return stmt.Exec(dargs) -} - -func (mc *mysqlConn) watchCancel(ctx context.Context) error { - if mc.watching { - // Reach here if canceled, - // so the connection is already invalid - mc.cleanup() - return nil - } - // When ctx is already cancelled, don't watch it. - if err := ctx.Err(); err != nil { - return err - } - // When ctx is not cancellable, don't watch it. - if ctx.Done() == nil { - return nil - } - // When watcher is not alive, can't watch it. - if mc.watcher == nil { - return nil - } - - mc.watching = true - mc.watcher <- ctx - return nil -} - -func (mc *mysqlConn) startWatcher() { - watcher := make(chan context.Context, 1) - mc.watcher = watcher - finished := make(chan struct{}) - mc.finished = finished - go func() { - for { - var ctx context.Context - select { - case ctx = <-watcher: - case <-mc.closech: - return - } - - select { - case <-ctx.Done(): - mc.cancel(ctx.Err()) - case <-finished: - case <-mc.closech: - return - } - } - }() -} - -func (mc *mysqlConn) CheckNamedValue(nv *driver.NamedValue) (err error) { - nv.Value, err = converter{}.ConvertValue(nv.Value) - return -} - -// ResetSession implements driver.SessionResetter. -// (From Go 1.10) -func (mc *mysqlConn) ResetSession(ctx context.Context) error { - if mc.closed.IsSet() { - return driver.ErrBadConn - } - mc.reset = true - return nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/connection_go18.go b/vendor/github.com/go-sql-driver/mysql/connection_go18.go new file mode 100644 index 00000000..ce52c7d1 --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/connection_go18.go @@ -0,0 +1,207 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build go1.8 + +package mysql + +import ( + "context" + "database/sql" + "database/sql/driver" +) + +// Ping implements driver.Pinger interface +func (mc *mysqlConn) Ping(ctx context.Context) (err error) { + if mc.closed.IsSet() { + errLog.Print(ErrInvalidConn) + return driver.ErrBadConn + } + + if err = mc.watchCancel(ctx); err != nil { + return + } + defer mc.finish() + + if err = mc.writeCommandPacket(comPing); err != nil { + return + } + + return mc.readResultOK() +} + +// BeginTx implements driver.ConnBeginTx interface +func (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + defer mc.finish() + + if sql.IsolationLevel(opts.Isolation) != sql.LevelDefault { + level, err := mapIsolationLevel(opts.Isolation) + if err != nil { + return nil, err + } + err = mc.exec("SET TRANSACTION ISOLATION LEVEL " + level) + if err != nil { + return nil, err + } + } + + return mc.begin(opts.ReadOnly) +} + +func (mc *mysqlConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + + rows, err := mc.query(query, dargs) + if err != nil { + mc.finish() + return nil, err + } + rows.finish = mc.finish + return rows, err +} + +func (mc *mysqlConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + defer mc.finish() + + return mc.Exec(query, dargs) +} + +func (mc *mysqlConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + + stmt, err := mc.Prepare(query) + mc.finish() + if err != nil { + return nil, err + } + + select { + default: + case <-ctx.Done(): + stmt.Close() + return nil, ctx.Err() + } + return stmt, nil +} + +func (stmt *mysqlStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := stmt.mc.watchCancel(ctx); err != nil { + return nil, err + } + + rows, err := stmt.query(dargs) + if err != nil { + stmt.mc.finish() + return nil, err + } + rows.finish = stmt.mc.finish + return rows, err +} + +func (stmt *mysqlStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := stmt.mc.watchCancel(ctx); err != nil { + return nil, err + } + defer stmt.mc.finish() + + return stmt.Exec(dargs) +} + +func (mc *mysqlConn) watchCancel(ctx context.Context) error { + if mc.watching { + // Reach here if canceled, + // so the connection is already invalid + mc.cleanup() + return nil + } + // When ctx is already cancelled, don't watch it. + if err := ctx.Err(); err != nil { + return err + } + // When ctx is not cancellable, don't watch it. + if ctx.Done() == nil { + return nil + } + // When watcher is not alive, can't watch it. + if mc.watcher == nil { + return nil + } + + mc.watching = true + mc.watcher <- ctx + return nil +} + +func (mc *mysqlConn) startWatcher() { + watcher := make(chan mysqlContext, 1) + mc.watcher = watcher + finished := make(chan struct{}) + mc.finished = finished + go func() { + for { + var ctx mysqlContext + select { + case ctx = <-watcher: + case <-mc.closech: + return + } + + select { + case <-ctx.Done(): + mc.cancel(ctx.Err()) + case <-finished: + case <-mc.closech: + return + } + } + }() +} + +func (mc *mysqlConn) CheckNamedValue(nv *driver.NamedValue) (err error) { + nv.Value, err = converter{}.ConvertValue(nv.Value) + return +} + +// ResetSession implements driver.SessionResetter. +// (From Go 1.10) +func (mc *mysqlConn) ResetSession(ctx context.Context) error { + if mc.closed.IsSet() { + return driver.ErrBadConn + } + return nil +} diff --git a/vendor/github.com/go-sql-driver/mysql/connection_test.go b/vendor/github.com/go-sql-driver/mysql/connection_test.go deleted file mode 100644 index 19c17ff8..00000000 --- a/vendor/github.com/go-sql-driver/mysql/connection_test.go +++ /dev/null @@ -1,175 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2016 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "context" - "database/sql/driver" - "errors" - "net" - "testing" -) - -func TestInterpolateParams(t *testing.T) { - mc := &mysqlConn{ - buf: newBuffer(nil), - maxAllowedPacket: maxPacketSize, - cfg: &Config{ - InterpolateParams: true, - }, - } - - q, err := mc.interpolateParams("SELECT ?+?", []driver.Value{int64(42), "gopher"}) - if err != nil { - t.Errorf("Expected err=nil, got %#v", err) - return - } - expected := `SELECT 42+'gopher'` - if q != expected { - t.Errorf("Expected: %q\nGot: %q", expected, q) - } -} - -func TestInterpolateParamsTooManyPlaceholders(t *testing.T) { - mc := &mysqlConn{ - buf: newBuffer(nil), - maxAllowedPacket: maxPacketSize, - cfg: &Config{ - InterpolateParams: true, - }, - } - - q, err := mc.interpolateParams("SELECT ?+?", []driver.Value{int64(42)}) - if err != driver.ErrSkip { - t.Errorf("Expected err=driver.ErrSkip, got err=%#v, q=%#v", err, q) - } -} - -// We don't support placeholder in string literal for now. -// https://github.com/go-sql-driver/mysql/pull/490 -func TestInterpolateParamsPlaceholderInString(t *testing.T) { - mc := &mysqlConn{ - buf: newBuffer(nil), - maxAllowedPacket: maxPacketSize, - cfg: &Config{ - InterpolateParams: true, - }, - } - - q, err := mc.interpolateParams("SELECT 'abc?xyz',?", []driver.Value{int64(42)}) - // When InterpolateParams support string literal, this should return `"SELECT 'abc?xyz', 42` - if err != driver.ErrSkip { - t.Errorf("Expected err=driver.ErrSkip, got err=%#v, q=%#v", err, q) - } -} - -func TestInterpolateParamsUint64(t *testing.T) { - mc := &mysqlConn{ - buf: newBuffer(nil), - maxAllowedPacket: maxPacketSize, - cfg: &Config{ - InterpolateParams: true, - }, - } - - q, err := mc.interpolateParams("SELECT ?", []driver.Value{uint64(42)}) - if err != nil { - t.Errorf("Expected err=nil, got err=%#v, q=%#v", err, q) - } - if q != "SELECT 42" { - t.Errorf("Expected uint64 interpolation to work, got q=%#v", q) - } -} - -func TestCheckNamedValue(t *testing.T) { - value := driver.NamedValue{Value: ^uint64(0)} - x := &mysqlConn{} - err := x.CheckNamedValue(&value) - - if err != nil { - t.Fatal("uint64 high-bit not convertible", err) - } - - if value.Value != ^uint64(0) { - t.Fatalf("uint64 high-bit converted, got %#v %T", value.Value, value.Value) - } -} - -// TestCleanCancel tests passed context is cancelled at start. -// No packet should be sent. Connection should keep current status. -func TestCleanCancel(t *testing.T) { - mc := &mysqlConn{ - closech: make(chan struct{}), - } - mc.startWatcher() - defer mc.cleanup() - - ctx, cancel := context.WithCancel(context.Background()) - cancel() - - for i := 0; i < 3; i++ { // Repeat same behavior - err := mc.Ping(ctx) - if err != context.Canceled { - t.Errorf("expected context.Canceled, got %#v", err) - } - - if mc.closed.IsSet() { - t.Error("expected mc is not closed, closed actually") - } - - if mc.watching { - t.Error("expected watching is false, but true") - } - } -} - -func TestPingMarkBadConnection(t *testing.T) { - nc := badConnection{err: errors.New("boom")} - ms := &mysqlConn{ - netConn: nc, - buf: newBuffer(nc), - maxAllowedPacket: defaultMaxAllowedPacket, - } - - err := ms.Ping(context.Background()) - - if err != driver.ErrBadConn { - t.Errorf("expected driver.ErrBadConn, got %#v", err) - } -} - -func TestPingErrInvalidConn(t *testing.T) { - nc := badConnection{err: errors.New("failed to write"), n: 10} - ms := &mysqlConn{ - netConn: nc, - buf: newBuffer(nc), - maxAllowedPacket: defaultMaxAllowedPacket, - closech: make(chan struct{}), - } - - err := ms.Ping(context.Background()) - - if err != ErrInvalidConn { - t.Errorf("expected ErrInvalidConn, got %#v", err) - } -} - -type badConnection struct { - n int - err error - net.Conn -} - -func (bc badConnection) Write(b []byte) (n int, err error) { - return bc.n, bc.err -} - -func (bc badConnection) Close() error { - return nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/connector.go b/vendor/github.com/go-sql-driver/mysql/connector.go deleted file mode 100644 index 5aaaba43..00000000 --- a/vendor/github.com/go-sql-driver/mysql/connector.go +++ /dev/null @@ -1,143 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2018 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "context" - "database/sql/driver" - "net" -) - -type connector struct { - cfg *Config // immutable private copy. -} - -// Connect implements driver.Connector interface. -// Connect returns a connection to the database. -func (c *connector) Connect(ctx context.Context) (driver.Conn, error) { - var err error - - // New mysqlConn - mc := &mysqlConn{ - maxAllowedPacket: maxPacketSize, - maxWriteSize: maxPacketSize - 1, - closech: make(chan struct{}), - cfg: c.cfg, - } - mc.parseTime = mc.cfg.ParseTime - - // Connect to Server - dialsLock.RLock() - dial, ok := dials[mc.cfg.Net] - dialsLock.RUnlock() - if ok { - mc.netConn, err = dial(ctx, mc.cfg.Addr) - } else { - nd := net.Dialer{Timeout: mc.cfg.Timeout} - mc.netConn, err = nd.DialContext(ctx, mc.cfg.Net, mc.cfg.Addr) - } - - if err != nil { - if nerr, ok := err.(net.Error); ok && nerr.Temporary() { - errLog.Print("net.Error from Dial()': ", nerr.Error()) - return nil, driver.ErrBadConn - } - return nil, err - } - - // Enable TCP Keepalives on TCP connections - if tc, ok := mc.netConn.(*net.TCPConn); ok { - if err := tc.SetKeepAlive(true); err != nil { - // Don't send COM_QUIT before handshake. - mc.netConn.Close() - mc.netConn = nil - return nil, err - } - } - - // Call startWatcher for context support (From Go 1.8) - mc.startWatcher() - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - defer mc.finish() - - mc.buf = newBuffer(mc.netConn) - - // Set I/O timeouts - mc.buf.timeout = mc.cfg.ReadTimeout - mc.writeTimeout = mc.cfg.WriteTimeout - - // Reading Handshake Initialization Packet - authData, plugin, err := mc.readHandshakePacket() - if err != nil { - mc.cleanup() - return nil, err - } - - if plugin == "" { - plugin = defaultAuthPlugin - } - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - // try the default auth plugin, if using the requested plugin failed - errLog.Print("could not use requested auth plugin '"+plugin+"': ", err.Error()) - plugin = defaultAuthPlugin - authResp, err = mc.auth(authData, plugin) - if err != nil { - mc.cleanup() - return nil, err - } - } - if err = mc.writeHandshakeResponsePacket(authResp, plugin); err != nil { - mc.cleanup() - return nil, err - } - - // Handle response to auth packet, switch methods if possible - if err = mc.handleAuthResult(authData, plugin); err != nil { - // Authentication failed and MySQL has already closed the connection - // (https://dev.mysql.com/doc/internals/en/authentication-fails.html). - // Do not send COM_QUIT, just cleanup and return the error. - mc.cleanup() - return nil, err - } - - if mc.cfg.MaxAllowedPacket > 0 { - mc.maxAllowedPacket = mc.cfg.MaxAllowedPacket - } else { - // Get max allowed packet size - maxap, err := mc.getSystemVar("max_allowed_packet") - if err != nil { - mc.Close() - return nil, err - } - mc.maxAllowedPacket = stringToInt(maxap) - 1 - } - if mc.maxAllowedPacket < maxPacketSize { - mc.maxWriteSize = mc.maxAllowedPacket - } - - // Handle DSN Params - err = mc.handleParams() - if err != nil { - mc.Close() - return nil, err - } - - return mc, nil -} - -// Driver implements driver.Connector interface. -// Driver returns &MySQLDriver{}. -func (c *connector) Driver() driver.Driver { - return &MySQLDriver{} -} diff --git a/vendor/github.com/go-sql-driver/mysql/driver.go b/vendor/github.com/go-sql-driver/mysql/driver.go index 1f9decf8..e9ede2c8 100644 --- a/vendor/github.com/go-sql-driver/mysql/driver.go +++ b/vendor/github.com/go-sql-driver/mysql/driver.go @@ -17,67 +17,154 @@ package mysql import ( - "context" "database/sql" "database/sql/driver" "net" "sync" ) +// watcher interface is used for context support (From Go 1.8) +type watcher interface { + startWatcher() +} + // MySQLDriver is exported to make the driver directly accessible. // In general the driver is used via the database/sql package. type MySQLDriver struct{} // DialFunc is a function which can be used to establish the network connection. // Custom dial functions must be registered with RegisterDial -// -// Deprecated: users should register a DialContextFunc instead type DialFunc func(addr string) (net.Conn, error) -// DialContextFunc is a function which can be used to establish the network connection. -// Custom dial functions must be registered with RegisterDialContext -type DialContextFunc func(ctx context.Context, addr string) (net.Conn, error) - var ( dialsLock sync.RWMutex - dials map[string]DialContextFunc + dials map[string]DialFunc ) -// RegisterDialContext registers a custom dial function. It can then be used by the -// network address mynet(addr), where mynet is the registered new network. -// The current context for the connection and its address is passed to the dial function. -func RegisterDialContext(net string, dial DialContextFunc) { - dialsLock.Lock() - defer dialsLock.Unlock() - if dials == nil { - dials = make(map[string]DialContextFunc) - } - dials[net] = dial -} - // RegisterDial registers a custom dial function. It can then be used by the // network address mynet(addr), where mynet is the registered new network. // addr is passed as a parameter to the dial function. -// -// Deprecated: users should call RegisterDialContext instead -func RegisterDial(network string, dial DialFunc) { - RegisterDialContext(network, func(_ context.Context, addr string) (net.Conn, error) { - return dial(addr) - }) +func RegisterDial(net string, dial DialFunc) { + dialsLock.Lock() + defer dialsLock.Unlock() + if dials == nil { + dials = make(map[string]DialFunc) + } + dials[net] = dial } // Open new Connection. // See https://github.com/go-sql-driver/mysql#dsn-data-source-name for how -// the DSN string is formatted +// the DSN string is formated func (d MySQLDriver) Open(dsn string) (driver.Conn, error) { - cfg, err := ParseDSN(dsn) + var err error + + // New mysqlConn + mc := &mysqlConn{ + maxAllowedPacket: maxPacketSize, + maxWriteSize: maxPacketSize - 1, + closech: make(chan struct{}), + } + mc.cfg, err = ParseDSN(dsn) if err != nil { return nil, err } - c := &connector{ - cfg: cfg, + mc.parseTime = mc.cfg.ParseTime + + // Connect to Server + dialsLock.RLock() + dial, ok := dials[mc.cfg.Net] + dialsLock.RUnlock() + if ok { + mc.netConn, err = dial(mc.cfg.Addr) + } else { + nd := net.Dialer{Timeout: mc.cfg.Timeout} + mc.netConn, err = nd.Dial(mc.cfg.Net, mc.cfg.Addr) } - return c.Connect(context.Background()) + if err != nil { + return nil, err + } + + // Enable TCP Keepalives on TCP connections + if tc, ok := mc.netConn.(*net.TCPConn); ok { + if err := tc.SetKeepAlive(true); err != nil { + // Don't send COM_QUIT before handshake. + mc.netConn.Close() + mc.netConn = nil + return nil, err + } + } + + // Call startWatcher for context support (From Go 1.8) + if s, ok := interface{}(mc).(watcher); ok { + s.startWatcher() + } + + mc.buf = newBuffer(mc.netConn) + + // Set I/O timeouts + mc.buf.timeout = mc.cfg.ReadTimeout + mc.writeTimeout = mc.cfg.WriteTimeout + + // Reading Handshake Initialization Packet + authData, plugin, err := mc.readHandshakePacket() + if err != nil { + mc.cleanup() + return nil, err + } + if plugin == "" { + plugin = defaultAuthPlugin + } + + // Send Client Authentication Packet + authResp, err := mc.auth(authData, plugin) + if err != nil { + // try the default auth plugin, if using the requested plugin failed + errLog.Print("could not use requested auth plugin '"+plugin+"': ", err.Error()) + plugin = defaultAuthPlugin + authResp, err = mc.auth(authData, plugin) + if err != nil { + mc.cleanup() + return nil, err + } + } + if err = mc.writeHandshakeResponsePacket(authResp, plugin); err != nil { + mc.cleanup() + return nil, err + } + + // Handle response to auth packet, switch methods if possible + if err = mc.handleAuthResult(authData, plugin); err != nil { + // Authentication failed and MySQL has already closed the connection + // (https://dev.mysql.com/doc/internals/en/authentication-fails.html). + // Do not send COM_QUIT, just cleanup and return the error. + mc.cleanup() + return nil, err + } + + if mc.cfg.MaxAllowedPacket > 0 { + mc.maxAllowedPacket = mc.cfg.MaxAllowedPacket + } else { + // Get max allowed packet size + maxap, err := mc.getSystemVar("max_allowed_packet") + if err != nil { + mc.Close() + return nil, err + } + mc.maxAllowedPacket = stringToInt(maxap) - 1 + } + if mc.maxAllowedPacket < maxPacketSize { + mc.maxWriteSize = mc.maxAllowedPacket + } + + // Handle DSN Params + err = mc.handleParams() + if err != nil { + mc.Close() + return nil, err + } + + return mc, nil } func init() { diff --git a/vendor/github.com/go-sql-driver/mysql/driver_go110.go b/vendor/github.com/go-sql-driver/mysql/driver_go110.go deleted file mode 100644 index eb5a8fe9..00000000 --- a/vendor/github.com/go-sql-driver/mysql/driver_go110.go +++ /dev/null @@ -1,37 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2018 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build go1.10 - -package mysql - -import ( - "database/sql/driver" -) - -// NewConnector returns new driver.Connector. -func NewConnector(cfg *Config) (driver.Connector, error) { - cfg = cfg.Clone() - // normalize the contents of cfg so calls to NewConnector have the same - // behavior as MySQLDriver.OpenConnector - if err := cfg.normalize(); err != nil { - return nil, err - } - return &connector{cfg: cfg}, nil -} - -// OpenConnector implements driver.DriverContext. -func (d MySQLDriver) OpenConnector(dsn string) (driver.Connector, error) { - cfg, err := ParseDSN(dsn) - if err != nil { - return nil, err - } - return &connector{ - cfg: cfg, - }, nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/driver_go110_test.go b/vendor/github.com/go-sql-driver/mysql/driver_go110_test.go deleted file mode 100644 index 19a0e595..00000000 --- a/vendor/github.com/go-sql-driver/mysql/driver_go110_test.go +++ /dev/null @@ -1,137 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2018 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build go1.10 - -package mysql - -import ( - "context" - "database/sql" - "database/sql/driver" - "fmt" - "net" - "testing" - "time" -) - -var _ driver.DriverContext = &MySQLDriver{} - -type dialCtxKey struct{} - -func TestConnectorObeysDialTimeouts(t *testing.T) { - if !available { - t.Skipf("MySQL server not running on %s", netAddr) - } - - RegisterDialContext("dialctxtest", func(ctx context.Context, addr string) (net.Conn, error) { - var d net.Dialer - if !ctx.Value(dialCtxKey{}).(bool) { - return nil, fmt.Errorf("test error: query context is not propagated to our dialer") - } - return d.DialContext(ctx, prot, addr) - }) - - db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@dialctxtest(%s)/%s?timeout=30s", user, pass, addr, dbname)) - if err != nil { - t.Fatalf("error connecting: %s", err.Error()) - } - defer db.Close() - - ctx := context.WithValue(context.Background(), dialCtxKey{}, true) - - _, err = db.ExecContext(ctx, "DO 1") - if err != nil { - t.Fatal(err) - } -} - -func configForTests(t *testing.T) *Config { - if !available { - t.Skipf("MySQL server not running on %s", netAddr) - } - - mycnf := NewConfig() - mycnf.User = user - mycnf.Passwd = pass - mycnf.Addr = addr - mycnf.Net = prot - mycnf.DBName = dbname - return mycnf -} - -func TestNewConnector(t *testing.T) { - mycnf := configForTests(t) - conn, err := NewConnector(mycnf) - if err != nil { - t.Fatal(err) - } - - db := sql.OpenDB(conn) - defer db.Close() - - if err := db.Ping(); err != nil { - t.Fatal(err) - } -} - -type slowConnection struct { - net.Conn - slowdown time.Duration -} - -func (sc *slowConnection) Read(b []byte) (int, error) { - time.Sleep(sc.slowdown) - return sc.Conn.Read(b) -} - -type connectorHijack struct { - driver.Connector - connErr error -} - -func (cw *connectorHijack) Connect(ctx context.Context) (driver.Conn, error) { - var conn driver.Conn - conn, cw.connErr = cw.Connector.Connect(ctx) - return conn, cw.connErr -} - -func TestConnectorTimeoutsDuringOpen(t *testing.T) { - RegisterDialContext("slowconn", func(ctx context.Context, addr string) (net.Conn, error) { - var d net.Dialer - conn, err := d.DialContext(ctx, prot, addr) - if err != nil { - return nil, err - } - return &slowConnection{Conn: conn, slowdown: 100 * time.Millisecond}, nil - }) - - mycnf := configForTests(t) - mycnf.Net = "slowconn" - - conn, err := NewConnector(mycnf) - if err != nil { - t.Fatal(err) - } - - hijack := &connectorHijack{Connector: conn} - - db := sql.OpenDB(hijack) - defer db.Close() - - ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) - defer cancel() - - _, err = db.ExecContext(ctx, "DO 1") - if err != context.DeadlineExceeded { - t.Fatalf("ExecContext should have timed out") - } - if hijack.connErr != context.DeadlineExceeded { - t.Fatalf("(*Connector).Connect should have timed out") - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/driver_test.go b/vendor/github.com/go-sql-driver/mysql/driver_test.go deleted file mode 100644 index 3dee1bab..00000000 --- a/vendor/github.com/go-sql-driver/mysql/driver_test.go +++ /dev/null @@ -1,2996 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "bytes" - "context" - "crypto/tls" - "database/sql" - "database/sql/driver" - "fmt" - "io" - "io/ioutil" - "log" - "math" - "net" - "net/url" - "os" - "reflect" - "strings" - "sync" - "sync/atomic" - "testing" - "time" -) - -// Ensure that all the driver interfaces are implemented -var ( - _ driver.Rows = &binaryRows{} - _ driver.Rows = &textRows{} -) - -var ( - user string - pass string - prot string - addr string - dbname string - dsn string - netAddr string - available bool -) - -var ( - tDate = time.Date(2012, 6, 14, 0, 0, 0, 0, time.UTC) - sDate = "2012-06-14" - tDateTime = time.Date(2011, 11, 20, 21, 27, 37, 0, time.UTC) - sDateTime = "2011-11-20 21:27:37" - tDate0 = time.Time{} - sDate0 = "0000-00-00" - sDateTime0 = "0000-00-00 00:00:00" -) - -// See https://github.com/go-sql-driver/mysql/wiki/Testing -func init() { - // get environment variables - env := func(key, defaultValue string) string { - if value := os.Getenv(key); value != "" { - return value - } - return defaultValue - } - user = env("MYSQL_TEST_USER", "root") - pass = env("MYSQL_TEST_PASS", "") - prot = env("MYSQL_TEST_PROT", "tcp") - addr = env("MYSQL_TEST_ADDR", "localhost:3306") - dbname = env("MYSQL_TEST_DBNAME", "gotest") - netAddr = fmt.Sprintf("%s(%s)", prot, addr) - dsn = fmt.Sprintf("%s:%s@%s/%s?timeout=30s", user, pass, netAddr, dbname) - c, err := net.Dial(prot, addr) - if err == nil { - available = true - c.Close() - } -} - -type DBTest struct { - *testing.T - db *sql.DB -} - -type netErrorMock struct { - temporary bool - timeout bool -} - -func (e netErrorMock) Temporary() bool { - return e.temporary -} - -func (e netErrorMock) Timeout() bool { - return e.timeout -} - -func (e netErrorMock) Error() string { - return fmt.Sprintf("mock net error. Temporary: %v, Timeout %v", e.temporary, e.timeout) -} - -func runTestsWithMultiStatement(t *testing.T, dsn string, tests ...func(dbt *DBTest)) { - if !available { - t.Skipf("MySQL server not running on %s", netAddr) - } - - dsn += "&multiStatements=true" - var db *sql.DB - if _, err := ParseDSN(dsn); err != errInvalidDSNUnsafeCollation { - db, err = sql.Open("mysql", dsn) - if err != nil { - t.Fatalf("error connecting: %s", err.Error()) - } - defer db.Close() - } - - dbt := &DBTest{t, db} - for _, test := range tests { - test(dbt) - dbt.db.Exec("DROP TABLE IF EXISTS test") - } -} - -func runTests(t *testing.T, dsn string, tests ...func(dbt *DBTest)) { - if !available { - t.Skipf("MySQL server not running on %s", netAddr) - } - - db, err := sql.Open("mysql", dsn) - if err != nil { - t.Fatalf("error connecting: %s", err.Error()) - } - defer db.Close() - - db.Exec("DROP TABLE IF EXISTS test") - - dsn2 := dsn + "&interpolateParams=true" - var db2 *sql.DB - if _, err := ParseDSN(dsn2); err != errInvalidDSNUnsafeCollation { - db2, err = sql.Open("mysql", dsn2) - if err != nil { - t.Fatalf("error connecting: %s", err.Error()) - } - defer db2.Close() - } - - dsn3 := dsn + "&multiStatements=true" - var db3 *sql.DB - if _, err := ParseDSN(dsn3); err != errInvalidDSNUnsafeCollation { - db3, err = sql.Open("mysql", dsn3) - if err != nil { - t.Fatalf("error connecting: %s", err.Error()) - } - defer db3.Close() - } - - dbt := &DBTest{t, db} - dbt2 := &DBTest{t, db2} - dbt3 := &DBTest{t, db3} - for _, test := range tests { - test(dbt) - dbt.db.Exec("DROP TABLE IF EXISTS test") - if db2 != nil { - test(dbt2) - dbt2.db.Exec("DROP TABLE IF EXISTS test") - } - if db3 != nil { - test(dbt3) - dbt3.db.Exec("DROP TABLE IF EXISTS test") - } - } -} - -func (dbt *DBTest) fail(method, query string, err error) { - if len(query) > 300 { - query = "[query too large to print]" - } - dbt.Fatalf("error on %s %s: %s", method, query, err.Error()) -} - -func (dbt *DBTest) mustExec(query string, args ...interface{}) (res sql.Result) { - res, err := dbt.db.Exec(query, args...) - if err != nil { - dbt.fail("exec", query, err) - } - return res -} - -func (dbt *DBTest) mustQuery(query string, args ...interface{}) (rows *sql.Rows) { - rows, err := dbt.db.Query(query, args...) - if err != nil { - dbt.fail("query", query, err) - } - return rows -} - -func maybeSkip(t *testing.T, err error, skipErrno uint16) { - mySQLErr, ok := err.(*MySQLError) - if !ok { - return - } - - if mySQLErr.Number == skipErrno { - t.Skipf("skipping test for error: %v", err) - } -} - -func TestEmptyQuery(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - // just a comment, no query - rows := dbt.mustQuery("--") - defer rows.Close() - // will hang before #255 - if rows.Next() { - dbt.Errorf("next on rows must be false") - } - }) -} - -func TestCRUD(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - // Create Table - dbt.mustExec("CREATE TABLE test (value BOOL)") - - // Test for unexpected data - var out bool - rows := dbt.mustQuery("SELECT * FROM test") - if rows.Next() { - dbt.Error("unexpected data in empty table") - } - rows.Close() - - // Create Data - res := dbt.mustExec("INSERT INTO test VALUES (1)") - count, err := res.RowsAffected() - if err != nil { - dbt.Fatalf("res.RowsAffected() returned error: %s", err.Error()) - } - if count != 1 { - dbt.Fatalf("expected 1 affected row, got %d", count) - } - - id, err := res.LastInsertId() - if err != nil { - dbt.Fatalf("res.LastInsertId() returned error: %s", err.Error()) - } - if id != 0 { - dbt.Fatalf("expected InsertId 0, got %d", id) - } - - // Read - rows = dbt.mustQuery("SELECT value FROM test") - if rows.Next() { - rows.Scan(&out) - if true != out { - dbt.Errorf("true != %t", out) - } - - if rows.Next() { - dbt.Error("unexpected data") - } - } else { - dbt.Error("no data") - } - rows.Close() - - // Update - res = dbt.mustExec("UPDATE test SET value = ? WHERE value = ?", false, true) - count, err = res.RowsAffected() - if err != nil { - dbt.Fatalf("res.RowsAffected() returned error: %s", err.Error()) - } - if count != 1 { - dbt.Fatalf("expected 1 affected row, got %d", count) - } - - // Check Update - rows = dbt.mustQuery("SELECT value FROM test") - if rows.Next() { - rows.Scan(&out) - if false != out { - dbt.Errorf("false != %t", out) - } - - if rows.Next() { - dbt.Error("unexpected data") - } - } else { - dbt.Error("no data") - } - rows.Close() - - // Delete - res = dbt.mustExec("DELETE FROM test WHERE value = ?", false) - count, err = res.RowsAffected() - if err != nil { - dbt.Fatalf("res.RowsAffected() returned error: %s", err.Error()) - } - if count != 1 { - dbt.Fatalf("expected 1 affected row, got %d", count) - } - - // Check for unexpected rows - res = dbt.mustExec("DELETE FROM test") - count, err = res.RowsAffected() - if err != nil { - dbt.Fatalf("res.RowsAffected() returned error: %s", err.Error()) - } - if count != 0 { - dbt.Fatalf("expected 0 affected row, got %d", count) - } - }) -} - -func TestMultiQuery(t *testing.T) { - runTestsWithMultiStatement(t, dsn, func(dbt *DBTest) { - // Create Table - dbt.mustExec("CREATE TABLE `test` (`id` int(11) NOT NULL, `value` int(11) NOT NULL) ") - - // Create Data - res := dbt.mustExec("INSERT INTO test VALUES (1, 1)") - count, err := res.RowsAffected() - if err != nil { - dbt.Fatalf("res.RowsAffected() returned error: %s", err.Error()) - } - if count != 1 { - dbt.Fatalf("expected 1 affected row, got %d", count) - } - - // Update - res = dbt.mustExec("UPDATE test SET value = 3 WHERE id = 1; UPDATE test SET value = 4 WHERE id = 1; UPDATE test SET value = 5 WHERE id = 1;") - count, err = res.RowsAffected() - if err != nil { - dbt.Fatalf("res.RowsAffected() returned error: %s", err.Error()) - } - if count != 1 { - dbt.Fatalf("expected 1 affected row, got %d", count) - } - - // Read - var out int - rows := dbt.mustQuery("SELECT value FROM test WHERE id=1;") - if rows.Next() { - rows.Scan(&out) - if 5 != out { - dbt.Errorf("5 != %d", out) - } - - if rows.Next() { - dbt.Error("unexpected data") - } - } else { - dbt.Error("no data") - } - rows.Close() - - }) -} - -func TestInt(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - types := [5]string{"TINYINT", "SMALLINT", "MEDIUMINT", "INT", "BIGINT"} - in := int64(42) - var out int64 - var rows *sql.Rows - - // SIGNED - for _, v := range types { - dbt.mustExec("CREATE TABLE test (value " + v + ")") - - dbt.mustExec("INSERT INTO test VALUES (?)", in) - - rows = dbt.mustQuery("SELECT value FROM test") - if rows.Next() { - rows.Scan(&out) - if in != out { - dbt.Errorf("%s: %d != %d", v, in, out) - } - } else { - dbt.Errorf("%s: no data", v) - } - rows.Close() - - dbt.mustExec("DROP TABLE IF EXISTS test") - } - - // UNSIGNED ZEROFILL - for _, v := range types { - dbt.mustExec("CREATE TABLE test (value " + v + " ZEROFILL)") - - dbt.mustExec("INSERT INTO test VALUES (?)", in) - - rows = dbt.mustQuery("SELECT value FROM test") - if rows.Next() { - rows.Scan(&out) - if in != out { - dbt.Errorf("%s ZEROFILL: %d != %d", v, in, out) - } - } else { - dbt.Errorf("%s ZEROFILL: no data", v) - } - rows.Close() - - dbt.mustExec("DROP TABLE IF EXISTS test") - } - }) -} - -func TestFloat32(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - types := [2]string{"FLOAT", "DOUBLE"} - in := float32(42.23) - var out float32 - var rows *sql.Rows - for _, v := range types { - dbt.mustExec("CREATE TABLE test (value " + v + ")") - dbt.mustExec("INSERT INTO test VALUES (?)", in) - rows = dbt.mustQuery("SELECT value FROM test") - if rows.Next() { - rows.Scan(&out) - if in != out { - dbt.Errorf("%s: %g != %g", v, in, out) - } - } else { - dbt.Errorf("%s: no data", v) - } - rows.Close() - dbt.mustExec("DROP TABLE IF EXISTS test") - } - }) -} - -func TestFloat64(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - types := [2]string{"FLOAT", "DOUBLE"} - var expected float64 = 42.23 - var out float64 - var rows *sql.Rows - for _, v := range types { - dbt.mustExec("CREATE TABLE test (value " + v + ")") - dbt.mustExec("INSERT INTO test VALUES (42.23)") - rows = dbt.mustQuery("SELECT value FROM test") - if rows.Next() { - rows.Scan(&out) - if expected != out { - dbt.Errorf("%s: %g != %g", v, expected, out) - } - } else { - dbt.Errorf("%s: no data", v) - } - rows.Close() - dbt.mustExec("DROP TABLE IF EXISTS test") - } - }) -} - -func TestFloat64Placeholder(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - types := [2]string{"FLOAT", "DOUBLE"} - var expected float64 = 42.23 - var out float64 - var rows *sql.Rows - for _, v := range types { - dbt.mustExec("CREATE TABLE test (id int, value " + v + ")") - dbt.mustExec("INSERT INTO test VALUES (1, 42.23)") - rows = dbt.mustQuery("SELECT value FROM test WHERE id = ?", 1) - if rows.Next() { - rows.Scan(&out) - if expected != out { - dbt.Errorf("%s: %g != %g", v, expected, out) - } - } else { - dbt.Errorf("%s: no data", v) - } - rows.Close() - dbt.mustExec("DROP TABLE IF EXISTS test") - } - }) -} - -func TestString(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - types := [6]string{"CHAR(255)", "VARCHAR(255)", "TINYTEXT", "TEXT", "MEDIUMTEXT", "LONGTEXT"} - in := "κόσμε üöäßñóùéàâÿœ'îë Árvíztűrő いろはにほへとちりぬるを イロハニホヘト דג סקרן чащах น่าฟังเอย" - var out string - var rows *sql.Rows - - for _, v := range types { - dbt.mustExec("CREATE TABLE test (value " + v + ") CHARACTER SET utf8") - - dbt.mustExec("INSERT INTO test VALUES (?)", in) - - rows = dbt.mustQuery("SELECT value FROM test") - if rows.Next() { - rows.Scan(&out) - if in != out { - dbt.Errorf("%s: %s != %s", v, in, out) - } - } else { - dbt.Errorf("%s: no data", v) - } - rows.Close() - - dbt.mustExec("DROP TABLE IF EXISTS test") - } - - // BLOB - dbt.mustExec("CREATE TABLE test (id int, value BLOB) CHARACTER SET utf8") - - id := 2 - in = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " + - "sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, " + - "sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. " + - "Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. " + - "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " + - "sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, " + - "sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. " + - "Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." - dbt.mustExec("INSERT INTO test VALUES (?, ?)", id, in) - - err := dbt.db.QueryRow("SELECT value FROM test WHERE id = ?", id).Scan(&out) - if err != nil { - dbt.Fatalf("Error on BLOB-Query: %s", err.Error()) - } else if out != in { - dbt.Errorf("BLOB: %s != %s", in, out) - } - }) -} - -func TestRawBytes(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - v1 := []byte("aaa") - v2 := []byte("bbb") - rows := dbt.mustQuery("SELECT ?, ?", v1, v2) - defer rows.Close() - if rows.Next() { - var o1, o2 sql.RawBytes - if err := rows.Scan(&o1, &o2); err != nil { - dbt.Errorf("Got error: %v", err) - } - if !bytes.Equal(v1, o1) { - dbt.Errorf("expected %v, got %v", v1, o1) - } - if !bytes.Equal(v2, o2) { - dbt.Errorf("expected %v, got %v", v2, o2) - } - // https://github.com/go-sql-driver/mysql/issues/765 - // Appending to RawBytes shouldn't overwrite next RawBytes. - o1 = append(o1, "xyzzy"...) - if !bytes.Equal(v2, o2) { - dbt.Errorf("expected %v, got %v", v2, o2) - } - } else { - dbt.Errorf("no data") - } - }) -} - -type testValuer struct { - value string -} - -func (tv testValuer) Value() (driver.Value, error) { - return tv.value, nil -} - -func TestValuer(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - in := testValuer{"a_value"} - var out string - var rows *sql.Rows - - dbt.mustExec("CREATE TABLE test (value VARCHAR(255)) CHARACTER SET utf8") - dbt.mustExec("INSERT INTO test VALUES (?)", in) - rows = dbt.mustQuery("SELECT value FROM test") - if rows.Next() { - rows.Scan(&out) - if in.value != out { - dbt.Errorf("Valuer: %v != %s", in, out) - } - } else { - dbt.Errorf("Valuer: no data") - } - rows.Close() - - dbt.mustExec("DROP TABLE IF EXISTS test") - }) -} - -type testValuerWithValidation struct { - value string -} - -func (tv testValuerWithValidation) Value() (driver.Value, error) { - if len(tv.value) == 0 { - return nil, fmt.Errorf("Invalid string valuer. Value must not be empty") - } - - return tv.value, nil -} - -func TestValuerWithValidation(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - in := testValuerWithValidation{"a_value"} - var out string - var rows *sql.Rows - - dbt.mustExec("CREATE TABLE testValuer (value VARCHAR(255)) CHARACTER SET utf8") - dbt.mustExec("INSERT INTO testValuer VALUES (?)", in) - - rows = dbt.mustQuery("SELECT value FROM testValuer") - defer rows.Close() - - if rows.Next() { - rows.Scan(&out) - if in.value != out { - dbt.Errorf("Valuer: %v != %s", in, out) - } - } else { - dbt.Errorf("Valuer: no data") - } - - if _, err := dbt.db.Exec("INSERT INTO testValuer VALUES (?)", testValuerWithValidation{""}); err == nil { - dbt.Errorf("Failed to check valuer error") - } - - if _, err := dbt.db.Exec("INSERT INTO testValuer VALUES (?)", nil); err != nil { - dbt.Errorf("Failed to check nil") - } - - if _, err := dbt.db.Exec("INSERT INTO testValuer VALUES (?)", map[string]bool{}); err == nil { - dbt.Errorf("Failed to check not valuer") - } - - dbt.mustExec("DROP TABLE IF EXISTS testValuer") - }) -} - -type timeTests struct { - dbtype string - tlayout string - tests []timeTest -} - -type timeTest struct { - s string // leading "!": do not use t as value in queries - t time.Time -} - -type timeMode byte - -func (t timeMode) String() string { - switch t { - case binaryString: - return "binary:string" - case binaryTime: - return "binary:time.Time" - case textString: - return "text:string" - } - panic("unsupported timeMode") -} - -func (t timeMode) Binary() bool { - switch t { - case binaryString, binaryTime: - return true - } - return false -} - -const ( - binaryString timeMode = iota - binaryTime - textString -) - -func (t timeTest) genQuery(dbtype string, mode timeMode) string { - var inner string - if mode.Binary() { - inner = "?" - } else { - inner = `"%s"` - } - return `SELECT cast(` + inner + ` as ` + dbtype + `)` -} - -func (t timeTest) run(dbt *DBTest, dbtype, tlayout string, mode timeMode) { - var rows *sql.Rows - query := t.genQuery(dbtype, mode) - switch mode { - case binaryString: - rows = dbt.mustQuery(query, t.s) - case binaryTime: - rows = dbt.mustQuery(query, t.t) - case textString: - query = fmt.Sprintf(query, t.s) - rows = dbt.mustQuery(query) - default: - panic("unsupported mode") - } - defer rows.Close() - var err error - if !rows.Next() { - err = rows.Err() - if err == nil { - err = fmt.Errorf("no data") - } - dbt.Errorf("%s [%s]: %s", dbtype, mode, err) - return - } - var dst interface{} - err = rows.Scan(&dst) - if err != nil { - dbt.Errorf("%s [%s]: %s", dbtype, mode, err) - return - } - switch val := dst.(type) { - case []uint8: - str := string(val) - if str == t.s { - return - } - if mode.Binary() && dbtype == "DATETIME" && len(str) == 26 && str[:19] == t.s { - // a fix mainly for TravisCI: - // accept full microsecond resolution in result for DATETIME columns - // where the binary protocol was used - return - } - dbt.Errorf("%s [%s] to string: expected %q, got %q", - dbtype, mode, - t.s, str, - ) - case time.Time: - if val == t.t { - return - } - dbt.Errorf("%s [%s] to string: expected %q, got %q", - dbtype, mode, - t.s, val.Format(tlayout), - ) - default: - fmt.Printf("%#v\n", []interface{}{dbtype, tlayout, mode, t.s, t.t}) - dbt.Errorf("%s [%s]: unhandled type %T (is '%v')", - dbtype, mode, - val, val, - ) - } -} - -func TestDateTime(t *testing.T) { - afterTime := func(t time.Time, d string) time.Time { - dur, err := time.ParseDuration(d) - if err != nil { - panic(err) - } - return t.Add(dur) - } - // NOTE: MySQL rounds DATETIME(x) up - but that's not included in the tests - format := "2006-01-02 15:04:05.999999" - t0 := time.Time{} - tstr0 := "0000-00-00 00:00:00.000000" - testcases := []timeTests{ - {"DATE", format[:10], []timeTest{ - {t: time.Date(2011, 11, 20, 0, 0, 0, 0, time.UTC)}, - {t: t0, s: tstr0[:10]}, - }}, - {"DATETIME", format[:19], []timeTest{ - {t: time.Date(2011, 11, 20, 21, 27, 37, 0, time.UTC)}, - {t: t0, s: tstr0[:19]}, - }}, - {"DATETIME(0)", format[:21], []timeTest{ - {t: time.Date(2011, 11, 20, 21, 27, 37, 0, time.UTC)}, - {t: t0, s: tstr0[:19]}, - }}, - {"DATETIME(1)", format[:21], []timeTest{ - {t: time.Date(2011, 11, 20, 21, 27, 37, 100000000, time.UTC)}, - {t: t0, s: tstr0[:21]}, - }}, - {"DATETIME(6)", format, []timeTest{ - {t: time.Date(2011, 11, 20, 21, 27, 37, 123456000, time.UTC)}, - {t: t0, s: tstr0}, - }}, - {"TIME", format[11:19], []timeTest{ - {t: afterTime(t0, "12345s")}, - {s: "!-12:34:56"}, - {s: "!-838:59:59"}, - {s: "!838:59:59"}, - {t: t0, s: tstr0[11:19]}, - }}, - {"TIME(0)", format[11:19], []timeTest{ - {t: afterTime(t0, "12345s")}, - {s: "!-12:34:56"}, - {s: "!-838:59:59"}, - {s: "!838:59:59"}, - {t: t0, s: tstr0[11:19]}, - }}, - {"TIME(1)", format[11:21], []timeTest{ - {t: afterTime(t0, "12345600ms")}, - {s: "!-12:34:56.7"}, - {s: "!-838:59:58.9"}, - {s: "!838:59:58.9"}, - {t: t0, s: tstr0[11:21]}, - }}, - {"TIME(6)", format[11:], []timeTest{ - {t: afterTime(t0, "1234567890123000ns")}, - {s: "!-12:34:56.789012"}, - {s: "!-838:59:58.999999"}, - {s: "!838:59:58.999999"}, - {t: t0, s: tstr0[11:]}, - }}, - } - dsns := []string{ - dsn + "&parseTime=true", - dsn + "&parseTime=false", - } - for _, testdsn := range dsns { - runTests(t, testdsn, func(dbt *DBTest) { - microsecsSupported := false - zeroDateSupported := false - var rows *sql.Rows - var err error - rows, err = dbt.db.Query(`SELECT cast("00:00:00.1" as TIME(1)) = "00:00:00.1"`) - if err == nil { - rows.Scan(µsecsSupported) - rows.Close() - } - rows, err = dbt.db.Query(`SELECT cast("0000-00-00" as DATE) = "0000-00-00"`) - if err == nil { - rows.Scan(&zeroDateSupported) - rows.Close() - } - for _, setups := range testcases { - if t := setups.dbtype; !microsecsSupported && t[len(t)-1:] == ")" { - // skip fractional second tests if unsupported by server - continue - } - for _, setup := range setups.tests { - allowBinTime := true - if setup.s == "" { - // fill time string wherever Go can reliable produce it - setup.s = setup.t.Format(setups.tlayout) - } else if setup.s[0] == '!' { - // skip tests using setup.t as source in queries - allowBinTime = false - // fix setup.s - remove the "!" - setup.s = setup.s[1:] - } - if !zeroDateSupported && setup.s == tstr0[:len(setup.s)] { - // skip disallowed 0000-00-00 date - continue - } - setup.run(dbt, setups.dbtype, setups.tlayout, textString) - setup.run(dbt, setups.dbtype, setups.tlayout, binaryString) - if allowBinTime { - setup.run(dbt, setups.dbtype, setups.tlayout, binaryTime) - } - } - } - }) - } -} - -func TestTimestampMicros(t *testing.T) { - format := "2006-01-02 15:04:05.999999" - f0 := format[:19] - f1 := format[:21] - f6 := format[:26] - runTests(t, dsn, func(dbt *DBTest) { - // check if microseconds are supported. - // Do not use timestamp(x) for that check - before 5.5.6, x would mean display width - // and not precision. - // Se last paragraph at http://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html - microsecsSupported := false - if rows, err := dbt.db.Query(`SELECT cast("00:00:00.1" as TIME(1)) = "00:00:00.1"`); err == nil { - rows.Scan(µsecsSupported) - rows.Close() - } - if !microsecsSupported { - // skip test - return - } - _, err := dbt.db.Exec(` - CREATE TABLE test ( - value0 TIMESTAMP NOT NULL DEFAULT '` + f0 + `', - value1 TIMESTAMP(1) NOT NULL DEFAULT '` + f1 + `', - value6 TIMESTAMP(6) NOT NULL DEFAULT '` + f6 + `' - )`, - ) - if err != nil { - dbt.Error(err) - } - defer dbt.mustExec("DROP TABLE IF EXISTS test") - dbt.mustExec("INSERT INTO test SET value0=?, value1=?, value6=?", f0, f1, f6) - var res0, res1, res6 string - rows := dbt.mustQuery("SELECT * FROM test") - defer rows.Close() - if !rows.Next() { - dbt.Errorf("test contained no selectable values") - } - err = rows.Scan(&res0, &res1, &res6) - if err != nil { - dbt.Error(err) - } - if res0 != f0 { - dbt.Errorf("expected %q, got %q", f0, res0) - } - if res1 != f1 { - dbt.Errorf("expected %q, got %q", f1, res1) - } - if res6 != f6 { - dbt.Errorf("expected %q, got %q", f6, res6) - } - }) -} - -func TestNULL(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - nullStmt, err := dbt.db.Prepare("SELECT NULL") - if err != nil { - dbt.Fatal(err) - } - defer nullStmt.Close() - - nonNullStmt, err := dbt.db.Prepare("SELECT 1") - if err != nil { - dbt.Fatal(err) - } - defer nonNullStmt.Close() - - // NullBool - var nb sql.NullBool - // Invalid - if err = nullStmt.QueryRow().Scan(&nb); err != nil { - dbt.Fatal(err) - } - if nb.Valid { - dbt.Error("valid NullBool which should be invalid") - } - // Valid - if err = nonNullStmt.QueryRow().Scan(&nb); err != nil { - dbt.Fatal(err) - } - if !nb.Valid { - dbt.Error("invalid NullBool which should be valid") - } else if nb.Bool != true { - dbt.Errorf("Unexpected NullBool value: %t (should be true)", nb.Bool) - } - - // NullFloat64 - var nf sql.NullFloat64 - // Invalid - if err = nullStmt.QueryRow().Scan(&nf); err != nil { - dbt.Fatal(err) - } - if nf.Valid { - dbt.Error("valid NullFloat64 which should be invalid") - } - // Valid - if err = nonNullStmt.QueryRow().Scan(&nf); err != nil { - dbt.Fatal(err) - } - if !nf.Valid { - dbt.Error("invalid NullFloat64 which should be valid") - } else if nf.Float64 != float64(1) { - dbt.Errorf("unexpected NullFloat64 value: %f (should be 1.0)", nf.Float64) - } - - // NullInt64 - var ni sql.NullInt64 - // Invalid - if err = nullStmt.QueryRow().Scan(&ni); err != nil { - dbt.Fatal(err) - } - if ni.Valid { - dbt.Error("valid NullInt64 which should be invalid") - } - // Valid - if err = nonNullStmt.QueryRow().Scan(&ni); err != nil { - dbt.Fatal(err) - } - if !ni.Valid { - dbt.Error("invalid NullInt64 which should be valid") - } else if ni.Int64 != int64(1) { - dbt.Errorf("unexpected NullInt64 value: %d (should be 1)", ni.Int64) - } - - // NullString - var ns sql.NullString - // Invalid - if err = nullStmt.QueryRow().Scan(&ns); err != nil { - dbt.Fatal(err) - } - if ns.Valid { - dbt.Error("valid NullString which should be invalid") - } - // Valid - if err = nonNullStmt.QueryRow().Scan(&ns); err != nil { - dbt.Fatal(err) - } - if !ns.Valid { - dbt.Error("invalid NullString which should be valid") - } else if ns.String != `1` { - dbt.Error("unexpected NullString value:" + ns.String + " (should be `1`)") - } - - // nil-bytes - var b []byte - // Read nil - if err = nullStmt.QueryRow().Scan(&b); err != nil { - dbt.Fatal(err) - } - if b != nil { - dbt.Error("non-nil []byte which should be nil") - } - // Read non-nil - if err = nonNullStmt.QueryRow().Scan(&b); err != nil { - dbt.Fatal(err) - } - if b == nil { - dbt.Error("nil []byte which should be non-nil") - } - // Insert nil - b = nil - success := false - if err = dbt.db.QueryRow("SELECT ? IS NULL", b).Scan(&success); err != nil { - dbt.Fatal(err) - } - if !success { - dbt.Error("inserting []byte(nil) as NULL failed") - } - // Check input==output with input==nil - b = nil - if err = dbt.db.QueryRow("SELECT ?", b).Scan(&b); err != nil { - dbt.Fatal(err) - } - if b != nil { - dbt.Error("non-nil echo from nil input") - } - // Check input==output with input!=nil - b = []byte("") - if err = dbt.db.QueryRow("SELECT ?", b).Scan(&b); err != nil { - dbt.Fatal(err) - } - if b == nil { - dbt.Error("nil echo from non-nil input") - } - - // Insert NULL - dbt.mustExec("CREATE TABLE test (dummmy1 int, value int, dummy2 int)") - - dbt.mustExec("INSERT INTO test VALUES (?, ?, ?)", 1, nil, 2) - - var out interface{} - rows := dbt.mustQuery("SELECT * FROM test") - defer rows.Close() - if rows.Next() { - rows.Scan(&out) - if out != nil { - dbt.Errorf("%v != nil", out) - } - } else { - dbt.Error("no data") - } - }) -} - -func TestUint64(t *testing.T) { - const ( - u0 = uint64(0) - uall = ^u0 - uhigh = uall >> 1 - utop = ^uhigh - s0 = int64(0) - sall = ^s0 - shigh = int64(uhigh) - stop = ^shigh - ) - runTests(t, dsn, func(dbt *DBTest) { - stmt, err := dbt.db.Prepare(`SELECT ?, ?, ? ,?, ?, ?, ?, ?`) - if err != nil { - dbt.Fatal(err) - } - defer stmt.Close() - row := stmt.QueryRow( - u0, uhigh, utop, uall, - s0, shigh, stop, sall, - ) - - var ua, ub, uc, ud uint64 - var sa, sb, sc, sd int64 - - err = row.Scan(&ua, &ub, &uc, &ud, &sa, &sb, &sc, &sd) - if err != nil { - dbt.Fatal(err) - } - switch { - case ua != u0, - ub != uhigh, - uc != utop, - ud != uall, - sa != s0, - sb != shigh, - sc != stop, - sd != sall: - dbt.Fatal("unexpected result value") - } - }) -} - -func TestLongData(t *testing.T) { - runTests(t, dsn+"&maxAllowedPacket=0", func(dbt *DBTest) { - var maxAllowedPacketSize int - err := dbt.db.QueryRow("select @@max_allowed_packet").Scan(&maxAllowedPacketSize) - if err != nil { - dbt.Fatal(err) - } - maxAllowedPacketSize-- - - // don't get too ambitious - if maxAllowedPacketSize > 1<<25 { - maxAllowedPacketSize = 1 << 25 - } - - dbt.mustExec("CREATE TABLE test (value LONGBLOB)") - - in := strings.Repeat(`a`, maxAllowedPacketSize+1) - var out string - var rows *sql.Rows - - // Long text data - const nonDataQueryLen = 28 // length query w/o value - inS := in[:maxAllowedPacketSize-nonDataQueryLen] - dbt.mustExec("INSERT INTO test VALUES('" + inS + "')") - rows = dbt.mustQuery("SELECT value FROM test") - defer rows.Close() - if rows.Next() { - rows.Scan(&out) - if inS != out { - dbt.Fatalf("LONGBLOB: length in: %d, length out: %d", len(inS), len(out)) - } - if rows.Next() { - dbt.Error("LONGBLOB: unexpexted row") - } - } else { - dbt.Fatalf("LONGBLOB: no data") - } - - // Empty table - dbt.mustExec("TRUNCATE TABLE test") - - // Long binary data - dbt.mustExec("INSERT INTO test VALUES(?)", in) - rows = dbt.mustQuery("SELECT value FROM test WHERE 1=?", 1) - defer rows.Close() - if rows.Next() { - rows.Scan(&out) - if in != out { - dbt.Fatalf("LONGBLOB: length in: %d, length out: %d", len(in), len(out)) - } - if rows.Next() { - dbt.Error("LONGBLOB: unexpexted row") - } - } else { - if err = rows.Err(); err != nil { - dbt.Fatalf("LONGBLOB: no data (err: %s)", err.Error()) - } else { - dbt.Fatal("LONGBLOB: no data (err: )") - } - } - }) -} - -func TestLoadData(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - verifyLoadDataResult := func() { - rows, err := dbt.db.Query("SELECT * FROM test") - if err != nil { - dbt.Fatal(err.Error()) - } - - i := 0 - values := [4]string{ - "a string", - "a string containing a \t", - "a string containing a \n", - "a string containing both \t\n", - } - - var id int - var value string - - for rows.Next() { - i++ - err = rows.Scan(&id, &value) - if err != nil { - dbt.Fatal(err.Error()) - } - if i != id { - dbt.Fatalf("%d != %d", i, id) - } - if values[i-1] != value { - dbt.Fatalf("%q != %q", values[i-1], value) - } - } - err = rows.Err() - if err != nil { - dbt.Fatal(err.Error()) - } - - if i != 4 { - dbt.Fatalf("rows count mismatch. Got %d, want 4", i) - } - } - - dbt.db.Exec("DROP TABLE IF EXISTS test") - dbt.mustExec("CREATE TABLE test (id INT NOT NULL PRIMARY KEY, value TEXT NOT NULL) CHARACTER SET utf8") - - // Local File - file, err := ioutil.TempFile("", "gotest") - defer os.Remove(file.Name()) - if err != nil { - dbt.Fatal(err) - } - RegisterLocalFile(file.Name()) - - // Try first with empty file - dbt.mustExec(fmt.Sprintf("LOAD DATA LOCAL INFILE %q INTO TABLE test", file.Name())) - var count int - err = dbt.db.QueryRow("SELECT COUNT(*) FROM test").Scan(&count) - if err != nil { - dbt.Fatal(err.Error()) - } - if count != 0 { - dbt.Fatalf("unexpected row count: got %d, want 0", count) - } - - // Then fille File with data and try to load it - file.WriteString("1\ta string\n2\ta string containing a \\t\n3\ta string containing a \\n\n4\ta string containing both \\t\\n\n") - file.Close() - dbt.mustExec(fmt.Sprintf("LOAD DATA LOCAL INFILE %q INTO TABLE test", file.Name())) - verifyLoadDataResult() - - // Try with non-existing file - _, err = dbt.db.Exec("LOAD DATA LOCAL INFILE 'doesnotexist' INTO TABLE test") - if err == nil { - dbt.Fatal("load non-existent file didn't fail") - } else if err.Error() != "local file 'doesnotexist' is not registered" { - dbt.Fatal(err.Error()) - } - - // Empty table - dbt.mustExec("TRUNCATE TABLE test") - - // Reader - RegisterReaderHandler("test", func() io.Reader { - file, err = os.Open(file.Name()) - if err != nil { - dbt.Fatal(err) - } - return file - }) - dbt.mustExec("LOAD DATA LOCAL INFILE 'Reader::test' INTO TABLE test") - verifyLoadDataResult() - // negative test - _, err = dbt.db.Exec("LOAD DATA LOCAL INFILE 'Reader::doesnotexist' INTO TABLE test") - if err == nil { - dbt.Fatal("load non-existent Reader didn't fail") - } else if err.Error() != "Reader 'doesnotexist' is not registered" { - dbt.Fatal(err.Error()) - } - }) -} - -func TestFoundRows(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (id INT NOT NULL ,data INT NOT NULL)") - dbt.mustExec("INSERT INTO test (id, data) VALUES (0, 0),(0, 0),(1, 0),(1, 0),(1, 1)") - - res := dbt.mustExec("UPDATE test SET data = 1 WHERE id = 0") - count, err := res.RowsAffected() - if err != nil { - dbt.Fatalf("res.RowsAffected() returned error: %s", err.Error()) - } - if count != 2 { - dbt.Fatalf("Expected 2 affected rows, got %d", count) - } - res = dbt.mustExec("UPDATE test SET data = 1 WHERE id = 1") - count, err = res.RowsAffected() - if err != nil { - dbt.Fatalf("res.RowsAffected() returned error: %s", err.Error()) - } - if count != 2 { - dbt.Fatalf("Expected 2 affected rows, got %d", count) - } - }) - runTests(t, dsn+"&clientFoundRows=true", func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (id INT NOT NULL ,data INT NOT NULL)") - dbt.mustExec("INSERT INTO test (id, data) VALUES (0, 0),(0, 0),(1, 0),(1, 0),(1, 1)") - - res := dbt.mustExec("UPDATE test SET data = 1 WHERE id = 0") - count, err := res.RowsAffected() - if err != nil { - dbt.Fatalf("res.RowsAffected() returned error: %s", err.Error()) - } - if count != 2 { - dbt.Fatalf("Expected 2 matched rows, got %d", count) - } - res = dbt.mustExec("UPDATE test SET data = 1 WHERE id = 1") - count, err = res.RowsAffected() - if err != nil { - dbt.Fatalf("res.RowsAffected() returned error: %s", err.Error()) - } - if count != 3 { - dbt.Fatalf("Expected 3 matched rows, got %d", count) - } - }) -} - -func TestTLS(t *testing.T) { - tlsTestReq := func(dbt *DBTest) { - if err := dbt.db.Ping(); err != nil { - if err == ErrNoTLS { - dbt.Skip("server does not support TLS") - } else { - dbt.Fatalf("error on Ping: %s", err.Error()) - } - } - - rows := dbt.mustQuery("SHOW STATUS LIKE 'Ssl_cipher'") - defer rows.Close() - - var variable, value *sql.RawBytes - for rows.Next() { - if err := rows.Scan(&variable, &value); err != nil { - dbt.Fatal(err.Error()) - } - - if (*value == nil) || (len(*value) == 0) { - dbt.Fatalf("no Cipher") - } else { - dbt.Logf("Cipher: %s", *value) - } - } - } - tlsTestOpt := func(dbt *DBTest) { - if err := dbt.db.Ping(); err != nil { - dbt.Fatalf("error on Ping: %s", err.Error()) - } - } - - runTests(t, dsn+"&tls=preferred", tlsTestOpt) - runTests(t, dsn+"&tls=skip-verify", tlsTestReq) - - // Verify that registering / using a custom cfg works - RegisterTLSConfig("custom-skip-verify", &tls.Config{ - InsecureSkipVerify: true, - }) - runTests(t, dsn+"&tls=custom-skip-verify", tlsTestReq) -} - -func TestReuseClosedConnection(t *testing.T) { - // this test does not use sql.database, it uses the driver directly - if !available { - t.Skipf("MySQL server not running on %s", netAddr) - } - - md := &MySQLDriver{} - conn, err := md.Open(dsn) - if err != nil { - t.Fatalf("error connecting: %s", err.Error()) - } - stmt, err := conn.Prepare("DO 1") - if err != nil { - t.Fatalf("error preparing statement: %s", err.Error()) - } - _, err = stmt.Exec(nil) - if err != nil { - t.Fatalf("error executing statement: %s", err.Error()) - } - err = conn.Close() - if err != nil { - t.Fatalf("error closing connection: %s", err.Error()) - } - - defer func() { - if err := recover(); err != nil { - t.Errorf("panic after reusing a closed connection: %v", err) - } - }() - _, err = stmt.Exec(nil) - if err != nil && err != driver.ErrBadConn { - t.Errorf("unexpected error '%s', expected '%s'", - err.Error(), driver.ErrBadConn.Error()) - } -} - -func TestCharset(t *testing.T) { - if !available { - t.Skipf("MySQL server not running on %s", netAddr) - } - - mustSetCharset := func(charsetParam, expected string) { - runTests(t, dsn+"&"+charsetParam, func(dbt *DBTest) { - rows := dbt.mustQuery("SELECT @@character_set_connection") - defer rows.Close() - - if !rows.Next() { - dbt.Fatalf("error getting connection charset: %s", rows.Err()) - } - - var got string - rows.Scan(&got) - - if got != expected { - dbt.Fatalf("expected connection charset %s but got %s", expected, got) - } - }) - } - - // non utf8 test - mustSetCharset("charset=ascii", "ascii") - - // when the first charset is invalid, use the second - mustSetCharset("charset=none,utf8", "utf8") - - // when the first charset is valid, use it - mustSetCharset("charset=ascii,utf8", "ascii") - mustSetCharset("charset=utf8,ascii", "utf8") -} - -func TestFailingCharset(t *testing.T) { - runTests(t, dsn+"&charset=none", func(dbt *DBTest) { - // run query to really establish connection... - _, err := dbt.db.Exec("SELECT 1") - if err == nil { - dbt.db.Close() - t.Fatalf("connection must not succeed without a valid charset") - } - }) -} - -func TestCollation(t *testing.T) { - if !available { - t.Skipf("MySQL server not running on %s", netAddr) - } - - defaultCollation := "utf8mb4_general_ci" - testCollations := []string{ - "", // do not set - defaultCollation, // driver default - "latin1_general_ci", - "binary", - "utf8_unicode_ci", - "cp1257_bin", - } - - for _, collation := range testCollations { - var expected, tdsn string - if collation != "" { - tdsn = dsn + "&collation=" + collation - expected = collation - } else { - tdsn = dsn - expected = defaultCollation - } - - runTests(t, tdsn, func(dbt *DBTest) { - var got string - if err := dbt.db.QueryRow("SELECT @@collation_connection").Scan(&got); err != nil { - dbt.Fatal(err) - } - - if got != expected { - dbt.Fatalf("expected connection collation %s but got %s", expected, got) - } - }) - } -} - -func TestColumnsWithAlias(t *testing.T) { - runTests(t, dsn+"&columnsWithAlias=true", func(dbt *DBTest) { - rows := dbt.mustQuery("SELECT 1 AS A") - defer rows.Close() - cols, _ := rows.Columns() - if len(cols) != 1 { - t.Fatalf("expected 1 column, got %d", len(cols)) - } - if cols[0] != "A" { - t.Fatalf("expected column name \"A\", got \"%s\"", cols[0]) - } - - rows = dbt.mustQuery("SELECT * FROM (SELECT 1 AS one) AS A") - defer rows.Close() - cols, _ = rows.Columns() - if len(cols) != 1 { - t.Fatalf("expected 1 column, got %d", len(cols)) - } - if cols[0] != "A.one" { - t.Fatalf("expected column name \"A.one\", got \"%s\"", cols[0]) - } - }) -} - -func TestRawBytesResultExceedsBuffer(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - // defaultBufSize from buffer.go - expected := strings.Repeat("abc", defaultBufSize) - - rows := dbt.mustQuery("SELECT '" + expected + "'") - defer rows.Close() - if !rows.Next() { - dbt.Error("expected result, got none") - } - var result sql.RawBytes - rows.Scan(&result) - if expected != string(result) { - dbt.Error("result did not match expected value") - } - }) -} - -func TestTimezoneConversion(t *testing.T) { - zones := []string{"UTC", "US/Central", "US/Pacific", "Local"} - - // Regression test for timezone handling - tzTest := func(dbt *DBTest) { - // Create table - dbt.mustExec("CREATE TABLE test (ts TIMESTAMP)") - - // Insert local time into database (should be converted) - usCentral, _ := time.LoadLocation("US/Central") - reftime := time.Date(2014, 05, 30, 18, 03, 17, 0, time.UTC).In(usCentral) - dbt.mustExec("INSERT INTO test VALUE (?)", reftime) - - // Retrieve time from DB - rows := dbt.mustQuery("SELECT ts FROM test") - defer rows.Close() - if !rows.Next() { - dbt.Fatal("did not get any rows out") - } - - var dbTime time.Time - err := rows.Scan(&dbTime) - if err != nil { - dbt.Fatal("Err", err) - } - - // Check that dates match - if reftime.Unix() != dbTime.Unix() { - dbt.Errorf("times do not match.\n") - dbt.Errorf(" Now(%v)=%v\n", usCentral, reftime) - dbt.Errorf(" Now(UTC)=%v\n", dbTime) - } - } - - for _, tz := range zones { - runTests(t, dsn+"&parseTime=true&loc="+url.QueryEscape(tz), tzTest) - } -} - -// Special cases - -func TestRowsClose(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - rows, err := dbt.db.Query("SELECT 1") - if err != nil { - dbt.Fatal(err) - } - - err = rows.Close() - if err != nil { - dbt.Fatal(err) - } - - if rows.Next() { - dbt.Fatal("unexpected row after rows.Close()") - } - - err = rows.Err() - if err != nil { - dbt.Fatal(err) - } - }) -} - -// dangling statements -// http://code.google.com/p/go/issues/detail?id=3865 -func TestCloseStmtBeforeRows(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - stmt, err := dbt.db.Prepare("SELECT 1") - if err != nil { - dbt.Fatal(err) - } - - rows, err := stmt.Query() - if err != nil { - stmt.Close() - dbt.Fatal(err) - } - defer rows.Close() - - err = stmt.Close() - if err != nil { - dbt.Fatal(err) - } - - if !rows.Next() { - dbt.Fatal("getting row failed") - } else { - err = rows.Err() - if err != nil { - dbt.Fatal(err) - } - - var out bool - err = rows.Scan(&out) - if err != nil { - dbt.Fatalf("error on rows.Scan(): %s", err.Error()) - } - if out != true { - dbt.Errorf("true != %t", out) - } - } - }) -} - -// It is valid to have multiple Rows for the same Stmt -// http://code.google.com/p/go/issues/detail?id=3734 -func TestStmtMultiRows(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - stmt, err := dbt.db.Prepare("SELECT 1 UNION SELECT 0") - if err != nil { - dbt.Fatal(err) - } - - rows1, err := stmt.Query() - if err != nil { - stmt.Close() - dbt.Fatal(err) - } - defer rows1.Close() - - rows2, err := stmt.Query() - if err != nil { - stmt.Close() - dbt.Fatal(err) - } - defer rows2.Close() - - var out bool - - // 1 - if !rows1.Next() { - dbt.Fatal("first rows1.Next failed") - } else { - err = rows1.Err() - if err != nil { - dbt.Fatal(err) - } - - err = rows1.Scan(&out) - if err != nil { - dbt.Fatalf("error on rows.Scan(): %s", err.Error()) - } - if out != true { - dbt.Errorf("true != %t", out) - } - } - - if !rows2.Next() { - dbt.Fatal("first rows2.Next failed") - } else { - err = rows2.Err() - if err != nil { - dbt.Fatal(err) - } - - err = rows2.Scan(&out) - if err != nil { - dbt.Fatalf("error on rows.Scan(): %s", err.Error()) - } - if out != true { - dbt.Errorf("true != %t", out) - } - } - - // 2 - if !rows1.Next() { - dbt.Fatal("second rows1.Next failed") - } else { - err = rows1.Err() - if err != nil { - dbt.Fatal(err) - } - - err = rows1.Scan(&out) - if err != nil { - dbt.Fatalf("error on rows.Scan(): %s", err.Error()) - } - if out != false { - dbt.Errorf("false != %t", out) - } - - if rows1.Next() { - dbt.Fatal("unexpected row on rows1") - } - err = rows1.Close() - if err != nil { - dbt.Fatal(err) - } - } - - if !rows2.Next() { - dbt.Fatal("second rows2.Next failed") - } else { - err = rows2.Err() - if err != nil { - dbt.Fatal(err) - } - - err = rows2.Scan(&out) - if err != nil { - dbt.Fatalf("error on rows.Scan(): %s", err.Error()) - } - if out != false { - dbt.Errorf("false != %t", out) - } - - if rows2.Next() { - dbt.Fatal("unexpected row on rows2") - } - err = rows2.Close() - if err != nil { - dbt.Fatal(err) - } - } - }) -} - -// Regression test for -// * more than 32 NULL parameters (issue 209) -// * more parameters than fit into the buffer (issue 201) -// * parameters * 64 > max_allowed_packet (issue 734) -func TestPreparedManyCols(t *testing.T) { - numParams := 65535 - runTests(t, dsn, func(dbt *DBTest) { - query := "SELECT ?" + strings.Repeat(",?", numParams-1) - stmt, err := dbt.db.Prepare(query) - if err != nil { - dbt.Fatal(err) - } - defer stmt.Close() - - // create more parameters than fit into the buffer - // which will take nil-values - params := make([]interface{}, numParams) - rows, err := stmt.Query(params...) - if err != nil { - dbt.Fatal(err) - } - rows.Close() - - // Create 0byte string which we can't send via STMT_LONG_DATA. - for i := 0; i < numParams; i++ { - params[i] = "" - } - rows, err = stmt.Query(params...) - if err != nil { - dbt.Fatal(err) - } - rows.Close() - }) -} - -func TestConcurrent(t *testing.T) { - if enabled, _ := readBool(os.Getenv("MYSQL_TEST_CONCURRENT")); !enabled { - t.Skip("MYSQL_TEST_CONCURRENT env var not set") - } - - runTests(t, dsn, func(dbt *DBTest) { - var max int - err := dbt.db.QueryRow("SELECT @@max_connections").Scan(&max) - if err != nil { - dbt.Fatalf("%s", err.Error()) - } - dbt.Logf("testing up to %d concurrent connections \r\n", max) - - var remaining, succeeded int32 = int32(max), 0 - - var wg sync.WaitGroup - wg.Add(max) - - var fatalError string - var once sync.Once - fatalf := func(s string, vals ...interface{}) { - once.Do(func() { - fatalError = fmt.Sprintf(s, vals...) - }) - } - - for i := 0; i < max; i++ { - go func(id int) { - defer wg.Done() - - tx, err := dbt.db.Begin() - atomic.AddInt32(&remaining, -1) - - if err != nil { - if err.Error() != "Error 1040: Too many connections" { - fatalf("error on conn %d: %s", id, err.Error()) - } - return - } - - // keep the connection busy until all connections are open - for remaining > 0 { - if _, err = tx.Exec("DO 1"); err != nil { - fatalf("error on conn %d: %s", id, err.Error()) - return - } - } - - if err = tx.Commit(); err != nil { - fatalf("error on conn %d: %s", id, err.Error()) - return - } - - // everything went fine with this connection - atomic.AddInt32(&succeeded, 1) - }(i) - } - - // wait until all conections are open - wg.Wait() - - if fatalError != "" { - dbt.Fatal(fatalError) - } - - dbt.Logf("reached %d concurrent connections\r\n", succeeded) - }) -} - -func testDialError(t *testing.T, dialErr error, expectErr error) { - RegisterDialContext("mydial", func(ctx context.Context, addr string) (net.Conn, error) { - return nil, dialErr - }) - - db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@mydial(%s)/%s?timeout=30s", user, pass, addr, dbname)) - if err != nil { - t.Fatalf("error connecting: %s", err.Error()) - } - defer db.Close() - - _, err = db.Exec("DO 1") - if err != expectErr { - t.Fatalf("was expecting %s. Got: %s", dialErr, err) - } -} - -func TestDialUnknownError(t *testing.T) { - testErr := fmt.Errorf("test") - testDialError(t, testErr, testErr) -} - -func TestDialNonRetryableNetErr(t *testing.T) { - testErr := netErrorMock{} - testDialError(t, testErr, testErr) -} - -func TestDialTemporaryNetErr(t *testing.T) { - testErr := netErrorMock{temporary: true} - testDialError(t, testErr, driver.ErrBadConn) -} - -// Tests custom dial functions -func TestCustomDial(t *testing.T) { - if !available { - t.Skipf("MySQL server not running on %s", netAddr) - } - - // our custom dial function which justs wraps net.Dial here - RegisterDialContext("mydial", func(ctx context.Context, addr string) (net.Conn, error) { - var d net.Dialer - return d.DialContext(ctx, prot, addr) - }) - - db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@mydial(%s)/%s?timeout=30s", user, pass, addr, dbname)) - if err != nil { - t.Fatalf("error connecting: %s", err.Error()) - } - defer db.Close() - - if _, err = db.Exec("DO 1"); err != nil { - t.Fatalf("connection failed: %s", err.Error()) - } -} - -func TestSQLInjection(t *testing.T) { - createTest := func(arg string) func(dbt *DBTest) { - return func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (v INTEGER)") - dbt.mustExec("INSERT INTO test VALUES (?)", 1) - - var v int - // NULL can't be equal to anything, the idea here is to inject query so it returns row - // This test verifies that escapeQuotes and escapeBackslash are working properly - err := dbt.db.QueryRow("SELECT v FROM test WHERE NULL = ?", arg).Scan(&v) - if err == sql.ErrNoRows { - return // success, sql injection failed - } else if err == nil { - dbt.Errorf("sql injection successful with arg: %s", arg) - } else { - dbt.Errorf("error running query with arg: %s; err: %s", arg, err.Error()) - } - } - } - - dsns := []string{ - dsn, - dsn + "&sql_mode='NO_BACKSLASH_ESCAPES'", - } - for _, testdsn := range dsns { - runTests(t, testdsn, createTest("1 OR 1=1")) - runTests(t, testdsn, createTest("' OR '1'='1")) - } -} - -// Test if inserted data is correctly retrieved after being escaped -func TestInsertRetrieveEscapedData(t *testing.T) { - testData := func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (v VARCHAR(255))") - - // All sequences that are escaped by escapeQuotes and escapeBackslash - v := "foo \x00\n\r\x1a\"'\\" - dbt.mustExec("INSERT INTO test VALUES (?)", v) - - var out string - err := dbt.db.QueryRow("SELECT v FROM test").Scan(&out) - if err != nil { - dbt.Fatalf("%s", err.Error()) - } - - if out != v { - dbt.Errorf("%q != %q", out, v) - } - } - - dsns := []string{ - dsn, - dsn + "&sql_mode='NO_BACKSLASH_ESCAPES'", - } - for _, testdsn := range dsns { - runTests(t, testdsn, testData) - } -} - -func TestUnixSocketAuthFail(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - // Save the current logger so we can restore it. - oldLogger := errLog - - // Set a new logger so we can capture its output. - buffer := bytes.NewBuffer(make([]byte, 0, 64)) - newLogger := log.New(buffer, "prefix: ", 0) - SetLogger(newLogger) - - // Restore the logger. - defer SetLogger(oldLogger) - - // Make a new DSN that uses the MySQL socket file and a bad password, which - // we can make by simply appending any character to the real password. - badPass := pass + "x" - socket := "" - if prot == "unix" { - socket = addr - } else { - // Get socket file from MySQL. - err := dbt.db.QueryRow("SELECT @@socket").Scan(&socket) - if err != nil { - t.Fatalf("error on SELECT @@socket: %s", err.Error()) - } - } - t.Logf("socket: %s", socket) - badDSN := fmt.Sprintf("%s:%s@unix(%s)/%s?timeout=30s", user, badPass, socket, dbname) - db, err := sql.Open("mysql", badDSN) - if err != nil { - t.Fatalf("error connecting: %s", err.Error()) - } - defer db.Close() - - // Connect to MySQL for real. This will cause an auth failure. - err = db.Ping() - if err == nil { - t.Error("expected Ping() to return an error") - } - - // The driver should not log anything. - if actual := buffer.String(); actual != "" { - t.Errorf("expected no output, got %q", actual) - } - }) -} - -// See Issue #422 -func TestInterruptBySignal(t *testing.T) { - runTestsWithMultiStatement(t, dsn, func(dbt *DBTest) { - dbt.mustExec(` - DROP PROCEDURE IF EXISTS test_signal; - CREATE PROCEDURE test_signal(ret INT) - BEGIN - SELECT ret; - SIGNAL SQLSTATE - '45001' - SET - MESSAGE_TEXT = "an error", - MYSQL_ERRNO = 45001; - END - `) - defer dbt.mustExec("DROP PROCEDURE test_signal") - - var val int - - // text protocol - rows, err := dbt.db.Query("CALL test_signal(42)") - if err != nil { - dbt.Fatalf("error on text query: %s", err.Error()) - } - for rows.Next() { - if err := rows.Scan(&val); err != nil { - dbt.Error(err) - } else if val != 42 { - dbt.Errorf("expected val to be 42") - } - } - rows.Close() - - // binary protocol - rows, err = dbt.db.Query("CALL test_signal(?)", 42) - if err != nil { - dbt.Fatalf("error on binary query: %s", err.Error()) - } - for rows.Next() { - if err := rows.Scan(&val); err != nil { - dbt.Error(err) - } else if val != 42 { - dbt.Errorf("expected val to be 42") - } - } - rows.Close() - }) -} - -func TestColumnsReusesSlice(t *testing.T) { - rows := mysqlRows{ - rs: resultSet{ - columns: []mysqlField{ - { - tableName: "test", - name: "A", - }, - { - tableName: "test", - name: "B", - }, - }, - }, - } - - allocs := testing.AllocsPerRun(1, func() { - cols := rows.Columns() - - if len(cols) != 2 { - t.Fatalf("expected 2 columns, got %d", len(cols)) - } - }) - - if allocs != 0 { - t.Fatalf("expected 0 allocations, got %d", int(allocs)) - } - - if rows.rs.columnNames == nil { - t.Fatalf("expected columnNames to be set, got nil") - } -} - -func TestRejectReadOnly(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - // Create Table - dbt.mustExec("CREATE TABLE test (value BOOL)") - // Set the session to read-only. We didn't set the `rejectReadOnly` - // option, so any writes after this should fail. - _, err := dbt.db.Exec("SET SESSION TRANSACTION READ ONLY") - // Error 1193: Unknown system variable 'TRANSACTION' => skip test, - // MySQL server version is too old - maybeSkip(t, err, 1193) - if _, err := dbt.db.Exec("DROP TABLE test"); err == nil { - t.Fatalf("writing to DB in read-only session without " + - "rejectReadOnly did not error") - } - // Set the session back to read-write so runTests() can properly clean - // up the table `test`. - dbt.mustExec("SET SESSION TRANSACTION READ WRITE") - }) - - // Enable the `rejectReadOnly` option. - runTests(t, dsn+"&rejectReadOnly=true", func(dbt *DBTest) { - // Create Table - dbt.mustExec("CREATE TABLE test (value BOOL)") - // Set the session to read only. Any writes after this should error on - // a driver.ErrBadConn, and cause `database/sql` to initiate a new - // connection. - dbt.mustExec("SET SESSION TRANSACTION READ ONLY") - // This would error, but `database/sql` should automatically retry on a - // new connection which is not read-only, and eventually succeed. - dbt.mustExec("DROP TABLE test") - }) -} - -func TestPing(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - if err := dbt.db.Ping(); err != nil { - dbt.fail("Ping", "Ping", err) - } - }) -} - -// See Issue #799 -func TestEmptyPassword(t *testing.T) { - if !available { - t.Skipf("MySQL server not running on %s", netAddr) - } - - dsn := fmt.Sprintf("%s:%s@%s/%s?timeout=30s", user, "", netAddr, dbname) - db, err := sql.Open("mysql", dsn) - if err == nil { - defer db.Close() - err = db.Ping() - } - - if pass == "" { - if err != nil { - t.Fatal(err.Error()) - } - } else { - if err == nil { - t.Fatal("expected authentication error") - } - if !strings.HasPrefix(err.Error(), "Error 1045") { - t.Fatal(err.Error()) - } - } -} - -// static interface implementation checks of mysqlConn -var ( - _ driver.ConnBeginTx = &mysqlConn{} - _ driver.ConnPrepareContext = &mysqlConn{} - _ driver.ExecerContext = &mysqlConn{} - _ driver.Pinger = &mysqlConn{} - _ driver.QueryerContext = &mysqlConn{} -) - -// static interface implementation checks of mysqlStmt -var ( - _ driver.StmtExecContext = &mysqlStmt{} - _ driver.StmtQueryContext = &mysqlStmt{} -) - -// Ensure that all the driver interfaces are implemented -var ( - // _ driver.RowsColumnTypeLength = &binaryRows{} - // _ driver.RowsColumnTypeLength = &textRows{} - _ driver.RowsColumnTypeDatabaseTypeName = &binaryRows{} - _ driver.RowsColumnTypeDatabaseTypeName = &textRows{} - _ driver.RowsColumnTypeNullable = &binaryRows{} - _ driver.RowsColumnTypeNullable = &textRows{} - _ driver.RowsColumnTypePrecisionScale = &binaryRows{} - _ driver.RowsColumnTypePrecisionScale = &textRows{} - _ driver.RowsColumnTypeScanType = &binaryRows{} - _ driver.RowsColumnTypeScanType = &textRows{} - _ driver.RowsNextResultSet = &binaryRows{} - _ driver.RowsNextResultSet = &textRows{} -) - -func TestMultiResultSet(t *testing.T) { - type result struct { - values [][]int - columns []string - } - - // checkRows is a helper test function to validate rows containing 3 result - // sets with specific values and columns. The basic query would look like this: - // - // SELECT 1 AS col1, 2 AS col2 UNION SELECT 3, 4; - // SELECT 0 UNION SELECT 1; - // SELECT 1 AS col1, 2 AS col2, 3 AS col3 UNION SELECT 4, 5, 6; - // - // to distinguish test cases the first string argument is put in front of - // every error or fatal message. - checkRows := func(desc string, rows *sql.Rows, dbt *DBTest) { - expected := []result{ - { - values: [][]int{{1, 2}, {3, 4}}, - columns: []string{"col1", "col2"}, - }, - { - values: [][]int{{1, 2, 3}, {4, 5, 6}}, - columns: []string{"col1", "col2", "col3"}, - }, - } - - var res1 result - for rows.Next() { - var res [2]int - if err := rows.Scan(&res[0], &res[1]); err != nil { - dbt.Fatal(err) - } - res1.values = append(res1.values, res[:]) - } - - cols, err := rows.Columns() - if err != nil { - dbt.Fatal(desc, err) - } - res1.columns = cols - - if !reflect.DeepEqual(expected[0], res1) { - dbt.Error(desc, "want =", expected[0], "got =", res1) - } - - if !rows.NextResultSet() { - dbt.Fatal(desc, "expected next result set") - } - - // ignoring one result set - - if !rows.NextResultSet() { - dbt.Fatal(desc, "expected next result set") - } - - var res2 result - cols, err = rows.Columns() - if err != nil { - dbt.Fatal(desc, err) - } - res2.columns = cols - - for rows.Next() { - var res [3]int - if err := rows.Scan(&res[0], &res[1], &res[2]); err != nil { - dbt.Fatal(desc, err) - } - res2.values = append(res2.values, res[:]) - } - - if !reflect.DeepEqual(expected[1], res2) { - dbt.Error(desc, "want =", expected[1], "got =", res2) - } - - if rows.NextResultSet() { - dbt.Error(desc, "unexpected next result set") - } - - if err := rows.Err(); err != nil { - dbt.Error(desc, err) - } - } - - runTestsWithMultiStatement(t, dsn, func(dbt *DBTest) { - rows := dbt.mustQuery(`DO 1; - SELECT 1 AS col1, 2 AS col2 UNION SELECT 3, 4; - DO 1; - SELECT 0 UNION SELECT 1; - SELECT 1 AS col1, 2 AS col2, 3 AS col3 UNION SELECT 4, 5, 6;`) - defer rows.Close() - checkRows("query: ", rows, dbt) - }) - - runTestsWithMultiStatement(t, dsn, func(dbt *DBTest) { - queries := []string{ - ` - DROP PROCEDURE IF EXISTS test_mrss; - CREATE PROCEDURE test_mrss() - BEGIN - DO 1; - SELECT 1 AS col1, 2 AS col2 UNION SELECT 3, 4; - DO 1; - SELECT 0 UNION SELECT 1; - SELECT 1 AS col1, 2 AS col2, 3 AS col3 UNION SELECT 4, 5, 6; - END - `, - ` - DROP PROCEDURE IF EXISTS test_mrss; - CREATE PROCEDURE test_mrss() - BEGIN - SELECT 1 AS col1, 2 AS col2 UNION SELECT 3, 4; - SELECT 0 UNION SELECT 1; - SELECT 1 AS col1, 2 AS col2, 3 AS col3 UNION SELECT 4, 5, 6; - END - `, - } - - defer dbt.mustExec("DROP PROCEDURE IF EXISTS test_mrss") - - for i, query := range queries { - dbt.mustExec(query) - - stmt, err := dbt.db.Prepare("CALL test_mrss()") - if err != nil { - dbt.Fatalf("%v (i=%d)", err, i) - } - defer stmt.Close() - - for j := 0; j < 2; j++ { - rows, err := stmt.Query() - if err != nil { - dbt.Fatalf("%v (i=%d) (j=%d)", err, i, j) - } - checkRows(fmt.Sprintf("prepared stmt query (i=%d) (j=%d): ", i, j), rows, dbt) - } - } - }) -} - -func TestMultiResultSetNoSelect(t *testing.T) { - runTestsWithMultiStatement(t, dsn, func(dbt *DBTest) { - rows := dbt.mustQuery("DO 1; DO 2;") - defer rows.Close() - - if rows.Next() { - dbt.Error("unexpected row") - } - - if rows.NextResultSet() { - dbt.Error("unexpected next result set") - } - - if err := rows.Err(); err != nil { - dbt.Error("expected nil; got ", err) - } - }) -} - -// tests if rows are set in a proper state if some results were ignored before -// calling rows.NextResultSet. -func TestSkipResults(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - rows := dbt.mustQuery("SELECT 1, 2") - defer rows.Close() - - if !rows.Next() { - dbt.Error("expected row") - } - - if rows.NextResultSet() { - dbt.Error("unexpected next result set") - } - - if err := rows.Err(); err != nil { - dbt.Error("expected nil; got ", err) - } - }) -} - -func TestPingContext(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - ctx, cancel := context.WithCancel(context.Background()) - cancel() - if err := dbt.db.PingContext(ctx); err != context.Canceled { - dbt.Errorf("expected context.Canceled, got %v", err) - } - }) -} - -func TestContextCancelExec(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (v INTEGER)") - ctx, cancel := context.WithCancel(context.Background()) - - // Delay execution for just a bit until db.ExecContext has begun. - defer time.AfterFunc(250*time.Millisecond, cancel).Stop() - - // This query will be canceled. - startTime := time.Now() - if _, err := dbt.db.ExecContext(ctx, "INSERT INTO test VALUES (SLEEP(1))"); err != context.Canceled { - dbt.Errorf("expected context.Canceled, got %v", err) - } - if d := time.Since(startTime); d > 500*time.Millisecond { - dbt.Errorf("too long execution time: %s", d) - } - - // Wait for the INSERT query to be done. - time.Sleep(time.Second) - - // Check how many times the query is executed. - var v int - if err := dbt.db.QueryRow("SELECT COUNT(*) FROM test").Scan(&v); err != nil { - dbt.Fatalf("%s", err.Error()) - } - if v != 1 { // TODO: need to kill the query, and v should be 0. - dbt.Skipf("[WARN] expected val to be 1, got %d", v) - } - - // Context is already canceled, so error should come before execution. - if _, err := dbt.db.ExecContext(ctx, "INSERT INTO test VALUES (1)"); err == nil { - dbt.Error("expected error") - } else if err.Error() != "context canceled" { - dbt.Fatalf("unexpected error: %s", err) - } - - // The second insert query will fail, so the table has no changes. - if err := dbt.db.QueryRow("SELECT COUNT(*) FROM test").Scan(&v); err != nil { - dbt.Fatalf("%s", err.Error()) - } - if v != 1 { - dbt.Skipf("[WARN] expected val to be 1, got %d", v) - } - }) -} - -func TestContextCancelQuery(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (v INTEGER)") - ctx, cancel := context.WithCancel(context.Background()) - - // Delay execution for just a bit until db.ExecContext has begun. - defer time.AfterFunc(250*time.Millisecond, cancel).Stop() - - // This query will be canceled. - startTime := time.Now() - if _, err := dbt.db.QueryContext(ctx, "INSERT INTO test VALUES (SLEEP(1))"); err != context.Canceled { - dbt.Errorf("expected context.Canceled, got %v", err) - } - if d := time.Since(startTime); d > 500*time.Millisecond { - dbt.Errorf("too long execution time: %s", d) - } - - // Wait for the INSERT query to be done. - time.Sleep(time.Second) - - // Check how many times the query is executed. - var v int - if err := dbt.db.QueryRow("SELECT COUNT(*) FROM test").Scan(&v); err != nil { - dbt.Fatalf("%s", err.Error()) - } - if v != 1 { // TODO: need to kill the query, and v should be 0. - dbt.Skipf("[WARN] expected val to be 1, got %d", v) - } - - // Context is already canceled, so error should come before execution. - if _, err := dbt.db.QueryContext(ctx, "INSERT INTO test VALUES (1)"); err != context.Canceled { - dbt.Errorf("expected context.Canceled, got %v", err) - } - - // The second insert query will fail, so the table has no changes. - if err := dbt.db.QueryRow("SELECT COUNT(*) FROM test").Scan(&v); err != nil { - dbt.Fatalf("%s", err.Error()) - } - if v != 1 { - dbt.Skipf("[WARN] expected val to be 1, got %d", v) - } - }) -} - -func TestContextCancelQueryRow(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (v INTEGER)") - dbt.mustExec("INSERT INTO test VALUES (1), (2), (3)") - ctx, cancel := context.WithCancel(context.Background()) - - rows, err := dbt.db.QueryContext(ctx, "SELECT v FROM test") - if err != nil { - dbt.Fatalf("%s", err.Error()) - } - - // the first row will be succeed. - var v int - if !rows.Next() { - dbt.Fatalf("unexpected end") - } - if err := rows.Scan(&v); err != nil { - dbt.Fatalf("%s", err.Error()) - } - - cancel() - // make sure the driver receives the cancel request. - time.Sleep(100 * time.Millisecond) - - if rows.Next() { - dbt.Errorf("expected end, but not") - } - if err := rows.Err(); err != context.Canceled { - dbt.Errorf("expected context.Canceled, got %v", err) - } - }) -} - -func TestContextCancelPrepare(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - ctx, cancel := context.WithCancel(context.Background()) - cancel() - if _, err := dbt.db.PrepareContext(ctx, "SELECT 1"); err != context.Canceled { - dbt.Errorf("expected context.Canceled, got %v", err) - } - }) -} - -func TestContextCancelStmtExec(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (v INTEGER)") - ctx, cancel := context.WithCancel(context.Background()) - stmt, err := dbt.db.PrepareContext(ctx, "INSERT INTO test VALUES (SLEEP(1))") - if err != nil { - dbt.Fatalf("unexpected error: %v", err) - } - - // Delay execution for just a bit until db.ExecContext has begun. - defer time.AfterFunc(250*time.Millisecond, cancel).Stop() - - // This query will be canceled. - startTime := time.Now() - if _, err := stmt.ExecContext(ctx); err != context.Canceled { - dbt.Errorf("expected context.Canceled, got %v", err) - } - if d := time.Since(startTime); d > 500*time.Millisecond { - dbt.Errorf("too long execution time: %s", d) - } - - // Wait for the INSERT query to be done. - time.Sleep(time.Second) - - // Check how many times the query is executed. - var v int - if err := dbt.db.QueryRow("SELECT COUNT(*) FROM test").Scan(&v); err != nil { - dbt.Fatalf("%s", err.Error()) - } - if v != 1 { // TODO: need to kill the query, and v should be 0. - dbt.Skipf("[WARN] expected val to be 1, got %d", v) - } - }) -} - -func TestContextCancelStmtQuery(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (v INTEGER)") - ctx, cancel := context.WithCancel(context.Background()) - stmt, err := dbt.db.PrepareContext(ctx, "INSERT INTO test VALUES (SLEEP(1))") - if err != nil { - dbt.Fatalf("unexpected error: %v", err) - } - - // Delay execution for just a bit until db.ExecContext has begun. - defer time.AfterFunc(250*time.Millisecond, cancel).Stop() - - // This query will be canceled. - startTime := time.Now() - if _, err := stmt.QueryContext(ctx); err != context.Canceled { - dbt.Errorf("expected context.Canceled, got %v", err) - } - if d := time.Since(startTime); d > 500*time.Millisecond { - dbt.Errorf("too long execution time: %s", d) - } - - // Wait for the INSERT query has done. - time.Sleep(time.Second) - - // Check how many times the query is executed. - var v int - if err := dbt.db.QueryRow("SELECT COUNT(*) FROM test").Scan(&v); err != nil { - dbt.Fatalf("%s", err.Error()) - } - if v != 1 { // TODO: need to kill the query, and v should be 0. - dbt.Skipf("[WARN] expected val to be 1, got %d", v) - } - }) -} - -func TestContextCancelBegin(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (v INTEGER)") - ctx, cancel := context.WithCancel(context.Background()) - tx, err := dbt.db.BeginTx(ctx, nil) - if err != nil { - dbt.Fatal(err) - } - - // Delay execution for just a bit until db.ExecContext has begun. - defer time.AfterFunc(100*time.Millisecond, cancel).Stop() - - // This query will be canceled. - startTime := time.Now() - if _, err := tx.ExecContext(ctx, "INSERT INTO test VALUES (SLEEP(1))"); err != context.Canceled { - dbt.Errorf("expected context.Canceled, got %v", err) - } - if d := time.Since(startTime); d > 500*time.Millisecond { - dbt.Errorf("too long execution time: %s", d) - } - - // Transaction is canceled, so expect an error. - switch err := tx.Commit(); err { - case sql.ErrTxDone: - // because the transaction has already been rollbacked. - // the database/sql package watches ctx - // and rollbacks when ctx is canceled. - case context.Canceled: - // the database/sql package rollbacks on another goroutine, - // so the transaction may not be rollbacked depending on goroutine scheduling. - default: - dbt.Errorf("expected sql.ErrTxDone or context.Canceled, got %v", err) - } - - // Context is canceled, so cannot begin a transaction. - if _, err := dbt.db.BeginTx(ctx, nil); err != context.Canceled { - dbt.Errorf("expected context.Canceled, got %v", err) - } - }) -} - -func TestContextBeginIsolationLevel(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (v INTEGER)") - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - tx1, err := dbt.db.BeginTx(ctx, &sql.TxOptions{ - Isolation: sql.LevelRepeatableRead, - }) - if err != nil { - dbt.Fatal(err) - } - - tx2, err := dbt.db.BeginTx(ctx, &sql.TxOptions{ - Isolation: sql.LevelReadCommitted, - }) - if err != nil { - dbt.Fatal(err) - } - - _, err = tx1.ExecContext(ctx, "INSERT INTO test VALUES (1)") - if err != nil { - dbt.Fatal(err) - } - - var v int - row := tx2.QueryRowContext(ctx, "SELECT COUNT(*) FROM test") - if err := row.Scan(&v); err != nil { - dbt.Fatal(err) - } - // Because writer transaction wasn't commited yet, it should be available - if v != 0 { - dbt.Errorf("expected val to be 0, got %d", v) - } - - err = tx1.Commit() - if err != nil { - dbt.Fatal(err) - } - - row = tx2.QueryRowContext(ctx, "SELECT COUNT(*) FROM test") - if err := row.Scan(&v); err != nil { - dbt.Fatal(err) - } - // Data written by writer transaction is already commited, it should be selectable - if v != 1 { - dbt.Errorf("expected val to be 1, got %d", v) - } - tx2.Commit() - }) -} - -func TestContextBeginReadOnly(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (v INTEGER)") - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - tx, err := dbt.db.BeginTx(ctx, &sql.TxOptions{ - ReadOnly: true, - }) - if _, ok := err.(*MySQLError); ok { - dbt.Skip("It seems that your MySQL does not support READ ONLY transactions") - return - } else if err != nil { - dbt.Fatal(err) - } - - // INSERT queries fail in a READ ONLY transaction. - _, err = tx.ExecContext(ctx, "INSERT INTO test VALUES (1)") - if _, ok := err.(*MySQLError); !ok { - dbt.Errorf("expected MySQLError, got %v", err) - } - - // SELECT queries can be executed. - var v int - row := tx.QueryRowContext(ctx, "SELECT COUNT(*) FROM test") - if err := row.Scan(&v); err != nil { - dbt.Fatal(err) - } - if v != 0 { - dbt.Errorf("expected val to be 0, got %d", v) - } - - if err := tx.Commit(); err != nil { - dbt.Fatal(err) - } - }) -} - -func TestRowsColumnTypes(t *testing.T) { - niNULL := sql.NullInt64{Int64: 0, Valid: false} - ni0 := sql.NullInt64{Int64: 0, Valid: true} - ni1 := sql.NullInt64{Int64: 1, Valid: true} - ni42 := sql.NullInt64{Int64: 42, Valid: true} - nfNULL := sql.NullFloat64{Float64: 0.0, Valid: false} - nf0 := sql.NullFloat64{Float64: 0.0, Valid: true} - nf1337 := sql.NullFloat64{Float64: 13.37, Valid: true} - nt0 := NullTime{Time: time.Date(2006, 01, 02, 15, 04, 05, 0, time.UTC), Valid: true} - nt1 := NullTime{Time: time.Date(2006, 01, 02, 15, 04, 05, 100000000, time.UTC), Valid: true} - nt2 := NullTime{Time: time.Date(2006, 01, 02, 15, 04, 05, 110000000, time.UTC), Valid: true} - nt6 := NullTime{Time: time.Date(2006, 01, 02, 15, 04, 05, 111111000, time.UTC), Valid: true} - nd1 := NullTime{Time: time.Date(2006, 01, 02, 0, 0, 0, 0, time.UTC), Valid: true} - nd2 := NullTime{Time: time.Date(2006, 03, 04, 0, 0, 0, 0, time.UTC), Valid: true} - ndNULL := NullTime{Time: time.Time{}, Valid: false} - rbNULL := sql.RawBytes(nil) - rb0 := sql.RawBytes("0") - rb42 := sql.RawBytes("42") - rbTest := sql.RawBytes("Test") - rb0pad4 := sql.RawBytes("0\x00\x00\x00") // BINARY right-pads values with 0x00 - rbx0 := sql.RawBytes("\x00") - rbx42 := sql.RawBytes("\x42") - - var columns = []struct { - name string - fieldType string // type used when creating table schema - databaseTypeName string // actual type used by MySQL - scanType reflect.Type - nullable bool - precision int64 // 0 if not ok - scale int64 - valuesIn [3]string - valuesOut [3]interface{} - }{ - {"bit8null", "BIT(8)", "BIT", scanTypeRawBytes, true, 0, 0, [3]string{"0x0", "NULL", "0x42"}, [3]interface{}{rbx0, rbNULL, rbx42}}, - {"boolnull", "BOOL", "TINYINT", scanTypeNullInt, true, 0, 0, [3]string{"NULL", "true", "0"}, [3]interface{}{niNULL, ni1, ni0}}, - {"bool", "BOOL NOT NULL", "TINYINT", scanTypeInt8, false, 0, 0, [3]string{"1", "0", "FALSE"}, [3]interface{}{int8(1), int8(0), int8(0)}}, - {"intnull", "INTEGER", "INT", scanTypeNullInt, true, 0, 0, [3]string{"0", "NULL", "42"}, [3]interface{}{ni0, niNULL, ni42}}, - {"smallint", "SMALLINT NOT NULL", "SMALLINT", scanTypeInt16, false, 0, 0, [3]string{"0", "-32768", "32767"}, [3]interface{}{int16(0), int16(-32768), int16(32767)}}, - {"smallintnull", "SMALLINT", "SMALLINT", scanTypeNullInt, true, 0, 0, [3]string{"0", "NULL", "42"}, [3]interface{}{ni0, niNULL, ni42}}, - {"int3null", "INT(3)", "INT", scanTypeNullInt, true, 0, 0, [3]string{"0", "NULL", "42"}, [3]interface{}{ni0, niNULL, ni42}}, - {"int7", "INT(7) NOT NULL", "INT", scanTypeInt32, false, 0, 0, [3]string{"0", "-1337", "42"}, [3]interface{}{int32(0), int32(-1337), int32(42)}}, - {"mediumintnull", "MEDIUMINT", "MEDIUMINT", scanTypeNullInt, true, 0, 0, [3]string{"0", "42", "NULL"}, [3]interface{}{ni0, ni42, niNULL}}, - {"bigint", "BIGINT NOT NULL", "BIGINT", scanTypeInt64, false, 0, 0, [3]string{"0", "65535", "-42"}, [3]interface{}{int64(0), int64(65535), int64(-42)}}, - {"bigintnull", "BIGINT", "BIGINT", scanTypeNullInt, true, 0, 0, [3]string{"NULL", "1", "42"}, [3]interface{}{niNULL, ni1, ni42}}, - {"tinyuint", "TINYINT UNSIGNED NOT NULL", "TINYINT", scanTypeUint8, false, 0, 0, [3]string{"0", "255", "42"}, [3]interface{}{uint8(0), uint8(255), uint8(42)}}, - {"smalluint", "SMALLINT UNSIGNED NOT NULL", "SMALLINT", scanTypeUint16, false, 0, 0, [3]string{"0", "65535", "42"}, [3]interface{}{uint16(0), uint16(65535), uint16(42)}}, - {"biguint", "BIGINT UNSIGNED NOT NULL", "BIGINT", scanTypeUint64, false, 0, 0, [3]string{"0", "65535", "42"}, [3]interface{}{uint64(0), uint64(65535), uint64(42)}}, - {"uint13", "INT(13) UNSIGNED NOT NULL", "INT", scanTypeUint32, false, 0, 0, [3]string{"0", "1337", "42"}, [3]interface{}{uint32(0), uint32(1337), uint32(42)}}, - {"float", "FLOAT NOT NULL", "FLOAT", scanTypeFloat32, false, math.MaxInt64, math.MaxInt64, [3]string{"0", "42", "13.37"}, [3]interface{}{float32(0), float32(42), float32(13.37)}}, - {"floatnull", "FLOAT", "FLOAT", scanTypeNullFloat, true, math.MaxInt64, math.MaxInt64, [3]string{"0", "NULL", "13.37"}, [3]interface{}{nf0, nfNULL, nf1337}}, - {"float74null", "FLOAT(7,4)", "FLOAT", scanTypeNullFloat, true, math.MaxInt64, 4, [3]string{"0", "NULL", "13.37"}, [3]interface{}{nf0, nfNULL, nf1337}}, - {"double", "DOUBLE NOT NULL", "DOUBLE", scanTypeFloat64, false, math.MaxInt64, math.MaxInt64, [3]string{"0", "42", "13.37"}, [3]interface{}{float64(0), float64(42), float64(13.37)}}, - {"doublenull", "DOUBLE", "DOUBLE", scanTypeNullFloat, true, math.MaxInt64, math.MaxInt64, [3]string{"0", "NULL", "13.37"}, [3]interface{}{nf0, nfNULL, nf1337}}, - {"decimal1", "DECIMAL(10,6) NOT NULL", "DECIMAL", scanTypeRawBytes, false, 10, 6, [3]string{"0", "13.37", "1234.123456"}, [3]interface{}{sql.RawBytes("0.000000"), sql.RawBytes("13.370000"), sql.RawBytes("1234.123456")}}, - {"decimal1null", "DECIMAL(10,6)", "DECIMAL", scanTypeRawBytes, true, 10, 6, [3]string{"0", "NULL", "1234.123456"}, [3]interface{}{sql.RawBytes("0.000000"), rbNULL, sql.RawBytes("1234.123456")}}, - {"decimal2", "DECIMAL(8,4) NOT NULL", "DECIMAL", scanTypeRawBytes, false, 8, 4, [3]string{"0", "13.37", "1234.123456"}, [3]interface{}{sql.RawBytes("0.0000"), sql.RawBytes("13.3700"), sql.RawBytes("1234.1235")}}, - {"decimal2null", "DECIMAL(8,4)", "DECIMAL", scanTypeRawBytes, true, 8, 4, [3]string{"0", "NULL", "1234.123456"}, [3]interface{}{sql.RawBytes("0.0000"), rbNULL, sql.RawBytes("1234.1235")}}, - {"decimal3", "DECIMAL(5,0) NOT NULL", "DECIMAL", scanTypeRawBytes, false, 5, 0, [3]string{"0", "13.37", "-12345.123456"}, [3]interface{}{rb0, sql.RawBytes("13"), sql.RawBytes("-12345")}}, - {"decimal3null", "DECIMAL(5,0)", "DECIMAL", scanTypeRawBytes, true, 5, 0, [3]string{"0", "NULL", "-12345.123456"}, [3]interface{}{rb0, rbNULL, sql.RawBytes("-12345")}}, - {"char25null", "CHAR(25)", "CHAR", scanTypeRawBytes, true, 0, 0, [3]string{"0", "NULL", "'Test'"}, [3]interface{}{rb0, rbNULL, rbTest}}, - {"varchar42", "VARCHAR(42) NOT NULL", "VARCHAR", scanTypeRawBytes, false, 0, 0, [3]string{"0", "'Test'", "42"}, [3]interface{}{rb0, rbTest, rb42}}, - {"binary4null", "BINARY(4)", "BINARY", scanTypeRawBytes, true, 0, 0, [3]string{"0", "NULL", "'Test'"}, [3]interface{}{rb0pad4, rbNULL, rbTest}}, - {"varbinary42", "VARBINARY(42) NOT NULL", "VARBINARY", scanTypeRawBytes, false, 0, 0, [3]string{"0", "'Test'", "42"}, [3]interface{}{rb0, rbTest, rb42}}, - {"tinyblobnull", "TINYBLOB", "BLOB", scanTypeRawBytes, true, 0, 0, [3]string{"0", "NULL", "'Test'"}, [3]interface{}{rb0, rbNULL, rbTest}}, - {"tinytextnull", "TINYTEXT", "TEXT", scanTypeRawBytes, true, 0, 0, [3]string{"0", "NULL", "'Test'"}, [3]interface{}{rb0, rbNULL, rbTest}}, - {"blobnull", "BLOB", "BLOB", scanTypeRawBytes, true, 0, 0, [3]string{"0", "NULL", "'Test'"}, [3]interface{}{rb0, rbNULL, rbTest}}, - {"textnull", "TEXT", "TEXT", scanTypeRawBytes, true, 0, 0, [3]string{"0", "NULL", "'Test'"}, [3]interface{}{rb0, rbNULL, rbTest}}, - {"mediumblob", "MEDIUMBLOB NOT NULL", "BLOB", scanTypeRawBytes, false, 0, 0, [3]string{"0", "'Test'", "42"}, [3]interface{}{rb0, rbTest, rb42}}, - {"mediumtext", "MEDIUMTEXT NOT NULL", "TEXT", scanTypeRawBytes, false, 0, 0, [3]string{"0", "'Test'", "42"}, [3]interface{}{rb0, rbTest, rb42}}, - {"longblob", "LONGBLOB NOT NULL", "BLOB", scanTypeRawBytes, false, 0, 0, [3]string{"0", "'Test'", "42"}, [3]interface{}{rb0, rbTest, rb42}}, - {"longtext", "LONGTEXT NOT NULL", "TEXT", scanTypeRawBytes, false, 0, 0, [3]string{"0", "'Test'", "42"}, [3]interface{}{rb0, rbTest, rb42}}, - {"datetime", "DATETIME", "DATETIME", scanTypeNullTime, true, 0, 0, [3]string{"'2006-01-02 15:04:05'", "'2006-01-02 15:04:05.1'", "'2006-01-02 15:04:05.111111'"}, [3]interface{}{nt0, nt0, nt0}}, - {"datetime2", "DATETIME(2)", "DATETIME", scanTypeNullTime, true, 2, 2, [3]string{"'2006-01-02 15:04:05'", "'2006-01-02 15:04:05.1'", "'2006-01-02 15:04:05.111111'"}, [3]interface{}{nt0, nt1, nt2}}, - {"datetime6", "DATETIME(6)", "DATETIME", scanTypeNullTime, true, 6, 6, [3]string{"'2006-01-02 15:04:05'", "'2006-01-02 15:04:05.1'", "'2006-01-02 15:04:05.111111'"}, [3]interface{}{nt0, nt1, nt6}}, - {"date", "DATE", "DATE", scanTypeNullTime, true, 0, 0, [3]string{"'2006-01-02'", "NULL", "'2006-03-04'"}, [3]interface{}{nd1, ndNULL, nd2}}, - {"year", "YEAR NOT NULL", "YEAR", scanTypeUint16, false, 0, 0, [3]string{"2006", "2000", "1994"}, [3]interface{}{uint16(2006), uint16(2000), uint16(1994)}}, - } - - schema := "" - values1 := "" - values2 := "" - values3 := "" - for _, column := range columns { - schema += fmt.Sprintf("`%s` %s, ", column.name, column.fieldType) - values1 += column.valuesIn[0] + ", " - values2 += column.valuesIn[1] + ", " - values3 += column.valuesIn[2] + ", " - } - schema = schema[:len(schema)-2] - values1 = values1[:len(values1)-2] - values2 = values2[:len(values2)-2] - values3 = values3[:len(values3)-2] - - dsns := []string{ - dsn + "&parseTime=true", - dsn + "&parseTime=false", - } - for _, testdsn := range dsns { - runTests(t, testdsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (" + schema + ")") - dbt.mustExec("INSERT INTO test VALUES (" + values1 + "), (" + values2 + "), (" + values3 + ")") - - rows, err := dbt.db.Query("SELECT * FROM test") - if err != nil { - t.Fatalf("Query: %v", err) - } - - tt, err := rows.ColumnTypes() - if err != nil { - t.Fatalf("ColumnTypes: %v", err) - } - - if len(tt) != len(columns) { - t.Fatalf("unexpected number of columns: expected %d, got %d", len(columns), len(tt)) - } - - types := make([]reflect.Type, len(tt)) - for i, tp := range tt { - column := columns[i] - - // Name - name := tp.Name() - if name != column.name { - t.Errorf("column name mismatch %s != %s", name, column.name) - continue - } - - // DatabaseTypeName - databaseTypeName := tp.DatabaseTypeName() - if databaseTypeName != column.databaseTypeName { - t.Errorf("databasetypename name mismatch for column %q: %s != %s", name, databaseTypeName, column.databaseTypeName) - continue - } - - // ScanType - scanType := tp.ScanType() - if scanType != column.scanType { - if scanType == nil { - t.Errorf("scantype is null for column %q", name) - } else { - t.Errorf("scantype mismatch for column %q: %s != %s", name, scanType.Name(), column.scanType.Name()) - } - continue - } - types[i] = scanType - - // Nullable - nullable, ok := tp.Nullable() - if !ok { - t.Errorf("nullable not ok %q", name) - continue - } - if nullable != column.nullable { - t.Errorf("nullable mismatch for column %q: %t != %t", name, nullable, column.nullable) - } - - // Length - // length, ok := tp.Length() - // if length != column.length { - // if !ok { - // t.Errorf("length not ok for column %q", name) - // } else { - // t.Errorf("length mismatch for column %q: %d != %d", name, length, column.length) - // } - // continue - // } - - // Precision and Scale - precision, scale, ok := tp.DecimalSize() - if precision != column.precision { - if !ok { - t.Errorf("precision not ok for column %q", name) - } else { - t.Errorf("precision mismatch for column %q: %d != %d", name, precision, column.precision) - } - continue - } - if scale != column.scale { - if !ok { - t.Errorf("scale not ok for column %q", name) - } else { - t.Errorf("scale mismatch for column %q: %d != %d", name, scale, column.scale) - } - continue - } - } - - values := make([]interface{}, len(tt)) - for i := range values { - values[i] = reflect.New(types[i]).Interface() - } - i := 0 - for rows.Next() { - err = rows.Scan(values...) - if err != nil { - t.Fatalf("failed to scan values in %v", err) - } - for j := range values { - value := reflect.ValueOf(values[j]).Elem().Interface() - if !reflect.DeepEqual(value, columns[j].valuesOut[i]) { - if columns[j].scanType == scanTypeRawBytes { - t.Errorf("row %d, column %d: %v != %v", i, j, string(value.(sql.RawBytes)), string(columns[j].valuesOut[i].(sql.RawBytes))) - } else { - t.Errorf("row %d, column %d: %v != %v", i, j, value, columns[j].valuesOut[i]) - } - } - } - i++ - } - if i != 3 { - t.Errorf("expected 3 rows, got %d", i) - } - - if err := rows.Close(); err != nil { - t.Errorf("error closing rows: %s", err) - } - }) - } -} - -func TestValuerWithValueReceiverGivenNilValue(t *testing.T) { - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (value VARCHAR(255))") - dbt.db.Exec("INSERT INTO test VALUES (?)", (*testValuer)(nil)) - // This test will panic on the INSERT if ConvertValue() does not check for typed nil before calling Value() - }) -} - -// TestRawBytesAreNotModified checks for a race condition that arises when a query context -// is canceled while a user is calling rows.Scan. This is a more stringent test than the one -// proposed in https://github.com/golang/go/issues/23519. Here we're explicitly using -// `sql.RawBytes` to check the contents of our internal buffers are not modified after an implicit -// call to `Rows.Close`, so Context cancellation should **not** invalidate the backing buffers. -func TestRawBytesAreNotModified(t *testing.T) { - const blob = "abcdefghijklmnop" - const contextRaceIterations = 20 - const blobSize = defaultBufSize * 3 / 4 // Second row overwrites first row. - const insertRows = 4 - - var sqlBlobs = [2]string{ - strings.Repeat(blob, blobSize/len(blob)), - strings.Repeat(strings.ToUpper(blob), blobSize/len(blob)), - } - - runTests(t, dsn, func(dbt *DBTest) { - dbt.mustExec("CREATE TABLE test (id int, value BLOB) CHARACTER SET utf8") - for i := 0; i < insertRows; i++ { - dbt.mustExec("INSERT INTO test VALUES (?, ?)", i+1, sqlBlobs[i&1]) - } - - for i := 0; i < contextRaceIterations; i++ { - func() { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - rows, err := dbt.db.QueryContext(ctx, `SELECT id, value FROM test`) - if err != nil { - t.Fatal(err) - } - - var b int - var raw sql.RawBytes - for rows.Next() { - if err := rows.Scan(&b, &raw); err != nil { - t.Fatal(err) - } - - before := string(raw) - // Ensure cancelling the query does not corrupt the contents of `raw` - cancel() - time.Sleep(time.Microsecond * 100) - after := string(raw) - - if before != after { - t.Fatalf("the backing storage for sql.RawBytes has been modified (i=%v)", i) - } - } - rows.Close() - }() - } - }) -} diff --git a/vendor/github.com/go-sql-driver/mysql/dsn.go b/vendor/github.com/go-sql-driver/mysql/dsn.go index 1d9b4ab0..be014bab 100644 --- a/vendor/github.com/go-sql-driver/mysql/dsn.go +++ b/vendor/github.com/go-sql-driver/mysql/dsn.go @@ -14,7 +14,6 @@ import ( "crypto/tls" "errors" "fmt" - "math/big" "net" "net/url" "sort" @@ -73,26 +72,6 @@ func NewConfig() *Config { } } -func (cfg *Config) Clone() *Config { - cp := *cfg - if cp.tls != nil { - cp.tls = cfg.tls.Clone() - } - if len(cp.Params) > 0 { - cp.Params = make(map[string]string, len(cfg.Params)) - for k, v := range cfg.Params { - cp.Params[k] = v - } - } - if cfg.pubKey != nil { - cp.pubKey = &rsa.PublicKey{ - N: new(big.Int).Set(cfg.pubKey.N), - E: cfg.pubKey.E, - } - } - return &cp -} - func (cfg *Config) normalize() error { if cfg.InterpolateParams && unsafeCollations[cfg.Collation] { return errInvalidDSNUnsafeCollation @@ -113,35 +92,17 @@ func (cfg *Config) normalize() error { default: return errors.New("default addr for network '" + cfg.Net + "' unknown") } + } else if cfg.Net == "tcp" { cfg.Addr = ensureHavePort(cfg.Addr) } - switch cfg.TLSConfig { - case "false", "": - // don't set anything - case "true": - cfg.tls = &tls.Config{} - case "skip-verify", "preferred": - cfg.tls = &tls.Config{InsecureSkipVerify: true} - default: - cfg.tls = getTLSConfigClone(cfg.TLSConfig) - if cfg.tls == nil { - return errors.New("invalid value / unknown config name: " + cfg.TLSConfig) - } - } - - if cfg.tls != nil && cfg.tls.ServerName == "" && !cfg.tls.InsecureSkipVerify { - host, _, err := net.SplitHostPort(cfg.Addr) - if err == nil { - cfg.tls.ServerName = host - } - } - - if cfg.ServerPubKey != "" { - cfg.pubKey = getServerPubKey(cfg.ServerPubKey) - if cfg.pubKey == nil { - return errors.New("invalid value / unknown server pub key name: " + cfg.ServerPubKey) + if cfg.tls != nil { + if cfg.tls.ServerName == "" && !cfg.tls.InsecureSkipVerify { + host, _, err := net.SplitHostPort(cfg.Addr) + if err == nil { + cfg.tls.ServerName = host + } } } @@ -570,7 +531,13 @@ func parseDSNParams(cfg *Config, params string) (err error) { if err != nil { return fmt.Errorf("invalid value for server pub key name: %v", err) } - cfg.ServerPubKey = name + + if pubKey := getServerPubKey(name); pubKey != nil { + cfg.ServerPubKey = name + cfg.pubKey = pubKey + } else { + return errors.New("invalid value / unknown server pub key name: " + name) + } // Strict mode case "strict": @@ -589,17 +556,25 @@ func parseDSNParams(cfg *Config, params string) (err error) { if isBool { if boolValue { cfg.TLSConfig = "true" + cfg.tls = &tls.Config{} } else { cfg.TLSConfig = "false" } - } else if vl := strings.ToLower(value); vl == "skip-verify" || vl == "preferred" { + } else if vl := strings.ToLower(value); vl == "skip-verify" { cfg.TLSConfig = vl + cfg.tls = &tls.Config{InsecureSkipVerify: true} } else { name, err := url.QueryUnescape(value) if err != nil { return fmt.Errorf("invalid value for TLS config name: %v", err) } - cfg.TLSConfig = name + + if tlsConfig := getTLSConfigClone(name); tlsConfig != nil { + cfg.TLSConfig = name + cfg.tls = tlsConfig + } else { + return errors.New("invalid value / unknown config name: " + name) + } } // I/O write Timeout diff --git a/vendor/github.com/go-sql-driver/mysql/dsn_test.go b/vendor/github.com/go-sql-driver/mysql/dsn_test.go deleted file mode 100644 index 50dc2932..00000000 --- a/vendor/github.com/go-sql-driver/mysql/dsn_test.go +++ /dev/null @@ -1,415 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2016 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "crypto/tls" - "fmt" - "net/url" - "reflect" - "testing" - "time" -) - -var testDSNs = []struct { - in string - out *Config -}{{ - "username:password@protocol(address)/dbname?param=value", - &Config{User: "username", Passwd: "password", Net: "protocol", Addr: "address", DBName: "dbname", Params: map[string]string{"param": "value"}, Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true}, -}, { - "username:password@protocol(address)/dbname?param=value&columnsWithAlias=true", - &Config{User: "username", Passwd: "password", Net: "protocol", Addr: "address", DBName: "dbname", Params: map[string]string{"param": "value"}, Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true, ColumnsWithAlias: true}, -}, { - "username:password@protocol(address)/dbname?param=value&columnsWithAlias=true&multiStatements=true", - &Config{User: "username", Passwd: "password", Net: "protocol", Addr: "address", DBName: "dbname", Params: map[string]string{"param": "value"}, Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true, ColumnsWithAlias: true, MultiStatements: true}, -}, { - "user@unix(/path/to/socket)/dbname?charset=utf8", - &Config{User: "user", Net: "unix", Addr: "/path/to/socket", DBName: "dbname", Params: map[string]string{"charset": "utf8"}, Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true}, -}, { - "user:password@tcp(localhost:5555)/dbname?charset=utf8&tls=true", - &Config{User: "user", Passwd: "password", Net: "tcp", Addr: "localhost:5555", DBName: "dbname", Params: map[string]string{"charset": "utf8"}, Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true, TLSConfig: "true"}, -}, { - "user:password@tcp(localhost:5555)/dbname?charset=utf8mb4,utf8&tls=skip-verify", - &Config{User: "user", Passwd: "password", Net: "tcp", Addr: "localhost:5555", DBName: "dbname", Params: map[string]string{"charset": "utf8mb4,utf8"}, Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true, TLSConfig: "skip-verify"}, -}, { - "user:password@/dbname?loc=UTC&timeout=30s&readTimeout=1s&writeTimeout=1s&allowAllFiles=1&clientFoundRows=true&allowOldPasswords=TRUE&collation=utf8mb4_unicode_ci&maxAllowedPacket=16777216&tls=false&allowCleartextPasswords=true&parseTime=true&rejectReadOnly=true", - &Config{User: "user", Passwd: "password", Net: "tcp", Addr: "127.0.0.1:3306", DBName: "dbname", Collation: "utf8mb4_unicode_ci", Loc: time.UTC, TLSConfig: "false", AllowCleartextPasswords: true, AllowNativePasswords: true, Timeout: 30 * time.Second, ReadTimeout: time.Second, WriteTimeout: time.Second, AllowAllFiles: true, AllowOldPasswords: true, ClientFoundRows: true, MaxAllowedPacket: 16777216, ParseTime: true, RejectReadOnly: true}, -}, { - "user:password@/dbname?allowNativePasswords=false&maxAllowedPacket=0", - &Config{User: "user", Passwd: "password", Net: "tcp", Addr: "127.0.0.1:3306", DBName: "dbname", Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: 0, AllowNativePasswords: false}, -}, { - "user:p@ss(word)@tcp([de:ad:be:ef::ca:fe]:80)/dbname?loc=Local", - &Config{User: "user", Passwd: "p@ss(word)", Net: "tcp", Addr: "[de:ad:be:ef::ca:fe]:80", DBName: "dbname", Collation: "utf8mb4_general_ci", Loc: time.Local, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true}, -}, { - "/dbname", - &Config{Net: "tcp", Addr: "127.0.0.1:3306", DBName: "dbname", Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true}, -}, { - "@/", - &Config{Net: "tcp", Addr: "127.0.0.1:3306", Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true}, -}, { - "/", - &Config{Net: "tcp", Addr: "127.0.0.1:3306", Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true}, -}, { - "", - &Config{Net: "tcp", Addr: "127.0.0.1:3306", Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true}, -}, { - "user:p@/ssword@/", - &Config{User: "user", Passwd: "p@/ssword", Net: "tcp", Addr: "127.0.0.1:3306", Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true}, -}, { - "unix/?arg=%2Fsome%2Fpath.ext", - &Config{Net: "unix", Addr: "/tmp/mysql.sock", Params: map[string]string{"arg": "/some/path.ext"}, Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true}, -}, { - "tcp(127.0.0.1)/dbname", - &Config{Net: "tcp", Addr: "127.0.0.1:3306", DBName: "dbname", Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true}, -}, { - "tcp(de:ad:be:ef::ca:fe)/dbname", - &Config{Net: "tcp", Addr: "[de:ad:be:ef::ca:fe]:3306", DBName: "dbname", Collation: "utf8mb4_general_ci", Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true}, -}, -} - -func TestDSNParser(t *testing.T) { - for i, tst := range testDSNs { - cfg, err := ParseDSN(tst.in) - if err != nil { - t.Error(err.Error()) - } - - // pointer not static - cfg.tls = nil - - if !reflect.DeepEqual(cfg, tst.out) { - t.Errorf("%d. ParseDSN(%q) mismatch:\ngot %+v\nwant %+v", i, tst.in, cfg, tst.out) - } - } -} - -func TestDSNParserInvalid(t *testing.T) { - var invalidDSNs = []string{ - "@net(addr/", // no closing brace - "@tcp(/", // no closing brace - "tcp(/", // no closing brace - "(/", // no closing brace - "net(addr)//", // unescaped - "User:pass@tcp(1.2.3.4:3306)", // no trailing slash - "net()/", // unknown default addr - //"/dbname?arg=/some/unescaped/path", - } - - for i, tst := range invalidDSNs { - if _, err := ParseDSN(tst); err == nil { - t.Errorf("invalid DSN #%d. (%s) didn't error!", i, tst) - } - } -} - -func TestDSNReformat(t *testing.T) { - for i, tst := range testDSNs { - dsn1 := tst.in - cfg1, err := ParseDSN(dsn1) - if err != nil { - t.Error(err.Error()) - continue - } - cfg1.tls = nil // pointer not static - res1 := fmt.Sprintf("%+v", cfg1) - - dsn2 := cfg1.FormatDSN() - cfg2, err := ParseDSN(dsn2) - if err != nil { - t.Error(err.Error()) - continue - } - cfg2.tls = nil // pointer not static - res2 := fmt.Sprintf("%+v", cfg2) - - if res1 != res2 { - t.Errorf("%d. %q does not match %q", i, res2, res1) - } - } -} - -func TestDSNServerPubKey(t *testing.T) { - baseDSN := "User:password@tcp(localhost:5555)/dbname?serverPubKey=" - - RegisterServerPubKey("testKey", testPubKeyRSA) - defer DeregisterServerPubKey("testKey") - - tst := baseDSN + "testKey" - cfg, err := ParseDSN(tst) - if err != nil { - t.Error(err.Error()) - } - - if cfg.ServerPubKey != "testKey" { - t.Errorf("unexpected cfg.ServerPubKey value: %v", cfg.ServerPubKey) - } - if cfg.pubKey != testPubKeyRSA { - t.Error("pub key pointer doesn't match") - } - - // Key is missing - tst = baseDSN + "invalid_name" - cfg, err = ParseDSN(tst) - if err == nil { - t.Errorf("invalid name in DSN (%s) but did not error. Got config: %#v", tst, cfg) - } -} - -func TestDSNServerPubKeyQueryEscape(t *testing.T) { - const name = "&%!:" - dsn := "User:password@tcp(localhost:5555)/dbname?serverPubKey=" + url.QueryEscape(name) - - RegisterServerPubKey(name, testPubKeyRSA) - defer DeregisterServerPubKey(name) - - cfg, err := ParseDSN(dsn) - if err != nil { - t.Error(err.Error()) - } - - if cfg.pubKey != testPubKeyRSA { - t.Error("pub key pointer doesn't match") - } -} - -func TestDSNWithCustomTLS(t *testing.T) { - baseDSN := "User:password@tcp(localhost:5555)/dbname?tls=" - tlsCfg := tls.Config{} - - RegisterTLSConfig("utils_test", &tlsCfg) - defer DeregisterTLSConfig("utils_test") - - // Custom TLS is missing - tst := baseDSN + "invalid_tls" - cfg, err := ParseDSN(tst) - if err == nil { - t.Errorf("invalid custom TLS in DSN (%s) but did not error. Got config: %#v", tst, cfg) - } - - tst = baseDSN + "utils_test" - - // Custom TLS with a server name - name := "foohost" - tlsCfg.ServerName = name - cfg, err = ParseDSN(tst) - - if err != nil { - t.Error(err.Error()) - } else if cfg.tls.ServerName != name { - t.Errorf("did not get the correct TLS ServerName (%s) parsing DSN (%s).", name, tst) - } - - // Custom TLS without a server name - name = "localhost" - tlsCfg.ServerName = "" - cfg, err = ParseDSN(tst) - - if err != nil { - t.Error(err.Error()) - } else if cfg.tls.ServerName != name { - t.Errorf("did not get the correct ServerName (%s) parsing DSN (%s).", name, tst) - } else if tlsCfg.ServerName != "" { - t.Errorf("tlsCfg was mutated ServerName (%s) should be empty parsing DSN (%s).", name, tst) - } -} - -func TestDSNTLSConfig(t *testing.T) { - expectedServerName := "example.com" - dsn := "tcp(example.com:1234)/?tls=true" - - cfg, err := ParseDSN(dsn) - if err != nil { - t.Error(err.Error()) - } - if cfg.tls == nil { - t.Error("cfg.tls should not be nil") - } - if cfg.tls.ServerName != expectedServerName { - t.Errorf("cfg.tls.ServerName should be %q, got %q (host with port)", expectedServerName, cfg.tls.ServerName) - } - - dsn = "tcp(example.com)/?tls=true" - cfg, err = ParseDSN(dsn) - if err != nil { - t.Error(err.Error()) - } - if cfg.tls == nil { - t.Error("cfg.tls should not be nil") - } - if cfg.tls.ServerName != expectedServerName { - t.Errorf("cfg.tls.ServerName should be %q, got %q (host without port)", expectedServerName, cfg.tls.ServerName) - } -} - -func TestDSNWithCustomTLSQueryEscape(t *testing.T) { - const configKey = "&%!:" - dsn := "User:password@tcp(localhost:5555)/dbname?tls=" + url.QueryEscape(configKey) - name := "foohost" - tlsCfg := tls.Config{ServerName: name} - - RegisterTLSConfig(configKey, &tlsCfg) - defer DeregisterTLSConfig(configKey) - - cfg, err := ParseDSN(dsn) - - if err != nil { - t.Error(err.Error()) - } else if cfg.tls.ServerName != name { - t.Errorf("did not get the correct TLS ServerName (%s) parsing DSN (%s).", name, dsn) - } -} - -func TestDSNUnsafeCollation(t *testing.T) { - _, err := ParseDSN("/dbname?collation=gbk_chinese_ci&interpolateParams=true") - if err != errInvalidDSNUnsafeCollation { - t.Errorf("expected %v, got %v", errInvalidDSNUnsafeCollation, err) - } - - _, err = ParseDSN("/dbname?collation=gbk_chinese_ci&interpolateParams=false") - if err != nil { - t.Errorf("expected %v, got %v", nil, err) - } - - _, err = ParseDSN("/dbname?collation=gbk_chinese_ci") - if err != nil { - t.Errorf("expected %v, got %v", nil, err) - } - - _, err = ParseDSN("/dbname?collation=ascii_bin&interpolateParams=true") - if err != nil { - t.Errorf("expected %v, got %v", nil, err) - } - - _, err = ParseDSN("/dbname?collation=latin1_german1_ci&interpolateParams=true") - if err != nil { - t.Errorf("expected %v, got %v", nil, err) - } - - _, err = ParseDSN("/dbname?collation=utf8_general_ci&interpolateParams=true") - if err != nil { - t.Errorf("expected %v, got %v", nil, err) - } - - _, err = ParseDSN("/dbname?collation=utf8mb4_general_ci&interpolateParams=true") - if err != nil { - t.Errorf("expected %v, got %v", nil, err) - } -} - -func TestParamsAreSorted(t *testing.T) { - expected := "/dbname?interpolateParams=true&foobar=baz&quux=loo" - cfg := NewConfig() - cfg.DBName = "dbname" - cfg.InterpolateParams = true - cfg.Params = map[string]string{ - "quux": "loo", - "foobar": "baz", - } - actual := cfg.FormatDSN() - if actual != expected { - t.Errorf("generic Config.Params were not sorted: want %#v, got %#v", expected, actual) - } -} - -func TestCloneConfig(t *testing.T) { - RegisterServerPubKey("testKey", testPubKeyRSA) - defer DeregisterServerPubKey("testKey") - - expectedServerName := "example.com" - dsn := "tcp(example.com:1234)/?tls=true&foobar=baz&serverPubKey=testKey" - cfg, err := ParseDSN(dsn) - if err != nil { - t.Fatal(err.Error()) - } - - cfg2 := cfg.Clone() - if cfg == cfg2 { - t.Errorf("Config.Clone did not create a separate config struct") - } - - if cfg2.tls.ServerName != expectedServerName { - t.Errorf("cfg.tls.ServerName should be %q, got %q (host with port)", expectedServerName, cfg.tls.ServerName) - } - - cfg2.tls.ServerName = "example2.com" - if cfg.tls.ServerName == cfg2.tls.ServerName { - t.Errorf("changed cfg.tls.Server name should not propagate to original Config") - } - - if _, ok := cfg2.Params["foobar"]; !ok { - t.Errorf("cloned Config is missing custom params") - } - - delete(cfg2.Params, "foobar") - - if _, ok := cfg.Params["foobar"]; !ok { - t.Errorf("custom params in cloned Config should not propagate to original Config") - } - - if !reflect.DeepEqual(cfg.pubKey, cfg2.pubKey) { - t.Errorf("public key in Config should be identical") - } -} - -func TestNormalizeTLSConfig(t *testing.T) { - tt := []struct { - tlsConfig string - want *tls.Config - }{ - {"", nil}, - {"false", nil}, - {"true", &tls.Config{ServerName: "myserver"}}, - {"skip-verify", &tls.Config{InsecureSkipVerify: true}}, - {"preferred", &tls.Config{InsecureSkipVerify: true}}, - {"test_tls_config", &tls.Config{ServerName: "myServerName"}}, - } - - RegisterTLSConfig("test_tls_config", &tls.Config{ServerName: "myServerName"}) - defer func() { DeregisterTLSConfig("test_tls_config") }() - - for _, tc := range tt { - t.Run(tc.tlsConfig, func(t *testing.T) { - cfg := &Config{ - Addr: "myserver:3306", - TLSConfig: tc.tlsConfig, - } - - cfg.normalize() - - if cfg.tls == nil { - if tc.want != nil { - t.Fatal("wanted a tls config but got nil instead") - } - return - } - - if cfg.tls.ServerName != tc.want.ServerName { - t.Errorf("tls.ServerName doesn't match (want: '%s', got: '%s')", - tc.want.ServerName, cfg.tls.ServerName) - } - if cfg.tls.InsecureSkipVerify != tc.want.InsecureSkipVerify { - t.Errorf("tls.InsecureSkipVerify doesn't match (want: %T, got :%T)", - tc.want.InsecureSkipVerify, cfg.tls.InsecureSkipVerify) - } - }) - } -} - -func BenchmarkParseDSN(b *testing.B) { - b.ReportAllocs() - - for i := 0; i < b.N; i++ { - for _, tst := range testDSNs { - if _, err := ParseDSN(tst.in); err != nil { - b.Error(err.Error()) - } - } - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/errors_test.go b/vendor/github.com/go-sql-driver/mysql/errors_test.go deleted file mode 100644 index 96f9126d..00000000 --- a/vendor/github.com/go-sql-driver/mysql/errors_test.go +++ /dev/null @@ -1,42 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "bytes" - "log" - "testing" -) - -func TestErrorsSetLogger(t *testing.T) { - previous := errLog - defer func() { - errLog = previous - }() - - // set up logger - const expected = "prefix: test\n" - buffer := bytes.NewBuffer(make([]byte, 0, 64)) - logger := log.New(buffer, "prefix: ", 0) - - // print - SetLogger(logger) - errLog.Print("test") - - // check result - if actual := buffer.String(); actual != expected { - t.Errorf("expected %q, got %q", expected, actual) - } -} - -func TestErrorsStrictIgnoreNotes(t *testing.T) { - runTests(t, dsn+"&sql_notes=false", func(dbt *DBTest) { - dbt.mustExec("DROP TABLE IF EXISTS does_not_exist") - }) -} diff --git a/vendor/github.com/go-sql-driver/mysql/packets.go b/vendor/github.com/go-sql-driver/mysql/packets.go index 30b3352c..9ed64085 100644 --- a/vendor/github.com/go-sql-driver/mysql/packets.go +++ b/vendor/github.com/go-sql-driver/mysql/packets.go @@ -51,7 +51,7 @@ func (mc *mysqlConn) readPacket() ([]byte, error) { mc.sequence++ // packets with length 0 terminate a previous packet which is a - // multiple of (2^24)-1 bytes long + // multiple of (2^24)−1 bytes long if pktLen == 0 { // there was no previous packet if prevData == nil { @@ -96,35 +96,6 @@ func (mc *mysqlConn) writePacket(data []byte) error { return ErrPktTooLarge } - // Perform a stale connection check. We only perform this check for - // the first query on a connection that has been checked out of the - // connection pool: a fresh connection from the pool is more likely - // to be stale, and it has not performed any previous writes that - // could cause data corruption, so it's safe to return ErrBadConn - // if the check fails. - if mc.reset { - mc.reset = false - conn := mc.netConn - if mc.rawConn != nil { - conn = mc.rawConn - } - var err error - // If this connection has a ReadTimeout which we've been setting on - // reads, reset it to its default value before we attempt a non-blocking - // read, otherwise the scheduler will just time us out before we can read - if mc.cfg.ReadTimeout != 0 { - err = conn.SetReadDeadline(time.Time{}) - } - if err == nil { - err = connCheck(conn) - } - if err != nil { - errLog.Print("closing bad idle connection: ", err) - mc.Close() - return driver.ErrBadConn - } - } - for { var size int if pktLen >= maxPacketSize { @@ -223,11 +194,7 @@ func (mc *mysqlConn) readHandshakePacket() (data []byte, plugin string, err erro return nil, "", ErrOldProtocol } if mc.flags&clientSSL == 0 && mc.cfg.tls != nil { - if mc.cfg.TLSConfig == "preferred" { - mc.cfg.tls = nil - } else { - return nil, "", ErrNoTLS - } + return nil, "", ErrNoTLS } pos += 2 @@ -319,10 +286,10 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string } // Calculate packet length and get buffer with that size - data, err := mc.buf.takeSmallBuffer(pktLen + 4) - if err != nil { + data := mc.buf.takeSmallBuffer(pktLen + 4) + if data == nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) + errLog.Print(ErrBusyBuffer) return errBadConnNoWrite } @@ -361,7 +328,6 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string if err := tlsConn.Handshake(); err != nil { return err } - mc.rawConn = mc.netConn mc.netConn = tlsConn mc.buf.nc = tlsConn } @@ -401,10 +367,10 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string // http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse func (mc *mysqlConn) writeAuthSwitchPacket(authData []byte) error { pktLen := 4 + len(authData) - data, err := mc.buf.takeSmallBuffer(pktLen) - if err != nil { + data := mc.buf.takeSmallBuffer(pktLen) + if data == nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) + errLog.Print(ErrBusyBuffer) return errBadConnNoWrite } @@ -421,10 +387,10 @@ func (mc *mysqlConn) writeCommandPacket(command byte) error { // Reset Packet Sequence mc.sequence = 0 - data, err := mc.buf.takeSmallBuffer(4 + 1) - if err != nil { + data := mc.buf.takeSmallBuffer(4 + 1) + if data == nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) + errLog.Print(ErrBusyBuffer) return errBadConnNoWrite } @@ -440,10 +406,10 @@ func (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error { mc.sequence = 0 pktLen := 1 + len(arg) - data, err := mc.buf.takeBuffer(pktLen + 4) - if err != nil { + data := mc.buf.takeBuffer(pktLen + 4) + if data == nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) + errLog.Print(ErrBusyBuffer) return errBadConnNoWrite } @@ -461,10 +427,10 @@ func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error { // Reset Packet Sequence mc.sequence = 0 - data, err := mc.buf.takeSmallBuffer(4 + 1 + 4) - if err != nil { + data := mc.buf.takeSmallBuffer(4 + 1 + 4) + if data == nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) + errLog.Print(ErrBusyBuffer) return errBadConnNoWrite } @@ -917,7 +883,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { const minPktLen = 4 + 1 + 4 + 1 + 4 mc := stmt.mc - // Determine threshold dynamically to avoid packet size shortage. + // Determine threshould dynamically to avoid packet size shortage. longDataSize := mc.maxAllowedPacket / (stmt.paramCount + 1) if longDataSize < 64 { longDataSize = 64 @@ -927,17 +893,15 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { mc.sequence = 0 var data []byte - var err error if len(args) == 0 { - data, err = mc.buf.takeBuffer(minPktLen) + data = mc.buf.takeBuffer(minPktLen) } else { - data, err = mc.buf.takeCompleteBuffer() - // In this case the len(data) == cap(data) which is used to optimise the flow below. + data = mc.buf.takeCompleteBuffer() } - if err != nil { + if data == nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) + errLog.Print(ErrBusyBuffer) return errBadConnNoWrite } @@ -963,7 +927,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { pos := minPktLen var nullMask []byte - if maskLen, typesLen := (len(args)+7)/8, 1+2*len(args); pos+maskLen+typesLen >= cap(data) { + if maskLen, typesLen := (len(args)+7)/8, 1+2*len(args); pos+maskLen+typesLen >= len(data) { // buffer has to be extended but we don't know by how much so // we depend on append after all data with known sizes fit. // We stop at that because we deal with a lot of columns here @@ -972,11 +936,10 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { copy(tmp[:pos], data[:pos]) data = tmp nullMask = data[pos : pos+maskLen] - // No need to clean nullMask as make ensures that. pos += maskLen } else { nullMask = data[pos : pos+maskLen] - for i := range nullMask { + for i := 0; i < maskLen; i++ { nullMask[i] = 0 } pos += maskLen @@ -1021,22 +984,6 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { ) } - case uint64: - paramTypes[i+i] = byte(fieldTypeLongLong) - paramTypes[i+i+1] = 0x80 // type is unsigned - - if cap(paramValues)-len(paramValues)-8 >= 0 { - paramValues = paramValues[:len(paramValues)+8] - binary.LittleEndian.PutUint64( - paramValues[len(paramValues)-8:], - uint64(v), - ) - } else { - paramValues = append(paramValues, - uint64ToBytes(uint64(v))..., - ) - } - case float64: paramTypes[i+i] = byte(fieldTypeDouble) paramTypes[i+i+1] = 0x00 @@ -1129,10 +1076,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { // In that case we must build the data packet with the new values buffer if valuesCap != cap(paramValues) { data = append(data[:pos], paramValues...) - if err = mc.buf.store(data); err != nil { - errLog.Print(err) - return errBadConnNoWrite - } + mc.buf.buf = data } pos += len(paramValues) diff --git a/vendor/github.com/go-sql-driver/mysql/packets_test.go b/vendor/github.com/go-sql-driver/mysql/packets_test.go deleted file mode 100644 index b61e4dbf..00000000 --- a/vendor/github.com/go-sql-driver/mysql/packets_test.go +++ /dev/null @@ -1,336 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2016 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "bytes" - "errors" - "net" - "testing" - "time" -) - -var ( - errConnClosed = errors.New("connection is closed") - errConnTooManyReads = errors.New("too many reads") - errConnTooManyWrites = errors.New("too many writes") -) - -// struct to mock a net.Conn for testing purposes -type mockConn struct { - laddr net.Addr - raddr net.Addr - data []byte - written []byte - queuedReplies [][]byte - closed bool - read int - reads int - writes int - maxReads int - maxWrites int -} - -func (m *mockConn) Read(b []byte) (n int, err error) { - if m.closed { - return 0, errConnClosed - } - - m.reads++ - if m.maxReads > 0 && m.reads > m.maxReads { - return 0, errConnTooManyReads - } - - n = copy(b, m.data) - m.read += n - m.data = m.data[n:] - return -} -func (m *mockConn) Write(b []byte) (n int, err error) { - if m.closed { - return 0, errConnClosed - } - - m.writes++ - if m.maxWrites > 0 && m.writes > m.maxWrites { - return 0, errConnTooManyWrites - } - - n = len(b) - m.written = append(m.written, b...) - - if n > 0 && len(m.queuedReplies) > 0 { - m.data = m.queuedReplies[0] - m.queuedReplies = m.queuedReplies[1:] - } - return -} -func (m *mockConn) Close() error { - m.closed = true - return nil -} -func (m *mockConn) LocalAddr() net.Addr { - return m.laddr -} -func (m *mockConn) RemoteAddr() net.Addr { - return m.raddr -} -func (m *mockConn) SetDeadline(t time.Time) error { - return nil -} -func (m *mockConn) SetReadDeadline(t time.Time) error { - return nil -} -func (m *mockConn) SetWriteDeadline(t time.Time) error { - return nil -} - -// make sure mockConn implements the net.Conn interface -var _ net.Conn = new(mockConn) - -func newRWMockConn(sequence uint8) (*mockConn, *mysqlConn) { - conn := new(mockConn) - mc := &mysqlConn{ - buf: newBuffer(conn), - cfg: NewConfig(), - netConn: conn, - closech: make(chan struct{}), - maxAllowedPacket: defaultMaxAllowedPacket, - sequence: sequence, - } - return conn, mc -} - -func TestReadPacketSingleByte(t *testing.T) { - conn := new(mockConn) - mc := &mysqlConn{ - buf: newBuffer(conn), - } - - conn.data = []byte{0x01, 0x00, 0x00, 0x00, 0xff} - conn.maxReads = 1 - packet, err := mc.readPacket() - if err != nil { - t.Fatal(err) - } - if len(packet) != 1 { - t.Fatalf("unexpected packet length: expected %d, got %d", 1, len(packet)) - } - if packet[0] != 0xff { - t.Fatalf("unexpected packet content: expected %x, got %x", 0xff, packet[0]) - } -} - -func TestReadPacketWrongSequenceID(t *testing.T) { - conn := new(mockConn) - mc := &mysqlConn{ - buf: newBuffer(conn), - } - - // too low sequence id - conn.data = []byte{0x01, 0x00, 0x00, 0x00, 0xff} - conn.maxReads = 1 - mc.sequence = 1 - _, err := mc.readPacket() - if err != ErrPktSync { - t.Errorf("expected ErrPktSync, got %v", err) - } - - // reset - conn.reads = 0 - mc.sequence = 0 - mc.buf = newBuffer(conn) - - // too high sequence id - conn.data = []byte{0x01, 0x00, 0x00, 0x42, 0xff} - _, err = mc.readPacket() - if err != ErrPktSyncMul { - t.Errorf("expected ErrPktSyncMul, got %v", err) - } -} - -func TestReadPacketSplit(t *testing.T) { - conn := new(mockConn) - mc := &mysqlConn{ - buf: newBuffer(conn), - } - - data := make([]byte, maxPacketSize*2+4*3) - const pkt2ofs = maxPacketSize + 4 - const pkt3ofs = 2 * (maxPacketSize + 4) - - // case 1: payload has length maxPacketSize - data = data[:pkt2ofs+4] - - // 1st packet has maxPacketSize length and sequence id 0 - // ff ff ff 00 ... - data[0] = 0xff - data[1] = 0xff - data[2] = 0xff - - // mark the payload start and end of 1st packet so that we can check if the - // content was correctly appended - data[4] = 0x11 - data[maxPacketSize+3] = 0x22 - - // 2nd packet has payload length 0 and squence id 1 - // 00 00 00 01 - data[pkt2ofs+3] = 0x01 - - conn.data = data - conn.maxReads = 3 - packet, err := mc.readPacket() - if err != nil { - t.Fatal(err) - } - if len(packet) != maxPacketSize { - t.Fatalf("unexpected packet length: expected %d, got %d", maxPacketSize, len(packet)) - } - if packet[0] != 0x11 { - t.Fatalf("unexpected payload start: expected %x, got %x", 0x11, packet[0]) - } - if packet[maxPacketSize-1] != 0x22 { - t.Fatalf("unexpected payload end: expected %x, got %x", 0x22, packet[maxPacketSize-1]) - } - - // case 2: payload has length which is a multiple of maxPacketSize - data = data[:cap(data)] - - // 2nd packet now has maxPacketSize length - data[pkt2ofs] = 0xff - data[pkt2ofs+1] = 0xff - data[pkt2ofs+2] = 0xff - - // mark the payload start and end of the 2nd packet - data[pkt2ofs+4] = 0x33 - data[pkt2ofs+maxPacketSize+3] = 0x44 - - // 3rd packet has payload length 0 and squence id 2 - // 00 00 00 02 - data[pkt3ofs+3] = 0x02 - - conn.data = data - conn.reads = 0 - conn.maxReads = 5 - mc.sequence = 0 - packet, err = mc.readPacket() - if err != nil { - t.Fatal(err) - } - if len(packet) != 2*maxPacketSize { - t.Fatalf("unexpected packet length: expected %d, got %d", 2*maxPacketSize, len(packet)) - } - if packet[0] != 0x11 { - t.Fatalf("unexpected payload start: expected %x, got %x", 0x11, packet[0]) - } - if packet[2*maxPacketSize-1] != 0x44 { - t.Fatalf("unexpected payload end: expected %x, got %x", 0x44, packet[2*maxPacketSize-1]) - } - - // case 3: payload has a length larger maxPacketSize, which is not an exact - // multiple of it - data = data[:pkt2ofs+4+42] - data[pkt2ofs] = 0x2a - data[pkt2ofs+1] = 0x00 - data[pkt2ofs+2] = 0x00 - data[pkt2ofs+4+41] = 0x44 - - conn.data = data - conn.reads = 0 - conn.maxReads = 4 - mc.sequence = 0 - packet, err = mc.readPacket() - if err != nil { - t.Fatal(err) - } - if len(packet) != maxPacketSize+42 { - t.Fatalf("unexpected packet length: expected %d, got %d", maxPacketSize+42, len(packet)) - } - if packet[0] != 0x11 { - t.Fatalf("unexpected payload start: expected %x, got %x", 0x11, packet[0]) - } - if packet[maxPacketSize+41] != 0x44 { - t.Fatalf("unexpected payload end: expected %x, got %x", 0x44, packet[maxPacketSize+41]) - } -} - -func TestReadPacketFail(t *testing.T) { - conn := new(mockConn) - mc := &mysqlConn{ - buf: newBuffer(conn), - closech: make(chan struct{}), - } - - // illegal empty (stand-alone) packet - conn.data = []byte{0x00, 0x00, 0x00, 0x00} - conn.maxReads = 1 - _, err := mc.readPacket() - if err != ErrInvalidConn { - t.Errorf("expected ErrInvalidConn, got %v", err) - } - - // reset - conn.reads = 0 - mc.sequence = 0 - mc.buf = newBuffer(conn) - - // fail to read header - conn.closed = true - _, err = mc.readPacket() - if err != ErrInvalidConn { - t.Errorf("expected ErrInvalidConn, got %v", err) - } - - // reset - conn.closed = false - conn.reads = 0 - mc.sequence = 0 - mc.buf = newBuffer(conn) - - // fail to read body - conn.maxReads = 1 - _, err = mc.readPacket() - if err != ErrInvalidConn { - t.Errorf("expected ErrInvalidConn, got %v", err) - } -} - -// https://github.com/go-sql-driver/mysql/pull/801 -// not-NUL terminated plugin_name in init packet -func TestRegression801(t *testing.T) { - conn := new(mockConn) - mc := &mysqlConn{ - buf: newBuffer(conn), - cfg: new(Config), - sequence: 42, - closech: make(chan struct{}), - } - - conn.data = []byte{72, 0, 0, 42, 10, 53, 46, 53, 46, 56, 0, 165, 0, 0, 0, - 60, 70, 63, 58, 68, 104, 34, 97, 0, 223, 247, 33, 2, 0, 15, 128, 21, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 120, 114, 47, 85, 75, 109, 99, 51, 77, - 50, 64, 0, 109, 121, 115, 113, 108, 95, 110, 97, 116, 105, 118, 101, 95, - 112, 97, 115, 115, 119, 111, 114, 100} - conn.maxReads = 1 - - authData, pluginName, err := mc.readHandshakePacket() - if err != nil { - t.Fatalf("got error: %v", err) - } - - if pluginName != "mysql_native_password" { - t.Errorf("expected plugin name 'mysql_native_password', got '%s'", pluginName) - } - - expectedAuthData := []byte{60, 70, 63, 58, 68, 104, 34, 97, 98, 120, 114, - 47, 85, 75, 109, 99, 51, 77, 50, 64} - if !bytes.Equal(authData, expectedAuthData) { - t.Errorf("expected authData '%v', got '%v'", expectedAuthData, authData) - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/rows.go b/vendor/github.com/go-sql-driver/mysql/rows.go index 888bdb5f..d3b1e282 100644 --- a/vendor/github.com/go-sql-driver/mysql/rows.go +++ b/vendor/github.com/go-sql-driver/mysql/rows.go @@ -111,13 +111,6 @@ func (rows *mysqlRows) Close() (err error) { return err } - // flip the buffer for this connection if we need to drain it. - // note that for a successful query (i.e. one where rows.next() - // has been called until it returns false), `rows.mc` will be nil - // by the time the user calls `(*Rows).Close`, so we won't reach this - // see: https://github.com/golang/go/commit/651ddbdb5056ded455f47f9c494c67b389622a47 - mc.buf.flip() - // Remove unread packets from stream if !rows.rs.done { err = mc.readUntilEOF() diff --git a/vendor/github.com/go-sql-driver/mysql/statement.go b/vendor/github.com/go-sql-driver/mysql/statement.go index f7e37093..ce7fe4cd 100644 --- a/vendor/github.com/go-sql-driver/mysql/statement.go +++ b/vendor/github.com/go-sql-driver/mysql/statement.go @@ -13,6 +13,7 @@ import ( "fmt" "io" "reflect" + "strconv" ) type mysqlStmt struct { @@ -163,8 +164,14 @@ func (c converter) ConvertValue(v interface{}) (driver.Value, error) { } case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return rv.Int(), nil - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return rv.Uint(), nil + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32: + return int64(rv.Uint()), nil + case reflect.Uint64: + u64 := rv.Uint() + if u64 >= 1<<63 { + return strconv.FormatUint(u64, 10), nil + } + return int64(u64), nil case reflect.Float32, reflect.Float64: return rv.Float(), nil case reflect.Bool: diff --git a/vendor/github.com/go-sql-driver/mysql/statement_test.go b/vendor/github.com/go-sql-driver/mysql/statement_test.go deleted file mode 100644 index 4b9914f8..00000000 --- a/vendor/github.com/go-sql-driver/mysql/statement_test.go +++ /dev/null @@ -1,126 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "bytes" - "testing" -) - -func TestConvertDerivedString(t *testing.T) { - type derived string - - output, err := converter{}.ConvertValue(derived("value")) - if err != nil { - t.Fatal("Derived string type not convertible", err) - } - - if output != "value" { - t.Fatalf("Derived string type not converted, got %#v %T", output, output) - } -} - -func TestConvertDerivedByteSlice(t *testing.T) { - type derived []uint8 - - output, err := converter{}.ConvertValue(derived("value")) - if err != nil { - t.Fatal("Byte slice not convertible", err) - } - - if bytes.Compare(output.([]byte), []byte("value")) != 0 { - t.Fatalf("Byte slice not converted, got %#v %T", output, output) - } -} - -func TestConvertDerivedUnsupportedSlice(t *testing.T) { - type derived []int - - _, err := converter{}.ConvertValue(derived{1}) - if err == nil || err.Error() != "unsupported type mysql.derived, a slice of int" { - t.Fatal("Unexpected error", err) - } -} - -func TestConvertDerivedBool(t *testing.T) { - type derived bool - - output, err := converter{}.ConvertValue(derived(true)) - if err != nil { - t.Fatal("Derived bool type not convertible", err) - } - - if output != true { - t.Fatalf("Derived bool type not converted, got %#v %T", output, output) - } -} - -func TestConvertPointer(t *testing.T) { - str := "value" - - output, err := converter{}.ConvertValue(&str) - if err != nil { - t.Fatal("Pointer type not convertible", err) - } - - if output != "value" { - t.Fatalf("Pointer type not converted, got %#v %T", output, output) - } -} - -func TestConvertSignedIntegers(t *testing.T) { - values := []interface{}{ - int8(-42), - int16(-42), - int32(-42), - int64(-42), - int(-42), - } - - for _, value := range values { - output, err := converter{}.ConvertValue(value) - if err != nil { - t.Fatalf("%T type not convertible %s", value, err) - } - - if output != int64(-42) { - t.Fatalf("%T type not converted, got %#v %T", value, output, output) - } - } -} - -func TestConvertUnsignedIntegers(t *testing.T) { - values := []interface{}{ - uint8(42), - uint16(42), - uint32(42), - uint64(42), - uint(42), - } - - for _, value := range values { - output, err := converter{}.ConvertValue(value) - if err != nil { - t.Fatalf("%T type not convertible %s", value, err) - } - - if output != uint64(42) { - t.Fatalf("%T type not converted, got %#v %T", value, output, output) - } - } - - output, err := converter{}.ConvertValue(^uint64(0)) - if err != nil { - t.Fatal("uint64 high-bit not convertible", err) - } - - if output != ^uint64(0) { - t.Fatalf("uint64 high-bit converted, got %#v %T", output, output) - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/utils.go b/vendor/github.com/go-sql-driver/mysql/utils.go index cfa10e9c..ca5d47d8 100644 --- a/vendor/github.com/go-sql-driver/mysql/utils.go +++ b/vendor/github.com/go-sql-driver/mysql/utils.go @@ -10,10 +10,8 @@ package mysql import ( "crypto/tls" - "database/sql" "database/sql/driver" "encoding/binary" - "errors" "fmt" "io" "strconv" @@ -56,7 +54,7 @@ var ( // db, err := sql.Open("mysql", "user@tcp(localhost:3306)/test?tls=custom") // func RegisterTLSConfig(key string, config *tls.Config) error { - if _, isBool := readBool(key); isBool || strings.ToLower(key) == "skip-verify" || strings.ToLower(key) == "preferred" { + if _, isBool := readBool(key); isBool || strings.ToLower(key) == "skip-verify" { return fmt.Errorf("key '%s' is reserved", key) } @@ -82,7 +80,7 @@ func DeregisterTLSConfig(key string) { func getTLSConfigClone(key string) (config *tls.Config) { tlsConfigLock.RLock() if v, ok := tlsConfigRegistry[key]; ok { - config = v.Clone() + config = cloneTLSConfig(v) } tlsConfigLock.RUnlock() return @@ -684,7 +682,7 @@ type atomicBool struct { value uint32 } -// IsSet returns whether the current boolean value is true +// IsSet returns wether the current boolean value is true func (ab *atomicBool) IsSet() bool { return atomic.LoadUint32(&ab.value) > 0 } @@ -698,7 +696,7 @@ func (ab *atomicBool) Set(value bool) { } } -// TrySet sets the value of the bool and returns whether the value changed +// TrySet sets the value of the bool and returns wether the value changed func (ab *atomicBool) TrySet(value bool) bool { if value { return atomic.SwapUint32(&ab.value, 1) == 0 @@ -726,30 +724,3 @@ func (ae *atomicError) Value() error { } return nil } - -func namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) { - dargs := make([]driver.Value, len(named)) - for n, param := range named { - if len(param.Name) > 0 { - // TODO: support the use of Named Parameters #561 - return nil, errors.New("mysql: driver does not support the use of Named Parameters") - } - dargs[n] = param.Value - } - return dargs, nil -} - -func mapIsolationLevel(level driver.IsolationLevel) (string, error) { - switch sql.IsolationLevel(level) { - case sql.LevelRepeatableRead: - return "REPEATABLE READ", nil - case sql.LevelReadCommitted: - return "READ COMMITTED", nil - case sql.LevelReadUncommitted: - return "READ UNCOMMITTED", nil - case sql.LevelSerializable: - return "SERIALIZABLE", nil - default: - return "", fmt.Errorf("mysql: unsupported isolation level: %v", level) - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/utils_go17.go b/vendor/github.com/go-sql-driver/mysql/utils_go17.go new file mode 100644 index 00000000..f5956345 --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/utils_go17.go @@ -0,0 +1,40 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build go1.7 +// +build !go1.8 + +package mysql + +import "crypto/tls" + +func cloneTLSConfig(c *tls.Config) *tls.Config { + return &tls.Config{ + Rand: c.Rand, + Time: c.Time, + Certificates: c.Certificates, + NameToCertificate: c.NameToCertificate, + GetCertificate: c.GetCertificate, + RootCAs: c.RootCAs, + NextProtos: c.NextProtos, + ServerName: c.ServerName, + ClientAuth: c.ClientAuth, + ClientCAs: c.ClientCAs, + InsecureSkipVerify: c.InsecureSkipVerify, + CipherSuites: c.CipherSuites, + PreferServerCipherSuites: c.PreferServerCipherSuites, + SessionTicketsDisabled: c.SessionTicketsDisabled, + SessionTicketKey: c.SessionTicketKey, + ClientSessionCache: c.ClientSessionCache, + MinVersion: c.MinVersion, + MaxVersion: c.MaxVersion, + CurvePreferences: c.CurvePreferences, + DynamicRecordSizingDisabled: c.DynamicRecordSizingDisabled, + Renegotiation: c.Renegotiation, + } +} diff --git a/vendor/github.com/go-sql-driver/mysql/utils_go18.go b/vendor/github.com/go-sql-driver/mysql/utils_go18.go new file mode 100644 index 00000000..c35c2a6a --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/utils_go18.go @@ -0,0 +1,50 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build go1.8 + +package mysql + +import ( + "crypto/tls" + "database/sql" + "database/sql/driver" + "errors" + "fmt" +) + +func cloneTLSConfig(c *tls.Config) *tls.Config { + return c.Clone() +} + +func namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) { + dargs := make([]driver.Value, len(named)) + for n, param := range named { + if len(param.Name) > 0 { + // TODO: support the use of Named Parameters #561 + return nil, errors.New("mysql: driver does not support the use of Named Parameters") + } + dargs[n] = param.Value + } + return dargs, nil +} + +func mapIsolationLevel(level driver.IsolationLevel) (string, error) { + switch sql.IsolationLevel(level) { + case sql.LevelRepeatableRead: + return "REPEATABLE READ", nil + case sql.LevelReadCommitted: + return "READ COMMITTED", nil + case sql.LevelReadUncommitted: + return "READ UNCOMMITTED", nil + case sql.LevelSerializable: + return "SERIALIZABLE", nil + default: + return "", fmt.Errorf("mysql: unsupported isolation level: %v", level) + } +} diff --git a/vendor/github.com/go-sql-driver/mysql/utils_test.go b/vendor/github.com/go-sql-driver/mysql/utils_test.go deleted file mode 100644 index 8951a7a8..00000000 --- a/vendor/github.com/go-sql-driver/mysql/utils_test.go +++ /dev/null @@ -1,334 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "bytes" - "database/sql" - "database/sql/driver" - "encoding/binary" - "testing" - "time" -) - -func TestScanNullTime(t *testing.T) { - var scanTests = []struct { - in interface{} - error bool - valid bool - time time.Time - }{ - {tDate, false, true, tDate}, - {sDate, false, true, tDate}, - {[]byte(sDate), false, true, tDate}, - {tDateTime, false, true, tDateTime}, - {sDateTime, false, true, tDateTime}, - {[]byte(sDateTime), false, true, tDateTime}, - {tDate0, false, true, tDate0}, - {sDate0, false, true, tDate0}, - {[]byte(sDate0), false, true, tDate0}, - {sDateTime0, false, true, tDate0}, - {[]byte(sDateTime0), false, true, tDate0}, - {"", true, false, tDate0}, - {"1234", true, false, tDate0}, - {0, true, false, tDate0}, - } - - var nt = NullTime{} - var err error - - for _, tst := range scanTests { - err = nt.Scan(tst.in) - if (err != nil) != tst.error { - t.Errorf("%v: expected error status %t, got %t", tst.in, tst.error, (err != nil)) - } - if nt.Valid != tst.valid { - t.Errorf("%v: expected valid status %t, got %t", tst.in, tst.valid, nt.Valid) - } - if nt.Time != tst.time { - t.Errorf("%v: expected time %v, got %v", tst.in, tst.time, nt.Time) - } - } -} - -func TestLengthEncodedInteger(t *testing.T) { - var integerTests = []struct { - num uint64 - encoded []byte - }{ - {0x0000000000000000, []byte{0x00}}, - {0x0000000000000012, []byte{0x12}}, - {0x00000000000000fa, []byte{0xfa}}, - {0x0000000000000100, []byte{0xfc, 0x00, 0x01}}, - {0x0000000000001234, []byte{0xfc, 0x34, 0x12}}, - {0x000000000000ffff, []byte{0xfc, 0xff, 0xff}}, - {0x0000000000010000, []byte{0xfd, 0x00, 0x00, 0x01}}, - {0x0000000000123456, []byte{0xfd, 0x56, 0x34, 0x12}}, - {0x0000000000ffffff, []byte{0xfd, 0xff, 0xff, 0xff}}, - {0x0000000001000000, []byte{0xfe, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}}, - {0x123456789abcdef0, []byte{0xfe, 0xf0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12}}, - {0xffffffffffffffff, []byte{0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, - } - - for _, tst := range integerTests { - num, isNull, numLen := readLengthEncodedInteger(tst.encoded) - if isNull { - t.Errorf("%x: expected %d, got NULL", tst.encoded, tst.num) - } - if num != tst.num { - t.Errorf("%x: expected %d, got %d", tst.encoded, tst.num, num) - } - if numLen != len(tst.encoded) { - t.Errorf("%x: expected size %d, got %d", tst.encoded, len(tst.encoded), numLen) - } - encoded := appendLengthEncodedInteger(nil, num) - if !bytes.Equal(encoded, tst.encoded) { - t.Errorf("%v: expected %x, got %x", num, tst.encoded, encoded) - } - } -} - -func TestFormatBinaryDateTime(t *testing.T) { - rawDate := [11]byte{} - binary.LittleEndian.PutUint16(rawDate[:2], 1978) // years - rawDate[2] = 12 // months - rawDate[3] = 30 // days - rawDate[4] = 15 // hours - rawDate[5] = 46 // minutes - rawDate[6] = 23 // seconds - binary.LittleEndian.PutUint32(rawDate[7:], 987654) // microseconds - expect := func(expected string, inlen, outlen uint8) { - actual, _ := formatBinaryDateTime(rawDate[:inlen], outlen) - bytes, ok := actual.([]byte) - if !ok { - t.Errorf("formatBinaryDateTime must return []byte, was %T", actual) - } - if string(bytes) != expected { - t.Errorf( - "expected %q, got %q for length in %d, out %d", - expected, actual, inlen, outlen, - ) - } - } - expect("0000-00-00", 0, 10) - expect("0000-00-00 00:00:00", 0, 19) - expect("1978-12-30", 4, 10) - expect("1978-12-30 15:46:23", 7, 19) - expect("1978-12-30 15:46:23.987654", 11, 26) -} - -func TestFormatBinaryTime(t *testing.T) { - expect := func(expected string, src []byte, outlen uint8) { - actual, _ := formatBinaryTime(src, outlen) - bytes, ok := actual.([]byte) - if !ok { - t.Errorf("formatBinaryDateTime must return []byte, was %T", actual) - } - if string(bytes) != expected { - t.Errorf( - "expected %q, got %q for src=%q and outlen=%d", - expected, actual, src, outlen) - } - } - - // binary format: - // sign (0: positive, 1: negative), days(4), hours, minutes, seconds, micro(4) - - // Zeros - expect("00:00:00", []byte{}, 8) - expect("00:00:00.0", []byte{}, 10) - expect("00:00:00.000000", []byte{}, 15) - - // Without micro(4) - expect("12:34:56", []byte{0, 0, 0, 0, 0, 12, 34, 56}, 8) - expect("-12:34:56", []byte{1, 0, 0, 0, 0, 12, 34, 56}, 8) - expect("12:34:56.00", []byte{0, 0, 0, 0, 0, 12, 34, 56}, 11) - expect("24:34:56", []byte{0, 1, 0, 0, 0, 0, 34, 56}, 8) - expect("-99:34:56", []byte{1, 4, 0, 0, 0, 3, 34, 56}, 8) - expect("103079215103:34:56", []byte{0, 255, 255, 255, 255, 23, 34, 56}, 8) - - // With micro(4) - expect("12:34:56.00", []byte{0, 0, 0, 0, 0, 12, 34, 56, 99, 0, 0, 0}, 11) - expect("12:34:56.000099", []byte{0, 0, 0, 0, 0, 12, 34, 56, 99, 0, 0, 0}, 15) -} - -func TestEscapeBackslash(t *testing.T) { - expect := func(expected, value string) { - actual := string(escapeBytesBackslash([]byte{}, []byte(value))) - if actual != expected { - t.Errorf( - "expected %s, got %s", - expected, actual, - ) - } - - actual = string(escapeStringBackslash([]byte{}, value)) - if actual != expected { - t.Errorf( - "expected %s, got %s", - expected, actual, - ) - } - } - - expect("foo\\0bar", "foo\x00bar") - expect("foo\\nbar", "foo\nbar") - expect("foo\\rbar", "foo\rbar") - expect("foo\\Zbar", "foo\x1abar") - expect("foo\\\"bar", "foo\"bar") - expect("foo\\\\bar", "foo\\bar") - expect("foo\\'bar", "foo'bar") -} - -func TestEscapeQuotes(t *testing.T) { - expect := func(expected, value string) { - actual := string(escapeBytesQuotes([]byte{}, []byte(value))) - if actual != expected { - t.Errorf( - "expected %s, got %s", - expected, actual, - ) - } - - actual = string(escapeStringQuotes([]byte{}, value)) - if actual != expected { - t.Errorf( - "expected %s, got %s", - expected, actual, - ) - } - } - - expect("foo\x00bar", "foo\x00bar") // not affected - expect("foo\nbar", "foo\nbar") // not affected - expect("foo\rbar", "foo\rbar") // not affected - expect("foo\x1abar", "foo\x1abar") // not affected - expect("foo''bar", "foo'bar") // affected - expect("foo\"bar", "foo\"bar") // not affected -} - -func TestAtomicBool(t *testing.T) { - var ab atomicBool - if ab.IsSet() { - t.Fatal("Expected value to be false") - } - - ab.Set(true) - if ab.value != 1 { - t.Fatal("Set(true) did not set value to 1") - } - if !ab.IsSet() { - t.Fatal("Expected value to be true") - } - - ab.Set(true) - if !ab.IsSet() { - t.Fatal("Expected value to be true") - } - - ab.Set(false) - if ab.value != 0 { - t.Fatal("Set(false) did not set value to 0") - } - if ab.IsSet() { - t.Fatal("Expected value to be false") - } - - ab.Set(false) - if ab.IsSet() { - t.Fatal("Expected value to be false") - } - if ab.TrySet(false) { - t.Fatal("Expected TrySet(false) to fail") - } - if !ab.TrySet(true) { - t.Fatal("Expected TrySet(true) to succeed") - } - if !ab.IsSet() { - t.Fatal("Expected value to be true") - } - - ab.Set(true) - if !ab.IsSet() { - t.Fatal("Expected value to be true") - } - if ab.TrySet(true) { - t.Fatal("Expected TrySet(true) to fail") - } - if !ab.TrySet(false) { - t.Fatal("Expected TrySet(false) to succeed") - } - if ab.IsSet() { - t.Fatal("Expected value to be false") - } - - ab._noCopy.Lock() // we've "tested" it ¯\_(ツ)_/¯ -} - -func TestAtomicError(t *testing.T) { - var ae atomicError - if ae.Value() != nil { - t.Fatal("Expected value to be nil") - } - - ae.Set(ErrMalformPkt) - if v := ae.Value(); v != ErrMalformPkt { - if v == nil { - t.Fatal("Value is still nil") - } - t.Fatal("Error did not match") - } - ae.Set(ErrPktSync) - if ae.Value() == ErrMalformPkt { - t.Fatal("Error still matches old error") - } - if v := ae.Value(); v != ErrPktSync { - t.Fatal("Error did not match") - } -} - -func TestIsolationLevelMapping(t *testing.T) { - data := []struct { - level driver.IsolationLevel - expected string - }{ - { - level: driver.IsolationLevel(sql.LevelReadCommitted), - expected: "READ COMMITTED", - }, - { - level: driver.IsolationLevel(sql.LevelRepeatableRead), - expected: "REPEATABLE READ", - }, - { - level: driver.IsolationLevel(sql.LevelReadUncommitted), - expected: "READ UNCOMMITTED", - }, - { - level: driver.IsolationLevel(sql.LevelSerializable), - expected: "SERIALIZABLE", - }, - } - - for i, td := range data { - if actual, err := mapIsolationLevel(td.level); actual != td.expected || err != nil { - t.Fatal(i, td.expected, actual, err) - } - } - - // check unsupported mapping - expectedErr := "mysql: unsupported isolation level: 7" - actual, err := mapIsolationLevel(driver.IsolationLevel(sql.LevelLinearizable)) - if actual != "" || err == nil { - t.Fatal("Expected error on unsupported isolation level") - } - if err.Error() != expectedErr { - t.Fatalf("Expected error to be %q, got %q", expectedErr, err) - } -} diff --git a/vendor/github.com/golang/glog/LICENSE b/vendor/github.com/golang/glog/LICENSE new file mode 100644 index 00000000..37ec93a1 --- /dev/null +++ b/vendor/github.com/golang/glog/LICENSE @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/golang/glog/README b/vendor/github.com/golang/glog/README new file mode 100644 index 00000000..387b4eb6 --- /dev/null +++ b/vendor/github.com/golang/glog/README @@ -0,0 +1,44 @@ +glog +==== + +Leveled execution logs for Go. + +This is an efficient pure Go implementation of leveled logs in the +manner of the open source C++ package + https://github.com/google/glog + +By binding methods to booleans it is possible to use the log package +without paying the expense of evaluating the arguments to the log. +Through the -vmodule flag, the package also provides fine-grained +control over logging at the file level. + +The comment from glog.go introduces the ideas: + + Package glog implements logging analogous to the Google-internal + C++ INFO/ERROR/V setup. It provides functions Info, Warning, + Error, Fatal, plus formatting variants such as Infof. It + also provides V-style logging controlled by the -v and + -vmodule=file=2 flags. + + Basic examples: + + glog.Info("Prepare to repel boarders") + + glog.Fatalf("Initialization failed: %s", err) + + See the documentation for the V function for an explanation + of these examples: + + if glog.V(2) { + glog.Info("Starting transaction...") + } + + glog.V(2).Infoln("Processed", nItems, "elements") + + +The repository contains an open source version of the log package +used inside Google. The master copy of the source lives inside +Google, not here. The code in this repo is for export only and is not itself +under development. Feature requests will be ignored. + +Send bug reports to golang-nuts@googlegroups.com. diff --git a/vendor/github.com/golang/glog/glog.go b/vendor/github.com/golang/glog/glog.go new file mode 100644 index 00000000..54bd7afd --- /dev/null +++ b/vendor/github.com/golang/glog/glog.go @@ -0,0 +1,1180 @@ +// Go support for leveled logs, analogous to https://code.google.com/p/google-glog/ +// +// Copyright 2013 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package glog implements logging analogous to the Google-internal C++ INFO/ERROR/V setup. +// It provides functions Info, Warning, Error, Fatal, plus formatting variants such as +// Infof. It also provides V-style logging controlled by the -v and -vmodule=file=2 flags. +// +// Basic examples: +// +// glog.Info("Prepare to repel boarders") +// +// glog.Fatalf("Initialization failed: %s", err) +// +// See the documentation for the V function for an explanation of these examples: +// +// if glog.V(2) { +// glog.Info("Starting transaction...") +// } +// +// glog.V(2).Infoln("Processed", nItems, "elements") +// +// Log output is buffered and written periodically using Flush. Programs +// should call Flush before exiting to guarantee all log output is written. +// +// By default, all log statements write to files in a temporary directory. +// This package provides several flags that modify this behavior. +// As a result, flag.Parse must be called before any logging is done. +// +// -logtostderr=false +// Logs are written to standard error instead of to files. +// -alsologtostderr=false +// Logs are written to standard error as well as to files. +// -stderrthreshold=ERROR +// Log events at or above this severity are logged to standard +// error as well as to files. +// -log_dir="" +// Log files will be written to this directory instead of the +// default temporary directory. +// +// Other flags provide aids to debugging. +// +// -log_backtrace_at="" +// When set to a file and line number holding a logging statement, +// such as +// -log_backtrace_at=gopherflakes.go:234 +// a stack trace will be written to the Info log whenever execution +// hits that statement. (Unlike with -vmodule, the ".go" must be +// present.) +// -v=0 +// Enable V-leveled logging at the specified level. +// -vmodule="" +// The syntax of the argument is a comma-separated list of pattern=N, +// where pattern is a literal file name (minus the ".go" suffix) or +// "glob" pattern and N is a V level. For instance, +// -vmodule=gopher*=3 +// sets the V level to 3 in all Go files whose names begin "gopher". +// +package glog + +import ( + "bufio" + "bytes" + "errors" + "flag" + "fmt" + "io" + stdLog "log" + "os" + "path/filepath" + "runtime" + "strconv" + "strings" + "sync" + "sync/atomic" + "time" +) + +// severity identifies the sort of log: info, warning etc. It also implements +// the flag.Value interface. The -stderrthreshold flag is of type severity and +// should be modified only through the flag.Value interface. The values match +// the corresponding constants in C++. +type severity int32 // sync/atomic int32 + +// These constants identify the log levels in order of increasing severity. +// A message written to a high-severity log file is also written to each +// lower-severity log file. +const ( + infoLog severity = iota + warningLog + errorLog + fatalLog + numSeverity = 4 +) + +const severityChar = "IWEF" + +var severityName = []string{ + infoLog: "INFO", + warningLog: "WARNING", + errorLog: "ERROR", + fatalLog: "FATAL", +} + +// get returns the value of the severity. +func (s *severity) get() severity { + return severity(atomic.LoadInt32((*int32)(s))) +} + +// set sets the value of the severity. +func (s *severity) set(val severity) { + atomic.StoreInt32((*int32)(s), int32(val)) +} + +// String is part of the flag.Value interface. +func (s *severity) String() string { + return strconv.FormatInt(int64(*s), 10) +} + +// Get is part of the flag.Value interface. +func (s *severity) Get() interface{} { + return *s +} + +// Set is part of the flag.Value interface. +func (s *severity) Set(value string) error { + var threshold severity + // Is it a known name? + if v, ok := severityByName(value); ok { + threshold = v + } else { + v, err := strconv.Atoi(value) + if err != nil { + return err + } + threshold = severity(v) + } + logging.stderrThreshold.set(threshold) + return nil +} + +func severityByName(s string) (severity, bool) { + s = strings.ToUpper(s) + for i, name := range severityName { + if name == s { + return severity(i), true + } + } + return 0, false +} + +// OutputStats tracks the number of output lines and bytes written. +type OutputStats struct { + lines int64 + bytes int64 +} + +// Lines returns the number of lines written. +func (s *OutputStats) Lines() int64 { + return atomic.LoadInt64(&s.lines) +} + +// Bytes returns the number of bytes written. +func (s *OutputStats) Bytes() int64 { + return atomic.LoadInt64(&s.bytes) +} + +// Stats tracks the number of lines of output and number of bytes +// per severity level. Values must be read with atomic.LoadInt64. +var Stats struct { + Info, Warning, Error OutputStats +} + +var severityStats = [numSeverity]*OutputStats{ + infoLog: &Stats.Info, + warningLog: &Stats.Warning, + errorLog: &Stats.Error, +} + +// Level is exported because it appears in the arguments to V and is +// the type of the v flag, which can be set programmatically. +// It's a distinct type because we want to discriminate it from logType. +// Variables of type level are only changed under logging.mu. +// The -v flag is read only with atomic ops, so the state of the logging +// module is consistent. + +// Level is treated as a sync/atomic int32. + +// Level specifies a level of verbosity for V logs. *Level implements +// flag.Value; the -v flag is of type Level and should be modified +// only through the flag.Value interface. +type Level int32 + +// get returns the value of the Level. +func (l *Level) get() Level { + return Level(atomic.LoadInt32((*int32)(l))) +} + +// set sets the value of the Level. +func (l *Level) set(val Level) { + atomic.StoreInt32((*int32)(l), int32(val)) +} + +// String is part of the flag.Value interface. +func (l *Level) String() string { + return strconv.FormatInt(int64(*l), 10) +} + +// Get is part of the flag.Value interface. +func (l *Level) Get() interface{} { + return *l +} + +// Set is part of the flag.Value interface. +func (l *Level) Set(value string) error { + v, err := strconv.Atoi(value) + if err != nil { + return err + } + logging.mu.Lock() + defer logging.mu.Unlock() + logging.setVState(Level(v), logging.vmodule.filter, false) + return nil +} + +// moduleSpec represents the setting of the -vmodule flag. +type moduleSpec struct { + filter []modulePat +} + +// modulePat contains a filter for the -vmodule flag. +// It holds a verbosity level and a file pattern to match. +type modulePat struct { + pattern string + literal bool // The pattern is a literal string + level Level +} + +// match reports whether the file matches the pattern. It uses a string +// comparison if the pattern contains no metacharacters. +func (m *modulePat) match(file string) bool { + if m.literal { + return file == m.pattern + } + match, _ := filepath.Match(m.pattern, file) + return match +} + +func (m *moduleSpec) String() string { + // Lock because the type is not atomic. TODO: clean this up. + logging.mu.Lock() + defer logging.mu.Unlock() + var b bytes.Buffer + for i, f := range m.filter { + if i > 0 { + b.WriteRune(',') + } + fmt.Fprintf(&b, "%s=%d", f.pattern, f.level) + } + return b.String() +} + +// Get is part of the (Go 1.2) flag.Getter interface. It always returns nil for this flag type since the +// struct is not exported. +func (m *moduleSpec) Get() interface{} { + return nil +} + +var errVmoduleSyntax = errors.New("syntax error: expect comma-separated list of filename=N") + +// Syntax: -vmodule=recordio=2,file=1,gfs*=3 +func (m *moduleSpec) Set(value string) error { + var filter []modulePat + for _, pat := range strings.Split(value, ",") { + if len(pat) == 0 { + // Empty strings such as from a trailing comma can be ignored. + continue + } + patLev := strings.Split(pat, "=") + if len(patLev) != 2 || len(patLev[0]) == 0 || len(patLev[1]) == 0 { + return errVmoduleSyntax + } + pattern := patLev[0] + v, err := strconv.Atoi(patLev[1]) + if err != nil { + return errors.New("syntax error: expect comma-separated list of filename=N") + } + if v < 0 { + return errors.New("negative value for vmodule level") + } + if v == 0 { + continue // Ignore. It's harmless but no point in paying the overhead. + } + // TODO: check syntax of filter? + filter = append(filter, modulePat{pattern, isLiteral(pattern), Level(v)}) + } + logging.mu.Lock() + defer logging.mu.Unlock() + logging.setVState(logging.verbosity, filter, true) + return nil +} + +// isLiteral reports whether the pattern is a literal string, that is, has no metacharacters +// that require filepath.Match to be called to match the pattern. +func isLiteral(pattern string) bool { + return !strings.ContainsAny(pattern, `\*?[]`) +} + +// traceLocation represents the setting of the -log_backtrace_at flag. +type traceLocation struct { + file string + line int +} + +// isSet reports whether the trace location has been specified. +// logging.mu is held. +func (t *traceLocation) isSet() bool { + return t.line > 0 +} + +// match reports whether the specified file and line matches the trace location. +// The argument file name is the full path, not the basename specified in the flag. +// logging.mu is held. +func (t *traceLocation) match(file string, line int) bool { + if t.line != line { + return false + } + if i := strings.LastIndex(file, "/"); i >= 0 { + file = file[i+1:] + } + return t.file == file +} + +func (t *traceLocation) String() string { + // Lock because the type is not atomic. TODO: clean this up. + logging.mu.Lock() + defer logging.mu.Unlock() + return fmt.Sprintf("%s:%d", t.file, t.line) +} + +// Get is part of the (Go 1.2) flag.Getter interface. It always returns nil for this flag type since the +// struct is not exported +func (t *traceLocation) Get() interface{} { + return nil +} + +var errTraceSyntax = errors.New("syntax error: expect file.go:234") + +// Syntax: -log_backtrace_at=gopherflakes.go:234 +// Note that unlike vmodule the file extension is included here. +func (t *traceLocation) Set(value string) error { + if value == "" { + // Unset. + t.line = 0 + t.file = "" + } + fields := strings.Split(value, ":") + if len(fields) != 2 { + return errTraceSyntax + } + file, line := fields[0], fields[1] + if !strings.Contains(file, ".") { + return errTraceSyntax + } + v, err := strconv.Atoi(line) + if err != nil { + return errTraceSyntax + } + if v <= 0 { + return errors.New("negative or zero value for level") + } + logging.mu.Lock() + defer logging.mu.Unlock() + t.line = v + t.file = file + return nil +} + +// flushSyncWriter is the interface satisfied by logging destinations. +type flushSyncWriter interface { + Flush() error + Sync() error + io.Writer +} + +func init() { + flag.BoolVar(&logging.toStderr, "logtostderr", false, "log to standard error instead of files") + flag.BoolVar(&logging.alsoToStderr, "alsologtostderr", false, "log to standard error as well as files") + flag.Var(&logging.verbosity, "v", "log level for V logs") + flag.Var(&logging.stderrThreshold, "stderrthreshold", "logs at or above this threshold go to stderr") + flag.Var(&logging.vmodule, "vmodule", "comma-separated list of pattern=N settings for file-filtered logging") + flag.Var(&logging.traceLocation, "log_backtrace_at", "when logging hits line file:N, emit a stack trace") + + // Default stderrThreshold is ERROR. + logging.stderrThreshold = errorLog + + logging.setVState(0, nil, false) + go logging.flushDaemon() +} + +// Flush flushes all pending log I/O. +func Flush() { + logging.lockAndFlushAll() +} + +// loggingT collects all the global state of the logging setup. +type loggingT struct { + // Boolean flags. Not handled atomically because the flag.Value interface + // does not let us avoid the =true, and that shorthand is necessary for + // compatibility. TODO: does this matter enough to fix? Seems unlikely. + toStderr bool // The -logtostderr flag. + alsoToStderr bool // The -alsologtostderr flag. + + // Level flag. Handled atomically. + stderrThreshold severity // The -stderrthreshold flag. + + // freeList is a list of byte buffers, maintained under freeListMu. + freeList *buffer + // freeListMu maintains the free list. It is separate from the main mutex + // so buffers can be grabbed and printed to without holding the main lock, + // for better parallelization. + freeListMu sync.Mutex + + // mu protects the remaining elements of this structure and is + // used to synchronize logging. + mu sync.Mutex + // file holds writer for each of the log types. + file [numSeverity]flushSyncWriter + // pcs is used in V to avoid an allocation when computing the caller's PC. + pcs [1]uintptr + // vmap is a cache of the V Level for each V() call site, identified by PC. + // It is wiped whenever the vmodule flag changes state. + vmap map[uintptr]Level + // filterLength stores the length of the vmodule filter chain. If greater + // than zero, it means vmodule is enabled. It may be read safely + // using sync.LoadInt32, but is only modified under mu. + filterLength int32 + // traceLocation is the state of the -log_backtrace_at flag. + traceLocation traceLocation + // These flags are modified only under lock, although verbosity may be fetched + // safely using atomic.LoadInt32. + vmodule moduleSpec // The state of the -vmodule flag. + verbosity Level // V logging level, the value of the -v flag/ +} + +// buffer holds a byte Buffer for reuse. The zero value is ready for use. +type buffer struct { + bytes.Buffer + tmp [64]byte // temporary byte array for creating headers. + next *buffer +} + +var logging loggingT + +// setVState sets a consistent state for V logging. +// l.mu is held. +func (l *loggingT) setVState(verbosity Level, filter []modulePat, setFilter bool) { + // Turn verbosity off so V will not fire while we are in transition. + logging.verbosity.set(0) + // Ditto for filter length. + atomic.StoreInt32(&logging.filterLength, 0) + + // Set the new filters and wipe the pc->Level map if the filter has changed. + if setFilter { + logging.vmodule.filter = filter + logging.vmap = make(map[uintptr]Level) + } + + // Things are consistent now, so enable filtering and verbosity. + // They are enabled in order opposite to that in V. + atomic.StoreInt32(&logging.filterLength, int32(len(filter))) + logging.verbosity.set(verbosity) +} + +// getBuffer returns a new, ready-to-use buffer. +func (l *loggingT) getBuffer() *buffer { + l.freeListMu.Lock() + b := l.freeList + if b != nil { + l.freeList = b.next + } + l.freeListMu.Unlock() + if b == nil { + b = new(buffer) + } else { + b.next = nil + b.Reset() + } + return b +} + +// putBuffer returns a buffer to the free list. +func (l *loggingT) putBuffer(b *buffer) { + if b.Len() >= 256 { + // Let big buffers die a natural death. + return + } + l.freeListMu.Lock() + b.next = l.freeList + l.freeList = b + l.freeListMu.Unlock() +} + +var timeNow = time.Now // Stubbed out for testing. + +/* +header formats a log header as defined by the C++ implementation. +It returns a buffer containing the formatted header and the user's file and line number. +The depth specifies how many stack frames above lives the source line to be identified in the log message. + +Log lines have this form: + Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg... +where the fields are defined as follows: + L A single character, representing the log level (eg 'I' for INFO) + mm The month (zero padded; ie May is '05') + dd The day (zero padded) + hh:mm:ss.uuuuuu Time in hours, minutes and fractional seconds + threadid The space-padded thread ID as returned by GetTID() + file The file name + line The line number + msg The user-supplied message +*/ +func (l *loggingT) header(s severity, depth int) (*buffer, string, int) { + _, file, line, ok := runtime.Caller(3 + depth) + if !ok { + file = "???" + line = 1 + } else { + slash := strings.LastIndex(file, "/") + if slash >= 0 { + file = file[slash+1:] + } + } + return l.formatHeader(s, file, line), file, line +} + +// formatHeader formats a log header using the provided file name and line number. +func (l *loggingT) formatHeader(s severity, file string, line int) *buffer { + now := timeNow() + if line < 0 { + line = 0 // not a real line number, but acceptable to someDigits + } + if s > fatalLog { + s = infoLog // for safety. + } + buf := l.getBuffer() + + // Avoid Fprintf, for speed. The format is so simple that we can do it quickly by hand. + // It's worth about 3X. Fprintf is hard. + _, month, day := now.Date() + hour, minute, second := now.Clock() + // Lmmdd hh:mm:ss.uuuuuu threadid file:line] + buf.tmp[0] = severityChar[s] + buf.twoDigits(1, int(month)) + buf.twoDigits(3, day) + buf.tmp[5] = ' ' + buf.twoDigits(6, hour) + buf.tmp[8] = ':' + buf.twoDigits(9, minute) + buf.tmp[11] = ':' + buf.twoDigits(12, second) + buf.tmp[14] = '.' + buf.nDigits(6, 15, now.Nanosecond()/1000, '0') + buf.tmp[21] = ' ' + buf.nDigits(7, 22, pid, ' ') // TODO: should be TID + buf.tmp[29] = ' ' + buf.Write(buf.tmp[:30]) + buf.WriteString(file) + buf.tmp[0] = ':' + n := buf.someDigits(1, line) + buf.tmp[n+1] = ']' + buf.tmp[n+2] = ' ' + buf.Write(buf.tmp[:n+3]) + return buf +} + +// Some custom tiny helper functions to print the log header efficiently. + +const digits = "0123456789" + +// twoDigits formats a zero-prefixed two-digit integer at buf.tmp[i]. +func (buf *buffer) twoDigits(i, d int) { + buf.tmp[i+1] = digits[d%10] + d /= 10 + buf.tmp[i] = digits[d%10] +} + +// nDigits formats an n-digit integer at buf.tmp[i], +// padding with pad on the left. +// It assumes d >= 0. +func (buf *buffer) nDigits(n, i, d int, pad byte) { + j := n - 1 + for ; j >= 0 && d > 0; j-- { + buf.tmp[i+j] = digits[d%10] + d /= 10 + } + for ; j >= 0; j-- { + buf.tmp[i+j] = pad + } +} + +// someDigits formats a zero-prefixed variable-width integer at buf.tmp[i]. +func (buf *buffer) someDigits(i, d int) int { + // Print into the top, then copy down. We know there's space for at least + // a 10-digit number. + j := len(buf.tmp) + for { + j-- + buf.tmp[j] = digits[d%10] + d /= 10 + if d == 0 { + break + } + } + return copy(buf.tmp[i:], buf.tmp[j:]) +} + +func (l *loggingT) println(s severity, args ...interface{}) { + buf, file, line := l.header(s, 0) + fmt.Fprintln(buf, args...) + l.output(s, buf, file, line, false) +} + +func (l *loggingT) print(s severity, args ...interface{}) { + l.printDepth(s, 1, args...) +} + +func (l *loggingT) printDepth(s severity, depth int, args ...interface{}) { + buf, file, line := l.header(s, depth) + fmt.Fprint(buf, args...) + if buf.Bytes()[buf.Len()-1] != '\n' { + buf.WriteByte('\n') + } + l.output(s, buf, file, line, false) +} + +func (l *loggingT) printf(s severity, format string, args ...interface{}) { + buf, file, line := l.header(s, 0) + fmt.Fprintf(buf, format, args...) + if buf.Bytes()[buf.Len()-1] != '\n' { + buf.WriteByte('\n') + } + l.output(s, buf, file, line, false) +} + +// printWithFileLine behaves like print but uses the provided file and line number. If +// alsoLogToStderr is true, the log message always appears on standard error; it +// will also appear in the log file unless --logtostderr is set. +func (l *loggingT) printWithFileLine(s severity, file string, line int, alsoToStderr bool, args ...interface{}) { + buf := l.formatHeader(s, file, line) + fmt.Fprint(buf, args...) + if buf.Bytes()[buf.Len()-1] != '\n' { + buf.WriteByte('\n') + } + l.output(s, buf, file, line, alsoToStderr) +} + +// output writes the data to the log files and releases the buffer. +func (l *loggingT) output(s severity, buf *buffer, file string, line int, alsoToStderr bool) { + l.mu.Lock() + if l.traceLocation.isSet() { + if l.traceLocation.match(file, line) { + buf.Write(stacks(false)) + } + } + data := buf.Bytes() + if !flag.Parsed() { + os.Stderr.Write([]byte("ERROR: logging before flag.Parse: ")) + os.Stderr.Write(data) + } else if l.toStderr { + os.Stderr.Write(data) + } else { + if alsoToStderr || l.alsoToStderr || s >= l.stderrThreshold.get() { + os.Stderr.Write(data) + } + if l.file[s] == nil { + if err := l.createFiles(s); err != nil { + os.Stderr.Write(data) // Make sure the message appears somewhere. + l.exit(err) + } + } + switch s { + case fatalLog: + l.file[fatalLog].Write(data) + fallthrough + case errorLog: + l.file[errorLog].Write(data) + fallthrough + case warningLog: + l.file[warningLog].Write(data) + fallthrough + case infoLog: + l.file[infoLog].Write(data) + } + } + if s == fatalLog { + // If we got here via Exit rather than Fatal, print no stacks. + if atomic.LoadUint32(&fatalNoStacks) > 0 { + l.mu.Unlock() + timeoutFlush(10 * time.Second) + os.Exit(1) + } + // Dump all goroutine stacks before exiting. + // First, make sure we see the trace for the current goroutine on standard error. + // If -logtostderr has been specified, the loop below will do that anyway + // as the first stack in the full dump. + if !l.toStderr { + os.Stderr.Write(stacks(false)) + } + // Write the stack trace for all goroutines to the files. + trace := stacks(true) + logExitFunc = func(error) {} // If we get a write error, we'll still exit below. + for log := fatalLog; log >= infoLog; log-- { + if f := l.file[log]; f != nil { // Can be nil if -logtostderr is set. + f.Write(trace) + } + } + l.mu.Unlock() + timeoutFlush(10 * time.Second) + os.Exit(255) // C++ uses -1, which is silly because it's anded with 255 anyway. + } + l.putBuffer(buf) + l.mu.Unlock() + if stats := severityStats[s]; stats != nil { + atomic.AddInt64(&stats.lines, 1) + atomic.AddInt64(&stats.bytes, int64(len(data))) + } +} + +// timeoutFlush calls Flush and returns when it completes or after timeout +// elapses, whichever happens first. This is needed because the hooks invoked +// by Flush may deadlock when glog.Fatal is called from a hook that holds +// a lock. +func timeoutFlush(timeout time.Duration) { + done := make(chan bool, 1) + go func() { + Flush() // calls logging.lockAndFlushAll() + done <- true + }() + select { + case <-done: + case <-time.After(timeout): + fmt.Fprintln(os.Stderr, "glog: Flush took longer than", timeout) + } +} + +// stacks is a wrapper for runtime.Stack that attempts to recover the data for all goroutines. +func stacks(all bool) []byte { + // We don't know how big the traces are, so grow a few times if they don't fit. Start large, though. + n := 10000 + if all { + n = 100000 + } + var trace []byte + for i := 0; i < 5; i++ { + trace = make([]byte, n) + nbytes := runtime.Stack(trace, all) + if nbytes < len(trace) { + return trace[:nbytes] + } + n *= 2 + } + return trace +} + +// logExitFunc provides a simple mechanism to override the default behavior +// of exiting on error. Used in testing and to guarantee we reach a required exit +// for fatal logs. Instead, exit could be a function rather than a method but that +// would make its use clumsier. +var logExitFunc func(error) + +// exit is called if there is trouble creating or writing log files. +// It flushes the logs and exits the program; there's no point in hanging around. +// l.mu is held. +func (l *loggingT) exit(err error) { + fmt.Fprintf(os.Stderr, "log: exiting because of error: %s\n", err) + // If logExitFunc is set, we do that instead of exiting. + if logExitFunc != nil { + logExitFunc(err) + return + } + l.flushAll() + os.Exit(2) +} + +// syncBuffer joins a bufio.Writer to its underlying file, providing access to the +// file's Sync method and providing a wrapper for the Write method that provides log +// file rotation. There are conflicting methods, so the file cannot be embedded. +// l.mu is held for all its methods. +type syncBuffer struct { + logger *loggingT + *bufio.Writer + file *os.File + sev severity + nbytes uint64 // The number of bytes written to this file +} + +func (sb *syncBuffer) Sync() error { + return sb.file.Sync() +} + +func (sb *syncBuffer) Write(p []byte) (n int, err error) { + if sb.nbytes+uint64(len(p)) >= MaxSize { + if err := sb.rotateFile(time.Now()); err != nil { + sb.logger.exit(err) + } + } + n, err = sb.Writer.Write(p) + sb.nbytes += uint64(n) + if err != nil { + sb.logger.exit(err) + } + return +} + +// rotateFile closes the syncBuffer's file and starts a new one. +func (sb *syncBuffer) rotateFile(now time.Time) error { + if sb.file != nil { + sb.Flush() + sb.file.Close() + } + var err error + sb.file, _, err = create(severityName[sb.sev], now) + sb.nbytes = 0 + if err != nil { + return err + } + + sb.Writer = bufio.NewWriterSize(sb.file, bufferSize) + + // Write header. + var buf bytes.Buffer + fmt.Fprintf(&buf, "Log file created at: %s\n", now.Format("2006/01/02 15:04:05")) + fmt.Fprintf(&buf, "Running on machine: %s\n", host) + fmt.Fprintf(&buf, "Binary: Built with %s %s for %s/%s\n", runtime.Compiler, runtime.Version(), runtime.GOOS, runtime.GOARCH) + fmt.Fprintf(&buf, "Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg\n") + n, err := sb.file.Write(buf.Bytes()) + sb.nbytes += uint64(n) + return err +} + +// bufferSize sizes the buffer associated with each log file. It's large +// so that log records can accumulate without the logging thread blocking +// on disk I/O. The flushDaemon will block instead. +const bufferSize = 256 * 1024 + +// createFiles creates all the log files for severity from sev down to infoLog. +// l.mu is held. +func (l *loggingT) createFiles(sev severity) error { + now := time.Now() + // Files are created in decreasing severity order, so as soon as we find one + // has already been created, we can stop. + for s := sev; s >= infoLog && l.file[s] == nil; s-- { + sb := &syncBuffer{ + logger: l, + sev: s, + } + if err := sb.rotateFile(now); err != nil { + return err + } + l.file[s] = sb + } + return nil +} + +const flushInterval = 30 * time.Second + +// flushDaemon periodically flushes the log file buffers. +func (l *loggingT) flushDaemon() { + for _ = range time.NewTicker(flushInterval).C { + l.lockAndFlushAll() + } +} + +// lockAndFlushAll is like flushAll but locks l.mu first. +func (l *loggingT) lockAndFlushAll() { + l.mu.Lock() + l.flushAll() + l.mu.Unlock() +} + +// flushAll flushes all the logs and attempts to "sync" their data to disk. +// l.mu is held. +func (l *loggingT) flushAll() { + // Flush from fatal down, in case there's trouble flushing. + for s := fatalLog; s >= infoLog; s-- { + file := l.file[s] + if file != nil { + file.Flush() // ignore error + file.Sync() // ignore error + } + } +} + +// CopyStandardLogTo arranges for messages written to the Go "log" package's +// default logs to also appear in the Google logs for the named and lower +// severities. Subsequent changes to the standard log's default output location +// or format may break this behavior. +// +// Valid names are "INFO", "WARNING", "ERROR", and "FATAL". If the name is not +// recognized, CopyStandardLogTo panics. +func CopyStandardLogTo(name string) { + sev, ok := severityByName(name) + if !ok { + panic(fmt.Sprintf("log.CopyStandardLogTo(%q): unrecognized severity name", name)) + } + // Set a log format that captures the user's file and line: + // d.go:23: message + stdLog.SetFlags(stdLog.Lshortfile) + stdLog.SetOutput(logBridge(sev)) +} + +// logBridge provides the Write method that enables CopyStandardLogTo to connect +// Go's standard logs to the logs provided by this package. +type logBridge severity + +// Write parses the standard logging line and passes its components to the +// logger for severity(lb). +func (lb logBridge) Write(b []byte) (n int, err error) { + var ( + file = "???" + line = 1 + text string + ) + // Split "d.go:23: message" into "d.go", "23", and "message". + if parts := bytes.SplitN(b, []byte{':'}, 3); len(parts) != 3 || len(parts[0]) < 1 || len(parts[2]) < 1 { + text = fmt.Sprintf("bad log format: %s", b) + } else { + file = string(parts[0]) + text = string(parts[2][1:]) // skip leading space + line, err = strconv.Atoi(string(parts[1])) + if err != nil { + text = fmt.Sprintf("bad line number: %s", b) + line = 1 + } + } + // printWithFileLine with alsoToStderr=true, so standard log messages + // always appear on standard error. + logging.printWithFileLine(severity(lb), file, line, true, text) + return len(b), nil +} + +// setV computes and remembers the V level for a given PC +// when vmodule is enabled. +// File pattern matching takes the basename of the file, stripped +// of its .go suffix, and uses filepath.Match, which is a little more +// general than the *? matching used in C++. +// l.mu is held. +func (l *loggingT) setV(pc uintptr) Level { + fn := runtime.FuncForPC(pc) + file, _ := fn.FileLine(pc) + // The file is something like /a/b/c/d.go. We want just the d. + if strings.HasSuffix(file, ".go") { + file = file[:len(file)-3] + } + if slash := strings.LastIndex(file, "/"); slash >= 0 { + file = file[slash+1:] + } + for _, filter := range l.vmodule.filter { + if filter.match(file) { + l.vmap[pc] = filter.level + return filter.level + } + } + l.vmap[pc] = 0 + return 0 +} + +// Verbose is a boolean type that implements Infof (like Printf) etc. +// See the documentation of V for more information. +type Verbose bool + +// V reports whether verbosity at the call site is at least the requested level. +// The returned value is a boolean of type Verbose, which implements Info, Infoln +// and Infof. These methods will write to the Info log if called. +// Thus, one may write either +// if glog.V(2) { glog.Info("log this") } +// or +// glog.V(2).Info("log this") +// The second form is shorter but the first is cheaper if logging is off because it does +// not evaluate its arguments. +// +// Whether an individual call to V generates a log record depends on the setting of +// the -v and --vmodule flags; both are off by default. If the level in the call to +// V is at least the value of -v, or of -vmodule for the source file containing the +// call, the V call will log. +func V(level Level) Verbose { + // This function tries hard to be cheap unless there's work to do. + // The fast path is two atomic loads and compares. + + // Here is a cheap but safe test to see if V logging is enabled globally. + if logging.verbosity.get() >= level { + return Verbose(true) + } + + // It's off globally but it vmodule may still be set. + // Here is another cheap but safe test to see if vmodule is enabled. + if atomic.LoadInt32(&logging.filterLength) > 0 { + // Now we need a proper lock to use the logging structure. The pcs field + // is shared so we must lock before accessing it. This is fairly expensive, + // but if V logging is enabled we're slow anyway. + logging.mu.Lock() + defer logging.mu.Unlock() + if runtime.Callers(2, logging.pcs[:]) == 0 { + return Verbose(false) + } + v, ok := logging.vmap[logging.pcs[0]] + if !ok { + v = logging.setV(logging.pcs[0]) + } + return Verbose(v >= level) + } + return Verbose(false) +} + +// Info is equivalent to the global Info function, guarded by the value of v. +// See the documentation of V for usage. +func (v Verbose) Info(args ...interface{}) { + if v { + logging.print(infoLog, args...) + } +} + +// Infoln is equivalent to the global Infoln function, guarded by the value of v. +// See the documentation of V for usage. +func (v Verbose) Infoln(args ...interface{}) { + if v { + logging.println(infoLog, args...) + } +} + +// Infof is equivalent to the global Infof function, guarded by the value of v. +// See the documentation of V for usage. +func (v Verbose) Infof(format string, args ...interface{}) { + if v { + logging.printf(infoLog, format, args...) + } +} + +// Info logs to the INFO log. +// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. +func Info(args ...interface{}) { + logging.print(infoLog, args...) +} + +// InfoDepth acts as Info but uses depth to determine which call frame to log. +// InfoDepth(0, "msg") is the same as Info("msg"). +func InfoDepth(depth int, args ...interface{}) { + logging.printDepth(infoLog, depth, args...) +} + +// Infoln logs to the INFO log. +// Arguments are handled in the manner of fmt.Println; a newline is appended if missing. +func Infoln(args ...interface{}) { + logging.println(infoLog, args...) +} + +// Infof logs to the INFO log. +// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. +func Infof(format string, args ...interface{}) { + logging.printf(infoLog, format, args...) +} + +// Warning logs to the WARNING and INFO logs. +// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. +func Warning(args ...interface{}) { + logging.print(warningLog, args...) +} + +// WarningDepth acts as Warning but uses depth to determine which call frame to log. +// WarningDepth(0, "msg") is the same as Warning("msg"). +func WarningDepth(depth int, args ...interface{}) { + logging.printDepth(warningLog, depth, args...) +} + +// Warningln logs to the WARNING and INFO logs. +// Arguments are handled in the manner of fmt.Println; a newline is appended if missing. +func Warningln(args ...interface{}) { + logging.println(warningLog, args...) +} + +// Warningf logs to the WARNING and INFO logs. +// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. +func Warningf(format string, args ...interface{}) { + logging.printf(warningLog, format, args...) +} + +// Error logs to the ERROR, WARNING, and INFO logs. +// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. +func Error(args ...interface{}) { + logging.print(errorLog, args...) +} + +// ErrorDepth acts as Error but uses depth to determine which call frame to log. +// ErrorDepth(0, "msg") is the same as Error("msg"). +func ErrorDepth(depth int, args ...interface{}) { + logging.printDepth(errorLog, depth, args...) +} + +// Errorln logs to the ERROR, WARNING, and INFO logs. +// Arguments are handled in the manner of fmt.Println; a newline is appended if missing. +func Errorln(args ...interface{}) { + logging.println(errorLog, args...) +} + +// Errorf logs to the ERROR, WARNING, and INFO logs. +// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. +func Errorf(format string, args ...interface{}) { + logging.printf(errorLog, format, args...) +} + +// Fatal logs to the FATAL, ERROR, WARNING, and INFO logs, +// including a stack trace of all running goroutines, then calls os.Exit(255). +// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. +func Fatal(args ...interface{}) { + logging.print(fatalLog, args...) +} + +// FatalDepth acts as Fatal but uses depth to determine which call frame to log. +// FatalDepth(0, "msg") is the same as Fatal("msg"). +func FatalDepth(depth int, args ...interface{}) { + logging.printDepth(fatalLog, depth, args...) +} + +// Fatalln logs to the FATAL, ERROR, WARNING, and INFO logs, +// including a stack trace of all running goroutines, then calls os.Exit(255). +// Arguments are handled in the manner of fmt.Println; a newline is appended if missing. +func Fatalln(args ...interface{}) { + logging.println(fatalLog, args...) +} + +// Fatalf logs to the FATAL, ERROR, WARNING, and INFO logs, +// including a stack trace of all running goroutines, then calls os.Exit(255). +// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. +func Fatalf(format string, args ...interface{}) { + logging.printf(fatalLog, format, args...) +} + +// fatalNoStacks is non-zero if we are to exit without dumping goroutine stacks. +// It allows Exit and relatives to use the Fatal logs. +var fatalNoStacks uint32 + +// Exit logs to the FATAL, ERROR, WARNING, and INFO logs, then calls os.Exit(1). +// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. +func Exit(args ...interface{}) { + atomic.StoreUint32(&fatalNoStacks, 1) + logging.print(fatalLog, args...) +} + +// ExitDepth acts as Exit but uses depth to determine which call frame to log. +// ExitDepth(0, "msg") is the same as Exit("msg"). +func ExitDepth(depth int, args ...interface{}) { + atomic.StoreUint32(&fatalNoStacks, 1) + logging.printDepth(fatalLog, depth, args...) +} + +// Exitln logs to the FATAL, ERROR, WARNING, and INFO logs, then calls os.Exit(1). +func Exitln(args ...interface{}) { + atomic.StoreUint32(&fatalNoStacks, 1) + logging.println(fatalLog, args...) +} + +// Exitf logs to the FATAL, ERROR, WARNING, and INFO logs, then calls os.Exit(1). +// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. +func Exitf(format string, args ...interface{}) { + atomic.StoreUint32(&fatalNoStacks, 1) + logging.printf(fatalLog, format, args...) +} diff --git a/vendor/github.com/golang/glog/glog_file.go b/vendor/github.com/golang/glog/glog_file.go new file mode 100644 index 00000000..65075d28 --- /dev/null +++ b/vendor/github.com/golang/glog/glog_file.go @@ -0,0 +1,124 @@ +// Go support for leveled logs, analogous to https://code.google.com/p/google-glog/ +// +// Copyright 2013 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// File I/O for logs. + +package glog + +import ( + "errors" + "flag" + "fmt" + "os" + "os/user" + "path/filepath" + "strings" + "sync" + "time" +) + +// MaxSize is the maximum size of a log file in bytes. +var MaxSize uint64 = 1024 * 1024 * 1800 + +// logDirs lists the candidate directories for new log files. +var logDirs []string + +// If non-empty, overrides the choice of directory in which to write logs. +// See createLogDirs for the full list of possible destinations. +var logDir = flag.String("log_dir", "", "If non-empty, write log files in this directory") + +func createLogDirs() { + if *logDir != "" { + logDirs = append(logDirs, *logDir) + } + logDirs = append(logDirs, os.TempDir()) +} + +var ( + pid = os.Getpid() + program = filepath.Base(os.Args[0]) + host = "unknownhost" + userName = "unknownuser" +) + +func init() { + h, err := os.Hostname() + if err == nil { + host = shortHostname(h) + } + + current, err := user.Current() + if err == nil { + userName = current.Username + } + + // Sanitize userName since it may contain filepath separators on Windows. + userName = strings.Replace(userName, `\`, "_", -1) +} + +// shortHostname returns its argument, truncating at the first period. +// For instance, given "www.google.com" it returns "www". +func shortHostname(hostname string) string { + if i := strings.Index(hostname, "."); i >= 0 { + return hostname[:i] + } + return hostname +} + +// logName returns a new log file name containing tag, with start time t, and +// the name for the symlink for tag. +func logName(tag string, t time.Time) (name, link string) { + name = fmt.Sprintf("%s.%s.%s.log.%s.%04d%02d%02d-%02d%02d%02d.%d", + program, + host, + userName, + tag, + t.Year(), + t.Month(), + t.Day(), + t.Hour(), + t.Minute(), + t.Second(), + pid) + return name, program + "." + tag +} + +var onceLogDirs sync.Once + +// create creates a new log file and returns the file and its filename, which +// contains tag ("INFO", "FATAL", etc.) and t. If the file is created +// successfully, create also attempts to update the symlink for that tag, ignoring +// errors. +func create(tag string, t time.Time) (f *os.File, filename string, err error) { + onceLogDirs.Do(createLogDirs) + if len(logDirs) == 0 { + return nil, "", errors.New("log: no log dirs") + } + name, link := logName(tag, t) + var lastErr error + for _, dir := range logDirs { + fname := filepath.Join(dir, name) + f, err := os.Create(fname) + if err == nil { + symlink := filepath.Join(dir, link) + os.Remove(symlink) // ignore err + os.Symlink(name, symlink) // ignore err + return f, fname, nil + } + lastErr = err + } + return nil, "", fmt.Errorf("log: cannot create log: %v", lastErr) +} diff --git a/vendor/github.com/lib/pq/.travis.sh b/vendor/github.com/lib/pq/.travis.sh index a297dc45..ebf44703 100755 --- a/vendor/github.com/lib/pq/.travis.sh +++ b/vendor/github.com/lib/pq/.travis.sh @@ -70,17 +70,4 @@ postgresql_uninstall() { sudo rm -rf /var/lib/postgresql } -megacheck_install() { - # Lock megacheck version at $MEGACHECK_VERSION to prevent spontaneous - # new error messages in old code. - go get -d honnef.co/go/tools/... - git -C $GOPATH/src/honnef.co/go/tools/ checkout $MEGACHECK_VERSION - go install honnef.co/go/tools/cmd/megacheck - megacheck --version -} - -golint_install() { - go get github.com/golang/lint/golint -} - $1 diff --git a/vendor/github.com/lib/pq/.travis.yml b/vendor/github.com/lib/pq/.travis.yml index 18556e08..8396f5d9 100644 --- a/vendor/github.com/lib/pq/.travis.yml +++ b/vendor/github.com/lib/pq/.travis.yml @@ -1,9 +1,8 @@ language: go go: - - 1.8.x - - 1.9.x - - 1.10.x + - 1.11.x + - 1.12.x - master sudo: true @@ -14,16 +13,11 @@ env: - PQGOSSLTESTS=1 - PQSSLCERTTEST_PATH=$PWD/certs - PGHOST=127.0.0.1 - - MEGACHECK_VERSION=2017.2.2 matrix: - PGVERSION=10 - PGVERSION=9.6 - PGVERSION=9.5 - PGVERSION=9.4 - - PGVERSION=9.3 - - PGVERSION=9.2 - - PGVERSION=9.1 - - PGVERSION=9.0 before_install: - ./.travis.sh postgresql_uninstall @@ -31,9 +25,9 @@ before_install: - ./.travis.sh postgresql_install - ./.travis.sh postgresql_configure - ./.travis.sh client_configure - - ./.travis.sh megacheck_install - - ./.travis.sh golint_install - go get golang.org/x/tools/cmd/goimports + - go get golang.org/x/lint/golint + - GO111MODULE=on go get honnef.co/go/tools/cmd/staticcheck@2019.2.1 before_script: - createdb pqgotest @@ -44,7 +38,7 @@ script: - > goimports -d -e $(find -name '*.go') | awk '{ print } END { exit NR == 0 ? 0 : 1 }' - go vet ./... - - megacheck -go 1.8 ./... + - staticcheck -go 1.11 ./... - golint ./... - PQTEST_BINARY_PARAMETERS=no go test -race -v ./... - PQTEST_BINARY_PARAMETERS=yes go test -race -v ./... diff --git a/vendor/github.com/lib/pq/array_test.go b/vendor/github.com/lib/pq/array_test.go deleted file mode 100644 index f724bcd8..00000000 --- a/vendor/github.com/lib/pq/array_test.go +++ /dev/null @@ -1,1311 +0,0 @@ -package pq - -import ( - "bytes" - "database/sql" - "database/sql/driver" - "math/rand" - "reflect" - "strings" - "testing" -) - -func TestParseArray(t *testing.T) { - for _, tt := range []struct { - input string - delim string - dims []int - elems [][]byte - }{ - {`{}`, `,`, nil, [][]byte{}}, - {`{NULL}`, `,`, []int{1}, [][]byte{nil}}, - {`{a}`, `,`, []int{1}, [][]byte{{'a'}}}, - {`{a,b}`, `,`, []int{2}, [][]byte{{'a'}, {'b'}}}, - {`{{a,b}}`, `,`, []int{1, 2}, [][]byte{{'a'}, {'b'}}}, - {`{{a},{b}}`, `,`, []int{2, 1}, [][]byte{{'a'}, {'b'}}}, - {`{{{a,b},{c,d},{e,f}}}`, `,`, []int{1, 3, 2}, [][]byte{ - {'a'}, {'b'}, {'c'}, {'d'}, {'e'}, {'f'}, - }}, - {`{""}`, `,`, []int{1}, [][]byte{{}}}, - {`{","}`, `,`, []int{1}, [][]byte{{','}}}, - {`{",",","}`, `,`, []int{2}, [][]byte{{','}, {','}}}, - {`{{",",","}}`, `,`, []int{1, 2}, [][]byte{{','}, {','}}}, - {`{{","},{","}}`, `,`, []int{2, 1}, [][]byte{{','}, {','}}}, - {`{{{",",","},{",",","},{",",","}}}`, `,`, []int{1, 3, 2}, [][]byte{ - {','}, {','}, {','}, {','}, {','}, {','}, - }}, - {`{"\"}"}`, `,`, []int{1}, [][]byte{{'"', '}'}}}, - {`{"\"","\""}`, `,`, []int{2}, [][]byte{{'"'}, {'"'}}}, - {`{{"\"","\""}}`, `,`, []int{1, 2}, [][]byte{{'"'}, {'"'}}}, - {`{{"\""},{"\""}}`, `,`, []int{2, 1}, [][]byte{{'"'}, {'"'}}}, - {`{{{"\"","\""},{"\"","\""},{"\"","\""}}}`, `,`, []int{1, 3, 2}, [][]byte{ - {'"'}, {'"'}, {'"'}, {'"'}, {'"'}, {'"'}, - }}, - {`{axyzb}`, `xyz`, []int{2}, [][]byte{{'a'}, {'b'}}}, - } { - dims, elems, err := parseArray([]byte(tt.input), []byte(tt.delim)) - - if err != nil { - t.Fatalf("Expected no error for %q, got %q", tt.input, err) - } - if !reflect.DeepEqual(dims, tt.dims) { - t.Errorf("Expected %v dimensions for %q, got %v", tt.dims, tt.input, dims) - } - if !reflect.DeepEqual(elems, tt.elems) { - t.Errorf("Expected %v elements for %q, got %v", tt.elems, tt.input, elems) - } - } -} - -func TestParseArrayError(t *testing.T) { - for _, tt := range []struct { - input, err string - }{ - {``, "expected '{' at offset 0"}, - {`x`, "expected '{' at offset 0"}, - {`}`, "expected '{' at offset 0"}, - {`{`, "expected '}' at offset 1"}, - {`{{}`, "expected '}' at offset 3"}, - {`{}}`, "unexpected '}' at offset 2"}, - {`{,}`, "unexpected ',' at offset 1"}, - {`{,x}`, "unexpected ',' at offset 1"}, - {`{x,}`, "unexpected '}' at offset 3"}, - {`{x,{`, "unexpected '{' at offset 3"}, - {`{x},`, "unexpected ',' at offset 3"}, - {`{x}}`, "unexpected '}' at offset 3"}, - {`{{x}`, "expected '}' at offset 4"}, - {`{""x}`, "unexpected 'x' at offset 3"}, - {`{{a},{b,c}}`, "multidimensional arrays must have elements with matching dimensions"}, - } { - _, _, err := parseArray([]byte(tt.input), []byte{','}) - - if err == nil { - t.Fatalf("Expected error for %q, got none", tt.input) - } - if !strings.Contains(err.Error(), tt.err) { - t.Errorf("Expected error to contain %q for %q, got %q", tt.err, tt.input, err) - } - } -} - -func TestArrayScanner(t *testing.T) { - var s sql.Scanner = Array(&[]bool{}) - if _, ok := s.(*BoolArray); !ok { - t.Errorf("Expected *BoolArray, got %T", s) - } - - s = Array(&[]float64{}) - if _, ok := s.(*Float64Array); !ok { - t.Errorf("Expected *Float64Array, got %T", s) - } - - s = Array(&[]int64{}) - if _, ok := s.(*Int64Array); !ok { - t.Errorf("Expected *Int64Array, got %T", s) - } - - s = Array(&[]string{}) - if _, ok := s.(*StringArray); !ok { - t.Errorf("Expected *StringArray, got %T", s) - } - - for _, tt := range []interface{}{ - &[]sql.Scanner{}, - &[][]bool{}, - &[][]float64{}, - &[][]int64{}, - &[][]string{}, - } { - s = Array(tt) - if _, ok := s.(GenericArray); !ok { - t.Errorf("Expected GenericArray for %T, got %T", tt, s) - } - } -} - -func TestArrayValuer(t *testing.T) { - var v driver.Valuer = Array([]bool{}) - if _, ok := v.(*BoolArray); !ok { - t.Errorf("Expected *BoolArray, got %T", v) - } - - v = Array([]float64{}) - if _, ok := v.(*Float64Array); !ok { - t.Errorf("Expected *Float64Array, got %T", v) - } - - v = Array([]int64{}) - if _, ok := v.(*Int64Array); !ok { - t.Errorf("Expected *Int64Array, got %T", v) - } - - v = Array([]string{}) - if _, ok := v.(*StringArray); !ok { - t.Errorf("Expected *StringArray, got %T", v) - } - - for _, tt := range []interface{}{ - nil, - []driver.Value{}, - [][]bool{}, - [][]float64{}, - [][]int64{}, - [][]string{}, - } { - v = Array(tt) - if _, ok := v.(GenericArray); !ok { - t.Errorf("Expected GenericArray for %T, got %T", tt, v) - } - } -} - -func TestBoolArrayScanUnsupported(t *testing.T) { - var arr BoolArray - err := arr.Scan(1) - - if err == nil { - t.Fatal("Expected error when scanning from int") - } - if !strings.Contains(err.Error(), "int to BoolArray") { - t.Errorf("Expected type to be mentioned when scanning, got %q", err) - } -} - -func TestBoolArrayScanEmpty(t *testing.T) { - var arr BoolArray - err := arr.Scan(`{}`) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if arr == nil || len(arr) != 0 { - t.Errorf("Expected empty, got %#v", arr) - } -} - -func TestBoolArrayScanNil(t *testing.T) { - arr := BoolArray{true, true, true} - err := arr.Scan(nil) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if arr != nil { - t.Errorf("Expected nil, got %+v", arr) - } -} - -var BoolArrayStringTests = []struct { - str string - arr BoolArray -}{ - {`{}`, BoolArray{}}, - {`{t}`, BoolArray{true}}, - {`{f,t}`, BoolArray{false, true}}, -} - -func TestBoolArrayScanBytes(t *testing.T) { - for _, tt := range BoolArrayStringTests { - bytes := []byte(tt.str) - arr := BoolArray{true, true, true} - err := arr.Scan(bytes) - - if err != nil { - t.Fatalf("Expected no error for %q, got %v", bytes, err) - } - if !reflect.DeepEqual(arr, tt.arr) { - t.Errorf("Expected %+v for %q, got %+v", tt.arr, bytes, arr) - } - } -} - -func BenchmarkBoolArrayScanBytes(b *testing.B) { - var a BoolArray - var x interface{} = []byte(`{t,f,t,f,t,f,t,f,t,f}`) - - for i := 0; i < b.N; i++ { - a = BoolArray{} - a.Scan(x) - } -} - -func TestBoolArrayScanString(t *testing.T) { - for _, tt := range BoolArrayStringTests { - arr := BoolArray{true, true, true} - err := arr.Scan(tt.str) - - if err != nil { - t.Fatalf("Expected no error for %q, got %v", tt.str, err) - } - if !reflect.DeepEqual(arr, tt.arr) { - t.Errorf("Expected %+v for %q, got %+v", tt.arr, tt.str, arr) - } - } -} - -func TestBoolArrayScanError(t *testing.T) { - for _, tt := range []struct { - input, err string - }{ - {``, "unable to parse array"}, - {`{`, "unable to parse array"}, - {`{{t},{f}}`, "cannot convert ARRAY[2][1] to BoolArray"}, - {`{NULL}`, `could not parse boolean array index 0: invalid boolean ""`}, - {`{a}`, `could not parse boolean array index 0: invalid boolean "a"`}, - {`{t,b}`, `could not parse boolean array index 1: invalid boolean "b"`}, - {`{t,f,cd}`, `could not parse boolean array index 2: invalid boolean "cd"`}, - } { - arr := BoolArray{true, true, true} - err := arr.Scan(tt.input) - - if err == nil { - t.Fatalf("Expected error for %q, got none", tt.input) - } - if !strings.Contains(err.Error(), tt.err) { - t.Errorf("Expected error to contain %q for %q, got %q", tt.err, tt.input, err) - } - if !reflect.DeepEqual(arr, BoolArray{true, true, true}) { - t.Errorf("Expected destination not to change for %q, got %+v", tt.input, arr) - } - } -} - -func TestBoolArrayValue(t *testing.T) { - result, err := BoolArray(nil).Value() - - if err != nil { - t.Fatalf("Expected no error for nil, got %v", err) - } - if result != nil { - t.Errorf("Expected nil, got %q", result) - } - - result, err = BoolArray([]bool{}).Value() - - if err != nil { - t.Fatalf("Expected no error for empty, got %v", err) - } - if expected := `{}`; !reflect.DeepEqual(result, expected) { - t.Errorf("Expected empty, got %q", result) - } - - result, err = BoolArray([]bool{false, true, false}).Value() - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if expected := `{f,t,f}`; !reflect.DeepEqual(result, expected) { - t.Errorf("Expected %q, got %q", expected, result) - } -} - -func BenchmarkBoolArrayValue(b *testing.B) { - rand.Seed(1) - x := make([]bool, 10) - for i := 0; i < len(x); i++ { - x[i] = rand.Intn(2) == 0 - } - a := BoolArray(x) - - for i := 0; i < b.N; i++ { - a.Value() - } -} - -func TestByteaArrayScanUnsupported(t *testing.T) { - var arr ByteaArray - err := arr.Scan(1) - - if err == nil { - t.Fatal("Expected error when scanning from int") - } - if !strings.Contains(err.Error(), "int to ByteaArray") { - t.Errorf("Expected type to be mentioned when scanning, got %q", err) - } -} - -func TestByteaArrayScanEmpty(t *testing.T) { - var arr ByteaArray - err := arr.Scan(`{}`) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if arr == nil || len(arr) != 0 { - t.Errorf("Expected empty, got %#v", arr) - } -} - -func TestByteaArrayScanNil(t *testing.T) { - arr := ByteaArray{{2}, {6}, {0, 0}} - err := arr.Scan(nil) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if arr != nil { - t.Errorf("Expected nil, got %+v", arr) - } -} - -var ByteaArrayStringTests = []struct { - str string - arr ByteaArray -}{ - {`{}`, ByteaArray{}}, - {`{NULL}`, ByteaArray{nil}}, - {`{"\\xfeff"}`, ByteaArray{{'\xFE', '\xFF'}}}, - {`{"\\xdead","\\xbeef"}`, ByteaArray{{'\xDE', '\xAD'}, {'\xBE', '\xEF'}}}, -} - -func TestByteaArrayScanBytes(t *testing.T) { - for _, tt := range ByteaArrayStringTests { - bytes := []byte(tt.str) - arr := ByteaArray{{2}, {6}, {0, 0}} - err := arr.Scan(bytes) - - if err != nil { - t.Fatalf("Expected no error for %q, got %v", bytes, err) - } - if !reflect.DeepEqual(arr, tt.arr) { - t.Errorf("Expected %+v for %q, got %+v", tt.arr, bytes, arr) - } - } -} - -func BenchmarkByteaArrayScanBytes(b *testing.B) { - var a ByteaArray - var x interface{} = []byte(`{"\\xfe","\\xff","\\xdead","\\xbeef","\\xfe","\\xff","\\xdead","\\xbeef","\\xfe","\\xff"}`) - - for i := 0; i < b.N; i++ { - a = ByteaArray{} - a.Scan(x) - } -} - -func TestByteaArrayScanString(t *testing.T) { - for _, tt := range ByteaArrayStringTests { - arr := ByteaArray{{2}, {6}, {0, 0}} - err := arr.Scan(tt.str) - - if err != nil { - t.Fatalf("Expected no error for %q, got %v", tt.str, err) - } - if !reflect.DeepEqual(arr, tt.arr) { - t.Errorf("Expected %+v for %q, got %+v", tt.arr, tt.str, arr) - } - } -} - -func TestByteaArrayScanError(t *testing.T) { - for _, tt := range []struct { - input, err string - }{ - {``, "unable to parse array"}, - {`{`, "unable to parse array"}, - {`{{"\\xfeff"},{"\\xbeef"}}`, "cannot convert ARRAY[2][1] to ByteaArray"}, - {`{"\\abc"}`, "could not parse bytea array index 0: could not parse bytea value"}, - } { - arr := ByteaArray{{2}, {6}, {0, 0}} - err := arr.Scan(tt.input) - - if err == nil { - t.Fatalf("Expected error for %q, got none", tt.input) - } - if !strings.Contains(err.Error(), tt.err) { - t.Errorf("Expected error to contain %q for %q, got %q", tt.err, tt.input, err) - } - if !reflect.DeepEqual(arr, ByteaArray{{2}, {6}, {0, 0}}) { - t.Errorf("Expected destination not to change for %q, got %+v", tt.input, arr) - } - } -} - -func TestByteaArrayValue(t *testing.T) { - result, err := ByteaArray(nil).Value() - - if err != nil { - t.Fatalf("Expected no error for nil, got %v", err) - } - if result != nil { - t.Errorf("Expected nil, got %q", result) - } - - result, err = ByteaArray([][]byte{}).Value() - - if err != nil { - t.Fatalf("Expected no error for empty, got %v", err) - } - if expected := `{}`; !reflect.DeepEqual(result, expected) { - t.Errorf("Expected empty, got %q", result) - } - - result, err = ByteaArray([][]byte{{'\xDE', '\xAD', '\xBE', '\xEF'}, {'\xFE', '\xFF'}, {}}).Value() - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if expected := `{"\\xdeadbeef","\\xfeff","\\x"}`; !reflect.DeepEqual(result, expected) { - t.Errorf("Expected %q, got %q", expected, result) - } -} - -func BenchmarkByteaArrayValue(b *testing.B) { - rand.Seed(1) - x := make([][]byte, 10) - for i := 0; i < len(x); i++ { - x[i] = make([]byte, len(x)) - for j := 0; j < len(x); j++ { - x[i][j] = byte(rand.Int()) - } - } - a := ByteaArray(x) - - for i := 0; i < b.N; i++ { - a.Value() - } -} - -func TestFloat64ArrayScanUnsupported(t *testing.T) { - var arr Float64Array - err := arr.Scan(true) - - if err == nil { - t.Fatal("Expected error when scanning from bool") - } - if !strings.Contains(err.Error(), "bool to Float64Array") { - t.Errorf("Expected type to be mentioned when scanning, got %q", err) - } -} - -func TestFloat64ArrayScanEmpty(t *testing.T) { - var arr Float64Array - err := arr.Scan(`{}`) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if arr == nil || len(arr) != 0 { - t.Errorf("Expected empty, got %#v", arr) - } -} - -func TestFloat64ArrayScanNil(t *testing.T) { - arr := Float64Array{5, 5, 5} - err := arr.Scan(nil) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if arr != nil { - t.Errorf("Expected nil, got %+v", arr) - } -} - -var Float64ArrayStringTests = []struct { - str string - arr Float64Array -}{ - {`{}`, Float64Array{}}, - {`{1.2}`, Float64Array{1.2}}, - {`{3.456,7.89}`, Float64Array{3.456, 7.89}}, - {`{3,1,2}`, Float64Array{3, 1, 2}}, -} - -func TestFloat64ArrayScanBytes(t *testing.T) { - for _, tt := range Float64ArrayStringTests { - bytes := []byte(tt.str) - arr := Float64Array{5, 5, 5} - err := arr.Scan(bytes) - - if err != nil { - t.Fatalf("Expected no error for %q, got %v", bytes, err) - } - if !reflect.DeepEqual(arr, tt.arr) { - t.Errorf("Expected %+v for %q, got %+v", tt.arr, bytes, arr) - } - } -} - -func BenchmarkFloat64ArrayScanBytes(b *testing.B) { - var a Float64Array - var x interface{} = []byte(`{1.2,3.4,5.6,7.8,9.01,2.34,5.67,8.90,1.234,5.678}`) - - for i := 0; i < b.N; i++ { - a = Float64Array{} - a.Scan(x) - } -} - -func TestFloat64ArrayScanString(t *testing.T) { - for _, tt := range Float64ArrayStringTests { - arr := Float64Array{5, 5, 5} - err := arr.Scan(tt.str) - - if err != nil { - t.Fatalf("Expected no error for %q, got %v", tt.str, err) - } - if !reflect.DeepEqual(arr, tt.arr) { - t.Errorf("Expected %+v for %q, got %+v", tt.arr, tt.str, arr) - } - } -} - -func TestFloat64ArrayScanError(t *testing.T) { - for _, tt := range []struct { - input, err string - }{ - {``, "unable to parse array"}, - {`{`, "unable to parse array"}, - {`{{5.6},{7.8}}`, "cannot convert ARRAY[2][1] to Float64Array"}, - {`{NULL}`, "parsing array element index 0:"}, - {`{a}`, "parsing array element index 0:"}, - {`{5.6,a}`, "parsing array element index 1:"}, - {`{5.6,7.8,a}`, "parsing array element index 2:"}, - } { - arr := Float64Array{5, 5, 5} - err := arr.Scan(tt.input) - - if err == nil { - t.Fatalf("Expected error for %q, got none", tt.input) - } - if !strings.Contains(err.Error(), tt.err) { - t.Errorf("Expected error to contain %q for %q, got %q", tt.err, tt.input, err) - } - if !reflect.DeepEqual(arr, Float64Array{5, 5, 5}) { - t.Errorf("Expected destination not to change for %q, got %+v", tt.input, arr) - } - } -} - -func TestFloat64ArrayValue(t *testing.T) { - result, err := Float64Array(nil).Value() - - if err != nil { - t.Fatalf("Expected no error for nil, got %v", err) - } - if result != nil { - t.Errorf("Expected nil, got %q", result) - } - - result, err = Float64Array([]float64{}).Value() - - if err != nil { - t.Fatalf("Expected no error for empty, got %v", err) - } - if expected := `{}`; !reflect.DeepEqual(result, expected) { - t.Errorf("Expected empty, got %q", result) - } - - result, err = Float64Array([]float64{1.2, 3.4, 5.6}).Value() - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if expected := `{1.2,3.4,5.6}`; !reflect.DeepEqual(result, expected) { - t.Errorf("Expected %q, got %q", expected, result) - } -} - -func BenchmarkFloat64ArrayValue(b *testing.B) { - rand.Seed(1) - x := make([]float64, 10) - for i := 0; i < len(x); i++ { - x[i] = rand.NormFloat64() - } - a := Float64Array(x) - - for i := 0; i < b.N; i++ { - a.Value() - } -} - -func TestInt64ArrayScanUnsupported(t *testing.T) { - var arr Int64Array - err := arr.Scan(true) - - if err == nil { - t.Fatal("Expected error when scanning from bool") - } - if !strings.Contains(err.Error(), "bool to Int64Array") { - t.Errorf("Expected type to be mentioned when scanning, got %q", err) - } -} - -func TestInt64ArrayScanEmpty(t *testing.T) { - var arr Int64Array - err := arr.Scan(`{}`) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if arr == nil || len(arr) != 0 { - t.Errorf("Expected empty, got %#v", arr) - } -} - -func TestInt64ArrayScanNil(t *testing.T) { - arr := Int64Array{5, 5, 5} - err := arr.Scan(nil) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if arr != nil { - t.Errorf("Expected nil, got %+v", arr) - } -} - -var Int64ArrayStringTests = []struct { - str string - arr Int64Array -}{ - {`{}`, Int64Array{}}, - {`{12}`, Int64Array{12}}, - {`{345,678}`, Int64Array{345, 678}}, -} - -func TestInt64ArrayScanBytes(t *testing.T) { - for _, tt := range Int64ArrayStringTests { - bytes := []byte(tt.str) - arr := Int64Array{5, 5, 5} - err := arr.Scan(bytes) - - if err != nil { - t.Fatalf("Expected no error for %q, got %v", bytes, err) - } - if !reflect.DeepEqual(arr, tt.arr) { - t.Errorf("Expected %+v for %q, got %+v", tt.arr, bytes, arr) - } - } -} - -func BenchmarkInt64ArrayScanBytes(b *testing.B) { - var a Int64Array - var x interface{} = []byte(`{1,2,3,4,5,6,7,8,9,0}`) - - for i := 0; i < b.N; i++ { - a = Int64Array{} - a.Scan(x) - } -} - -func TestInt64ArrayScanString(t *testing.T) { - for _, tt := range Int64ArrayStringTests { - arr := Int64Array{5, 5, 5} - err := arr.Scan(tt.str) - - if err != nil { - t.Fatalf("Expected no error for %q, got %v", tt.str, err) - } - if !reflect.DeepEqual(arr, tt.arr) { - t.Errorf("Expected %+v for %q, got %+v", tt.arr, tt.str, arr) - } - } -} - -func TestInt64ArrayScanError(t *testing.T) { - for _, tt := range []struct { - input, err string - }{ - {``, "unable to parse array"}, - {`{`, "unable to parse array"}, - {`{{5},{6}}`, "cannot convert ARRAY[2][1] to Int64Array"}, - {`{NULL}`, "parsing array element index 0:"}, - {`{a}`, "parsing array element index 0:"}, - {`{5,a}`, "parsing array element index 1:"}, - {`{5,6,a}`, "parsing array element index 2:"}, - } { - arr := Int64Array{5, 5, 5} - err := arr.Scan(tt.input) - - if err == nil { - t.Fatalf("Expected error for %q, got none", tt.input) - } - if !strings.Contains(err.Error(), tt.err) { - t.Errorf("Expected error to contain %q for %q, got %q", tt.err, tt.input, err) - } - if !reflect.DeepEqual(arr, Int64Array{5, 5, 5}) { - t.Errorf("Expected destination not to change for %q, got %+v", tt.input, arr) - } - } -} - -func TestInt64ArrayValue(t *testing.T) { - result, err := Int64Array(nil).Value() - - if err != nil { - t.Fatalf("Expected no error for nil, got %v", err) - } - if result != nil { - t.Errorf("Expected nil, got %q", result) - } - - result, err = Int64Array([]int64{}).Value() - - if err != nil { - t.Fatalf("Expected no error for empty, got %v", err) - } - if expected := `{}`; !reflect.DeepEqual(result, expected) { - t.Errorf("Expected empty, got %q", result) - } - - result, err = Int64Array([]int64{1, 2, 3}).Value() - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if expected := `{1,2,3}`; !reflect.DeepEqual(result, expected) { - t.Errorf("Expected %q, got %q", expected, result) - } -} - -func BenchmarkInt64ArrayValue(b *testing.B) { - rand.Seed(1) - x := make([]int64, 10) - for i := 0; i < len(x); i++ { - x[i] = rand.Int63() - } - a := Int64Array(x) - - for i := 0; i < b.N; i++ { - a.Value() - } -} - -func TestStringArrayScanUnsupported(t *testing.T) { - var arr StringArray - err := arr.Scan(true) - - if err == nil { - t.Fatal("Expected error when scanning from bool") - } - if !strings.Contains(err.Error(), "bool to StringArray") { - t.Errorf("Expected type to be mentioned when scanning, got %q", err) - } -} - -func TestStringArrayScanEmpty(t *testing.T) { - var arr StringArray - err := arr.Scan(`{}`) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if arr == nil || len(arr) != 0 { - t.Errorf("Expected empty, got %#v", arr) - } -} - -func TestStringArrayScanNil(t *testing.T) { - arr := StringArray{"x", "x", "x"} - err := arr.Scan(nil) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if arr != nil { - t.Errorf("Expected nil, got %+v", arr) - } -} - -var StringArrayStringTests = []struct { - str string - arr StringArray -}{ - {`{}`, StringArray{}}, - {`{t}`, StringArray{"t"}}, - {`{f,1}`, StringArray{"f", "1"}}, - {`{"a\\b","c d",","}`, StringArray{"a\\b", "c d", ","}}, -} - -func TestStringArrayScanBytes(t *testing.T) { - for _, tt := range StringArrayStringTests { - bytes := []byte(tt.str) - arr := StringArray{"x", "x", "x"} - err := arr.Scan(bytes) - - if err != nil { - t.Fatalf("Expected no error for %q, got %v", bytes, err) - } - if !reflect.DeepEqual(arr, tt.arr) { - t.Errorf("Expected %+v for %q, got %+v", tt.arr, bytes, arr) - } - } -} - -func BenchmarkStringArrayScanBytes(b *testing.B) { - var a StringArray - var x interface{} = []byte(`{a,b,c,d,e,f,g,h,i,j}`) - var y interface{} = []byte(`{"\a","\b","\c","\d","\e","\f","\g","\h","\i","\j"}`) - - for i := 0; i < b.N; i++ { - a = StringArray{} - a.Scan(x) - a = StringArray{} - a.Scan(y) - } -} - -func TestStringArrayScanString(t *testing.T) { - for _, tt := range StringArrayStringTests { - arr := StringArray{"x", "x", "x"} - err := arr.Scan(tt.str) - - if err != nil { - t.Fatalf("Expected no error for %q, got %v", tt.str, err) - } - if !reflect.DeepEqual(arr, tt.arr) { - t.Errorf("Expected %+v for %q, got %+v", tt.arr, tt.str, arr) - } - } -} - -func TestStringArrayScanError(t *testing.T) { - for _, tt := range []struct { - input, err string - }{ - {``, "unable to parse array"}, - {`{`, "unable to parse array"}, - {`{{a},{b}}`, "cannot convert ARRAY[2][1] to StringArray"}, - {`{NULL}`, "parsing array element index 0: cannot convert nil to string"}, - {`{a,NULL}`, "parsing array element index 1: cannot convert nil to string"}, - {`{a,b,NULL}`, "parsing array element index 2: cannot convert nil to string"}, - } { - arr := StringArray{"x", "x", "x"} - err := arr.Scan(tt.input) - - if err == nil { - t.Fatalf("Expected error for %q, got none", tt.input) - } - if !strings.Contains(err.Error(), tt.err) { - t.Errorf("Expected error to contain %q for %q, got %q", tt.err, tt.input, err) - } - if !reflect.DeepEqual(arr, StringArray{"x", "x", "x"}) { - t.Errorf("Expected destination not to change for %q, got %+v", tt.input, arr) - } - } -} - -func TestStringArrayValue(t *testing.T) { - result, err := StringArray(nil).Value() - - if err != nil { - t.Fatalf("Expected no error for nil, got %v", err) - } - if result != nil { - t.Errorf("Expected nil, got %q", result) - } - - result, err = StringArray([]string{}).Value() - - if err != nil { - t.Fatalf("Expected no error for empty, got %v", err) - } - if expected := `{}`; !reflect.DeepEqual(result, expected) { - t.Errorf("Expected empty, got %q", result) - } - - result, err = StringArray([]string{`a`, `\b`, `c"`, `d,e`}).Value() - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if expected := `{"a","\\b","c\"","d,e"}`; !reflect.DeepEqual(result, expected) { - t.Errorf("Expected %q, got %q", expected, result) - } -} - -func BenchmarkStringArrayValue(b *testing.B) { - x := make([]string, 10) - for i := 0; i < len(x); i++ { - x[i] = strings.Repeat(`abc"def\ghi`, 5) - } - a := StringArray(x) - - for i := 0; i < b.N; i++ { - a.Value() - } -} - -func TestGenericArrayScanUnsupported(t *testing.T) { - var s string - var ss []string - var nsa [1]sql.NullString - - for _, tt := range []struct { - src, dest interface{} - err string - }{ - {nil, nil, "destination is not a pointer to array or slice"}, - {nil, true, "destination bool is not a pointer to array or slice"}, - {nil, &s, "destination *string is not a pointer to array or slice"}, - {nil, ss, "destination []string is not a pointer to array or slice"}, - {nil, &nsa, " to [1]sql.NullString"}, - {true, &ss, "bool to []string"}, - {`{{x}}`, &ss, "multidimensional ARRAY[1][1] is not implemented"}, - {`{{x},{x}}`, &ss, "multidimensional ARRAY[2][1] is not implemented"}, - {`{x}`, &ss, "scanning to string is not implemented"}, - } { - err := GenericArray{tt.dest}.Scan(tt.src) - - if err == nil { - t.Fatalf("Expected error for [%#v %#v]", tt.src, tt.dest) - } - if !strings.Contains(err.Error(), tt.err) { - t.Errorf("Expected error to contain %q for [%#v %#v], got %q", tt.err, tt.src, tt.dest, err) - } - } -} - -func TestGenericArrayScanScannerArrayBytes(t *testing.T) { - src, expected, nsa := []byte(`{NULL,abc,"\""}`), - [3]sql.NullString{{}, {String: `abc`, Valid: true}, {String: `"`, Valid: true}}, - [3]sql.NullString{{String: ``, Valid: true}, {}, {}} - - if err := (GenericArray{&nsa}).Scan(src); err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if !reflect.DeepEqual(nsa, expected) { - t.Errorf("Expected %v, got %v", expected, nsa) - } -} - -func TestGenericArrayScanScannerArrayString(t *testing.T) { - src, expected, nsa := `{NULL,"\"",xyz}`, - [3]sql.NullString{{}, {String: `"`, Valid: true}, {String: `xyz`, Valid: true}}, - [3]sql.NullString{{String: ``, Valid: true}, {}, {}} - - if err := (GenericArray{&nsa}).Scan(src); err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if !reflect.DeepEqual(nsa, expected) { - t.Errorf("Expected %v, got %v", expected, nsa) - } -} - -func TestGenericArrayScanScannerSliceEmpty(t *testing.T) { - var nss []sql.NullString - - if err := (GenericArray{&nss}).Scan(`{}`); err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if nss == nil || len(nss) != 0 { - t.Errorf("Expected empty, got %#v", nss) - } -} - -func TestGenericArrayScanScannerSliceNil(t *testing.T) { - nss := []sql.NullString{{String: ``, Valid: true}, {}} - - if err := (GenericArray{&nss}).Scan(nil); err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if nss != nil { - t.Errorf("Expected nil, got %+v", nss) - } -} - -func TestGenericArrayScanScannerSliceBytes(t *testing.T) { - src, expected, nss := []byte(`{NULL,abc,"\""}`), - []sql.NullString{{}, {String: `abc`, Valid: true}, {String: `"`, Valid: true}}, - []sql.NullString{{String: ``, Valid: true}, {}, {}, {}, {}} - - if err := (GenericArray{&nss}).Scan(src); err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if !reflect.DeepEqual(nss, expected) { - t.Errorf("Expected %v, got %v", expected, nss) - } -} - -func BenchmarkGenericArrayScanScannerSliceBytes(b *testing.B) { - var a GenericArray - var x interface{} = []byte(`{a,b,c,d,e,f,g,h,i,j}`) - var y interface{} = []byte(`{"\a","\b","\c","\d","\e","\f","\g","\h","\i","\j"}`) - - for i := 0; i < b.N; i++ { - a = GenericArray{new([]sql.NullString)} - a.Scan(x) - a = GenericArray{new([]sql.NullString)} - a.Scan(y) - } -} - -func TestGenericArrayScanScannerSliceString(t *testing.T) { - src, expected, nss := `{NULL,"\"",xyz}`, - []sql.NullString{{}, {String: `"`, Valid: true}, {String: `xyz`, Valid: true}}, - []sql.NullString{{String: ``, Valid: true}, {}, {}} - - if err := (GenericArray{&nss}).Scan(src); err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if !reflect.DeepEqual(nss, expected) { - t.Errorf("Expected %v, got %v", expected, nss) - } -} - -type TildeNullInt64 struct{ sql.NullInt64 } - -func (TildeNullInt64) ArrayDelimiter() string { return "~" } - -func TestGenericArrayScanDelimiter(t *testing.T) { - src, expected, tnis := `{12~NULL~76}`, - []TildeNullInt64{{sql.NullInt64{Int64: 12, Valid: true}}, {}, {sql.NullInt64{Int64: 76, Valid: true}}}, - []TildeNullInt64{{sql.NullInt64{Int64: 0, Valid: true}}, {}} - - if err := (GenericArray{&tnis}).Scan(src); err != nil { - t.Fatalf("Expected no error for %#v, got %v", src, err) - } - if !reflect.DeepEqual(tnis, expected) { - t.Errorf("Expected %v for %#v, got %v", expected, src, tnis) - } -} - -func TestGenericArrayScanErrors(t *testing.T) { - var sa [1]string - var nis []sql.NullInt64 - var pss *[]string - - for _, tt := range []struct { - src, dest interface{} - err string - }{ - {nil, pss, "destination *[]string is nil"}, - {`{`, &sa, "unable to parse"}, - {`{}`, &sa, "cannot convert ARRAY[0] to [1]string"}, - {`{x,x}`, &sa, "cannot convert ARRAY[2] to [1]string"}, - {`{x}`, &nis, `parsing array element index 0: converting`}, - } { - err := GenericArray{tt.dest}.Scan(tt.src) - - if err == nil { - t.Fatalf("Expected error for [%#v %#v]", tt.src, tt.dest) - } - if !strings.Contains(err.Error(), tt.err) { - t.Errorf("Expected error to contain %q for [%#v %#v], got %q", tt.err, tt.src, tt.dest, err) - } - } -} - -func TestGenericArrayValueUnsupported(t *testing.T) { - _, err := GenericArray{true}.Value() - - if err == nil { - t.Fatal("Expected error for bool") - } - if !strings.Contains(err.Error(), "bool to array") { - t.Errorf("Expected type to be mentioned, got %q", err) - } -} - -type ByteArrayValuer [1]byte -type ByteSliceValuer []byte -type FuncArrayValuer struct { - delimiter func() string - value func() (driver.Value, error) -} - -func (a ByteArrayValuer) Value() (driver.Value, error) { return a[:], nil } -func (b ByteSliceValuer) Value() (driver.Value, error) { return []byte(b), nil } -func (f FuncArrayValuer) ArrayDelimiter() string { return f.delimiter() } -func (f FuncArrayValuer) Value() (driver.Value, error) { return f.value() } - -func TestGenericArrayValue(t *testing.T) { - result, err := GenericArray{nil}.Value() - - if err != nil { - t.Fatalf("Expected no error for nil, got %v", err) - } - if result != nil { - t.Errorf("Expected nil, got %q", result) - } - - for _, tt := range []interface{}{ - []bool(nil), - [][]int(nil), - []*int(nil), - []sql.NullString(nil), - } { - result, err := GenericArray{tt}.Value() - - if err != nil { - t.Fatalf("Expected no error for %#v, got %v", tt, err) - } - if result != nil { - t.Errorf("Expected nil for %#v, got %q", tt, result) - } - } - - Tilde := func(v driver.Value) FuncArrayValuer { - return FuncArrayValuer{ - func() string { return "~" }, - func() (driver.Value, error) { return v, nil }} - } - - for _, tt := range []struct { - result string - input interface{} - }{ - {`{}`, []bool{}}, - {`{true}`, []bool{true}}, - {`{true,false}`, []bool{true, false}}, - {`{true,false}`, [2]bool{true, false}}, - - {`{}`, [][]int{{}}}, - {`{}`, [][]int{{}, {}}}, - {`{{1}}`, [][]int{{1}}}, - {`{{1},{2}}`, [][]int{{1}, {2}}}, - {`{{1,2},{3,4}}`, [][]int{{1, 2}, {3, 4}}}, - {`{{1,2},{3,4}}`, [2][2]int{{1, 2}, {3, 4}}}, - - {`{"a","\\b","c\"","d,e"}`, []string{`a`, `\b`, `c"`, `d,e`}}, - {`{"a","\\b","c\"","d,e"}`, [][]byte{{'a'}, {'\\', 'b'}, {'c', '"'}, {'d', ',', 'e'}}}, - - {`{NULL}`, []*int{nil}}, - {`{0,NULL}`, []*int{new(int), nil}}, - - {`{NULL}`, []sql.NullString{{}}}, - {`{"\"",NULL}`, []sql.NullString{{String: `"`, Valid: true}, {}}}, - - {`{"a","b"}`, []ByteArrayValuer{{'a'}, {'b'}}}, - {`{{"a","b"},{"c","d"}}`, [][]ByteArrayValuer{{{'a'}, {'b'}}, {{'c'}, {'d'}}}}, - - {`{"e","f"}`, []ByteSliceValuer{{'e'}, {'f'}}}, - {`{{"e","f"},{"g","h"}}`, [][]ByteSliceValuer{{{'e'}, {'f'}}, {{'g'}, {'h'}}}}, - - {`{1~2}`, []FuncArrayValuer{Tilde(int64(1)), Tilde(int64(2))}}, - {`{{1~2}~{3~4}}`, [][]FuncArrayValuer{{Tilde(int64(1)), Tilde(int64(2))}, {Tilde(int64(3)), Tilde(int64(4))}}}, - } { - result, err := GenericArray{tt.input}.Value() - - if err != nil { - t.Fatalf("Expected no error for %q, got %v", tt.input, err) - } - if !reflect.DeepEqual(result, tt.result) { - t.Errorf("Expected %q for %q, got %q", tt.result, tt.input, result) - } - } -} - -func TestGenericArrayValueErrors(t *testing.T) { - v := []interface{}{func() {}} - if _, err := (GenericArray{v}).Value(); err == nil { - t.Errorf("Expected error for %q, got nil", v) - } - - v = []interface{}{nil, func() {}} - if _, err := (GenericArray{v}).Value(); err == nil { - t.Errorf("Expected error for %q, got nil", v) - } -} - -func BenchmarkGenericArrayValueBools(b *testing.B) { - rand.Seed(1) - x := make([]bool, 10) - for i := 0; i < len(x); i++ { - x[i] = rand.Intn(2) == 0 - } - a := GenericArray{x} - - for i := 0; i < b.N; i++ { - a.Value() - } -} - -func BenchmarkGenericArrayValueFloat64s(b *testing.B) { - rand.Seed(1) - x := make([]float64, 10) - for i := 0; i < len(x); i++ { - x[i] = rand.NormFloat64() - } - a := GenericArray{x} - - for i := 0; i < b.N; i++ { - a.Value() - } -} - -func BenchmarkGenericArrayValueInt64s(b *testing.B) { - rand.Seed(1) - x := make([]int64, 10) - for i := 0; i < len(x); i++ { - x[i] = rand.Int63() - } - a := GenericArray{x} - - for i := 0; i < b.N; i++ { - a.Value() - } -} - -func BenchmarkGenericArrayValueByteSlices(b *testing.B) { - x := make([][]byte, 10) - for i := 0; i < len(x); i++ { - x[i] = bytes.Repeat([]byte(`abc"def\ghi`), 5) - } - a := GenericArray{x} - - for i := 0; i < b.N; i++ { - a.Value() - } -} - -func BenchmarkGenericArrayValueStrings(b *testing.B) { - x := make([]string, 10) - for i := 0; i < len(x); i++ { - x[i] = strings.Repeat(`abc"def\ghi`, 5) - } - a := GenericArray{x} - - for i := 0; i < b.N; i++ { - a.Value() - } -} - -func TestArrayScanBackend(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - for _, tt := range []struct { - s string - d sql.Scanner - e interface{} - }{ - {`ARRAY[true, false]`, new(BoolArray), &BoolArray{true, false}}, - {`ARRAY[E'\\xdead', E'\\xbeef']`, new(ByteaArray), &ByteaArray{{'\xDE', '\xAD'}, {'\xBE', '\xEF'}}}, - {`ARRAY[1.2, 3.4]`, new(Float64Array), &Float64Array{1.2, 3.4}}, - {`ARRAY[1, 2, 3]`, new(Int64Array), &Int64Array{1, 2, 3}}, - {`ARRAY['a', E'\\b', 'c"', 'd,e']`, new(StringArray), &StringArray{`a`, `\b`, `c"`, `d,e`}}, - } { - err := db.QueryRow(`SELECT ` + tt.s).Scan(tt.d) - if err != nil { - t.Errorf("Expected no error when scanning %s into %T, got %v", tt.s, tt.d, err) - } - if !reflect.DeepEqual(tt.d, tt.e) { - t.Errorf("Expected %v when scanning %s into %T, got %v", tt.e, tt.s, tt.d, tt.d) - } - } -} - -func TestArrayValueBackend(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - for _, tt := range []struct { - s string - v driver.Valuer - }{ - {`ARRAY[true, false]`, BoolArray{true, false}}, - {`ARRAY[E'\\xdead', E'\\xbeef']`, ByteaArray{{'\xDE', '\xAD'}, {'\xBE', '\xEF'}}}, - {`ARRAY[1.2, 3.4]`, Float64Array{1.2, 3.4}}, - {`ARRAY[1, 2, 3]`, Int64Array{1, 2, 3}}, - {`ARRAY['a', E'\\b', 'c"', 'd,e']`, StringArray{`a`, `\b`, `c"`, `d,e`}}, - } { - var x int - err := db.QueryRow(`SELECT 1 WHERE `+tt.s+` <> $1`, tt.v).Scan(&x) - if err != sql.ErrNoRows { - t.Errorf("Expected %v to equal %s, got %v", tt.v, tt.s, err) - } - } -} diff --git a/vendor/github.com/lib/pq/bench_test.go b/vendor/github.com/lib/pq/bench_test.go deleted file mode 100644 index b3754980..00000000 --- a/vendor/github.com/lib/pq/bench_test.go +++ /dev/null @@ -1,434 +0,0 @@ -package pq - -import ( - "bufio" - "bytes" - "context" - "database/sql" - "database/sql/driver" - "io" - "math/rand" - "net" - "runtime" - "strconv" - "strings" - "sync" - "testing" - "time" - - "github.com/lib/pq/oid" -) - -var ( - selectStringQuery = "SELECT '" + strings.Repeat("0123456789", 10) + "'" - selectSeriesQuery = "SELECT generate_series(1, 100)" -) - -func BenchmarkSelectString(b *testing.B) { - var result string - benchQuery(b, selectStringQuery, &result) -} - -func BenchmarkSelectSeries(b *testing.B) { - var result int - benchQuery(b, selectSeriesQuery, &result) -} - -func benchQuery(b *testing.B, query string, result interface{}) { - b.StopTimer() - db := openTestConn(b) - defer db.Close() - b.StartTimer() - - for i := 0; i < b.N; i++ { - benchQueryLoop(b, db, query, result) - } -} - -func benchQueryLoop(b *testing.B, db *sql.DB, query string, result interface{}) { - rows, err := db.Query(query) - if err != nil { - b.Fatal(err) - } - defer rows.Close() - for rows.Next() { - err = rows.Scan(result) - if err != nil { - b.Fatal("failed to scan", err) - } - } -} - -// reading from circularConn yields content[:prefixLen] once, followed by -// content[prefixLen:] over and over again. It never returns EOF. -type circularConn struct { - content string - prefixLen int - pos int - net.Conn // for all other net.Conn methods that will never be called -} - -func (r *circularConn) Read(b []byte) (n int, err error) { - n = copy(b, r.content[r.pos:]) - r.pos += n - if r.pos >= len(r.content) { - r.pos = r.prefixLen - } - return -} - -func (r *circularConn) Write(b []byte) (n int, err error) { return len(b), nil } - -func (r *circularConn) Close() error { return nil } - -func fakeConn(content string, prefixLen int) *conn { - c := &circularConn{content: content, prefixLen: prefixLen} - return &conn{buf: bufio.NewReader(c), c: c} -} - -// This benchmark is meant to be the same as BenchmarkSelectString, but takes -// out some of the factors this package can't control. The numbers are less noisy, -// but also the costs of network communication aren't accurately represented. -func BenchmarkMockSelectString(b *testing.B) { - b.StopTimer() - // taken from a recorded run of BenchmarkSelectString - // See: http://www.postgresql.org/docs/current/static/protocol-message-formats.html - const response = "1\x00\x00\x00\x04" + - "t\x00\x00\x00\x06\x00\x00" + - "T\x00\x00\x00!\x00\x01?column?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xc1\xff\xfe\xff\xff\xff\xff\x00\x00" + - "Z\x00\x00\x00\x05I" + - "2\x00\x00\x00\x04" + - "D\x00\x00\x00n\x00\x01\x00\x00\x00d0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" + - "C\x00\x00\x00\rSELECT 1\x00" + - "Z\x00\x00\x00\x05I" + - "3\x00\x00\x00\x04" + - "Z\x00\x00\x00\x05I" - c := fakeConn(response, 0) - b.StartTimer() - - for i := 0; i < b.N; i++ { - benchMockQuery(b, c, selectStringQuery) - } -} - -var seriesRowData = func() string { - var buf bytes.Buffer - for i := 1; i <= 100; i++ { - digits := byte(2) - if i >= 100 { - digits = 3 - } else if i < 10 { - digits = 1 - } - buf.WriteString("D\x00\x00\x00") - buf.WriteByte(10 + digits) - buf.WriteString("\x00\x01\x00\x00\x00") - buf.WriteByte(digits) - buf.WriteString(strconv.Itoa(i)) - } - return buf.String() -}() - -func BenchmarkMockSelectSeries(b *testing.B) { - b.StopTimer() - var response = "1\x00\x00\x00\x04" + - "t\x00\x00\x00\x06\x00\x00" + - "T\x00\x00\x00!\x00\x01?column?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xc1\xff\xfe\xff\xff\xff\xff\x00\x00" + - "Z\x00\x00\x00\x05I" + - "2\x00\x00\x00\x04" + - seriesRowData + - "C\x00\x00\x00\x0fSELECT 100\x00" + - "Z\x00\x00\x00\x05I" + - "3\x00\x00\x00\x04" + - "Z\x00\x00\x00\x05I" - c := fakeConn(response, 0) - b.StartTimer() - - for i := 0; i < b.N; i++ { - benchMockQuery(b, c, selectSeriesQuery) - } -} - -func benchMockQuery(b *testing.B, c *conn, query string) { - stmt, err := c.Prepare(query) - if err != nil { - b.Fatal(err) - } - defer stmt.Close() - rows, err := stmt.(driver.StmtQueryContext).QueryContext(context.Background(), nil) - if err != nil { - b.Fatal(err) - } - defer rows.Close() - var dest [1]driver.Value - for { - if err := rows.Next(dest[:]); err != nil { - if err == io.EOF { - break - } - b.Fatal(err) - } - } -} - -func BenchmarkPreparedSelectString(b *testing.B) { - var result string - benchPreparedQuery(b, selectStringQuery, &result) -} - -func BenchmarkPreparedSelectSeries(b *testing.B) { - var result int - benchPreparedQuery(b, selectSeriesQuery, &result) -} - -func benchPreparedQuery(b *testing.B, query string, result interface{}) { - b.StopTimer() - db := openTestConn(b) - defer db.Close() - stmt, err := db.Prepare(query) - if err != nil { - b.Fatal(err) - } - defer stmt.Close() - b.StartTimer() - - for i := 0; i < b.N; i++ { - benchPreparedQueryLoop(b, db, stmt, result) - } -} - -func benchPreparedQueryLoop(b *testing.B, db *sql.DB, stmt *sql.Stmt, result interface{}) { - rows, err := stmt.Query() - if err != nil { - b.Fatal(err) - } - if !rows.Next() { - rows.Close() - b.Fatal("no rows") - } - defer rows.Close() - for rows.Next() { - err = rows.Scan(&result) - if err != nil { - b.Fatal("failed to scan") - } - } -} - -// See the comment for BenchmarkMockSelectString. -func BenchmarkMockPreparedSelectString(b *testing.B) { - b.StopTimer() - const parseResponse = "1\x00\x00\x00\x04" + - "t\x00\x00\x00\x06\x00\x00" + - "T\x00\x00\x00!\x00\x01?column?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xc1\xff\xfe\xff\xff\xff\xff\x00\x00" + - "Z\x00\x00\x00\x05I" - const responses = parseResponse + - "2\x00\x00\x00\x04" + - "D\x00\x00\x00n\x00\x01\x00\x00\x00d0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" + - "C\x00\x00\x00\rSELECT 1\x00" + - "Z\x00\x00\x00\x05I" - c := fakeConn(responses, len(parseResponse)) - - stmt, err := c.Prepare(selectStringQuery) - if err != nil { - b.Fatal(err) - } - b.StartTimer() - - for i := 0; i < b.N; i++ { - benchPreparedMockQuery(b, c, stmt) - } -} - -func BenchmarkMockPreparedSelectSeries(b *testing.B) { - b.StopTimer() - const parseResponse = "1\x00\x00\x00\x04" + - "t\x00\x00\x00\x06\x00\x00" + - "T\x00\x00\x00!\x00\x01?column?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xc1\xff\xfe\xff\xff\xff\xff\x00\x00" + - "Z\x00\x00\x00\x05I" - var responses = parseResponse + - "2\x00\x00\x00\x04" + - seriesRowData + - "C\x00\x00\x00\x0fSELECT 100\x00" + - "Z\x00\x00\x00\x05I" - c := fakeConn(responses, len(parseResponse)) - - stmt, err := c.Prepare(selectSeriesQuery) - if err != nil { - b.Fatal(err) - } - b.StartTimer() - - for i := 0; i < b.N; i++ { - benchPreparedMockQuery(b, c, stmt) - } -} - -func benchPreparedMockQuery(b *testing.B, c *conn, stmt driver.Stmt) { - rows, err := stmt.(driver.StmtQueryContext).QueryContext(context.Background(), nil) - if err != nil { - b.Fatal(err) - } - defer rows.Close() - var dest [1]driver.Value - for { - if err := rows.Next(dest[:]); err != nil { - if err == io.EOF { - break - } - b.Fatal(err) - } - } -} - -func BenchmarkEncodeInt64(b *testing.B) { - for i := 0; i < b.N; i++ { - encode(¶meterStatus{}, int64(1234), oid.T_int8) - } -} - -func BenchmarkEncodeFloat64(b *testing.B) { - for i := 0; i < b.N; i++ { - encode(¶meterStatus{}, 3.14159, oid.T_float8) - } -} - -var testByteString = []byte("abcdefghijklmnopqrstuvwxyz") - -func BenchmarkEncodeByteaHex(b *testing.B) { - for i := 0; i < b.N; i++ { - encode(¶meterStatus{serverVersion: 90000}, testByteString, oid.T_bytea) - } -} -func BenchmarkEncodeByteaEscape(b *testing.B) { - for i := 0; i < b.N; i++ { - encode(¶meterStatus{serverVersion: 84000}, testByteString, oid.T_bytea) - } -} - -func BenchmarkEncodeBool(b *testing.B) { - for i := 0; i < b.N; i++ { - encode(¶meterStatus{}, true, oid.T_bool) - } -} - -var testTimestamptz = time.Date(2001, time.January, 1, 0, 0, 0, 0, time.Local) - -func BenchmarkEncodeTimestamptz(b *testing.B) { - for i := 0; i < b.N; i++ { - encode(¶meterStatus{}, testTimestamptz, oid.T_timestamptz) - } -} - -var testIntBytes = []byte("1234") - -func BenchmarkDecodeInt64(b *testing.B) { - for i := 0; i < b.N; i++ { - decode(¶meterStatus{}, testIntBytes, oid.T_int8, formatText) - } -} - -var testFloatBytes = []byte("3.14159") - -func BenchmarkDecodeFloat64(b *testing.B) { - for i := 0; i < b.N; i++ { - decode(¶meterStatus{}, testFloatBytes, oid.T_float8, formatText) - } -} - -var testBoolBytes = []byte{'t'} - -func BenchmarkDecodeBool(b *testing.B) { - for i := 0; i < b.N; i++ { - decode(¶meterStatus{}, testBoolBytes, oid.T_bool, formatText) - } -} - -func TestDecodeBool(t *testing.T) { - db := openTestConn(t) - rows, err := db.Query("select true") - if err != nil { - t.Fatal(err) - } - rows.Close() -} - -var testTimestamptzBytes = []byte("2013-09-17 22:15:32.360754-07") - -func BenchmarkDecodeTimestamptz(b *testing.B) { - for i := 0; i < b.N; i++ { - decode(¶meterStatus{}, testTimestamptzBytes, oid.T_timestamptz, formatText) - } -} - -func BenchmarkDecodeTimestamptzMultiThread(b *testing.B) { - oldProcs := runtime.GOMAXPROCS(0) - defer runtime.GOMAXPROCS(oldProcs) - runtime.GOMAXPROCS(runtime.NumCPU()) - globalLocationCache = newLocationCache() - - f := func(wg *sync.WaitGroup, loops int) { - defer wg.Done() - for i := 0; i < loops; i++ { - decode(¶meterStatus{}, testTimestamptzBytes, oid.T_timestamptz, formatText) - } - } - - wg := &sync.WaitGroup{} - b.ResetTimer() - for j := 0; j < 10; j++ { - wg.Add(1) - go f(wg, b.N/10) - } - wg.Wait() -} - -func BenchmarkLocationCache(b *testing.B) { - globalLocationCache = newLocationCache() - for i := 0; i < b.N; i++ { - globalLocationCache.getLocation(rand.Intn(10000)) - } -} - -func BenchmarkLocationCacheMultiThread(b *testing.B) { - oldProcs := runtime.GOMAXPROCS(0) - defer runtime.GOMAXPROCS(oldProcs) - runtime.GOMAXPROCS(runtime.NumCPU()) - globalLocationCache = newLocationCache() - - f := func(wg *sync.WaitGroup, loops int) { - defer wg.Done() - for i := 0; i < loops; i++ { - globalLocationCache.getLocation(rand.Intn(10000)) - } - } - - wg := &sync.WaitGroup{} - b.ResetTimer() - for j := 0; j < 10; j++ { - wg.Add(1) - go f(wg, b.N/10) - } - wg.Wait() -} - -// Stress test the performance of parsing results from the wire. -func BenchmarkResultParsing(b *testing.B) { - b.StopTimer() - - db := openTestConn(b) - defer db.Close() - _, err := db.Exec("BEGIN") - if err != nil { - b.Fatal(err) - } - - b.StartTimer() - for i := 0; i < b.N; i++ { - res, err := db.Query("SELECT generate_series(1, 50000)") - if err != nil { - b.Fatal(err) - } - res.Close() - } -} diff --git a/vendor/github.com/lib/pq/buf.go b/vendor/github.com/lib/pq/buf.go index 666b0012..4b0a0a8f 100644 --- a/vendor/github.com/lib/pq/buf.go +++ b/vendor/github.com/lib/pq/buf.go @@ -66,7 +66,7 @@ func (b *writeBuf) int16(n int) { } func (b *writeBuf) string(s string) { - b.buf = append(b.buf, (s + "\000")...) + b.buf = append(append(b.buf, s...), '\000') } func (b *writeBuf) byte(c byte) { diff --git a/vendor/github.com/lib/pq/certs/README b/vendor/github.com/lib/pq/certs/README deleted file mode 100644 index 24ab7b25..00000000 --- a/vendor/github.com/lib/pq/certs/README +++ /dev/null @@ -1,3 +0,0 @@ -This directory contains certificates and private keys for testing some -SSL-related functionality in Travis. Do NOT use these certificates for -anything other than testing. diff --git a/vendor/github.com/lib/pq/certs/postgresql.key b/vendor/github.com/lib/pq/certs/postgresql.key deleted file mode 100644 index eb8b20be..00000000 --- a/vendor/github.com/lib/pq/certs/postgresql.key +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICWwIBAAKBgQDjjAaacFRR0TQ0gznNolkPBe2N2A400JL0CU3ujHhVSST4POA0 -WAKy55RYwejlu9Gv9lTBQLGQcHkNNVScjxbpwvCS5mRJOMF2+EdmxFtKtqlDzsi+ -bE0rlJc8VbzR0G63U66JXEtrhkC+wa4eZM6crocKaeXIIRK+rh32Rd8WpwIDAQAB -AoGAM5dM6/kp9P700i8qjOgRPym96Zoh5nGfz/rIE5z/r36NBkdvIg8OVZfR96nH -b0b9TOMR5lsPp0sI9yivTWvX6qyvLJRWy2vvx17hXK9NxXUNTAm0PYZUTvCtcPeX -RnJpzQKNZQPkFzF0uXBc4CtPK2Vz0+FGvAelrhYAxnw1dIkCQQD+9qaW5QhXjsjb -Nl85CmXgxPmGROcgLQCO+omfrjf9UXrituU9Dz6auym5lDGEdMFnkzfr+wpasEy9 -mf5ZZOhDAkEA5HjXfVGaCtpydOt6hDon/uZsyssCK2lQ7NSuE3vP+sUsYMzIpEoy -t3VWXqKbo+g9KNDTP4WEliqp1aiSIylzzQJANPeqzihQnlgEdD4MdD4rwhFJwVIp -Le8Lcais1KaN7StzOwxB/XhgSibd2TbnPpw+3bSg5n5lvUdo+e62/31OHwJAU1jS -I+F09KikQIr28u3UUWT2IzTT4cpVv1AHAQyV3sG3YsjSGT0IK20eyP9BEBZU2WL0 -7aNjrvR5aHxKc5FXsQJABsFtyGpgI5X4xufkJZVZ+Mklz2n7iXa+XPatMAHFxAtb -EEMt60rngwMjXAzBSC6OYuYogRRAY3UCacNC5VhLYQ== ------END RSA PRIVATE KEY----- diff --git a/vendor/github.com/lib/pq/certs/server.key b/vendor/github.com/lib/pq/certs/server.key deleted file mode 100644 index bd7b019b..00000000 --- a/vendor/github.com/lib/pq/certs/server.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEA14pMhfsXpTyP4HIRKc4/sB8/fcbuf6f8Ais1RwimPZDfXFYU -lADHbdHS4mGVd7jjpmYx+R8hfWLhJ9qUN2FK6mNToGG4nLul4ue3ptgPBQTHKeLq -SSt/3hUAphhwUMcM3pr5Wpaw4ZQGxm1KITu0D6VtkoY0sk7XDqcZwHcLe4fIkt5C -/4bSt5qk1BUjyq2laSG4zn5my4Vdue2LLQmNlOQEHnLs79B2kBVapPeRS+nOTp1d -mnAXnNjpc4PqPWGZps2skUBaiHflTiqOPRPz+ThvgWuKlcoOB6tv2rSM2f+qeAOq -x8LPb2SS09iD1a/xIxinLnsXC+d98fqoQaMEVwIDAQABAoIBAF3ZoihUhJ82F4+r -Gz4QyDpv4L1reT2sb1aiabhcU8ZK5nbWJG+tRyjSS/i2dNaEcttpdCj9HR/zhgZM -bm0OuAgG58rVwgS80CZUruq++Qs+YVojq8/gWPTiQD4SNhV2Fmx3HkwLgUk3oxuT -SsvdqzGE3okGVrutCIcgy126eA147VPMoej1Bb3fO6npqK0pFPhZfAc0YoqJuM+k -obRm5pAnGUipyLCFXjA9HYPKwYZw2RtfdA3CiImHeanSdqS+ctrC9y8BV40Th7gZ -haXdKUNdjmIxV695QQ1mkGqpKLZFqhzKioGQ2/Ly2d1iaKN9fZltTusu8unepWJ2 -tlT9qMECgYEA9uHaF1t2CqE+AJvWTihHhPIIuLxoOQXYea1qvxfcH/UMtaLKzCNm -lQ5pqCGsPvp+10f36yttO1ZehIvlVNXuJsjt0zJmPtIolNuJY76yeussfQ9jHheB -5uPEzCFlHzxYbBUyqgWaF6W74okRGzEGJXjYSP0yHPPdU4ep2q3bGiUCgYEA34Af -wBSuQSK7uLxArWHvQhyuvi43ZGXls6oRGl+Ysj54s8BP6XGkq9hEJ6G4yxgyV+BR -DUOs5X8/TLT8POuIMYvKTQthQyCk0eLv2FLdESDuuKx0kBVY3s8lK3/z5HhrdOiN -VMNZU+xDKgKc3hN9ypkk8vcZe6EtH7Y14e0rVcsCgYBTgxi8F/M5K0wG9rAqphNz -VFBA9XKn/2M33cKjO5X5tXIEKzpAjaUQvNxexG04rJGljzG8+mar0M6ONahw5yD1 -O7i/XWgazgpuOEkkVYiYbd8RutfDgR4vFVMn3hAP3eDnRtBplRWH9Ec3HTiNIys6 -F8PKBOQjyRZQQC7jyzW3hQKBgACe5HeuFwXLSOYsb6mLmhR+6+VPT4wR1F95W27N -USk9jyxAnngxfpmTkiziABdgS9N+pfr5cyN4BP77ia/Jn6kzkC5Cl9SN5KdIkA3z -vPVtN/x/ThuQU5zaymmig1ThGLtMYggYOslG4LDfLPxY5YKIhle+Y+259twdr2yf -Mf2dAoGAaGv3tWMgnIdGRk6EQL/yb9PKHo7ShN+tKNlGaK7WwzBdKs+Fe8jkgcr7 -pz4Ne887CmxejdISzOCcdT+Zm9Bx6I/uZwWOtDvWpIgIxVX9a9URj/+D1MxTE/y4 -d6H+c89yDY62I2+drMpdjCd3EtCaTlxpTbRS+s1eAHMH7aEkcCE= ------END RSA PRIVATE KEY----- diff --git a/vendor/github.com/lib/pq/conn.go b/vendor/github.com/lib/pq/conn.go index 012c8c7c..55152b12 100644 --- a/vendor/github.com/lib/pq/conn.go +++ b/vendor/github.com/lib/pq/conn.go @@ -92,6 +92,7 @@ type Dialer interface { DialTimeout(network, address string, timeout time.Duration) (net.Conn, error) } +// DialerContext is the context-aware dialer interface. type DialerContext interface { DialContext(ctx context.Context, network, address string) (net.Conn, error) } @@ -549,7 +550,7 @@ func (cn *conn) Commit() (err error) { // would get the same behaviour if you issued a COMMIT in a failed // transaction, so it's also the least surprising thing to do here. if cn.txnStatus == txnStatusInFailedTransaction { - if err := cn.Rollback(); err != nil { + if err := cn.rollback(); err != nil { return err } return ErrInFailedTransaction @@ -576,7 +577,10 @@ func (cn *conn) Rollback() (err error) { return driver.ErrBadConn } defer cn.errRecover(&err) + return cn.rollback() +} +func (cn *conn) rollback() (err error) { cn.checkIsInTransaction(true) _, commandTag, err := cn.simpleExec("ROLLBACK") if err != nil { diff --git a/vendor/github.com/lib/pq/conn_test.go b/vendor/github.com/lib/pq/conn_test.go deleted file mode 100644 index f44bbdea..00000000 --- a/vendor/github.com/lib/pq/conn_test.go +++ /dev/null @@ -1,1741 +0,0 @@ -package pq - -import ( - "context" - "database/sql" - "database/sql/driver" - "fmt" - "io" - "net" - "os" - "reflect" - "strings" - "testing" - "time" -) - -type Fatalistic interface { - Fatal(args ...interface{}) -} - -func forceBinaryParameters() bool { - bp := os.Getenv("PQTEST_BINARY_PARAMETERS") - if bp == "yes" { - return true - } else if bp == "" || bp == "no" { - return false - } else { - panic("unexpected value for PQTEST_BINARY_PARAMETERS") - } -} - -func testConninfo(conninfo string) string { - defaultTo := func(envvar string, value string) { - if os.Getenv(envvar) == "" { - os.Setenv(envvar, value) - } - } - defaultTo("PGDATABASE", "pqgotest") - defaultTo("PGSSLMODE", "disable") - defaultTo("PGCONNECT_TIMEOUT", "20") - - if forceBinaryParameters() && - !strings.HasPrefix(conninfo, "postgres://") && - !strings.HasPrefix(conninfo, "postgresql://") { - conninfo = conninfo + " binary_parameters=yes" - } - return conninfo -} - -func openTestConnConninfo(conninfo string) (*sql.DB, error) { - return sql.Open("postgres", testConninfo(conninfo)) -} - -func openTestConn(t Fatalistic) *sql.DB { - conn, err := openTestConnConninfo("") - if err != nil { - t.Fatal(err) - } - - return conn -} - -func getServerVersion(t *testing.T, db *sql.DB) int { - var version int - err := db.QueryRow("SHOW server_version_num").Scan(&version) - if err != nil { - t.Fatal(err) - } - return version -} - -func TestReconnect(t *testing.T) { - db1 := openTestConn(t) - defer db1.Close() - tx, err := db1.Begin() - if err != nil { - t.Fatal(err) - } - var pid1 int - err = tx.QueryRow("SELECT pg_backend_pid()").Scan(&pid1) - if err != nil { - t.Fatal(err) - } - db2 := openTestConn(t) - defer db2.Close() - _, err = db2.Exec("SELECT pg_terminate_backend($1)", pid1) - if err != nil { - t.Fatal(err) - } - // The rollback will probably "fail" because we just killed - // its connection above - _ = tx.Rollback() - - const expected int = 42 - var result int - err = db1.QueryRow(fmt.Sprintf("SELECT %d", expected)).Scan(&result) - if err != nil { - t.Fatal(err) - } - if result != expected { - t.Errorf("got %v; expected %v", result, expected) - } -} - -func TestCommitInFailedTransaction(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - rows, err := txn.Query("SELECT error") - if err == nil { - rows.Close() - t.Fatal("expected failure") - } - err = txn.Commit() - if err != ErrInFailedTransaction { - t.Fatalf("expected ErrInFailedTransaction; got %#v", err) - } -} - -func TestOpenURL(t *testing.T) { - testURL := func(url string) { - db, err := openTestConnConninfo(url) - if err != nil { - t.Fatal(err) - } - defer db.Close() - // database/sql might not call our Open at all unless we do something with - // the connection - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - txn.Rollback() - } - testURL("postgres://") - testURL("postgresql://") -} - -const pgpassFile = "/tmp/pqgotest_pgpass" - -func TestPgpass(t *testing.T) { - if os.Getenv("TRAVIS") != "true" { - t.Skip("not running under Travis, skipping pgpass tests") - } - - testAssert := func(conninfo string, expected string, reason string) { - conn, err := openTestConnConninfo(conninfo) - if err != nil { - t.Fatal(err) - } - defer conn.Close() - - txn, err := conn.Begin() - if err != nil { - if expected != "fail" { - t.Fatalf(reason, err) - } - return - } - rows, err := txn.Query("SELECT USER") - if err != nil { - txn.Rollback() - if expected != "fail" { - t.Fatalf(reason, err) - } - } else { - rows.Close() - if expected != "ok" { - t.Fatalf(reason, err) - } - } - txn.Rollback() - } - testAssert("", "ok", "missing .pgpass, unexpected error %#v") - os.Setenv("PGPASSFILE", pgpassFile) - testAssert("host=/tmp", "fail", ", unexpected error %#v") - os.Remove(pgpassFile) - pgpass, err := os.OpenFile(pgpassFile, os.O_RDWR|os.O_CREATE, 0644) - if err != nil { - t.Fatalf("Unexpected error writing pgpass file %#v", err) - } - _, err = pgpass.WriteString(`# comment -server:5432:some_db:some_user:pass_A -*:5432:some_db:some_user:pass_B -localhost:*:*:*:pass_C -*:*:*:*:pass_fallback -`) - if err != nil { - t.Fatalf("Unexpected error writing pgpass file %#v", err) - } - pgpass.Close() - - assertPassword := func(extra values, expected string) { - o := values{ - "host": "localhost", - "sslmode": "disable", - "connect_timeout": "20", - "user": "majid", - "port": "5432", - "extra_float_digits": "2", - "dbname": "pqgotest", - "client_encoding": "UTF8", - "datestyle": "ISO, MDY", - } - for k, v := range extra { - o[k] = v - } - (&conn{}).handlePgpass(o) - if pw := o["password"]; pw != expected { - t.Fatalf("For %v expected %s got %s", extra, expected, pw) - } - } - // wrong permissions for the pgpass file means it should be ignored - assertPassword(values{"host": "example.com", "user": "foo"}, "") - // fix the permissions and check if it has taken effect - os.Chmod(pgpassFile, 0600) - assertPassword(values{"host": "server", "dbname": "some_db", "user": "some_user"}, "pass_A") - assertPassword(values{"host": "example.com", "user": "foo"}, "pass_fallback") - assertPassword(values{"host": "example.com", "dbname": "some_db", "user": "some_user"}, "pass_B") - // localhost also matches the default "" and UNIX sockets - assertPassword(values{"host": "", "user": "some_user"}, "pass_C") - assertPassword(values{"host": "/tmp", "user": "some_user"}, "pass_C") - // cleanup - os.Remove(pgpassFile) - os.Setenv("PGPASSFILE", "") -} - -func TestExec(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - _, err := db.Exec("CREATE TEMP TABLE temp (a int)") - if err != nil { - t.Fatal(err) - } - - r, err := db.Exec("INSERT INTO temp VALUES (1)") - if err != nil { - t.Fatal(err) - } - - if n, _ := r.RowsAffected(); n != 1 { - t.Fatalf("expected 1 row affected, not %d", n) - } - - r, err = db.Exec("INSERT INTO temp VALUES ($1), ($2), ($3)", 1, 2, 3) - if err != nil { - t.Fatal(err) - } - - if n, _ := r.RowsAffected(); n != 3 { - t.Fatalf("expected 3 rows affected, not %d", n) - } - - // SELECT doesn't send the number of returned rows in the command tag - // before 9.0 - if getServerVersion(t, db) >= 90000 { - r, err = db.Exec("SELECT g FROM generate_series(1, 2) g") - if err != nil { - t.Fatal(err) - } - if n, _ := r.RowsAffected(); n != 2 { - t.Fatalf("expected 2 rows affected, not %d", n) - } - - r, err = db.Exec("SELECT g FROM generate_series(1, $1) g", 3) - if err != nil { - t.Fatal(err) - } - if n, _ := r.RowsAffected(); n != 3 { - t.Fatalf("expected 3 rows affected, not %d", n) - } - } -} - -func TestStatment(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - st, err := db.Prepare("SELECT 1") - if err != nil { - t.Fatal(err) - } - - st1, err := db.Prepare("SELECT 2") - if err != nil { - t.Fatal(err) - } - - r, err := st.Query() - if err != nil { - t.Fatal(err) - } - defer r.Close() - - if !r.Next() { - t.Fatal("expected row") - } - - var i int - err = r.Scan(&i) - if err != nil { - t.Fatal(err) - } - - if i != 1 { - t.Fatalf("expected 1, got %d", i) - } - - // st1 - - r1, err := st1.Query() - if err != nil { - t.Fatal(err) - } - defer r1.Close() - - if !r1.Next() { - if r.Err() != nil { - t.Fatal(r1.Err()) - } - t.Fatal("expected row") - } - - err = r1.Scan(&i) - if err != nil { - t.Fatal(err) - } - - if i != 2 { - t.Fatalf("expected 2, got %d", i) - } -} - -func TestRowsCloseBeforeDone(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - r, err := db.Query("SELECT 1") - if err != nil { - t.Fatal(err) - } - - err = r.Close() - if err != nil { - t.Fatal(err) - } - - if r.Next() { - t.Fatal("unexpected row") - } - - if r.Err() != nil { - t.Fatal(r.Err()) - } -} - -func TestParameterCountMismatch(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - var notused int - err := db.QueryRow("SELECT false", 1).Scan(¬used) - if err == nil { - t.Fatal("expected err") - } - // make sure we clean up correctly - err = db.QueryRow("SELECT 1").Scan(¬used) - if err != nil { - t.Fatal(err) - } - - err = db.QueryRow("SELECT $1").Scan(¬used) - if err == nil { - t.Fatal("expected err") - } - // make sure we clean up correctly - err = db.QueryRow("SELECT 1").Scan(¬used) - if err != nil { - t.Fatal(err) - } -} - -// Test that EmptyQueryResponses are handled correctly. -func TestEmptyQuery(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - res, err := db.Exec("") - if err != nil { - t.Fatal(err) - } - if _, err := res.RowsAffected(); err != errNoRowsAffected { - t.Fatalf("expected %s, got %v", errNoRowsAffected, err) - } - if _, err := res.LastInsertId(); err != errNoLastInsertID { - t.Fatalf("expected %s, got %v", errNoLastInsertID, err) - } - rows, err := db.Query("") - if err != nil { - t.Fatal(err) - } - cols, err := rows.Columns() - if err != nil { - t.Fatal(err) - } - if len(cols) != 0 { - t.Fatalf("unexpected number of columns %d in response to an empty query", len(cols)) - } - if rows.Next() { - t.Fatal("unexpected row") - } - if rows.Err() != nil { - t.Fatal(rows.Err()) - } - - stmt, err := db.Prepare("") - if err != nil { - t.Fatal(err) - } - res, err = stmt.Exec() - if err != nil { - t.Fatal(err) - } - if _, err := res.RowsAffected(); err != errNoRowsAffected { - t.Fatalf("expected %s, got %v", errNoRowsAffected, err) - } - if _, err := res.LastInsertId(); err != errNoLastInsertID { - t.Fatalf("expected %s, got %v", errNoLastInsertID, err) - } - rows, err = stmt.Query() - if err != nil { - t.Fatal(err) - } - cols, err = rows.Columns() - if err != nil { - t.Fatal(err) - } - if len(cols) != 0 { - t.Fatalf("unexpected number of columns %d in response to an empty query", len(cols)) - } - if rows.Next() { - t.Fatal("unexpected row") - } - if rows.Err() != nil { - t.Fatal(rows.Err()) - } -} - -// Test that rows.Columns() is correct even if there are no result rows. -func TestEmptyResultSetColumns(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - rows, err := db.Query("SELECT 1 AS a, text 'bar' AS bar WHERE FALSE") - if err != nil { - t.Fatal(err) - } - cols, err := rows.Columns() - if err != nil { - t.Fatal(err) - } - if len(cols) != 2 { - t.Fatalf("unexpected number of columns %d in response to an empty query", len(cols)) - } - if rows.Next() { - t.Fatal("unexpected row") - } - if rows.Err() != nil { - t.Fatal(rows.Err()) - } - if cols[0] != "a" || cols[1] != "bar" { - t.Fatalf("unexpected Columns result %v", cols) - } - - stmt, err := db.Prepare("SELECT $1::int AS a, text 'bar' AS bar WHERE FALSE") - if err != nil { - t.Fatal(err) - } - rows, err = stmt.Query(1) - if err != nil { - t.Fatal(err) - } - cols, err = rows.Columns() - if err != nil { - t.Fatal(err) - } - if len(cols) != 2 { - t.Fatalf("unexpected number of columns %d in response to an empty query", len(cols)) - } - if rows.Next() { - t.Fatal("unexpected row") - } - if rows.Err() != nil { - t.Fatal(rows.Err()) - } - if cols[0] != "a" || cols[1] != "bar" { - t.Fatalf("unexpected Columns result %v", cols) - } - -} - -func TestEncodeDecode(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - q := ` - SELECT - E'\\000\\001\\002'::bytea, - 'foobar'::text, - NULL::integer, - '2000-1-1 01:02:03.04-7'::timestamptz, - 0::boolean, - 123, - -321, - 3.14::float8 - WHERE - E'\\000\\001\\002'::bytea = $1 - AND 'foobar'::text = $2 - AND $3::integer is NULL - ` - // AND '2000-1-1 12:00:00.000000-7'::timestamp = $3 - - exp1 := []byte{0, 1, 2} - exp2 := "foobar" - - r, err := db.Query(q, exp1, exp2, nil) - if err != nil { - t.Fatal(err) - } - defer r.Close() - - if !r.Next() { - if r.Err() != nil { - t.Fatal(r.Err()) - } - t.Fatal("expected row") - } - - var got1 []byte - var got2 string - var got3 = sql.NullInt64{Valid: true} - var got4 time.Time - var got5, got6, got7, got8 interface{} - - err = r.Scan(&got1, &got2, &got3, &got4, &got5, &got6, &got7, &got8) - if err != nil { - t.Fatal(err) - } - - if !reflect.DeepEqual(exp1, got1) { - t.Errorf("expected %q byte: %q", exp1, got1) - } - - if !reflect.DeepEqual(exp2, got2) { - t.Errorf("expected %q byte: %q", exp2, got2) - } - - if got3.Valid { - t.Fatal("expected invalid") - } - - if got4.Year() != 2000 { - t.Fatal("wrong year") - } - - if got5 != false { - t.Fatalf("expected false, got %q", got5) - } - - if got6 != int64(123) { - t.Fatalf("expected 123, got %d", got6) - } - - if got7 != int64(-321) { - t.Fatalf("expected -321, got %d", got7) - } - - if got8 != float64(3.14) { - t.Fatalf("expected 3.14, got %f", got8) - } -} - -func TestNoData(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - st, err := db.Prepare("SELECT 1 WHERE true = false") - if err != nil { - t.Fatal(err) - } - defer st.Close() - - r, err := st.Query() - if err != nil { - t.Fatal(err) - } - defer r.Close() - - if r.Next() { - if r.Err() != nil { - t.Fatal(r.Err()) - } - t.Fatal("unexpected row") - } - - _, err = db.Query("SELECT * FROM nonexistenttable WHERE age=$1", 20) - if err == nil { - t.Fatal("Should have raised an error on non existent table") - } - - _, err = db.Query("SELECT * FROM nonexistenttable") - if err == nil { - t.Fatal("Should have raised an error on non existent table") - } -} - -func TestErrorDuringStartup(t *testing.T) { - // Don't use the normal connection setup, this is intended to - // blow up in the startup packet from a non-existent user. - db, err := openTestConnConninfo("user=thisuserreallydoesntexist") - if err != nil { - t.Fatal(err) - } - defer db.Close() - - _, err = db.Begin() - if err == nil { - t.Fatal("expected error") - } - - e, ok := err.(*Error) - if !ok { - t.Fatalf("expected Error, got %#v", err) - } else if e.Code.Name() != "invalid_authorization_specification" && e.Code.Name() != "invalid_password" { - t.Fatalf("expected invalid_authorization_specification or invalid_password, got %s (%+v)", e.Code.Name(), err) - } -} - -type testConn struct { - closed bool - net.Conn -} - -func (c *testConn) Close() error { - c.closed = true - return c.Conn.Close() -} - -type testDialer struct { - conns []*testConn -} - -func (d *testDialer) Dial(ntw, addr string) (net.Conn, error) { - c, err := net.Dial(ntw, addr) - if err != nil { - return nil, err - } - tc := &testConn{Conn: c} - d.conns = append(d.conns, tc) - return tc, nil -} - -func (d *testDialer) DialTimeout(ntw, addr string, timeout time.Duration) (net.Conn, error) { - c, err := net.DialTimeout(ntw, addr, timeout) - if err != nil { - return nil, err - } - tc := &testConn{Conn: c} - d.conns = append(d.conns, tc) - return tc, nil -} - -func TestErrorDuringStartupClosesConn(t *testing.T) { - // Don't use the normal connection setup, this is intended to - // blow up in the startup packet from a non-existent user. - var d testDialer - c, err := DialOpen(&d, testConninfo("user=thisuserreallydoesntexist")) - if err == nil { - c.Close() - t.Fatal("expected dial error") - } - if len(d.conns) != 1 { - t.Fatalf("got len(d.conns) = %d, want = %d", len(d.conns), 1) - } - if !d.conns[0].closed { - t.Error("connection leaked") - } -} - -func TestBadConn(t *testing.T) { - var err error - - cn := conn{} - func() { - defer cn.errRecover(&err) - panic(io.EOF) - }() - if err != driver.ErrBadConn { - t.Fatalf("expected driver.ErrBadConn, got: %#v", err) - } - if !cn.bad { - t.Fatalf("expected cn.bad") - } - - cn = conn{} - func() { - defer cn.errRecover(&err) - e := &Error{Severity: Efatal} - panic(e) - }() - if err != driver.ErrBadConn { - t.Fatalf("expected driver.ErrBadConn, got: %#v", err) - } - if !cn.bad { - t.Fatalf("expected cn.bad") - } -} - -// TestCloseBadConn tests that the underlying connection can be closed with -// Close after an error. -func TestCloseBadConn(t *testing.T) { - nc, err := net.Dial("tcp", "localhost:5432") - if err != nil { - t.Fatal(err) - } - cn := conn{c: nc} - func() { - defer cn.errRecover(&err) - panic(io.EOF) - }() - // Verify we can write before closing. - if _, err := nc.Write(nil); err != nil { - t.Fatal(err) - } - // First close should close the connection. - if err := cn.Close(); err != nil { - t.Fatal(err) - } - - // During the Go 1.9 cycle, https://github.com/golang/go/commit/3792db5 - // changed this error from - // - // net.errClosing = errors.New("use of closed network connection") - // - // to - // - // internal/poll.ErrClosing = errors.New("use of closed file or network connection") - const errClosing = "use of closed" - - // Verify write after closing fails. - if _, err := nc.Write(nil); err == nil { - t.Fatal("expected error") - } else if !strings.Contains(err.Error(), errClosing) { - t.Fatalf("expected %s error, got %s", errClosing, err) - } - // Verify second close fails. - if err := cn.Close(); err == nil { - t.Fatal("expected error") - } else if !strings.Contains(err.Error(), errClosing) { - t.Fatalf("expected %s error, got %s", errClosing, err) - } -} - -func TestErrorOnExec(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Exec("CREATE TEMPORARY TABLE foo(f1 int PRIMARY KEY)") - if err != nil { - t.Fatal(err) - } - - _, err = txn.Exec("INSERT INTO foo VALUES (0), (0)") - if err == nil { - t.Fatal("Should have raised error") - } - - e, ok := err.(*Error) - if !ok { - t.Fatalf("expected Error, got %#v", err) - } else if e.Code.Name() != "unique_violation" { - t.Fatalf("expected unique_violation, got %s (%+v)", e.Code.Name(), err) - } -} - -func TestErrorOnQuery(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Exec("CREATE TEMPORARY TABLE foo(f1 int PRIMARY KEY)") - if err != nil { - t.Fatal(err) - } - - _, err = txn.Query("INSERT INTO foo VALUES (0), (0)") - if err == nil { - t.Fatal("Should have raised error") - } - - e, ok := err.(*Error) - if !ok { - t.Fatalf("expected Error, got %#v", err) - } else if e.Code.Name() != "unique_violation" { - t.Fatalf("expected unique_violation, got %s (%+v)", e.Code.Name(), err) - } -} - -func TestErrorOnQueryRowSimpleQuery(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Exec("CREATE TEMPORARY TABLE foo(f1 int PRIMARY KEY)") - if err != nil { - t.Fatal(err) - } - - var v int - err = txn.QueryRow("INSERT INTO foo VALUES (0), (0)").Scan(&v) - if err == nil { - t.Fatal("Should have raised error") - } - - e, ok := err.(*Error) - if !ok { - t.Fatalf("expected Error, got %#v", err) - } else if e.Code.Name() != "unique_violation" { - t.Fatalf("expected unique_violation, got %s (%+v)", e.Code.Name(), err) - } -} - -// Test the QueryRow bug workarounds in stmt.exec() and simpleQuery() -func TestQueryRowBugWorkaround(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - // stmt.exec() - _, err := db.Exec("CREATE TEMP TABLE notnulltemp (a varchar(10) not null)") - if err != nil { - t.Fatal(err) - } - - var a string - err = db.QueryRow("INSERT INTO notnulltemp(a) values($1) RETURNING a", nil).Scan(&a) - if err == sql.ErrNoRows { - t.Fatalf("expected constraint violation error; got: %v", err) - } - pge, ok := err.(*Error) - if !ok { - t.Fatalf("expected *Error; got: %#v", err) - } - if pge.Code.Name() != "not_null_violation" { - t.Fatalf("expected not_null_violation; got: %s (%+v)", pge.Code.Name(), err) - } - - // Test workaround in simpleQuery() - tx, err := db.Begin() - if err != nil { - t.Fatalf("unexpected error %s in Begin", err) - } - defer tx.Rollback() - - _, err = tx.Exec("SET LOCAL check_function_bodies TO FALSE") - if err != nil { - t.Fatalf("could not disable check_function_bodies: %s", err) - } - _, err = tx.Exec(` -CREATE OR REPLACE FUNCTION bad_function() -RETURNS integer --- hack to prevent the function from being inlined -SET check_function_bodies TO TRUE -AS $$ - SELECT text 'bad' -$$ LANGUAGE sql`) - if err != nil { - t.Fatalf("could not create function: %s", err) - } - - err = tx.QueryRow("SELECT * FROM bad_function()").Scan(&a) - if err == nil { - t.Fatalf("expected error") - } - pge, ok = err.(*Error) - if !ok { - t.Fatalf("expected *Error; got: %#v", err) - } - if pge.Code.Name() != "invalid_function_definition" { - t.Fatalf("expected invalid_function_definition; got: %s (%+v)", pge.Code.Name(), err) - } - - err = tx.Rollback() - if err != nil { - t.Fatalf("unexpected error %s in Rollback", err) - } - - // Also test that simpleQuery()'s workaround works when the query fails - // after a row has been received. - rows, err := db.Query(` -select - (select generate_series(1, ss.i)) -from (select gs.i - from generate_series(1, 2) gs(i) - order by gs.i limit 2) ss`) - if err != nil { - t.Fatalf("query failed: %s", err) - } - if !rows.Next() { - t.Fatalf("expected at least one result row; got %s", rows.Err()) - } - var i int - err = rows.Scan(&i) - if err != nil { - t.Fatalf("rows.Scan() failed: %s", err) - } - if i != 1 { - t.Fatalf("unexpected value for i: %d", i) - } - if rows.Next() { - t.Fatalf("unexpected row") - } - pge, ok = rows.Err().(*Error) - if !ok { - t.Fatalf("expected *Error; got: %#v", err) - } - if pge.Code.Name() != "cardinality_violation" { - t.Fatalf("expected cardinality_violation; got: %s (%+v)", pge.Code.Name(), rows.Err()) - } -} - -func TestSimpleQuery(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - r, err := db.Query("select 1") - if err != nil { - t.Fatal(err) - } - defer r.Close() - - if !r.Next() { - t.Fatal("expected row") - } -} - -func TestBindError(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - _, err := db.Exec("create temp table test (i integer)") - if err != nil { - t.Fatal(err) - } - - _, err = db.Query("select * from test where i=$1", "hhh") - if err == nil { - t.Fatal("expected an error") - } - - // Should not get error here - r, err := db.Query("select * from test where i=$1", 1) - if err != nil { - t.Fatal(err) - } - defer r.Close() -} - -func TestParseErrorInExtendedQuery(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - _, err := db.Query("PARSE_ERROR $1", 1) - pqErr, _ := err.(*Error) - // Expecting a syntax error. - if err == nil || pqErr == nil || pqErr.Code != "42601" { - t.Fatalf("expected syntax error, got %s", err) - } - - rows, err := db.Query("SELECT 1") - if err != nil { - t.Fatal(err) - } - rows.Close() -} - -// TestReturning tests that an INSERT query using the RETURNING clause returns a row. -func TestReturning(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - _, err := db.Exec("CREATE TEMP TABLE distributors (did integer default 0, dname text)") - if err != nil { - t.Fatal(err) - } - - rows, err := db.Query("INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets') " + - "RETURNING did;") - if err != nil { - t.Fatal(err) - } - if !rows.Next() { - t.Fatal("no rows") - } - var did int - err = rows.Scan(&did) - if err != nil { - t.Fatal(err) - } - if did != 0 { - t.Fatalf("bad value for did: got %d, want %d", did, 0) - } - - if rows.Next() { - t.Fatal("unexpected next row") - } - err = rows.Err() - if err != nil { - t.Fatal(err) - } -} - -func TestIssue186(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - // Exec() a query which returns results - _, err := db.Exec("VALUES (1), (2), (3)") - if err != nil { - t.Fatal(err) - } - - _, err = db.Exec("VALUES ($1), ($2), ($3)", 1, 2, 3) - if err != nil { - t.Fatal(err) - } - - // Query() a query which doesn't return any results - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - rows, err := txn.Query("CREATE TEMP TABLE foo(f1 int)") - if err != nil { - t.Fatal(err) - } - if err = rows.Close(); err != nil { - t.Fatal(err) - } - - // small trick to get NoData from a parameterized query - _, err = txn.Exec("CREATE RULE nodata AS ON INSERT TO foo DO INSTEAD NOTHING") - if err != nil { - t.Fatal(err) - } - rows, err = txn.Query("INSERT INTO foo VALUES ($1)", 1) - if err != nil { - t.Fatal(err) - } - if err = rows.Close(); err != nil { - t.Fatal(err) - } -} - -func TestIssue196(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - row := db.QueryRow("SELECT float4 '0.10000122' = $1, float8 '35.03554004971999' = $2", - float32(0.10000122), float64(35.03554004971999)) - - var float4match, float8match bool - err := row.Scan(&float4match, &float8match) - if err != nil { - t.Fatal(err) - } - if !float4match { - t.Errorf("Expected float4 fidelity to be maintained; got no match") - } - if !float8match { - t.Errorf("Expected float8 fidelity to be maintained; got no match") - } -} - -// Test that any CommandComplete messages sent before the query results are -// ignored. -func TestIssue282(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - var searchPath string - err := db.QueryRow(` - SET LOCAL search_path TO pg_catalog; - SET LOCAL search_path TO pg_catalog; - SHOW search_path`).Scan(&searchPath) - if err != nil { - t.Fatal(err) - } - if searchPath != "pg_catalog" { - t.Fatalf("unexpected search_path %s", searchPath) - } -} - -func TestReadFloatPrecision(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - row := db.QueryRow("SELECT float4 '0.10000122', float8 '35.03554004971999', float4 '1.2'") - var float4val float32 - var float8val float64 - var float4val2 float64 - err := row.Scan(&float4val, &float8val, &float4val2) - if err != nil { - t.Fatal(err) - } - if float4val != float32(0.10000122) { - t.Errorf("Expected float4 fidelity to be maintained; got no match") - } - if float8val != float64(35.03554004971999) { - t.Errorf("Expected float8 fidelity to be maintained; got no match") - } - if float4val2 != float64(1.2) { - t.Errorf("Expected float4 fidelity into a float64 to be maintained; got no match") - } -} - -func TestXactMultiStmt(t *testing.T) { - // minified test case based on bug reports from - // pico303@gmail.com and rangelspam@gmail.com - t.Skip("Skipping failing test") - db := openTestConn(t) - defer db.Close() - - tx, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer tx.Commit() - - rows, err := tx.Query("select 1") - if err != nil { - t.Fatal(err) - } - - if rows.Next() { - var val int32 - if err = rows.Scan(&val); err != nil { - t.Fatal(err) - } - } else { - t.Fatal("Expected at least one row in first query in xact") - } - - rows2, err := tx.Query("select 2") - if err != nil { - t.Fatal(err) - } - - if rows2.Next() { - var val2 int32 - if err := rows2.Scan(&val2); err != nil { - t.Fatal(err) - } - } else { - t.Fatal("Expected at least one row in second query in xact") - } - - if err = rows.Err(); err != nil { - t.Fatal(err) - } - - if err = rows2.Err(); err != nil { - t.Fatal(err) - } - - if err = tx.Commit(); err != nil { - t.Fatal(err) - } -} - -var envParseTests = []struct { - Expected map[string]string - Env []string -}{ - { - Env: []string{"PGDATABASE=hello", "PGUSER=goodbye"}, - Expected: map[string]string{"dbname": "hello", "user": "goodbye"}, - }, - { - Env: []string{"PGDATESTYLE=ISO, MDY"}, - Expected: map[string]string{"datestyle": "ISO, MDY"}, - }, - { - Env: []string{"PGCONNECT_TIMEOUT=30"}, - Expected: map[string]string{"connect_timeout": "30"}, - }, -} - -func TestParseEnviron(t *testing.T) { - for i, tt := range envParseTests { - results := parseEnviron(tt.Env) - if !reflect.DeepEqual(tt.Expected, results) { - t.Errorf("%d: Expected: %#v Got: %#v", i, tt.Expected, results) - } - } -} - -func TestParseComplete(t *testing.T) { - tpc := func(commandTag string, command string, affectedRows int64, shouldFail bool) { - defer func() { - if p := recover(); p != nil { - if !shouldFail { - t.Error(p) - } - } - }() - cn := &conn{} - res, c := cn.parseComplete(commandTag) - if c != command { - t.Errorf("Expected %v, got %v", command, c) - } - n, err := res.RowsAffected() - if err != nil { - t.Fatal(err) - } - if n != affectedRows { - t.Errorf("Expected %d, got %d", affectedRows, n) - } - } - - tpc("ALTER TABLE", "ALTER TABLE", 0, false) - tpc("INSERT 0 1", "INSERT", 1, false) - tpc("UPDATE 100", "UPDATE", 100, false) - tpc("SELECT 100", "SELECT", 100, false) - tpc("FETCH 100", "FETCH", 100, false) - // allow COPY (and others) without row count - tpc("COPY", "COPY", 0, false) - // don't fail on command tags we don't recognize - tpc("UNKNOWNCOMMANDTAG", "UNKNOWNCOMMANDTAG", 0, false) - - // failure cases - tpc("INSERT 1", "", 0, true) // missing oid - tpc("UPDATE 0 1", "", 0, true) // too many numbers - tpc("SELECT foo", "", 0, true) // invalid row count -} - -// Test interface conformance. -var ( - _ driver.ExecerContext = (*conn)(nil) - _ driver.QueryerContext = (*conn)(nil) -) - -func TestNullAfterNonNull(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - r, err := db.Query("SELECT 9::integer UNION SELECT NULL::integer") - if err != nil { - t.Fatal(err) - } - - var n sql.NullInt64 - - if !r.Next() { - if r.Err() != nil { - t.Fatal(err) - } - t.Fatal("expected row") - } - - if err := r.Scan(&n); err != nil { - t.Fatal(err) - } - - if n.Int64 != 9 { - t.Fatalf("expected 2, not %d", n.Int64) - } - - if !r.Next() { - if r.Err() != nil { - t.Fatal(err) - } - t.Fatal("expected row") - } - - if err := r.Scan(&n); err != nil { - t.Fatal(err) - } - - if n.Valid { - t.Fatal("expected n to be invalid") - } - - if n.Int64 != 0 { - t.Fatalf("expected n to 2, not %d", n.Int64) - } -} - -func Test64BitErrorChecking(t *testing.T) { - defer func() { - if err := recover(); err != nil { - t.Fatal("panic due to 0xFFFFFFFF != -1 " + - "when int is 64 bits") - } - }() - - db := openTestConn(t) - defer db.Close() - - r, err := db.Query(`SELECT * -FROM (VALUES (0::integer, NULL::text), (1, 'test string')) AS t;`) - - if err != nil { - t.Fatal(err) - } - - defer r.Close() - - for r.Next() { - } -} - -func TestCommit(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - _, err := db.Exec("CREATE TEMP TABLE temp (a int)") - if err != nil { - t.Fatal(err) - } - sqlInsert := "INSERT INTO temp VALUES (1)" - sqlSelect := "SELECT * FROM temp" - tx, err := db.Begin() - if err != nil { - t.Fatal(err) - } - _, err = tx.Exec(sqlInsert) - if err != nil { - t.Fatal(err) - } - err = tx.Commit() - if err != nil { - t.Fatal(err) - } - var i int - err = db.QueryRow(sqlSelect).Scan(&i) - if err != nil { - t.Fatal(err) - } - if i != 1 { - t.Fatalf("expected 1, got %d", i) - } -} - -func TestErrorClass(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - _, err := db.Query("SELECT int 'notint'") - if err == nil { - t.Fatal("expected error") - } - pge, ok := err.(*Error) - if !ok { - t.Fatalf("expected *pq.Error, got %#+v", err) - } - if pge.Code.Class() != "22" { - t.Fatalf("expected class 28, got %v", pge.Code.Class()) - } - if pge.Code.Class().Name() != "data_exception" { - t.Fatalf("expected data_exception, got %v", pge.Code.Class().Name()) - } -} - -func TestParseOpts(t *testing.T) { - tests := []struct { - in string - expected values - valid bool - }{ - {"dbname=hello user=goodbye", values{"dbname": "hello", "user": "goodbye"}, true}, - {"dbname=hello user=goodbye ", values{"dbname": "hello", "user": "goodbye"}, true}, - {"dbname = hello user=goodbye", values{"dbname": "hello", "user": "goodbye"}, true}, - {"dbname=hello user =goodbye", values{"dbname": "hello", "user": "goodbye"}, true}, - {"dbname=hello user= goodbye", values{"dbname": "hello", "user": "goodbye"}, true}, - {"host=localhost password='correct horse battery staple'", values{"host": "localhost", "password": "correct horse battery staple"}, true}, - {"dbname=データベース password=パスワード", values{"dbname": "データベース", "password": "パスワード"}, true}, - {"dbname=hello user=''", values{"dbname": "hello", "user": ""}, true}, - {"user='' dbname=hello", values{"dbname": "hello", "user": ""}, true}, - // The last option value is an empty string if there's no non-whitespace after its = - {"dbname=hello user= ", values{"dbname": "hello", "user": ""}, true}, - - // The parser ignores spaces after = and interprets the next set of non-whitespace characters as the value. - {"user= password=foo", values{"user": "password=foo"}, true}, - - // Backslash escapes next char - {`user=a\ \'\\b`, values{"user": `a '\b`}, true}, - {`user='a \'b'`, values{"user": `a 'b`}, true}, - - // Incomplete escape - {`user=x\`, values{}, false}, - - // No '=' after the key - {"postgre://marko@internet", values{}, false}, - {"dbname user=goodbye", values{}, false}, - {"user=foo blah", values{}, false}, - {"user=foo blah ", values{}, false}, - - // Unterminated quoted value - {"dbname=hello user='unterminated", values{}, false}, - } - - for _, test := range tests { - o := make(values) - err := parseOpts(test.in, o) - - switch { - case err != nil && test.valid: - t.Errorf("%q got unexpected error: %s", test.in, err) - case err == nil && test.valid && !reflect.DeepEqual(test.expected, o): - t.Errorf("%q got: %#v want: %#v", test.in, o, test.expected) - case err == nil && !test.valid: - t.Errorf("%q expected an error", test.in) - } - } -} - -func TestRuntimeParameters(t *testing.T) { - tests := []struct { - conninfo string - param string - expected string - success bool - }{ - // invalid parameter - {"DOESNOTEXIST=foo", "", "", false}, - // we can only work with a specific value for these two - {"client_encoding=SQL_ASCII", "", "", false}, - {"datestyle='ISO, YDM'", "", "", false}, - // "options" should work exactly as it does in libpq - {"options='-c search_path=pqgotest'", "search_path", "pqgotest", true}, - // pq should override client_encoding in this case - {"options='-c client_encoding=SQL_ASCII'", "client_encoding", "UTF8", true}, - // allow client_encoding to be set explicitly - {"client_encoding=UTF8", "client_encoding", "UTF8", true}, - // test a runtime parameter not supported by libpq - {"work_mem='139kB'", "work_mem", "139kB", true}, - // test fallback_application_name - {"application_name=foo fallback_application_name=bar", "application_name", "foo", true}, - {"application_name='' fallback_application_name=bar", "application_name", "", true}, - {"fallback_application_name=bar", "application_name", "bar", true}, - } - - for _, test := range tests { - db, err := openTestConnConninfo(test.conninfo) - if err != nil { - t.Fatal(err) - } - - // application_name didn't exist before 9.0 - if test.param == "application_name" && getServerVersion(t, db) < 90000 { - db.Close() - continue - } - - tryGetParameterValue := func() (value string, success bool) { - defer db.Close() - row := db.QueryRow("SELECT current_setting($1)", test.param) - err = row.Scan(&value) - if err != nil { - return "", false - } - return value, true - } - - value, success := tryGetParameterValue() - if success != test.success && !test.success { - t.Fatalf("%v: unexpected error: %v", test.conninfo, err) - } - if success != test.success { - t.Fatalf("unexpected outcome %v (was expecting %v) for conninfo \"%s\"", - success, test.success, test.conninfo) - } - if value != test.expected { - t.Fatalf("bad value for %s: got %s, want %s with conninfo \"%s\"", - test.param, value, test.expected, test.conninfo) - } - } -} - -func TestIsUTF8(t *testing.T) { - var cases = []struct { - name string - want bool - }{ - {"unicode", true}, - {"utf-8", true}, - {"utf_8", true}, - {"UTF-8", true}, - {"UTF8", true}, - {"utf8", true}, - {"u n ic_ode", true}, - {"ut_f%8", true}, - {"ubf8", false}, - {"punycode", false}, - } - - for _, test := range cases { - if g := isUTF8(test.name); g != test.want { - t.Errorf("isUTF8(%q) = %v want %v", test.name, g, test.want) - } - } -} - -func TestQuoteIdentifier(t *testing.T) { - var cases = []struct { - input string - want string - }{ - {`foo`, `"foo"`}, - {`foo bar baz`, `"foo bar baz"`}, - {`foo"bar`, `"foo""bar"`}, - {"foo\x00bar", `"foo"`}, - {"\x00foo", `""`}, - } - - for _, test := range cases { - got := QuoteIdentifier(test.input) - if got != test.want { - t.Errorf("QuoteIdentifier(%q) = %v want %v", test.input, got, test.want) - } - } -} - -func TestQuoteLiteral(t *testing.T) { - var cases = []struct { - input string - want string - }{ - {`foo`, `'foo'`}, - {`foo bar baz`, `'foo bar baz'`}, - {`foo'bar`, `'foo''bar'`}, - {`foo\bar`, ` E'foo\\bar'`}, - {`foo\ba'r`, ` E'foo\\ba''r'`}, - {`foo"bar`, `'foo"bar'`}, - {`foo\x00bar`, ` E'foo\\x00bar'`}, - {`\x00foo`, ` E'\\x00foo'`}, - {`'`, `''''`}, - {`''`, `''''''`}, - {`\`, ` E'\\'`}, - {`'abc'; DROP TABLE users;`, `'''abc''; DROP TABLE users;'`}, - {`\'`, ` E'\\'''`}, - {`E'\''`, ` E'E''\\'''''`}, - {`e'\''`, ` E'e''\\'''''`}, - {`E'\'abc\'; DROP TABLE users;'`, ` E'E''\\''abc\\''; DROP TABLE users;'''`}, - {`e'\'abc\'; DROP TABLE users;'`, ` E'e''\\''abc\\''; DROP TABLE users;'''`}, - } - - for _, test := range cases { - got := QuoteLiteral(test.input) - if got != test.want { - t.Errorf("QuoteLiteral(%q) = %v want %v", test.input, got, test.want) - } - } -} - -func TestRowsResultTag(t *testing.T) { - type ResultTag interface { - Result() driver.Result - Tag() string - } - - tests := []struct { - query string - tag string - ra int64 - }{ - { - query: "CREATE TEMP TABLE temp (a int)", - tag: "CREATE TABLE", - }, - { - query: "INSERT INTO temp VALUES (1), (2)", - tag: "INSERT", - ra: 2, - }, - { - query: "SELECT 1", - }, - // A SELECT anywhere should take precedent. - { - query: "SELECT 1; INSERT INTO temp VALUES (1), (2)", - }, - { - query: "INSERT INTO temp VALUES (1), (2); SELECT 1", - }, - // Multiple statements that don't return rows should return the last tag. - { - query: "CREATE TEMP TABLE t (a int); DROP TABLE t", - tag: "DROP TABLE", - }, - // Ensure a rows-returning query in any position among various tags-returing - // statements will prefer the rows. - { - query: "SELECT 1; CREATE TEMP TABLE t (a int); DROP TABLE t", - }, - { - query: "CREATE TEMP TABLE t (a int); SELECT 1; DROP TABLE t", - }, - { - query: "CREATE TEMP TABLE t (a int); DROP TABLE t; SELECT 1", - }, - // Verify that an no-results query doesn't set the tag. - { - query: "CREATE TEMP TABLE t (a int); SELECT 1 WHERE FALSE; DROP TABLE t;", - }, - } - - // If this is the only test run, this will correct the connection string. - openTestConn(t).Close() - - conn, err := Open("") - if err != nil { - t.Fatal(err) - } - defer conn.Close() - q := conn.(driver.QueryerContext) - - for _, test := range tests { - if rows, err := q.QueryContext(context.Background(), test.query, nil); err != nil { - t.Fatalf("%s: %s", test.query, err) - } else { - r := rows.(ResultTag) - if tag := r.Tag(); tag != test.tag { - t.Fatalf("%s: unexpected tag %q", test.query, tag) - } - res := r.Result() - if ra, _ := res.RowsAffected(); ra != test.ra { - t.Fatalf("%s: unexpected rows affected: %d", test.query, ra) - } - rows.Close() - } - } -} - -// TestQuickClose tests that closing a query early allows a subsequent query to work. -func TestQuickClose(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - tx, err := db.Begin() - if err != nil { - t.Fatal(err) - } - rows, err := tx.Query("SELECT 1; SELECT 2;") - if err != nil { - t.Fatal(err) - } - if err := rows.Close(); err != nil { - t.Fatal(err) - } - - var id int - if err := tx.QueryRow("SELECT 3").Scan(&id); err != nil { - t.Fatal(err) - } - if id != 3 { - t.Fatalf("unexpected %d", id) - } - if err := tx.Commit(); err != nil { - t.Fatal(err) - } -} - -func TestMultipleResult(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - rows, err := db.Query(` - begin; - select * from information_schema.tables limit 1; - select * from information_schema.columns limit 2; - commit; - `) - if err != nil { - t.Fatal(err) - } - type set struct { - cols []string - rowCount int - } - buf := []*set{} - for { - cols, err := rows.Columns() - if err != nil { - t.Fatal(err) - } - s := &set{ - cols: cols, - } - buf = append(buf, s) - - for rows.Next() { - s.rowCount++ - } - if !rows.NextResultSet() { - break - } - } - if len(buf) != 2 { - t.Fatalf("got %d sets, expected 2", len(buf)) - } - if len(buf[0].cols) == len(buf[1].cols) || len(buf[1].cols) == 0 { - t.Fatal("invalid cols size, expected different column count and greater then zero") - } - if buf[0].rowCount != 1 || buf[1].rowCount != 2 { - t.Fatal("incorrect number of rows returned") - } -} diff --git a/vendor/github.com/lib/pq/connector_example_test.go b/vendor/github.com/lib/pq/connector_example_test.go deleted file mode 100644 index 5b66cf4b..00000000 --- a/vendor/github.com/lib/pq/connector_example_test.go +++ /dev/null @@ -1,33 +0,0 @@ -// +build go1.10 - -package pq_test - -import ( - "database/sql" - "fmt" - - "github.com/lib/pq" -) - -func ExampleNewConnector() { - name := "" - connector, err := pq.NewConnector(name) - if err != nil { - fmt.Println(err) - return - } - db := sql.OpenDB(connector) - if err != nil { - fmt.Println(err) - return - } - defer db.Close() - - // Use the DB - txn, err := db.Begin() - if err != nil { - fmt.Println(err) - return - } - txn.Rollback() -} diff --git a/vendor/github.com/lib/pq/connector_test.go b/vendor/github.com/lib/pq/connector_test.go deleted file mode 100644 index 3d2c67b0..00000000 --- a/vendor/github.com/lib/pq/connector_test.go +++ /dev/null @@ -1,67 +0,0 @@ -// +build go1.10 - -package pq - -import ( - "context" - "database/sql" - "database/sql/driver" - "testing" -) - -func TestNewConnector_WorksWithOpenDB(t *testing.T) { - name := "" - c, err := NewConnector(name) - if err != nil { - t.Fatal(err) - } - db := sql.OpenDB(c) - defer db.Close() - // database/sql might not call our Open at all unless we do something with - // the connection - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - txn.Rollback() -} - -func TestNewConnector_Connect(t *testing.T) { - name := "" - c, err := NewConnector(name) - if err != nil { - t.Fatal(err) - } - db, err := c.Connect(context.Background()) - if err != nil { - t.Fatal(err) - } - defer db.Close() - // database/sql might not call our Open at all unless we do something with - // the connection - txn, err := db.(driver.ConnBeginTx).BeginTx(context.Background(), driver.TxOptions{}) - if err != nil { - t.Fatal(err) - } - txn.Rollback() -} - -func TestNewConnector_Driver(t *testing.T) { - name := "" - c, err := NewConnector(name) - if err != nil { - t.Fatal(err) - } - db, err := c.Driver().Open(name) - if err != nil { - t.Fatal(err) - } - defer db.Close() - // database/sql might not call our Open at all unless we do something with - // the connection - txn, err := db.(driver.ConnBeginTx).BeginTx(context.Background(), driver.TxOptions{}) - if err != nil { - t.Fatal(err) - } - txn.Rollback() -} diff --git a/vendor/github.com/lib/pq/copy_test.go b/vendor/github.com/lib/pq/copy_test.go deleted file mode 100644 index a888a894..00000000 --- a/vendor/github.com/lib/pq/copy_test.go +++ /dev/null @@ -1,468 +0,0 @@ -package pq - -import ( - "bytes" - "database/sql" - "database/sql/driver" - "net" - "strings" - "testing" -) - -func TestCopyInStmt(t *testing.T) { - stmt := CopyIn("table name") - if stmt != `COPY "table name" () FROM STDIN` { - t.Fatal(stmt) - } - - stmt = CopyIn("table name", "column 1", "column 2") - if stmt != `COPY "table name" ("column 1", "column 2") FROM STDIN` { - t.Fatal(stmt) - } - - stmt = CopyIn(`table " name """`, `co"lumn""`) - if stmt != `COPY "table "" name """"""" ("co""lumn""""") FROM STDIN` { - t.Fatal(stmt) - } -} - -func TestCopyInSchemaStmt(t *testing.T) { - stmt := CopyInSchema("schema name", "table name") - if stmt != `COPY "schema name"."table name" () FROM STDIN` { - t.Fatal(stmt) - } - - stmt = CopyInSchema("schema name", "table name", "column 1", "column 2") - if stmt != `COPY "schema name"."table name" ("column 1", "column 2") FROM STDIN` { - t.Fatal(stmt) - } - - stmt = CopyInSchema(`schema " name """`, `table " name """`, `co"lumn""`) - if stmt != `COPY "schema "" name """"""".`+ - `"table "" name """"""" ("co""lumn""""") FROM STDIN` { - t.Fatal(stmt) - } -} - -func TestCopyInMultipleValues(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Exec("CREATE TEMP TABLE temp (a int, b varchar)") - if err != nil { - t.Fatal(err) - } - - stmt, err := txn.Prepare(CopyIn("temp", "a", "b")) - if err != nil { - t.Fatal(err) - } - - longString := strings.Repeat("#", 500) - - for i := 0; i < 500; i++ { - _, err = stmt.Exec(int64(i), longString) - if err != nil { - t.Fatal(err) - } - } - - _, err = stmt.Exec() - if err != nil { - t.Fatal(err) - } - - err = stmt.Close() - if err != nil { - t.Fatal(err) - } - - var num int - err = txn.QueryRow("SELECT COUNT(*) FROM temp").Scan(&num) - if err != nil { - t.Fatal(err) - } - - if num != 500 { - t.Fatalf("expected 500 items, not %d", num) - } -} - -func TestCopyInRaiseStmtTrigger(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - if getServerVersion(t, db) < 90000 { - var exists int - err := db.QueryRow("SELECT 1 FROM pg_language WHERE lanname = 'plpgsql'").Scan(&exists) - if err == sql.ErrNoRows { - t.Skip("language PL/PgSQL does not exist; skipping TestCopyInRaiseStmtTrigger") - } else if err != nil { - t.Fatal(err) - } - } - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Exec("CREATE TEMP TABLE temp (a int, b varchar)") - if err != nil { - t.Fatal(err) - } - - _, err = txn.Exec(` - CREATE OR REPLACE FUNCTION pg_temp.temptest() - RETURNS trigger AS - $BODY$ begin - raise notice 'Hello world'; - return new; - end $BODY$ - LANGUAGE plpgsql`) - if err != nil { - t.Fatal(err) - } - - _, err = txn.Exec(` - CREATE TRIGGER temptest_trigger - BEFORE INSERT - ON temp - FOR EACH ROW - EXECUTE PROCEDURE pg_temp.temptest()`) - if err != nil { - t.Fatal(err) - } - - stmt, err := txn.Prepare(CopyIn("temp", "a", "b")) - if err != nil { - t.Fatal(err) - } - - longString := strings.Repeat("#", 500) - - _, err = stmt.Exec(int64(1), longString) - if err != nil { - t.Fatal(err) - } - - _, err = stmt.Exec() - if err != nil { - t.Fatal(err) - } - - err = stmt.Close() - if err != nil { - t.Fatal(err) - } - - var num int - err = txn.QueryRow("SELECT COUNT(*) FROM temp").Scan(&num) - if err != nil { - t.Fatal(err) - } - - if num != 1 { - t.Fatalf("expected 1 items, not %d", num) - } -} - -func TestCopyInTypes(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Exec("CREATE TEMP TABLE temp (num INTEGER, text VARCHAR, blob BYTEA, nothing VARCHAR)") - if err != nil { - t.Fatal(err) - } - - stmt, err := txn.Prepare(CopyIn("temp", "num", "text", "blob", "nothing")) - if err != nil { - t.Fatal(err) - } - - _, err = stmt.Exec(int64(1234567890), "Héllö\n ☃!\r\t\\", []byte{0, 255, 9, 10, 13}, nil) - if err != nil { - t.Fatal(err) - } - - _, err = stmt.Exec() - if err != nil { - t.Fatal(err) - } - - err = stmt.Close() - if err != nil { - t.Fatal(err) - } - - var num int - var text string - var blob []byte - var nothing sql.NullString - - err = txn.QueryRow("SELECT * FROM temp").Scan(&num, &text, &blob, ¬hing) - if err != nil { - t.Fatal(err) - } - - if num != 1234567890 { - t.Fatal("unexpected result", num) - } - if text != "Héllö\n ☃!\r\t\\" { - t.Fatal("unexpected result", text) - } - if !bytes.Equal(blob, []byte{0, 255, 9, 10, 13}) { - t.Fatal("unexpected result", blob) - } - if nothing.Valid { - t.Fatal("unexpected result", nothing.String) - } -} - -func TestCopyInWrongType(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Exec("CREATE TEMP TABLE temp (num INTEGER)") - if err != nil { - t.Fatal(err) - } - - stmt, err := txn.Prepare(CopyIn("temp", "num")) - if err != nil { - t.Fatal(err) - } - defer stmt.Close() - - _, err = stmt.Exec("Héllö\n ☃!\r\t\\") - if err != nil { - t.Fatal(err) - } - - _, err = stmt.Exec() - if err == nil { - t.Fatal("expected error") - } - if pge := err.(*Error); pge.Code.Name() != "invalid_text_representation" { - t.Fatalf("expected 'invalid input syntax for integer' error, got %s (%+v)", pge.Code.Name(), pge) - } -} - -func TestCopyOutsideOfTxnError(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - _, err := db.Prepare(CopyIn("temp", "num")) - if err == nil { - t.Fatal("COPY outside of transaction did not return an error") - } - if err != errCopyNotSupportedOutsideTxn { - t.Fatalf("expected %s, got %s", err, err.Error()) - } -} - -func TestCopyInBinaryError(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Exec("CREATE TEMP TABLE temp (num INTEGER)") - if err != nil { - t.Fatal(err) - } - _, err = txn.Prepare("COPY temp (num) FROM STDIN WITH binary") - if err != errBinaryCopyNotSupported { - t.Fatalf("expected %s, got %+v", errBinaryCopyNotSupported, err) - } - // check that the protocol is in a valid state - err = txn.Rollback() - if err != nil { - t.Fatal(err) - } -} - -func TestCopyFromError(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Exec("CREATE TEMP TABLE temp (num INTEGER)") - if err != nil { - t.Fatal(err) - } - _, err = txn.Prepare("COPY temp (num) TO STDOUT") - if err != errCopyToNotSupported { - t.Fatalf("expected %s, got %+v", errCopyToNotSupported, err) - } - // check that the protocol is in a valid state - err = txn.Rollback() - if err != nil { - t.Fatal(err) - } -} - -func TestCopySyntaxError(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Prepare("COPY ") - if err == nil { - t.Fatal("expected error") - } - if pge := err.(*Error); pge.Code.Name() != "syntax_error" { - t.Fatalf("expected syntax error, got %s (%+v)", pge.Code.Name(), pge) - } - // check that the protocol is in a valid state - err = txn.Rollback() - if err != nil { - t.Fatal(err) - } -} - -// Tests for connection errors in copyin.resploop() -func TestCopyRespLoopConnectionError(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - var pid int - err = txn.QueryRow("SELECT pg_backend_pid()").Scan(&pid) - if err != nil { - t.Fatal(err) - } - - _, err = txn.Exec("CREATE TEMP TABLE temp (a int)") - if err != nil { - t.Fatal(err) - } - - stmt, err := txn.Prepare(CopyIn("temp", "a")) - if err != nil { - t.Fatal(err) - } - defer stmt.Close() - - _, err = db.Exec("SELECT pg_terminate_backend($1)", pid) - if err != nil { - t.Fatal(err) - } - - if getServerVersion(t, db) < 90500 { - // We have to try and send something over, since postgres before - // version 9.5 won't process SIGTERMs while it's waiting for - // CopyData/CopyEnd messages; see tcop/postgres.c. - _, err = stmt.Exec(1) - if err != nil { - t.Fatal(err) - } - } - _, err = stmt.Exec() - if err == nil { - t.Fatalf("expected error") - } - switch pge := err.(type) { - case *Error: - if pge.Code.Name() != "admin_shutdown" { - t.Fatalf("expected admin_shutdown, got %s", pge.Code.Name()) - } - case *net.OpError: - // ignore - default: - if err == driver.ErrBadConn { - // likely an EPIPE - } else { - t.Fatalf("unexpected error, got %+#v", err) - } - } - - _ = stmt.Close() -} - -func BenchmarkCopyIn(b *testing.B) { - db := openTestConn(b) - defer db.Close() - - txn, err := db.Begin() - if err != nil { - b.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Exec("CREATE TEMP TABLE temp (a int, b varchar)") - if err != nil { - b.Fatal(err) - } - - stmt, err := txn.Prepare(CopyIn("temp", "a", "b")) - if err != nil { - b.Fatal(err) - } - - for i := 0; i < b.N; i++ { - _, err = stmt.Exec(int64(i), "hello world!") - if err != nil { - b.Fatal(err) - } - } - - _, err = stmt.Exec() - if err != nil { - b.Fatal(err) - } - - err = stmt.Close() - if err != nil { - b.Fatal(err) - } - - var num int - err = txn.QueryRow("SELECT COUNT(*) FROM temp").Scan(&num) - if err != nil { - b.Fatal(err) - } - - if num != b.N { - b.Fatalf("expected %d items, not %d", b.N, num) - } -} diff --git a/vendor/github.com/lib/pq/encode_test.go b/vendor/github.com/lib/pq/encode_test.go deleted file mode 100644 index d58798a4..00000000 --- a/vendor/github.com/lib/pq/encode_test.go +++ /dev/null @@ -1,766 +0,0 @@ -package pq - -import ( - "bytes" - "database/sql" - "fmt" - "regexp" - "testing" - "time" - - "github.com/lib/pq/oid" -) - -func TestScanTimestamp(t *testing.T) { - var nt NullTime - tn := time.Now() - nt.Scan(tn) - if !nt.Valid { - t.Errorf("Expected Valid=false") - } - if nt.Time != tn { - t.Errorf("Time value mismatch") - } -} - -func TestScanNilTimestamp(t *testing.T) { - var nt NullTime - nt.Scan(nil) - if nt.Valid { - t.Errorf("Expected Valid=false") - } -} - -var timeTests = []struct { - str string - timeval time.Time -}{ - {"22001-02-03", time.Date(22001, time.February, 3, 0, 0, 0, 0, time.FixedZone("", 0))}, - {"2001-02-03", time.Date(2001, time.February, 3, 0, 0, 0, 0, time.FixedZone("", 0))}, - {"0001-12-31 BC", time.Date(0, time.December, 31, 0, 0, 0, 0, time.FixedZone("", 0))}, - {"2001-02-03 BC", time.Date(-2000, time.February, 3, 0, 0, 0, 0, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06", time.Date(2001, time.February, 3, 4, 5, 6, 0, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.000001", time.Date(2001, time.February, 3, 4, 5, 6, 1000, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.00001", time.Date(2001, time.February, 3, 4, 5, 6, 10000, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.0001", time.Date(2001, time.February, 3, 4, 5, 6, 100000, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.001", time.Date(2001, time.February, 3, 4, 5, 6, 1000000, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.01", time.Date(2001, time.February, 3, 4, 5, 6, 10000000, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.1", time.Date(2001, time.February, 3, 4, 5, 6, 100000000, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.12", time.Date(2001, time.February, 3, 4, 5, 6, 120000000, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.123", time.Date(2001, time.February, 3, 4, 5, 6, 123000000, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.1234", time.Date(2001, time.February, 3, 4, 5, 6, 123400000, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.12345", time.Date(2001, time.February, 3, 4, 5, 6, 123450000, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.123456", time.Date(2001, time.February, 3, 4, 5, 6, 123456000, time.FixedZone("", 0))}, - {"2001-02-03 04:05:06.123-07", time.Date(2001, time.February, 3, 4, 5, 6, 123000000, - time.FixedZone("", -7*60*60))}, - {"2001-02-03 04:05:06-07", time.Date(2001, time.February, 3, 4, 5, 6, 0, - time.FixedZone("", -7*60*60))}, - {"2001-02-03 04:05:06-07:42", time.Date(2001, time.February, 3, 4, 5, 6, 0, - time.FixedZone("", -(7*60*60+42*60)))}, - {"2001-02-03 04:05:06-07:30:09", time.Date(2001, time.February, 3, 4, 5, 6, 0, - time.FixedZone("", -(7*60*60+30*60+9)))}, - {"2001-02-03 04:05:06+07", time.Date(2001, time.February, 3, 4, 5, 6, 0, - time.FixedZone("", 7*60*60))}, - {"0011-02-03 04:05:06 BC", time.Date(-10, time.February, 3, 4, 5, 6, 0, time.FixedZone("", 0))}, - {"0011-02-03 04:05:06.123 BC", time.Date(-10, time.February, 3, 4, 5, 6, 123000000, time.FixedZone("", 0))}, - {"0011-02-03 04:05:06.123-07 BC", time.Date(-10, time.February, 3, 4, 5, 6, 123000000, - time.FixedZone("", -7*60*60))}, - {"0001-02-03 04:05:06.123", time.Date(1, time.February, 3, 4, 5, 6, 123000000, time.FixedZone("", 0))}, - {"0001-02-03 04:05:06.123 BC", time.Date(1, time.February, 3, 4, 5, 6, 123000000, time.FixedZone("", 0)).AddDate(-1, 0, 0)}, - {"0001-02-03 04:05:06.123 BC", time.Date(0, time.February, 3, 4, 5, 6, 123000000, time.FixedZone("", 0))}, - {"0002-02-03 04:05:06.123 BC", time.Date(0, time.February, 3, 4, 5, 6, 123000000, time.FixedZone("", 0)).AddDate(-1, 0, 0)}, - {"0002-02-03 04:05:06.123 BC", time.Date(-1, time.February, 3, 4, 5, 6, 123000000, time.FixedZone("", 0))}, - {"12345-02-03 04:05:06.1", time.Date(12345, time.February, 3, 4, 5, 6, 100000000, time.FixedZone("", 0))}, - {"123456-02-03 04:05:06.1", time.Date(123456, time.February, 3, 4, 5, 6, 100000000, time.FixedZone("", 0))}, -} - -// Test that parsing the string results in the expected value. -func TestParseTs(t *testing.T) { - for i, tt := range timeTests { - val, err := ParseTimestamp(nil, tt.str) - if err != nil { - t.Errorf("%d: got error: %v", i, err) - } else if val.String() != tt.timeval.String() { - t.Errorf("%d: expected to parse %q into %q; got %q", - i, tt.str, tt.timeval, val) - } - } -} - -var timeErrorTests = []string{ - "BC", - " BC", - "2001", - "2001-2-03", - "2001-02-3", - "2001-02-03 ", - "2001-02-03 B", - "2001-02-03 04", - "2001-02-03 04:", - "2001-02-03 04:05", - "2001-02-03 04:05 B", - "2001-02-03 04:05 BC", - "2001-02-03 04:05:", - "2001-02-03 04:05:6", - "2001-02-03 04:05:06 B", - "2001-02-03 04:05:06BC", - "2001-02-03 04:05:06.123 B", -} - -// Test that parsing the string results in an error. -func TestParseTsErrors(t *testing.T) { - for i, tt := range timeErrorTests { - _, err := ParseTimestamp(nil, tt) - if err == nil { - t.Errorf("%d: expected an error from parsing: %v", i, tt) - } - } -} - -// Now test that sending the value into the database and parsing it back -// returns the same time.Time value. -func TestEncodeAndParseTs(t *testing.T) { - db, err := openTestConnConninfo("timezone='Etc/UTC'") - if err != nil { - t.Fatal(err) - } - defer db.Close() - - for i, tt := range timeTests { - var dbstr string - err = db.QueryRow("SELECT ($1::timestamptz)::text", tt.timeval).Scan(&dbstr) - if err != nil { - t.Errorf("%d: could not send value %q to the database: %s", i, tt.timeval, err) - continue - } - - val, err := ParseTimestamp(nil, dbstr) - if err != nil { - t.Errorf("%d: could not parse value %q: %s", i, dbstr, err) - continue - } - val = val.In(tt.timeval.Location()) - if val.String() != tt.timeval.String() { - t.Errorf("%d: expected to parse %q into %q; got %q", i, dbstr, tt.timeval, val) - } - } -} - -var formatTimeTests = []struct { - time time.Time - expected string -}{ - {time.Time{}, "0001-01-01 00:00:00Z"}, - {time.Date(2001, time.February, 3, 4, 5, 6, 123456789, time.FixedZone("", 0)), "2001-02-03 04:05:06.123456789Z"}, - {time.Date(2001, time.February, 3, 4, 5, 6, 123456789, time.FixedZone("", 2*60*60)), "2001-02-03 04:05:06.123456789+02:00"}, - {time.Date(2001, time.February, 3, 4, 5, 6, 123456789, time.FixedZone("", -6*60*60)), "2001-02-03 04:05:06.123456789-06:00"}, - {time.Date(2001, time.February, 3, 4, 5, 6, 0, time.FixedZone("", -(7*60*60+30*60+9))), "2001-02-03 04:05:06-07:30:09"}, - - {time.Date(1, time.February, 3, 4, 5, 6, 123456789, time.FixedZone("", 0)), "0001-02-03 04:05:06.123456789Z"}, - {time.Date(1, time.February, 3, 4, 5, 6, 123456789, time.FixedZone("", 2*60*60)), "0001-02-03 04:05:06.123456789+02:00"}, - {time.Date(1, time.February, 3, 4, 5, 6, 123456789, time.FixedZone("", -6*60*60)), "0001-02-03 04:05:06.123456789-06:00"}, - - {time.Date(0, time.February, 3, 4, 5, 6, 123456789, time.FixedZone("", 0)), "0001-02-03 04:05:06.123456789Z BC"}, - {time.Date(0, time.February, 3, 4, 5, 6, 123456789, time.FixedZone("", 2*60*60)), "0001-02-03 04:05:06.123456789+02:00 BC"}, - {time.Date(0, time.February, 3, 4, 5, 6, 123456789, time.FixedZone("", -6*60*60)), "0001-02-03 04:05:06.123456789-06:00 BC"}, - - {time.Date(1, time.February, 3, 4, 5, 6, 0, time.FixedZone("", -(7*60*60+30*60+9))), "0001-02-03 04:05:06-07:30:09"}, - {time.Date(0, time.February, 3, 4, 5, 6, 0, time.FixedZone("", -(7*60*60+30*60+9))), "0001-02-03 04:05:06-07:30:09 BC"}, -} - -func TestFormatTs(t *testing.T) { - for i, tt := range formatTimeTests { - val := string(formatTs(tt.time)) - if val != tt.expected { - t.Errorf("%d: incorrect time format %q, want %q", i, val, tt.expected) - } - } -} - -func TestFormatTsBackend(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - var str string - err := db.QueryRow("SELECT '2001-02-03T04:05:06.007-08:09:10'::time::text").Scan(&str) - if err == nil { - t.Fatalf("PostgreSQL is accepting an ISO timestamp input for time") - } - - for i, tt := range formatTimeTests { - for _, typ := range []string{"date", "time", "timetz", "timestamp", "timestamptz"} { - err = db.QueryRow("SELECT $1::"+typ+"::text", tt.time).Scan(&str) - if err != nil { - t.Errorf("%d: incorrect time format for %v on the backend: %v", i, typ, err) - } - } - } -} - -func TestTimestampWithTimeZone(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - tx, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer tx.Rollback() - - // try several different locations, all included in Go's zoneinfo.zip - for _, locName := range []string{ - "UTC", - "America/Chicago", - "America/New_York", - "Australia/Darwin", - "Australia/Perth", - } { - loc, err := time.LoadLocation(locName) - if err != nil { - t.Logf("Could not load time zone %s - skipping", locName) - continue - } - - // Postgres timestamps have a resolution of 1 microsecond, so don't - // use the full range of the Nanosecond argument - refTime := time.Date(2012, 11, 6, 10, 23, 42, 123456000, loc) - - for _, pgTimeZone := range []string{"US/Eastern", "Australia/Darwin"} { - // Switch Postgres's timezone to test different output timestamp formats - _, err = tx.Exec(fmt.Sprintf("set time zone '%s'", pgTimeZone)) - if err != nil { - t.Fatal(err) - } - - var gotTime time.Time - row := tx.QueryRow("select $1::timestamp with time zone", refTime) - err = row.Scan(&gotTime) - if err != nil { - t.Fatal(err) - } - - if !refTime.Equal(gotTime) { - t.Errorf("timestamps not equal: %s != %s", refTime, gotTime) - } - - // check that the time zone is set correctly based on TimeZone - pgLoc, err := time.LoadLocation(pgTimeZone) - if err != nil { - t.Logf("Could not load time zone %s - skipping", pgLoc) - continue - } - translated := refTime.In(pgLoc) - if translated.String() != gotTime.String() { - t.Errorf("timestamps not equal: %s != %s", translated, gotTime) - } - } - } -} - -func TestTimestampWithOutTimezone(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - test := func(ts, pgts string) { - r, err := db.Query("SELECT $1::timestamp", pgts) - if err != nil { - t.Fatalf("Could not run query: %v", err) - } - - if !r.Next() { - t.Fatal("Expected at least one row") - } - - var result time.Time - err = r.Scan(&result) - if err != nil { - t.Fatalf("Did not expect error scanning row: %v", err) - } - - expected, err := time.Parse(time.RFC3339, ts) - if err != nil { - t.Fatalf("Could not parse test time literal: %v", err) - } - - if !result.Equal(expected) { - t.Fatalf("Expected time to match %v: got mismatch %v", - expected, result) - } - - if r.Next() { - t.Fatal("Expected only one row") - } - } - - test("2000-01-01T00:00:00Z", "2000-01-01T00:00:00") - - // Test higher precision time - test("2013-01-04T20:14:58.80033Z", "2013-01-04 20:14:58.80033") -} - -func TestInfinityTimestamp(t *testing.T) { - db := openTestConn(t) - defer db.Close() - var err error - var resultT time.Time - - expectedErrorStrRegexp := regexp.MustCompile( - `^sql: Scan error on column index 0(, name "timestamp(tz)?"|): unsupported`) - - type testCases []struct { - Query string - Param string - ExpectedErrorStrRegexp *regexp.Regexp - ExpectedVal interface{} - } - tc := testCases{ - {"SELECT $1::timestamp", "-infinity", expectedErrorStrRegexp, "-infinity"}, - {"SELECT $1::timestamptz", "-infinity", expectedErrorStrRegexp, "-infinity"}, - {"SELECT $1::timestamp", "infinity", expectedErrorStrRegexp, "infinity"}, - {"SELECT $1::timestamptz", "infinity", expectedErrorStrRegexp, "infinity"}, - } - // try to assert []byte to time.Time - for _, q := range tc { - err = db.QueryRow(q.Query, q.Param).Scan(&resultT) - if !q.ExpectedErrorStrRegexp.MatchString(err.Error()) { - t.Errorf("Scanning -/+infinity, expected error to match regexp %q, got %q", - q.ExpectedErrorStrRegexp, err) - } - } - // yield []byte - for _, q := range tc { - var resultI interface{} - err = db.QueryRow(q.Query, q.Param).Scan(&resultI) - if err != nil { - t.Errorf("Scanning -/+infinity, expected no error, got %q", err) - } - result, ok := resultI.([]byte) - if !ok { - t.Errorf("Scanning -/+infinity, expected []byte, got %#v", resultI) - } - if string(result) != q.ExpectedVal { - t.Errorf("Scanning -/+infinity, expected %q, got %q", q.ExpectedVal, result) - } - } - - y1500 := time.Date(1500, time.January, 1, 0, 0, 0, 0, time.UTC) - y2500 := time.Date(2500, time.January, 1, 0, 0, 0, 0, time.UTC) - EnableInfinityTs(y1500, y2500) - - err = db.QueryRow("SELECT $1::timestamp", "infinity").Scan(&resultT) - if err != nil { - t.Errorf("Scanning infinity, expected no error, got %q", err) - } - if !resultT.Equal(y2500) { - t.Errorf("Scanning infinity, expected %q, got %q", y2500, resultT) - } - - err = db.QueryRow("SELECT $1::timestamptz", "infinity").Scan(&resultT) - if err != nil { - t.Errorf("Scanning infinity, expected no error, got %q", err) - } - if !resultT.Equal(y2500) { - t.Errorf("Scanning Infinity, expected time %q, got %q", y2500, resultT.String()) - } - - err = db.QueryRow("SELECT $1::timestamp", "-infinity").Scan(&resultT) - if err != nil { - t.Errorf("Scanning -infinity, expected no error, got %q", err) - } - if !resultT.Equal(y1500) { - t.Errorf("Scanning -infinity, expected time %q, got %q", y1500, resultT.String()) - } - - err = db.QueryRow("SELECT $1::timestamptz", "-infinity").Scan(&resultT) - if err != nil { - t.Errorf("Scanning -infinity, expected no error, got %q", err) - } - if !resultT.Equal(y1500) { - t.Errorf("Scanning -infinity, expected time %q, got %q", y1500, resultT.String()) - } - - ym1500 := time.Date(-1500, time.January, 1, 0, 0, 0, 0, time.UTC) - y11500 := time.Date(11500, time.January, 1, 0, 0, 0, 0, time.UTC) - var s string - err = db.QueryRow("SELECT $1::timestamp::text", ym1500).Scan(&s) - if err != nil { - t.Errorf("Encoding -infinity, expected no error, got %q", err) - } - if s != "-infinity" { - t.Errorf("Encoding -infinity, expected %q, got %q", "-infinity", s) - } - err = db.QueryRow("SELECT $1::timestamptz::text", ym1500).Scan(&s) - if err != nil { - t.Errorf("Encoding -infinity, expected no error, got %q", err) - } - if s != "-infinity" { - t.Errorf("Encoding -infinity, expected %q, got %q", "-infinity", s) - } - - err = db.QueryRow("SELECT $1::timestamp::text", y11500).Scan(&s) - if err != nil { - t.Errorf("Encoding infinity, expected no error, got %q", err) - } - if s != "infinity" { - t.Errorf("Encoding infinity, expected %q, got %q", "infinity", s) - } - err = db.QueryRow("SELECT $1::timestamptz::text", y11500).Scan(&s) - if err != nil { - t.Errorf("Encoding infinity, expected no error, got %q", err) - } - if s != "infinity" { - t.Errorf("Encoding infinity, expected %q, got %q", "infinity", s) - } - - disableInfinityTs() - - var panicErrorString string - func() { - defer func() { - panicErrorString, _ = recover().(string) - }() - EnableInfinityTs(y2500, y1500) - }() - if panicErrorString != infinityTsNegativeMustBeSmaller { - t.Errorf("Expected error, %q, got %q", infinityTsNegativeMustBeSmaller, panicErrorString) - } -} - -func TestStringWithNul(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - hello0world := string("hello\x00world") - _, err := db.Query("SELECT $1::text", &hello0world) - if err == nil { - t.Fatal("Postgres accepts a string with nul in it; " + - "injection attacks may be plausible") - } -} - -func TestByteSliceToText(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - b := []byte("hello world") - row := db.QueryRow("SELECT $1::text", b) - - var result []byte - err := row.Scan(&result) - if err != nil { - t.Fatal(err) - } - - if string(result) != string(b) { - t.Fatalf("expected %v but got %v", b, result) - } -} - -func TestStringToBytea(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - b := "hello world" - row := db.QueryRow("SELECT $1::bytea", b) - - var result []byte - err := row.Scan(&result) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(result, []byte(b)) { - t.Fatalf("expected %v but got %v", b, result) - } -} - -func TestTextByteSliceToUUID(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - b := []byte("a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11") - row := db.QueryRow("SELECT $1::uuid", b) - - var result string - err := row.Scan(&result) - if forceBinaryParameters() { - pqErr := err.(*Error) - if pqErr == nil { - t.Errorf("Expected to get error") - } else if pqErr.Code != "22P03" { - t.Fatalf("Expected to get invalid binary encoding error (22P03), got %s", pqErr.Code) - } - } else { - if err != nil { - t.Fatal(err) - } - - if result != string(b) { - t.Fatalf("expected %v but got %v", b, result) - } - } -} - -func TestBinaryByteSlicetoUUID(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - b := []byte{'\xa0', '\xee', '\xbc', '\x99', - '\x9c', '\x0b', - '\x4e', '\xf8', - '\xbb', '\x00', '\x6b', - '\xb9', '\xbd', '\x38', '\x0a', '\x11'} - row := db.QueryRow("SELECT $1::uuid", b) - - var result string - err := row.Scan(&result) - if forceBinaryParameters() { - if err != nil { - t.Fatal(err) - } - - if result != string("a0eebc99-9c0b-4ef8-bb00-6bb9bd380a11") { - t.Fatalf("expected %v but got %v", b, result) - } - } else { - pqErr := err.(*Error) - if pqErr == nil { - t.Errorf("Expected to get error") - } else if pqErr.Code != "22021" { - t.Fatalf("Expected to get invalid byte sequence for encoding error (22021), got %s", pqErr.Code) - } - } -} - -func TestStringToUUID(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - s := "a0eebc99-9c0b-4ef8-bb00-6bb9bd380a11" - row := db.QueryRow("SELECT $1::uuid", s) - - var result string - err := row.Scan(&result) - if err != nil { - t.Fatal(err) - } - - if result != s { - t.Fatalf("expected %v but got %v", s, result) - } -} - -func TestTextByteSliceToInt(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - expected := 12345678 - b := []byte(fmt.Sprintf("%d", expected)) - row := db.QueryRow("SELECT $1::int", b) - - var result int - err := row.Scan(&result) - if forceBinaryParameters() { - pqErr := err.(*Error) - if pqErr == nil { - t.Errorf("Expected to get error") - } else if pqErr.Code != "22P03" { - t.Fatalf("Expected to get invalid binary encoding error (22P03), got %s", pqErr.Code) - } - } else { - if err != nil { - t.Fatal(err) - } - if result != expected { - t.Fatalf("expected %v but got %v", expected, result) - } - } -} - -func TestBinaryByteSliceToInt(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - expected := 12345678 - b := []byte{'\x00', '\xbc', '\x61', '\x4e'} - row := db.QueryRow("SELECT $1::int", b) - - var result int - err := row.Scan(&result) - if forceBinaryParameters() { - if err != nil { - t.Fatal(err) - } - if result != expected { - t.Fatalf("expected %v but got %v", expected, result) - } - } else { - pqErr := err.(*Error) - if pqErr == nil { - t.Errorf("Expected to get error") - } else if pqErr.Code != "22021" { - t.Fatalf("Expected to get invalid byte sequence for encoding error (22021), got %s", pqErr.Code) - } - } -} - -func TestTextDecodeIntoString(t *testing.T) { - input := []byte("hello world") - want := string(input) - for _, typ := range []oid.Oid{oid.T_char, oid.T_varchar, oid.T_text} { - got := decode(¶meterStatus{}, input, typ, formatText) - if got != want { - t.Errorf("invalid string decoding output for %T(%+v), got %v but expected %v", typ, typ, got, want) - } - } -} - -func TestByteaOutputFormatEncoding(t *testing.T) { - input := []byte("\\x\x00\x01\x02\xFF\xFEabcdefg0123") - want := []byte("\\x5c78000102fffe6162636465666730313233") - got := encode(¶meterStatus{serverVersion: 90000}, input, oid.T_bytea) - if !bytes.Equal(want, got) { - t.Errorf("invalid hex bytea output, got %v but expected %v", got, want) - } - - want = []byte("\\\\x\\000\\001\\002\\377\\376abcdefg0123") - got = encode(¶meterStatus{serverVersion: 84000}, input, oid.T_bytea) - if !bytes.Equal(want, got) { - t.Errorf("invalid escape bytea output, got %v but expected %v", got, want) - } -} - -func TestByteaOutputFormats(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - if getServerVersion(t, db) < 90000 { - // skip - return - } - - testByteaOutputFormat := func(f string, usePrepared bool) { - expectedData := []byte("\x5c\x78\x00\xff\x61\x62\x63\x01\x08") - sqlQuery := "SELECT decode('5c7800ff6162630108', 'hex')" - - var data []byte - - // use a txn to avoid relying on getting the same connection - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - defer txn.Rollback() - - _, err = txn.Exec("SET LOCAL bytea_output TO " + f) - if err != nil { - t.Fatal(err) - } - var rows *sql.Rows - var stmt *sql.Stmt - if usePrepared { - stmt, err = txn.Prepare(sqlQuery) - if err != nil { - t.Fatal(err) - } - rows, err = stmt.Query() - } else { - // use Query; QueryRow would hide the actual error - rows, err = txn.Query(sqlQuery) - } - if err != nil { - t.Fatal(err) - } - if !rows.Next() { - if rows.Err() != nil { - t.Fatal(rows.Err()) - } - t.Fatal("shouldn't happen") - } - err = rows.Scan(&data) - if err != nil { - t.Fatal(err) - } - err = rows.Close() - if err != nil { - t.Fatal(err) - } - if stmt != nil { - err = stmt.Close() - if err != nil { - t.Fatal(err) - } - } - if !bytes.Equal(data, expectedData) { - t.Errorf("unexpected bytea value %v for format %s; expected %v", data, f, expectedData) - } - } - - testByteaOutputFormat("hex", false) - testByteaOutputFormat("escape", false) - testByteaOutputFormat("hex", true) - testByteaOutputFormat("escape", true) -} - -func TestAppendEncodedText(t *testing.T) { - var buf []byte - - buf = appendEncodedText(¶meterStatus{serverVersion: 90000}, buf, int64(10)) - buf = append(buf, '\t') - buf = appendEncodedText(¶meterStatus{serverVersion: 90000}, buf, 42.0000000001) - buf = append(buf, '\t') - buf = appendEncodedText(¶meterStatus{serverVersion: 90000}, buf, "hello\tworld") - buf = append(buf, '\t') - buf = appendEncodedText(¶meterStatus{serverVersion: 90000}, buf, []byte{0, 128, 255}) - - if string(buf) != "10\t42.0000000001\thello\\tworld\t\\\\x0080ff" { - t.Fatal(string(buf)) - } -} - -func TestAppendEscapedText(t *testing.T) { - if esc := appendEscapedText(nil, "hallo\tescape"); string(esc) != "hallo\\tescape" { - t.Fatal(string(esc)) - } - if esc := appendEscapedText(nil, "hallo\\tescape\n"); string(esc) != "hallo\\\\tescape\\n" { - t.Fatal(string(esc)) - } - if esc := appendEscapedText(nil, "\n\r\t\f"); string(esc) != "\\n\\r\\t\f" { - t.Fatal(string(esc)) - } -} - -func TestAppendEscapedTextExistingBuffer(t *testing.T) { - buf := []byte("123\t") - if esc := appendEscapedText(buf, "hallo\tescape"); string(esc) != "123\thallo\\tescape" { - t.Fatal(string(esc)) - } - buf = []byte("123\t") - if esc := appendEscapedText(buf, "hallo\\tescape\n"); string(esc) != "123\thallo\\\\tescape\\n" { - t.Fatal(string(esc)) - } - buf = []byte("123\t") - if esc := appendEscapedText(buf, "\n\r\t\f"); string(esc) != "123\t\\n\\r\\t\f" { - t.Fatal(string(esc)) - } -} - -func BenchmarkAppendEscapedText(b *testing.B) { - longString := "" - for i := 0; i < 100; i++ { - longString += "123456789\n" - } - for i := 0; i < b.N; i++ { - appendEscapedText(nil, longString) - } -} - -func BenchmarkAppendEscapedTextNoEscape(b *testing.B) { - longString := "" - for i := 0; i < 100; i++ { - longString += "1234567890" - } - for i := 0; i < b.N; i++ { - appendEscapedText(nil, longString) - } -} diff --git a/vendor/github.com/lib/pq/error.go b/vendor/github.com/lib/pq/error.go index 96aae29c..3d66ba7c 100644 --- a/vendor/github.com/lib/pq/error.go +++ b/vendor/github.com/lib/pq/error.go @@ -478,13 +478,13 @@ func errRecoverNoErrBadConn(err *error) { } } -func (c *conn) errRecover(err *error) { +func (cn *conn) errRecover(err *error) { e := recover() switch v := e.(type) { case nil: // Do nothing case runtime.Error: - c.bad = true + cn.bad = true panic(v) case *Error: if v.Fatal() { @@ -493,7 +493,7 @@ func (c *conn) errRecover(err *error) { *err = v } case *net.OpError: - c.bad = true + cn.bad = true *err = v case error: if v == io.EOF || v.(error).Error() == "remote error: handshake failure" { @@ -503,13 +503,13 @@ func (c *conn) errRecover(err *error) { } default: - c.bad = true + cn.bad = true panic(fmt.Sprintf("unknown error: %#v", e)) } // Any time we return ErrBadConn, we need to remember it since *Tx doesn't // mark the connection bad in database/sql. if *err == driver.ErrBadConn { - c.bad = true + cn.bad = true } } diff --git a/vendor/github.com/lib/pq/example/listen/doc.go b/vendor/github.com/lib/pq/example/listen/doc.go deleted file mode 100644 index 91e2ddba..00000000 --- a/vendor/github.com/lib/pq/example/listen/doc.go +++ /dev/null @@ -1,98 +0,0 @@ -/* - -Package listen is a self-contained Go program which uses the LISTEN / NOTIFY -mechanism to avoid polling the database while waiting for more work to arrive. - - // - // You can see the program in action by defining a function similar to - // the following: - // - // CREATE OR REPLACE FUNCTION public.get_work() - // RETURNS bigint - // LANGUAGE sql - // AS $$ - // SELECT CASE WHEN random() >= 0.2 THEN int8 '1' END - // $$ - // ; - - package main - - import ( - "database/sql" - "fmt" - "time" - - "github.com/lib/pq" - ) - - func doWork(db *sql.DB, work int64) { - // work here - } - - func getWork(db *sql.DB) { - for { - // get work from the database here - var work sql.NullInt64 - err := db.QueryRow("SELECT get_work()").Scan(&work) - if err != nil { - fmt.Println("call to get_work() failed: ", err) - time.Sleep(10 * time.Second) - continue - } - if !work.Valid { - // no more work to do - fmt.Println("ran out of work") - return - } - - fmt.Println("starting work on ", work.Int64) - go doWork(db, work.Int64) - } - } - - func waitForNotification(l *pq.Listener) { - select { - case <-l.Notify: - fmt.Println("received notification, new work available") - case <-time.After(90 * time.Second): - go l.Ping() - // Check if there's more work available, just in case it takes - // a while for the Listener to notice connection loss and - // reconnect. - fmt.Println("received no work for 90 seconds, checking for new work") - } - } - - func main() { - var conninfo string = "" - - db, err := sql.Open("postgres", conninfo) - if err != nil { - panic(err) - } - - reportProblem := func(ev pq.ListenerEventType, err error) { - if err != nil { - fmt.Println(err.Error()) - } - } - - minReconn := 10 * time.Second - maxReconn := time.Minute - listener := pq.NewListener(conninfo, minReconn, maxReconn, reportProblem) - err = listener.Listen("getwork") - if err != nil { - panic(err) - } - - fmt.Println("entering main loop") - for { - // process all available work before waiting for notifications - getWork(db) - waitForNotification(listener) - } - } - - -*/ -package listen diff --git a/vendor/github.com/lib/pq/go18_test.go b/vendor/github.com/lib/pq/go18_test.go deleted file mode 100644 index 72cd71fe..00000000 --- a/vendor/github.com/lib/pq/go18_test.go +++ /dev/null @@ -1,319 +0,0 @@ -package pq - -import ( - "context" - "database/sql" - "runtime" - "strings" - "testing" - "time" -) - -func TestMultipleSimpleQuery(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - rows, err := db.Query("select 1; set time zone default; select 2; select 3") - if err != nil { - t.Fatal(err) - } - defer rows.Close() - - var i int - for rows.Next() { - if err := rows.Scan(&i); err != nil { - t.Fatal(err) - } - if i != 1 { - t.Fatalf("expected 1, got %d", i) - } - } - if !rows.NextResultSet() { - t.Fatal("expected more result sets", rows.Err()) - } - for rows.Next() { - if err := rows.Scan(&i); err != nil { - t.Fatal(err) - } - if i != 2 { - t.Fatalf("expected 2, got %d", i) - } - } - - // Make sure that if we ignore a result we can still query. - - rows, err = db.Query("select 4; select 5") - if err != nil { - t.Fatal(err) - } - defer rows.Close() - - for rows.Next() { - if err := rows.Scan(&i); err != nil { - t.Fatal(err) - } - if i != 4 { - t.Fatalf("expected 4, got %d", i) - } - } - if !rows.NextResultSet() { - t.Fatal("expected more result sets", rows.Err()) - } - for rows.Next() { - if err := rows.Scan(&i); err != nil { - t.Fatal(err) - } - if i != 5 { - t.Fatalf("expected 5, got %d", i) - } - } - if rows.NextResultSet() { - t.Fatal("unexpected result set") - } -} - -const contextRaceIterations = 100 - -func TestContextCancelExec(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - ctx, cancel := context.WithCancel(context.Background()) - - // Delay execution for just a bit until db.ExecContext has begun. - defer time.AfterFunc(time.Millisecond*10, cancel).Stop() - - // Not canceled until after the exec has started. - if _, err := db.ExecContext(ctx, "select pg_sleep(1)"); err == nil { - t.Fatal("expected error") - } else if err.Error() != "pq: canceling statement due to user request" { - t.Fatalf("unexpected error: %s", err) - } - - // Context is already canceled, so error should come before execution. - if _, err := db.ExecContext(ctx, "select pg_sleep(1)"); err == nil { - t.Fatal("expected error") - } else if err.Error() != "context canceled" { - t.Fatalf("unexpected error: %s", err) - } - - for i := 0; i < contextRaceIterations; i++ { - func() { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - if _, err := db.ExecContext(ctx, "select 1"); err != nil { - t.Fatal(err) - } - }() - - if _, err := db.Exec("select 1"); err != nil { - t.Fatal(err) - } - } -} - -func TestContextCancelQuery(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - ctx, cancel := context.WithCancel(context.Background()) - - // Delay execution for just a bit until db.QueryContext has begun. - defer time.AfterFunc(time.Millisecond*10, cancel).Stop() - - // Not canceled until after the exec has started. - if _, err := db.QueryContext(ctx, "select pg_sleep(1)"); err == nil { - t.Fatal("expected error") - } else if err.Error() != "pq: canceling statement due to user request" { - t.Fatalf("unexpected error: %s", err) - } - - // Context is already canceled, so error should come before execution. - if _, err := db.QueryContext(ctx, "select pg_sleep(1)"); err == nil { - t.Fatal("expected error") - } else if err.Error() != "context canceled" { - t.Fatalf("unexpected error: %s", err) - } - - for i := 0; i < contextRaceIterations; i++ { - func() { - ctx, cancel := context.WithCancel(context.Background()) - rows, err := db.QueryContext(ctx, "select 1") - cancel() - if err != nil { - t.Fatal(err) - } else if err := rows.Close(); err != nil { - t.Fatal(err) - } - }() - - if rows, err := db.Query("select 1"); err != nil { - t.Fatal(err) - } else if err := rows.Close(); err != nil { - t.Fatal(err) - } - } -} - -// TestIssue617 tests that a failed query in QueryContext doesn't lead to a -// goroutine leak. -func TestIssue617(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - const N = 10 - - numGoroutineStart := runtime.NumGoroutine() - for i := 0; i < N; i++ { - func() { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - _, err := db.QueryContext(ctx, `SELECT * FROM DOESNOTEXIST`) - pqErr, _ := err.(*Error) - // Expecting "pq: relation \"doesnotexist\" does not exist" error. - if err == nil || pqErr == nil || pqErr.Code != "42P01" { - t.Fatalf("expected undefined table error, got %v", err) - } - }() - } - numGoroutineFinish := runtime.NumGoroutine() - - // We use N/2 and not N because the GC and other actors may increase or - // decrease the number of goroutines. - if numGoroutineFinish-numGoroutineStart >= N/2 { - t.Errorf("goroutine leak detected, was %d, now %d", numGoroutineStart, numGoroutineFinish) - } -} - -func TestContextCancelBegin(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - ctx, cancel := context.WithCancel(context.Background()) - tx, err := db.BeginTx(ctx, nil) - if err != nil { - t.Fatal(err) - } - - // Delay execution for just a bit until tx.Exec has begun. - defer time.AfterFunc(time.Millisecond*10, cancel).Stop() - - // Not canceled until after the exec has started. - if _, err := tx.Exec("select pg_sleep(1)"); err == nil { - t.Fatal("expected error") - } else if err.Error() != "pq: canceling statement due to user request" { - t.Fatalf("unexpected error: %s", err) - } - - // Transaction is canceled, so expect an error. - if _, err := tx.Query("select pg_sleep(1)"); err == nil { - t.Fatal("expected error") - } else if err != sql.ErrTxDone { - t.Fatalf("unexpected error: %s", err) - } - - // Context is canceled, so cannot begin a transaction. - if _, err := db.BeginTx(ctx, nil); err == nil { - t.Fatal("expected error") - } else if err.Error() != "context canceled" { - t.Fatalf("unexpected error: %s", err) - } - - for i := 0; i < contextRaceIterations; i++ { - func() { - ctx, cancel := context.WithCancel(context.Background()) - tx, err := db.BeginTx(ctx, nil) - cancel() - if err != nil { - t.Fatal(err) - } else if err := tx.Rollback(); err != nil && - err.Error() != "pq: canceling statement due to user request" && - err != sql.ErrTxDone { - t.Fatal(err) - } - }() - - if tx, err := db.Begin(); err != nil { - t.Fatal(err) - } else if err := tx.Rollback(); err != nil { - t.Fatal(err) - } - } -} - -func TestTxOptions(t *testing.T) { - db := openTestConn(t) - defer db.Close() - ctx := context.Background() - - tests := []struct { - level sql.IsolationLevel - isolation string - }{ - { - level: sql.LevelDefault, - isolation: "", - }, - { - level: sql.LevelReadUncommitted, - isolation: "read uncommitted", - }, - { - level: sql.LevelReadCommitted, - isolation: "read committed", - }, - { - level: sql.LevelRepeatableRead, - isolation: "repeatable read", - }, - { - level: sql.LevelSerializable, - isolation: "serializable", - }, - } - - for _, test := range tests { - for _, ro := range []bool{true, false} { - tx, err := db.BeginTx(ctx, &sql.TxOptions{ - Isolation: test.level, - ReadOnly: ro, - }) - if err != nil { - t.Fatal(err) - } - - var isolation string - err = tx.QueryRow("select current_setting('transaction_isolation')").Scan(&isolation) - if err != nil { - t.Fatal(err) - } - - if test.isolation != "" && isolation != test.isolation { - t.Errorf("wrong isolation level: %s != %s", isolation, test.isolation) - } - - var isRO string - err = tx.QueryRow("select current_setting('transaction_read_only')").Scan(&isRO) - if err != nil { - t.Fatal(err) - } - - if ro != (isRO == "on") { - t.Errorf("read/[write,only] not set: %t != %s for level %s", - ro, isRO, test.isolation) - } - - tx.Rollback() - } - } - - _, err := db.BeginTx(ctx, &sql.TxOptions{ - Isolation: sql.LevelLinearizable, - }) - if err == nil { - t.Fatal("expected LevelLinearizable to fail") - } - if !strings.Contains(err.Error(), "isolation level not supported") { - t.Errorf("Expected error to mention isolation level, got %q", err) - } -} diff --git a/vendor/github.com/lib/pq/go19_test.go b/vendor/github.com/lib/pq/go19_test.go deleted file mode 100644 index 1949249d..00000000 --- a/vendor/github.com/lib/pq/go19_test.go +++ /dev/null @@ -1,69 +0,0 @@ -// +build go1.9 - -package pq - -import ( - "context" - "database/sql" - "database/sql/driver" - "reflect" - "testing" -) - -func TestPing(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - db := openTestConn(t) - defer db.Close() - - if _, ok := reflect.TypeOf(db).MethodByName("Conn"); !ok { - t.Skipf("Conn method undefined on type %T, skipping test (requires at least go1.9)", db) - } - - if err := db.PingContext(ctx); err != nil { - t.Fatal("expected Ping to succeed") - } - defer cancel() - - // grab a connection - conn, err := db.Conn(ctx) - if err != nil { - t.Fatal(err) - } - - // start a transaction and read backend pid of our connection - tx, err := conn.BeginTx(ctx, &sql.TxOptions{ - Isolation: sql.LevelDefault, - ReadOnly: true, - }) - if err != nil { - t.Fatal(err) - } - - rows, err := tx.Query("SELECT pg_backend_pid()") - if err != nil { - t.Fatal(err) - } - defer rows.Close() - - // read the pid from result - var pid int - for rows.Next() { - if err := rows.Scan(&pid); err != nil { - t.Fatal(err) - } - } - if rows.Err() != nil { - t.Fatal(err) - } - if err := tx.Rollback(); err != nil { - t.Fatal(err) - } - - // kill the process which handles our connection and test if the ping fails - if _, err := db.Exec("SELECT pg_terminate_backend($1)", pid); err != nil { - t.Fatal(err) - } - if err := conn.PingContext(ctx); err != driver.ErrBadConn { - t.Fatalf("expected error %s, instead got %s", driver.ErrBadConn, err) - } -} diff --git a/vendor/github.com/lib/pq/hstore/hstore.go b/vendor/github.com/lib/pq/hstore/hstore.go deleted file mode 100644 index f1470db1..00000000 --- a/vendor/github.com/lib/pq/hstore/hstore.go +++ /dev/null @@ -1,118 +0,0 @@ -package hstore - -import ( - "database/sql" - "database/sql/driver" - "strings" -) - -// Hstore is a wrapper for transferring Hstore values back and forth easily. -type Hstore struct { - Map map[string]sql.NullString -} - -// escapes and quotes hstore keys/values -// s should be a sql.NullString or string -func hQuote(s interface{}) string { - var str string - switch v := s.(type) { - case sql.NullString: - if !v.Valid { - return "NULL" - } - str = v.String - case string: - str = v - default: - panic("not a string or sql.NullString") - } - - str = strings.Replace(str, "\\", "\\\\", -1) - return `"` + strings.Replace(str, "\"", "\\\"", -1) + `"` -} - -// Scan implements the Scanner interface. -// -// Note h.Map is reallocated before the scan to clear existing values. If the -// hstore column's database value is NULL, then h.Map is set to nil instead. -func (h *Hstore) Scan(value interface{}) error { - if value == nil { - h.Map = nil - return nil - } - h.Map = make(map[string]sql.NullString) - var b byte - pair := [][]byte{{}, {}} - pi := 0 - inQuote := false - didQuote := false - sawSlash := false - bindex := 0 - for bindex, b = range value.([]byte) { - if sawSlash { - pair[pi] = append(pair[pi], b) - sawSlash = false - continue - } - - switch b { - case '\\': - sawSlash = true - continue - case '"': - inQuote = !inQuote - if !didQuote { - didQuote = true - } - continue - default: - if !inQuote { - switch b { - case ' ', '\t', '\n', '\r': - continue - case '=': - continue - case '>': - pi = 1 - didQuote = false - continue - case ',': - s := string(pair[1]) - if !didQuote && len(s) == 4 && strings.ToLower(s) == "null" { - h.Map[string(pair[0])] = sql.NullString{String: "", Valid: false} - } else { - h.Map[string(pair[0])] = sql.NullString{String: string(pair[1]), Valid: true} - } - pair[0] = []byte{} - pair[1] = []byte{} - pi = 0 - continue - } - } - } - pair[pi] = append(pair[pi], b) - } - if bindex > 0 { - s := string(pair[1]) - if !didQuote && len(s) == 4 && strings.ToLower(s) == "null" { - h.Map[string(pair[0])] = sql.NullString{String: "", Valid: false} - } else { - h.Map[string(pair[0])] = sql.NullString{String: string(pair[1]), Valid: true} - } - } - return nil -} - -// Value implements the driver Valuer interface. Note if h.Map is nil, the -// database column value will be set to NULL. -func (h Hstore) Value() (driver.Value, error) { - if h.Map == nil { - return nil, nil - } - parts := []string{} - for key, val := range h.Map { - thispart := hQuote(key) + "=>" + hQuote(val) - parts = append(parts, thispart) - } - return []byte(strings.Join(parts, ",")), nil -} diff --git a/vendor/github.com/lib/pq/hstore/hstore_test.go b/vendor/github.com/lib/pq/hstore/hstore_test.go deleted file mode 100644 index 1c9f2bd4..00000000 --- a/vendor/github.com/lib/pq/hstore/hstore_test.go +++ /dev/null @@ -1,148 +0,0 @@ -package hstore - -import ( - "database/sql" - "os" - "testing" - - _ "github.com/lib/pq" -) - -type Fatalistic interface { - Fatal(args ...interface{}) -} - -func openTestConn(t Fatalistic) *sql.DB { - datname := os.Getenv("PGDATABASE") - sslmode := os.Getenv("PGSSLMODE") - - if datname == "" { - os.Setenv("PGDATABASE", "pqgotest") - } - - if sslmode == "" { - os.Setenv("PGSSLMODE", "disable") - } - - conn, err := sql.Open("postgres", "") - if err != nil { - t.Fatal(err) - } - - return conn -} - -func TestHstore(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - // quitely create hstore if it doesn't exist - _, err := db.Exec("CREATE EXTENSION IF NOT EXISTS hstore") - if err != nil { - t.Skipf("Skipping hstore tests - hstore extension create failed: %s", err.Error()) - } - - hs := Hstore{} - - // test for null-valued hstores - err = db.QueryRow("SELECT NULL::hstore").Scan(&hs) - if err != nil { - t.Fatal(err) - } - if hs.Map != nil { - t.Fatalf("expected null map") - } - - err = db.QueryRow("SELECT $1::hstore", hs).Scan(&hs) - if err != nil { - t.Fatalf("re-query null map failed: %s", err.Error()) - } - if hs.Map != nil { - t.Fatalf("expected null map") - } - - // test for empty hstores - err = db.QueryRow("SELECT ''::hstore").Scan(&hs) - if err != nil { - t.Fatal(err) - } - if hs.Map == nil { - t.Fatalf("expected empty map, got null map") - } - if len(hs.Map) != 0 { - t.Fatalf("expected empty map, got len(map)=%d", len(hs.Map)) - } - - err = db.QueryRow("SELECT $1::hstore", hs).Scan(&hs) - if err != nil { - t.Fatalf("re-query empty map failed: %s", err.Error()) - } - if hs.Map == nil { - t.Fatalf("expected empty map, got null map") - } - if len(hs.Map) != 0 { - t.Fatalf("expected empty map, got len(map)=%d", len(hs.Map)) - } - - // a few example maps to test out - hsOnePair := Hstore{ - Map: map[string]sql.NullString{ - "key1": {String: "value1", Valid: true}, - }, - } - - hsThreePairs := Hstore{ - Map: map[string]sql.NullString{ - "key1": {String: "value1", Valid: true}, - "key2": {String: "value2", Valid: true}, - "key3": {String: "value3", Valid: true}, - }, - } - - hsSmorgasbord := Hstore{ - Map: map[string]sql.NullString{ - "nullstring": {String: "NULL", Valid: true}, - "actuallynull": {String: "", Valid: false}, - "NULL": {String: "NULL string key", Valid: true}, - "withbracket": {String: "value>42", Valid: true}, - "withequal": {String: "value=42", Valid: true}, - `"withquotes1"`: {String: `this "should" be fine`, Valid: true}, - `"withquotes"2"`: {String: `this "should\" also be fine`, Valid: true}, - "embedded1": {String: "value1=>x1", Valid: true}, - "embedded2": {String: `"value2"=>x2`, Valid: true}, - "withnewlines": {String: "\n\nvalue\t=>2", Valid: true}, - "<>": {String: `this, "should,\" also, => be fine`, Valid: true}, - }, - } - - // test encoding in query params, then decoding during Scan - testBidirectional := func(h Hstore) { - err = db.QueryRow("SELECT $1::hstore", h).Scan(&hs) - if err != nil { - t.Fatalf("re-query %d-pair map failed: %s", len(h.Map), err.Error()) - } - if hs.Map == nil { - t.Fatalf("expected %d-pair map, got null map", len(h.Map)) - } - if len(hs.Map) != len(h.Map) { - t.Fatalf("expected %d-pair map, got len(map)=%d", len(h.Map), len(hs.Map)) - } - - for key, val := range hs.Map { - otherval, found := h.Map[key] - if !found { - t.Fatalf(" key '%v' not found in %d-pair map", key, len(h.Map)) - } - if otherval.Valid != val.Valid { - t.Fatalf(" value %v <> %v in %d-pair map", otherval, val, len(h.Map)) - } - if otherval.String != val.String { - t.Fatalf(" value '%v' <> '%v' in %d-pair map", otherval.String, val.String, len(h.Map)) - } - } - } - - testBidirectional(hsOnePair) - testBidirectional(hsThreePairs) - testBidirectional(hsSmorgasbord) -} diff --git a/vendor/github.com/lib/pq/issues_test.go b/vendor/github.com/lib/pq/issues_test.go deleted file mode 100644 index 3a330a0a..00000000 --- a/vendor/github.com/lib/pq/issues_test.go +++ /dev/null @@ -1,26 +0,0 @@ -package pq - -import "testing" - -func TestIssue494(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - query := `CREATE TEMP TABLE t (i INT PRIMARY KEY)` - if _, err := db.Exec(query); err != nil { - t.Fatal(err) - } - - txn, err := db.Begin() - if err != nil { - t.Fatal(err) - } - - if _, err := txn.Prepare(CopyIn("t", "i")); err != nil { - t.Fatal(err) - } - - if _, err := txn.Query("SELECT 1"); err == nil { - t.Fatal("expected error") - } -} diff --git a/vendor/github.com/lib/pq/notify_test.go b/vendor/github.com/lib/pq/notify_test.go deleted file mode 100644 index 075666dd..00000000 --- a/vendor/github.com/lib/pq/notify_test.go +++ /dev/null @@ -1,570 +0,0 @@ -package pq - -import ( - "errors" - "fmt" - "io" - "os" - "runtime" - "sync" - "testing" - "time" -) - -var errNilNotification = errors.New("nil notification") - -func expectNotification(t *testing.T, ch <-chan *Notification, relname string, extra string) error { - select { - case n := <-ch: - if n == nil { - return errNilNotification - } - if n.Channel != relname || n.Extra != extra { - return fmt.Errorf("unexpected notification %v", n) - } - return nil - case <-time.After(1500 * time.Millisecond): - return fmt.Errorf("timeout") - } -} - -func expectNoNotification(t *testing.T, ch <-chan *Notification) error { - select { - case n := <-ch: - return fmt.Errorf("unexpected notification %v", n) - case <-time.After(100 * time.Millisecond): - return nil - } -} - -func expectEvent(t *testing.T, eventch <-chan ListenerEventType, et ListenerEventType) error { - select { - case e := <-eventch: - if e != et { - return fmt.Errorf("unexpected event %v", e) - } - return nil - case <-time.After(1500 * time.Millisecond): - panic("expectEvent timeout") - } -} - -func expectNoEvent(t *testing.T, eventch <-chan ListenerEventType) error { - select { - case e := <-eventch: - return fmt.Errorf("unexpected event %v", e) - case <-time.After(100 * time.Millisecond): - return nil - } -} - -func newTestListenerConn(t *testing.T) (*ListenerConn, <-chan *Notification) { - datname := os.Getenv("PGDATABASE") - sslmode := os.Getenv("PGSSLMODE") - - if datname == "" { - os.Setenv("PGDATABASE", "pqgotest") - } - - if sslmode == "" { - os.Setenv("PGSSLMODE", "disable") - } - - notificationChan := make(chan *Notification) - l, err := NewListenerConn("", notificationChan) - if err != nil { - t.Fatal(err) - } - - return l, notificationChan -} - -func TestNewListenerConn(t *testing.T) { - l, _ := newTestListenerConn(t) - - defer l.Close() -} - -func TestConnListen(t *testing.T) { - l, channel := newTestListenerConn(t) - - defer l.Close() - - db := openTestConn(t) - defer db.Close() - - ok, err := l.Listen("notify_test") - if !ok || err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_test") - if err != nil { - t.Fatal(err) - } - - err = expectNotification(t, channel, "notify_test", "") - if err != nil { - t.Fatal(err) - } -} - -func TestConnUnlisten(t *testing.T) { - l, channel := newTestListenerConn(t) - - defer l.Close() - - db := openTestConn(t) - defer db.Close() - - ok, err := l.Listen("notify_test") - if !ok || err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_test") - if err != nil { - t.Fatal(err) - } - - err = expectNotification(t, channel, "notify_test", "") - if err != nil { - t.Fatal(err) - } - - ok, err = l.Unlisten("notify_test") - if !ok || err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_test") - if err != nil { - t.Fatal(err) - } - - err = expectNoNotification(t, channel) - if err != nil { - t.Fatal(err) - } -} - -func TestConnUnlistenAll(t *testing.T) { - l, channel := newTestListenerConn(t) - - defer l.Close() - - db := openTestConn(t) - defer db.Close() - - ok, err := l.Listen("notify_test") - if !ok || err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_test") - if err != nil { - t.Fatal(err) - } - - err = expectNotification(t, channel, "notify_test", "") - if err != nil { - t.Fatal(err) - } - - ok, err = l.UnlistenAll() - if !ok || err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_test") - if err != nil { - t.Fatal(err) - } - - err = expectNoNotification(t, channel) - if err != nil { - t.Fatal(err) - } -} - -func TestConnClose(t *testing.T) { - l, _ := newTestListenerConn(t) - defer l.Close() - - err := l.Close() - if err != nil { - t.Fatal(err) - } - err = l.Close() - if err != errListenerConnClosed { - t.Fatalf("expected errListenerConnClosed; got %v", err) - } -} - -func TestConnPing(t *testing.T) { - l, _ := newTestListenerConn(t) - defer l.Close() - err := l.Ping() - if err != nil { - t.Fatal(err) - } - err = l.Close() - if err != nil { - t.Fatal(err) - } - err = l.Ping() - if err != errListenerConnClosed { - t.Fatalf("expected errListenerConnClosed; got %v", err) - } -} - -// Test for deadlock where a query fails while another one is queued -func TestConnExecDeadlock(t *testing.T) { - l, _ := newTestListenerConn(t) - defer l.Close() - - var wg sync.WaitGroup - wg.Add(2) - - go func() { - l.ExecSimpleQuery("SELECT pg_sleep(60)") - wg.Done() - }() - runtime.Gosched() - go func() { - l.ExecSimpleQuery("SELECT 1") - wg.Done() - }() - // give the two goroutines some time to get into position - runtime.Gosched() - // calls Close on the net.Conn; equivalent to a network failure - l.Close() - - defer time.AfterFunc(10*time.Second, func() { - panic("timed out") - }).Stop() - wg.Wait() -} - -// Test for ListenerConn being closed while a slow query is executing -func TestListenerConnCloseWhileQueryIsExecuting(t *testing.T) { - l, _ := newTestListenerConn(t) - defer l.Close() - - var wg sync.WaitGroup - wg.Add(1) - - go func() { - sent, err := l.ExecSimpleQuery("SELECT pg_sleep(60)") - if sent { - panic("expected sent=false") - } - // could be any of a number of errors - if err == nil { - panic("expected error") - } - wg.Done() - }() - // give the above goroutine some time to get into position - runtime.Gosched() - err := l.Close() - if err != nil { - t.Fatal(err) - } - - defer time.AfterFunc(10*time.Second, func() { - panic("timed out") - }).Stop() - wg.Wait() -} - -func TestNotifyExtra(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - if getServerVersion(t, db) < 90000 { - t.Skip("skipping NOTIFY payload test since the server does not appear to support it") - } - - l, channel := newTestListenerConn(t) - defer l.Close() - - ok, err := l.Listen("notify_test") - if !ok || err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_test, 'something'") - if err != nil { - t.Fatal(err) - } - - err = expectNotification(t, channel, "notify_test", "something") - if err != nil { - t.Fatal(err) - } -} - -// create a new test listener and also set the timeouts -func newTestListenerTimeout(t *testing.T, min time.Duration, max time.Duration) (*Listener, <-chan ListenerEventType) { - datname := os.Getenv("PGDATABASE") - sslmode := os.Getenv("PGSSLMODE") - - if datname == "" { - os.Setenv("PGDATABASE", "pqgotest") - } - - if sslmode == "" { - os.Setenv("PGSSLMODE", "disable") - } - - eventch := make(chan ListenerEventType, 16) - l := NewListener("", min, max, func(t ListenerEventType, err error) { eventch <- t }) - err := expectEvent(t, eventch, ListenerEventConnected) - if err != nil { - t.Fatal(err) - } - return l, eventch -} - -func newTestListener(t *testing.T) (*Listener, <-chan ListenerEventType) { - return newTestListenerTimeout(t, time.Hour, time.Hour) -} - -func TestListenerListen(t *testing.T) { - l, _ := newTestListener(t) - defer l.Close() - - db := openTestConn(t) - defer db.Close() - - err := l.Listen("notify_listen_test") - if err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_listen_test") - if err != nil { - t.Fatal(err) - } - - err = expectNotification(t, l.Notify, "notify_listen_test", "") - if err != nil { - t.Fatal(err) - } -} - -func TestListenerUnlisten(t *testing.T) { - l, _ := newTestListener(t) - defer l.Close() - - db := openTestConn(t) - defer db.Close() - - err := l.Listen("notify_listen_test") - if err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_listen_test") - if err != nil { - t.Fatal(err) - } - - err = l.Unlisten("notify_listen_test") - if err != nil { - t.Fatal(err) - } - - err = expectNotification(t, l.Notify, "notify_listen_test", "") - if err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_listen_test") - if err != nil { - t.Fatal(err) - } - - err = expectNoNotification(t, l.Notify) - if err != nil { - t.Fatal(err) - } -} - -func TestListenerUnlistenAll(t *testing.T) { - l, _ := newTestListener(t) - defer l.Close() - - db := openTestConn(t) - defer db.Close() - - err := l.Listen("notify_listen_test") - if err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_listen_test") - if err != nil { - t.Fatal(err) - } - - err = l.UnlistenAll() - if err != nil { - t.Fatal(err) - } - - err = expectNotification(t, l.Notify, "notify_listen_test", "") - if err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_listen_test") - if err != nil { - t.Fatal(err) - } - - err = expectNoNotification(t, l.Notify) - if err != nil { - t.Fatal(err) - } -} - -func TestListenerFailedQuery(t *testing.T) { - l, eventch := newTestListener(t) - defer l.Close() - - db := openTestConn(t) - defer db.Close() - - err := l.Listen("notify_listen_test") - if err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_listen_test") - if err != nil { - t.Fatal(err) - } - - err = expectNotification(t, l.Notify, "notify_listen_test", "") - if err != nil { - t.Fatal(err) - } - - // shouldn't cause a disconnect - ok, err := l.cn.ExecSimpleQuery("SELECT error") - if !ok { - t.Fatalf("could not send query to server: %v", err) - } - _, ok = err.(PGError) - if !ok { - t.Fatalf("unexpected error %v", err) - } - err = expectNoEvent(t, eventch) - if err != nil { - t.Fatal(err) - } - - // should still work - _, err = db.Exec("NOTIFY notify_listen_test") - if err != nil { - t.Fatal(err) - } - - err = expectNotification(t, l.Notify, "notify_listen_test", "") - if err != nil { - t.Fatal(err) - } -} - -func TestListenerReconnect(t *testing.T) { - l, eventch := newTestListenerTimeout(t, 20*time.Millisecond, time.Hour) - defer l.Close() - - db := openTestConn(t) - defer db.Close() - - err := l.Listen("notify_listen_test") - if err != nil { - t.Fatal(err) - } - - _, err = db.Exec("NOTIFY notify_listen_test") - if err != nil { - t.Fatal(err) - } - - err = expectNotification(t, l.Notify, "notify_listen_test", "") - if err != nil { - t.Fatal(err) - } - - // kill the connection and make sure it comes back up - ok, err := l.cn.ExecSimpleQuery("SELECT pg_terminate_backend(pg_backend_pid())") - if ok { - t.Fatalf("could not kill the connection: %v", err) - } - if err != io.EOF { - t.Fatalf("unexpected error %v", err) - } - err = expectEvent(t, eventch, ListenerEventDisconnected) - if err != nil { - t.Fatal(err) - } - err = expectEvent(t, eventch, ListenerEventReconnected) - if err != nil { - t.Fatal(err) - } - - // should still work - _, err = db.Exec("NOTIFY notify_listen_test") - if err != nil { - t.Fatal(err) - } - - // should get nil after Reconnected - err = expectNotification(t, l.Notify, "", "") - if err != errNilNotification { - t.Fatal(err) - } - - err = expectNotification(t, l.Notify, "notify_listen_test", "") - if err != nil { - t.Fatal(err) - } -} - -func TestListenerClose(t *testing.T) { - l, _ := newTestListenerTimeout(t, 20*time.Millisecond, time.Hour) - defer l.Close() - - err := l.Close() - if err != nil { - t.Fatal(err) - } - err = l.Close() - if err != errListenerClosed { - t.Fatalf("expected errListenerClosed; got %v", err) - } -} - -func TestListenerPing(t *testing.T) { - l, _ := newTestListenerTimeout(t, 20*time.Millisecond, time.Hour) - defer l.Close() - - err := l.Ping() - if err != nil { - t.Fatal(err) - } - - err = l.Close() - if err != nil { - t.Fatal(err) - } - - err = l.Ping() - if err != errListenerClosed { - t.Fatalf("expected errListenerClosed; got %v", err) - } -} diff --git a/vendor/github.com/lib/pq/rows_test.go b/vendor/github.com/lib/pq/rows_test.go deleted file mode 100644 index b3420a29..00000000 --- a/vendor/github.com/lib/pq/rows_test.go +++ /dev/null @@ -1,218 +0,0 @@ -package pq - -import ( - "math" - "reflect" - "testing" - - "github.com/lib/pq/oid" -) - -func TestDataTypeName(t *testing.T) { - tts := []struct { - typ oid.Oid - name string - }{ - {oid.T_int8, "INT8"}, - {oid.T_int4, "INT4"}, - {oid.T_int2, "INT2"}, - {oid.T_varchar, "VARCHAR"}, - {oid.T_text, "TEXT"}, - {oid.T_bool, "BOOL"}, - {oid.T_numeric, "NUMERIC"}, - {oid.T_date, "DATE"}, - {oid.T_time, "TIME"}, - {oid.T_timetz, "TIMETZ"}, - {oid.T_timestamp, "TIMESTAMP"}, - {oid.T_timestamptz, "TIMESTAMPTZ"}, - {oid.T_bytea, "BYTEA"}, - } - - for i, tt := range tts { - dt := fieldDesc{OID: tt.typ} - if name := dt.Name(); name != tt.name { - t.Errorf("(%d) got: %s want: %s", i, name, tt.name) - } - } -} - -func TestDataType(t *testing.T) { - tts := []struct { - typ oid.Oid - kind reflect.Kind - }{ - {oid.T_int8, reflect.Int64}, - {oid.T_int4, reflect.Int32}, - {oid.T_int2, reflect.Int16}, - {oid.T_varchar, reflect.String}, - {oid.T_text, reflect.String}, - {oid.T_bool, reflect.Bool}, - {oid.T_date, reflect.Struct}, - {oid.T_time, reflect.Struct}, - {oid.T_timetz, reflect.Struct}, - {oid.T_timestamp, reflect.Struct}, - {oid.T_timestamptz, reflect.Struct}, - {oid.T_bytea, reflect.Slice}, - } - - for i, tt := range tts { - dt := fieldDesc{OID: tt.typ} - if kind := dt.Type().Kind(); kind != tt.kind { - t.Errorf("(%d) got: %s want: %s", i, kind, tt.kind) - } - } -} - -func TestDataTypeLength(t *testing.T) { - tts := []struct { - typ oid.Oid - len int - mod int - length int64 - ok bool - }{ - {oid.T_int4, 0, -1, 0, false}, - {oid.T_varchar, 65535, 9, 5, true}, - {oid.T_text, 65535, -1, math.MaxInt64, true}, - {oid.T_bytea, 65535, -1, math.MaxInt64, true}, - } - - for i, tt := range tts { - dt := fieldDesc{OID: tt.typ, Len: tt.len, Mod: tt.mod} - if l, k := dt.Length(); k != tt.ok || l != tt.length { - t.Errorf("(%d) got: %d, %t want: %d, %t", i, l, k, tt.length, tt.ok) - } - } -} - -func TestDataTypePrecisionScale(t *testing.T) { - tts := []struct { - typ oid.Oid - mod int - precision, scale int64 - ok bool - }{ - {oid.T_int4, -1, 0, 0, false}, - {oid.T_numeric, 589830, 9, 2, true}, - {oid.T_text, -1, 0, 0, false}, - } - - for i, tt := range tts { - dt := fieldDesc{OID: tt.typ, Mod: tt.mod} - p, s, k := dt.PrecisionScale() - if k != tt.ok { - t.Errorf("(%d) got: %t want: %t", i, k, tt.ok) - } - if p != tt.precision { - t.Errorf("(%d) wrong precision got: %d want: %d", i, p, tt.precision) - } - if s != tt.scale { - t.Errorf("(%d) wrong scale got: %d want: %d", i, s, tt.scale) - } - } -} - -func TestRowsColumnTypes(t *testing.T) { - columnTypesTests := []struct { - Name string - TypeName string - Length struct { - Len int64 - OK bool - } - DecimalSize struct { - Precision int64 - Scale int64 - OK bool - } - ScanType reflect.Type - }{ - { - Name: "a", - TypeName: "INT4", - Length: struct { - Len int64 - OK bool - }{ - Len: 0, - OK: false, - }, - DecimalSize: struct { - Precision int64 - Scale int64 - OK bool - }{ - Precision: 0, - Scale: 0, - OK: false, - }, - ScanType: reflect.TypeOf(int32(0)), - }, { - Name: "bar", - TypeName: "TEXT", - Length: struct { - Len int64 - OK bool - }{ - Len: math.MaxInt64, - OK: true, - }, - DecimalSize: struct { - Precision int64 - Scale int64 - OK bool - }{ - Precision: 0, - Scale: 0, - OK: false, - }, - ScanType: reflect.TypeOf(""), - }, - } - - db := openTestConn(t) - defer db.Close() - - rows, err := db.Query("SELECT 1 AS a, text 'bar' AS bar, 1.28::numeric(9, 2) AS dec") - if err != nil { - t.Fatal(err) - } - - columns, err := rows.ColumnTypes() - if err != nil { - t.Fatal(err) - } - if len(columns) != 3 { - t.Errorf("expected 3 columns found %d", len(columns)) - } - - for i, tt := range columnTypesTests { - c := columns[i] - if c.Name() != tt.Name { - t.Errorf("(%d) got: %s, want: %s", i, c.Name(), tt.Name) - } - if c.DatabaseTypeName() != tt.TypeName { - t.Errorf("(%d) got: %s, want: %s", i, c.DatabaseTypeName(), tt.TypeName) - } - l, ok := c.Length() - if l != tt.Length.Len { - t.Errorf("(%d) got: %d, want: %d", i, l, tt.Length.Len) - } - if ok != tt.Length.OK { - t.Errorf("(%d) got: %t, want: %t", i, ok, tt.Length.OK) - } - p, s, ok := c.DecimalSize() - if p != tt.DecimalSize.Precision { - t.Errorf("(%d) got: %d, want: %d", i, p, tt.DecimalSize.Precision) - } - if s != tt.DecimalSize.Scale { - t.Errorf("(%d) got: %d, want: %d", i, s, tt.DecimalSize.Scale) - } - if ok != tt.DecimalSize.OK { - t.Errorf("(%d) got: %t, want: %t", i, ok, tt.DecimalSize.OK) - } - if c.ScanType() != tt.ScanType { - t.Errorf("(%d) got: %v, want: %v", i, c.ScanType(), tt.ScanType) - } - } -} diff --git a/vendor/github.com/lib/pq/scram/scram.go b/vendor/github.com/lib/pq/scram/scram.go index 5d0358f8..484f378a 100644 --- a/vendor/github.com/lib/pq/scram/scram.go +++ b/vendor/github.com/lib/pq/scram/scram.go @@ -22,7 +22,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Pacakage scram implements a SCRAM-{SHA-1,etc} client per RFC5802. +// Package scram implements a SCRAM-{SHA-1,etc} client per RFC5802. // // http://tools.ietf.org/html/rfc5802 // diff --git a/vendor/github.com/lib/pq/ssl_test.go b/vendor/github.com/lib/pq/ssl_test.go deleted file mode 100644 index 3eafbfd2..00000000 --- a/vendor/github.com/lib/pq/ssl_test.go +++ /dev/null @@ -1,279 +0,0 @@ -package pq - -// This file contains SSL tests - -import ( - _ "crypto/sha256" - "crypto/x509" - "database/sql" - "os" - "path/filepath" - "testing" -) - -func maybeSkipSSLTests(t *testing.T) { - // Require some special variables for testing certificates - if os.Getenv("PQSSLCERTTEST_PATH") == "" { - t.Skip("PQSSLCERTTEST_PATH not set, skipping SSL tests") - } - - value := os.Getenv("PQGOSSLTESTS") - if value == "" || value == "0" { - t.Skip("PQGOSSLTESTS not enabled, skipping SSL tests") - } else if value != "1" { - t.Fatalf("unexpected value %q for PQGOSSLTESTS", value) - } -} - -func openSSLConn(t *testing.T, conninfo string) (*sql.DB, error) { - db, err := openTestConnConninfo(conninfo) - if err != nil { - // should never fail - t.Fatal(err) - } - // Do something with the connection to see whether it's working or not. - tx, err := db.Begin() - if err == nil { - return db, tx.Rollback() - } - _ = db.Close() - return nil, err -} - -func checkSSLSetup(t *testing.T, conninfo string) { - _, err := openSSLConn(t, conninfo) - if pge, ok := err.(*Error); ok { - if pge.Code.Name() != "invalid_authorization_specification" { - t.Fatalf("unexpected error code '%s'", pge.Code.Name()) - } - } else { - t.Fatalf("expected %T, got %v", (*Error)(nil), err) - } -} - -// Connect over SSL and run a simple query to test the basics -func TestSSLConnection(t *testing.T) { - maybeSkipSSLTests(t) - // Environment sanity check: should fail without SSL - checkSSLSetup(t, "sslmode=disable user=pqgossltest") - - db, err := openSSLConn(t, "sslmode=require user=pqgossltest") - if err != nil { - t.Fatal(err) - } - rows, err := db.Query("SELECT 1") - if err != nil { - t.Fatal(err) - } - rows.Close() -} - -// Test sslmode=verify-full -func TestSSLVerifyFull(t *testing.T) { - maybeSkipSSLTests(t) - // Environment sanity check: should fail without SSL - checkSSLSetup(t, "sslmode=disable user=pqgossltest") - - // Not OK according to the system CA - _, err := openSSLConn(t, "host=postgres sslmode=verify-full user=pqgossltest") - if err == nil { - t.Fatal("expected error") - } - _, ok := err.(x509.UnknownAuthorityError) - if !ok { - t.Fatalf("expected x509.UnknownAuthorityError, got %#+v", err) - } - - rootCertPath := filepath.Join(os.Getenv("PQSSLCERTTEST_PATH"), "root.crt") - rootCert := "sslrootcert=" + rootCertPath + " " - // No match on Common Name - _, err = openSSLConn(t, rootCert+"host=127.0.0.1 sslmode=verify-full user=pqgossltest") - if err == nil { - t.Fatal("expected error") - } - _, ok = err.(x509.HostnameError) - if !ok { - t.Fatalf("expected x509.HostnameError, got %#+v", err) - } - // OK - _, err = openSSLConn(t, rootCert+"host=postgres sslmode=verify-full user=pqgossltest") - if err != nil { - t.Fatal(err) - } -} - -// Test sslmode=require sslrootcert=rootCertPath -func TestSSLRequireWithRootCert(t *testing.T) { - maybeSkipSSLTests(t) - // Environment sanity check: should fail without SSL - checkSSLSetup(t, "sslmode=disable user=pqgossltest") - - bogusRootCertPath := filepath.Join(os.Getenv("PQSSLCERTTEST_PATH"), "bogus_root.crt") - bogusRootCert := "sslrootcert=" + bogusRootCertPath + " " - - // Not OK according to the bogus CA - _, err := openSSLConn(t, bogusRootCert+"host=postgres sslmode=require user=pqgossltest") - if err == nil { - t.Fatal("expected error") - } - _, ok := err.(x509.UnknownAuthorityError) - if !ok { - t.Fatalf("expected x509.UnknownAuthorityError, got %s, %#+v", err, err) - } - - nonExistentCertPath := filepath.Join(os.Getenv("PQSSLCERTTEST_PATH"), "non_existent.crt") - nonExistentCert := "sslrootcert=" + nonExistentCertPath + " " - - // No match on Common Name, but that's OK because we're not validating anything. - _, err = openSSLConn(t, nonExistentCert+"host=127.0.0.1 sslmode=require user=pqgossltest") - if err != nil { - t.Fatal(err) - } - - rootCertPath := filepath.Join(os.Getenv("PQSSLCERTTEST_PATH"), "root.crt") - rootCert := "sslrootcert=" + rootCertPath + " " - - // No match on Common Name, but that's OK because we're not validating the CN. - _, err = openSSLConn(t, rootCert+"host=127.0.0.1 sslmode=require user=pqgossltest") - if err != nil { - t.Fatal(err) - } - // Everything OK - _, err = openSSLConn(t, rootCert+"host=postgres sslmode=require user=pqgossltest") - if err != nil { - t.Fatal(err) - } -} - -// Test sslmode=verify-ca -func TestSSLVerifyCA(t *testing.T) { - maybeSkipSSLTests(t) - // Environment sanity check: should fail without SSL - checkSSLSetup(t, "sslmode=disable user=pqgossltest") - - // Not OK according to the system CA - { - _, err := openSSLConn(t, "host=postgres sslmode=verify-ca user=pqgossltest") - if _, ok := err.(x509.UnknownAuthorityError); !ok { - t.Fatalf("expected %T, got %#+v", x509.UnknownAuthorityError{}, err) - } - } - - // Still not OK according to the system CA; empty sslrootcert is treated as unspecified. - { - _, err := openSSLConn(t, "host=postgres sslmode=verify-ca user=pqgossltest sslrootcert=''") - if _, ok := err.(x509.UnknownAuthorityError); !ok { - t.Fatalf("expected %T, got %#+v", x509.UnknownAuthorityError{}, err) - } - } - - rootCertPath := filepath.Join(os.Getenv("PQSSLCERTTEST_PATH"), "root.crt") - rootCert := "sslrootcert=" + rootCertPath + " " - // No match on Common Name, but that's OK - if _, err := openSSLConn(t, rootCert+"host=127.0.0.1 sslmode=verify-ca user=pqgossltest"); err != nil { - t.Fatal(err) - } - // Everything OK - if _, err := openSSLConn(t, rootCert+"host=postgres sslmode=verify-ca user=pqgossltest"); err != nil { - t.Fatal(err) - } -} - -// Authenticate over SSL using client certificates -func TestSSLClientCertificates(t *testing.T) { - maybeSkipSSLTests(t) - // Environment sanity check: should fail without SSL - checkSSLSetup(t, "sslmode=disable user=pqgossltest") - - const baseinfo = "sslmode=require user=pqgosslcert" - - // Certificate not specified, should fail - { - _, err := openSSLConn(t, baseinfo) - if pge, ok := err.(*Error); ok { - if pge.Code.Name() != "invalid_authorization_specification" { - t.Fatalf("unexpected error code '%s'", pge.Code.Name()) - } - } else { - t.Fatalf("expected %T, got %v", (*Error)(nil), err) - } - } - - // Empty certificate specified, should fail - { - _, err := openSSLConn(t, baseinfo+" sslcert=''") - if pge, ok := err.(*Error); ok { - if pge.Code.Name() != "invalid_authorization_specification" { - t.Fatalf("unexpected error code '%s'", pge.Code.Name()) - } - } else { - t.Fatalf("expected %T, got %v", (*Error)(nil), err) - } - } - - // Non-existent certificate specified, should fail - { - _, err := openSSLConn(t, baseinfo+" sslcert=/tmp/filedoesnotexist") - if pge, ok := err.(*Error); ok { - if pge.Code.Name() != "invalid_authorization_specification" { - t.Fatalf("unexpected error code '%s'", pge.Code.Name()) - } - } else { - t.Fatalf("expected %T, got %v", (*Error)(nil), err) - } - } - - certpath, ok := os.LookupEnv("PQSSLCERTTEST_PATH") - if !ok { - t.Fatalf("PQSSLCERTTEST_PATH not present in environment") - } - - sslcert := filepath.Join(certpath, "postgresql.crt") - - // Cert present, key not specified, should fail - { - _, err := openSSLConn(t, baseinfo+" sslcert="+sslcert) - if _, ok := err.(*os.PathError); !ok { - t.Fatalf("expected %T, got %#+v", (*os.PathError)(nil), err) - } - } - - // Cert present, empty key specified, should fail - { - _, err := openSSLConn(t, baseinfo+" sslcert="+sslcert+" sslkey=''") - if _, ok := err.(*os.PathError); !ok { - t.Fatalf("expected %T, got %#+v", (*os.PathError)(nil), err) - } - } - - // Cert present, non-existent key, should fail - { - _, err := openSSLConn(t, baseinfo+" sslcert="+sslcert+" sslkey=/tmp/filedoesnotexist") - if _, ok := err.(*os.PathError); !ok { - t.Fatalf("expected %T, got %#+v", (*os.PathError)(nil), err) - } - } - - // Key has wrong permissions (passing the cert as the key), should fail - if _, err := openSSLConn(t, baseinfo+" sslcert="+sslcert+" sslkey="+sslcert); err != ErrSSLKeyHasWorldPermissions { - t.Fatalf("expected %s, got %#+v", ErrSSLKeyHasWorldPermissions, err) - } - - sslkey := filepath.Join(certpath, "postgresql.key") - - // Should work - if db, err := openSSLConn(t, baseinfo+" sslcert="+sslcert+" sslkey="+sslkey); err != nil { - t.Fatal(err) - } else { - rows, err := db.Query("SELECT 1") - if err != nil { - t.Fatal(err) - } - if err := rows.Close(); err != nil { - t.Fatal(err) - } - if err := db.Close(); err != nil { - t.Fatal(err) - } - } -} diff --git a/vendor/github.com/lib/pq/url_test.go b/vendor/github.com/lib/pq/url_test.go deleted file mode 100644 index 4ff0ce03..00000000 --- a/vendor/github.com/lib/pq/url_test.go +++ /dev/null @@ -1,66 +0,0 @@ -package pq - -import ( - "testing" -) - -func TestSimpleParseURL(t *testing.T) { - expected := "host=hostname.remote" - str, err := ParseURL("postgres://hostname.remote") - if err != nil { - t.Fatal(err) - } - - if str != expected { - t.Fatalf("unexpected result from ParseURL:\n+ %v\n- %v", str, expected) - } -} - -func TestIPv6LoopbackParseURL(t *testing.T) { - expected := "host=::1 port=1234" - str, err := ParseURL("postgres://[::1]:1234") - if err != nil { - t.Fatal(err) - } - - if str != expected { - t.Fatalf("unexpected result from ParseURL:\n+ %v\n- %v", str, expected) - } -} - -func TestFullParseURL(t *testing.T) { - expected := `dbname=database host=hostname.remote password=top\ secret port=1234 user=username` - str, err := ParseURL("postgres://username:top%20secret@hostname.remote:1234/database") - if err != nil { - t.Fatal(err) - } - - if str != expected { - t.Fatalf("unexpected result from ParseURL:\n+ %s\n- %s", str, expected) - } -} - -func TestInvalidProtocolParseURL(t *testing.T) { - _, err := ParseURL("http://hostname.remote") - switch err { - case nil: - t.Fatal("Expected an error from parsing invalid protocol") - default: - msg := "invalid connection protocol: http" - if err.Error() != msg { - t.Fatalf("Unexpected error message:\n+ %s\n- %s", - err.Error(), msg) - } - } -} - -func TestMinimalURL(t *testing.T) { - cs, err := ParseURL("postgres://") - if err != nil { - t.Fatal(err) - } - - if cs != "" { - t.Fatalf("expected blank connection string, got: %q", cs) - } -} diff --git a/vendor/github.com/lib/pq/uuid_test.go b/vendor/github.com/lib/pq/uuid_test.go deleted file mode 100644 index 8ecee2fd..00000000 --- a/vendor/github.com/lib/pq/uuid_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package pq - -import ( - "reflect" - "strings" - "testing" -) - -func TestDecodeUUIDBinaryError(t *testing.T) { - t.Parallel() - _, err := decodeUUIDBinary([]byte{0x12, 0x34}) - - if err == nil { - t.Fatal("Expected error, got none") - } - if !strings.HasPrefix(err.Error(), "pq:") { - t.Errorf("Expected error to start with %q, got %q", "pq:", err.Error()) - } - if !strings.Contains(err.Error(), "bad length: 2") { - t.Errorf("Expected error to contain length, got %q", err.Error()) - } -} - -func BenchmarkDecodeUUIDBinary(b *testing.B) { - x := []byte{0x03, 0xa3, 0x52, 0x2f, 0x89, 0x28, 0x49, 0x87, 0x84, 0xd6, 0x93, 0x7b, 0x36, 0xec, 0x27, 0x6f} - - for i := 0; i < b.N; i++ { - decodeUUIDBinary(x) - } -} - -func TestDecodeUUIDBackend(t *testing.T) { - db := openTestConn(t) - defer db.Close() - - var s = "a0ecc91d-a13f-4fe4-9fce-7e09777cc70a" - var scanned interface{} - - err := db.QueryRow(`SELECT $1::uuid`, s).Scan(&scanned) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - if !reflect.DeepEqual(scanned, []byte(s)) { - t.Errorf("Expected []byte(%q), got %T(%q)", s, scanned, scanned) - } -} diff --git a/vendor/gopkg.in/cas.v2/.gitignore b/vendor/gopkg.in/cas.v2/.gitignore new file mode 100644 index 00000000..9b9a5a3c --- /dev/null +++ b/vendor/gopkg.in/cas.v2/.gitignore @@ -0,0 +1,27 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test +.idea + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof + +.vscode diff --git a/vendor/gopkg.in/cas.v2/LICENSE b/vendor/gopkg.in/cas.v2/LICENSE new file mode 100644 index 00000000..1d425077 --- /dev/null +++ b/vendor/gopkg.in/cas.v2/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Geoff Garside + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/gopkg.in/cas.v2/README.md b/vendor/gopkg.in/cas.v2/README.md new file mode 100644 index 00000000..0a0d77aa --- /dev/null +++ b/vendor/gopkg.in/cas.v2/README.md @@ -0,0 +1,12 @@ +# CAS Client library + +CAS provides a http package compatible client implementation for use with +securing http frontends in golang. + + import "gopkg.in/cas.v2" + +## Examples and Documentation + +Documentation is available at: http://godoc.org/gopkg.in/cas.v1 +Examples are included in the documentation but are also available in the +`_examples` directory. diff --git a/vendor/gopkg.in/cas.v2/client.go b/vendor/gopkg.in/cas.v2/client.go new file mode 100644 index 00000000..7a550d1b --- /dev/null +++ b/vendor/gopkg.in/cas.v2/client.go @@ -0,0 +1,503 @@ +package cas + +import ( + "crypto/rand" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "path" + "sync" + + "github.com/golang/glog" +) + +// Client configuration options +type Options struct { + URL *url.URL // URL to the CAS service + Store TicketStore // Custom TicketStore, if nil a MemoryStore will be used + Client *http.Client // Custom http client to allow options for http connections + SendService bool // Custom sendService to determine whether you need to send service param +} + +// Client implements the main protocol +type Client struct { + url *url.URL + tickets TicketStore + client *http.Client + + mu sync.Mutex + sessions map[string]string + sendService bool +} + +// NewClient creates a Client with the provided Options. +func NewClient(options *Options) *Client { + if glog.V(2) { + glog.Infof("cas: new client with options %v", options) + } + + var tickets TicketStore + if options.Store != nil { + tickets = options.Store + } else { + tickets = &MemoryStore{} + } + + var client *http.Client + if options.Client != nil { + client = options.Client + } else { + client = &http.Client{} + } + + return &Client{ + url: options.URL, + tickets: tickets, + client: client, + sessions: make(map[string]string), + sendService: options.SendService, + } +} + +// Handle wraps a http.Handler to provide CAS authentication for the handler. +func (c *Client) Handle(h http.Handler) http.Handler { + return &clientHandler{ + c: c, + h: h, + } +} + +// HandleFunc wraps a function to provide CAS authentication for the handler function. +func (c *Client) HandleFunc(h func(http.ResponseWriter, *http.Request)) http.Handler { + return c.Handle(http.HandlerFunc(h)) +} + +// requestURL determines an absolute URL from the http.Request. +func requestURL(r *http.Request) (*url.URL, error) { + u, err := url.Parse(r.URL.String()) + if err != nil { + return nil, err + } + + u.Host = r.Host + u.Scheme = "http" + + if scheme := r.Header.Get("X-Forwarded-Proto"); scheme != "" { + u.Scheme = scheme + } else if r.TLS != nil { + u.Scheme = "https" + } + + return u, nil +} + +// LoginUrlForRequest determines the CAS login URL for the http.Request. +func (c *Client) LoginUrlForRequest(r *http.Request) (string, error) { + u, err := c.url.Parse(path.Join(c.url.Path, "login")) + if err != nil { + return "", err + } + + service, err := requestURL(r) + if err != nil { + return "", err + } + + q := u.Query() + q.Add("service", sanitisedURLString(service)) + u.RawQuery = q.Encode() + + return u.String(), nil +} + +// LogoutUrlForRequest determines the CAS logout URL for the http.Request. +func (c *Client) LogoutUrlForRequest(r *http.Request) (string, error) { + u, err := c.url.Parse(path.Join(c.url.Path, "logout")) + if err != nil { + return "", err + } + + if c.sendService { + service, err := requestURL(r) + if err != nil { + return "", err + } + + q := u.Query() + q.Add("service", sanitisedURLString(service)) + u.RawQuery = q.Encode() + } + + return u.String(), nil +} + +// ServiceValidateUrlForRequest determines the CAS serviceValidate URL for the ticket and http.Request. +func (c *Client) ServiceValidateUrlForRequest(ticket string, r *http.Request) (string, error) { + u, err := c.url.Parse(path.Join(c.url.Path, "serviceValidate")) + if err != nil { + return "", err + } + + service, err := requestURL(r) + if err != nil { + return "", err + } + + q := u.Query() + q.Add("service", sanitisedURLString(service)) + q.Add("ticket", ticket) + u.RawQuery = q.Encode() + + return u.String(), nil +} + +// ValidateUrlForRequest determines the CAS validate URL for the ticket and http.Request. +func (c *Client) ValidateUrlForRequest(ticket string, r *http.Request) (string, error) { + u, err := c.url.Parse(path.Join(c.url.Path, "validate")) + if err != nil { + return "", err + } + + service, err := requestURL(r) + if err != nil { + return "", err + } + + q := u.Query() + q.Add("service", sanitisedURLString(service)) + q.Add("ticket", ticket) + u.RawQuery = q.Encode() + + return u.String(), nil +} + +// RedirectToLogout replies to the request with a redirect URL to log out of CAS. +func (c *Client) RedirectToLogout(w http.ResponseWriter, r *http.Request) { + u, err := c.LogoutUrlForRequest(r) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + if glog.V(2) { + glog.Info("Logging out, redirecting client to %v with status %v", + u, http.StatusFound) + } + + c.clearSession(w, r) + http.Redirect(w, r, u, http.StatusFound) +} + +// RedirectToLogout replies to the request with a redirect URL to authenticate with CAS. +func (c *Client) RedirectToLogin(w http.ResponseWriter, r *http.Request) { + u, err := c.LoginUrlForRequest(r) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + if glog.V(2) { + glog.Infof("Redirecting client to %v with status %v", u, http.StatusFound) + } + + http.Redirect(w, r, u, http.StatusFound) +} + +// validateTicket performs CAS ticket validation with the given ticket and service. +// +// If the request returns a 404 then validateTicketCas1 will be returned. +func (c *Client) validateTicket(ticket string, service *http.Request) error { + if glog.V(2) { + serviceUrl, _ := requestURL(service) + glog.Infof("Validating ticket %v for service %v", ticket, serviceUrl) + } + + u, err := c.ServiceValidateUrlForRequest(ticket, service) + if err != nil { + return err + } + + r, err := http.NewRequest("GET", u, nil) + if err != nil { + return err + } + + r.Header.Add("User-Agent", "Golang CAS client gopkg.in/cas") + + if glog.V(2) { + glog.Infof("Attempting ticket validation with %v", r.URL) + } + + resp, err := c.client.Do(r) + if err != nil { + return err + } + + if glog.V(2) { + glog.Infof("Request %v %v returned %v", + r.Method, r.URL, + resp.Status) + } + + if resp.StatusCode == http.StatusNotFound { + return c.validateTicketCas1(ticket, service) + } + + body, err := ioutil.ReadAll(resp.Body) + resp.Body.Close() + + if err != nil { + return err + } + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("cas: validate ticket: %v", string(body)) + } + + if glog.V(2) { + glog.Infof("Received authentication response\n%v", string(body)) + } + + success, err := ParseServiceResponse(body) + if err != nil { + return err + } + + if glog.V(2) { + glog.Infof("Parsed ServiceResponse: %#v", success) + } + + if err := c.tickets.Write(ticket, success); err != nil { + return err + } + + return nil +} + +// validateTicketCas1 performs CAS protocol 1 ticket validation. +func (c *Client) validateTicketCas1(ticket string, service *http.Request) error { + u, err := c.ValidateUrlForRequest(ticket, service) + if err != nil { + return err + } + + r, err := http.NewRequest("GET", u, nil) + if err != nil { + return err + } + + r.Header.Add("User-Agent", "Golang CAS client gopkg.in/cas") + + if glog.V(2) { + glog.Info("Attempting ticket validation with %v", r.URL) + } + + resp, err := c.client.Do(r) + if err != nil { + return err + } + + if glog.V(2) { + glog.Info("Request %v %v returned %v", + r.Method, r.URL, + resp.Status) + } + + data, err := ioutil.ReadAll(resp.Body) + resp.Body.Close() + + if err != nil { + return err + } + + body := string(data) + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("cas: validate ticket: %v", body) + } + + if glog.V(2) { + glog.Infof("Received authentication response\n%v", body) + } + + if body == "no\n\n" { + return nil // not logged in + } + + success := &AuthenticationResponse{ + User: body[4 : len(body)-1], + } + + if glog.V(2) { + glog.Infof("Parsed ServiceResponse: %#v", success) + } + + if err := c.tickets.Write(ticket, success); err != nil { + return err + } + + return nil +} + +// getSession finds or creates a session for the request. +// +// A cookie is set on the response if one is not provided with the request. +// Validates the ticket if the URL parameter is provided. +func (c *Client) getSession(w http.ResponseWriter, r *http.Request) { + cookie := getCookie(w, r) + + if s, ok := c.sessions[cookie.Value]; ok { + if t, err := c.tickets.Read(s); err == nil { + if glog.V(1) { + glog.Infof("Re-used ticket %s for %s", s, t.User) + } + + setAuthenticationResponse(r, t) + return + } else { + if glog.V(2) { + glog.Infof("Ticket %v not in %T: %v", s, c.tickets, err) + } + + if glog.V(1) { + glog.Infof("Clearing ticket %s, no longer exists in ticket store", s) + } + + clearCookie(w, cookie) + } + } + + if ticket := r.URL.Query().Get("ticket"); ticket != "" { + if err := c.validateTicket(ticket, r); err != nil { + if glog.V(2) { + glog.Infof("Error validating ticket: %v", err) + } + return // allow ServeHTTP() + } + + c.setSession(cookie.Value, ticket) + + if t, err := c.tickets.Read(ticket); err == nil { + if glog.V(1) { + glog.Infof("Validated ticket %s for %s", ticket, t.User) + } + + setAuthenticationResponse(r, t) + return + } else { + if glog.V(2) { + glog.Infof("Ticket %v not in %T: %v", ticket, c.tickets, err) + } + + if glog.V(1) { + glog.Infof("Clearing ticket %s, no longer exists in ticket store", ticket) + } + + clearCookie(w, cookie) + } + } +} + +// getCookie finds or creates the session cookie on the response. +func getCookie(w http.ResponseWriter, r *http.Request) *http.Cookie { + c, err := r.Cookie(sessionCookieName) + if err != nil { + // NOTE: Intentionally not enabling HttpOnly so the cookie can + // still be used by Ajax requests. + c = &http.Cookie{ + Name: sessionCookieName, + Value: newSessionId(), + MaxAge: 86400, + HttpOnly: false, + } + + if glog.V(2) { + glog.Infof("Setting %v cookie with value: %v", c.Name, c.Value) + } + + r.AddCookie(c) // so we can find it later if required + http.SetCookie(w, c) + } + + return c +} + +// newSessionId generates a new opaque session identifier for use in the cookie. +func newSessionId() string { + const alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + + // generate 64 character string + bytes := make([]byte, 64) + rand.Read(bytes) + + for k, v := range bytes { + bytes[k] = alphabet[v%byte(len(alphabet))] + } + + return string(bytes) +} + +// clearCookie invalidates and removes the cookie from the client. +func clearCookie(w http.ResponseWriter, c *http.Cookie) { + c.MaxAge = -1 + http.SetCookie(w, c) +} + +// setSession stores the session id to ticket mapping in the Client. +func (c *Client) setSession(id string, ticket string) { + if glog.V(2) { + glog.Infof("Recording session, %v -> %v", id, ticket) + } + + c.mu.Lock() + c.sessions[id] = ticket + c.mu.Unlock() +} + +// clearSession removes the session from the client and clears the cookie. +func (c *Client) clearSession(w http.ResponseWriter, r *http.Request) { + cookie := getCookie(w, r) + + if s, ok := c.sessions[cookie.Value]; ok { + if err := c.tickets.Delete(s); err != nil { + fmt.Printf("Failed to remove %v from %T: %v\n", cookie.Value, c.tickets, err) + if glog.V(2) { + glog.Errorf("Failed to remove %v from %T: %v", cookie.Value, c.tickets, err) + } + } + + c.deleteSession(s) + } + + clearCookie(w, cookie) +} + +// deleteSession removes the session from the client +func (c *Client) deleteSession(id string) { + c.mu.Lock() + delete(c.sessions, id) + c.mu.Unlock() +} + +// findAndDeleteSessionWithTicket removes the session from the client via Single Log Out +// +// When a Single Log Out request is received we receive the service ticket identidier. This +// function loops through the sessions to find the matching session id. Once retrieved the +// session is removed from the client. When the session is next requested the getSession +// function will notice the session is invalid and revalidate the user. +func (c *Client) findAndDeleteSessionWithTicket(ticket string) { + var id string + for s, t := range c.sessions { + if t == ticket { + id = s + break + } + } + + if id == "" { + return + } + + c.deleteSession(id) +} diff --git a/vendor/gopkg.in/cas.v2/doc.go b/vendor/gopkg.in/cas.v2/doc.go new file mode 100644 index 00000000..ce61d7ca --- /dev/null +++ b/vendor/gopkg.in/cas.v2/doc.go @@ -0,0 +1,10 @@ +/* +Package cas implements a CAS client. + +CAS is a protocol which provides authentication and authorisation for securing +typically HTTP based services. + +References: + [PROTOCOL]: http://jasig.github.io/cas/4.0.x/protocol/CAS-Protocol.html +*/ +package cas diff --git a/vendor/gopkg.in/cas.v2/handler.go b/vendor/gopkg.in/cas.v2/handler.go new file mode 100644 index 00000000..0549d26b --- /dev/null +++ b/vendor/gopkg.in/cas.v2/handler.go @@ -0,0 +1,78 @@ +package cas + +import ( + "fmt" + "net/http" + + "github.com/golang/glog" +) + +const ( + sessionCookieName = "_cas_session" +) + +// clientHandler handles CAS Protocol HTTP requests +type clientHandler struct { + c *Client + h http.Handler +} + +// ServeHTTP handles HTTP requests, processes CAS requests +// and passes requests up to its child http.Handler. +func (ch *clientHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if glog.V(2) { + glog.Infof("cas: handling %v request for %v", r.Method, r.URL) + } + + setClient(r, ch.c) + + if isSingleLogoutRequest(r) { + ch.performSingleLogout(w, r) + return + } + + ch.c.getSession(w, r) + ch.h.ServeHTTP(w, r) + return +} + +// isSingleLogoutRequest determines if the http.Request is a CAS Single Logout Request. +// +// The rules for a SLO request are, HTTP POST urlencoded form with a logoutRequest parameter. +func isSingleLogoutRequest(r *http.Request) bool { + if r.Method != "POST" { + return false + } + + contentType := r.Header.Get("Content-Type") + if contentType != "application/x-www-form-urlencoded" { + return false + } + + if v := r.FormValue("logoutRequest"); v == "" { + return false + } + + return true +} + +// performSingleLogout processes a single logout request +func (ch *clientHandler) performSingleLogout(w http.ResponseWriter, r *http.Request) { + rawXML := r.FormValue("logoutRequest") + logoutRequest, err := parseLogoutRequest([]byte(rawXML)) + + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + if err := ch.c.tickets.Delete(logoutRequest.SessionIndex); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + ch.c.deleteSession(logoutRequest.SessionIndex) + + w.WriteHeader(http.StatusOK) + fmt.Fprintln(w, "OK") +} diff --git a/vendor/gopkg.in/cas.v2/http_helpers.go b/vendor/gopkg.in/cas.v2/http_helpers.go new file mode 100644 index 00000000..dbd37380 --- /dev/null +++ b/vendor/gopkg.in/cas.v2/http_helpers.go @@ -0,0 +1,152 @@ +package cas + +import ( + "context" + "net/http" + "time" +) + +type key int + +const ( // emulating enums is actually pretty ugly in go. + clientKey key = iota + authenticationResponseKey +) + +// setClient associates a Client with a http.Request. +func setClient(r *http.Request, c *Client) { + ctx := context.WithValue(r.Context(), clientKey, c) + r2 := r.WithContext(ctx) + *r = *r2 +} + +// getClient retrieves the Client associated with the http.Request. +func getClient(r *http.Request) *Client { + if c := r.Context().Value(clientKey); c != nil { + return c.(*Client) + } else { + return nil // explicitly pass along the nil to caller -- conforms to previous impl + } +} + +// RedirectToLogin allows CAS protected handlers to redirect a request +// to the CAS login page. +func RedirectToLogin(w http.ResponseWriter, r *http.Request) { + c := getClient(r) + if c == nil { + err := "cas: redirect to cas failed as no client associated with request" + http.Error(w, err, http.StatusInternalServerError) + return + } + + c.RedirectToLogin(w, r) +} + +// RedirectToLogout allows CAS protected handlers to redirect a request +// to the CAS logout page. +func RedirectToLogout(w http.ResponseWriter, r *http.Request) { + c := getClient(r) + if c == nil { + err := "cas: redirect to cas failed as no client associated with request" + http.Error(w, err, http.StatusInternalServerError) + return + } + + c.RedirectToLogout(w, r) +} + +// setAuthenticationResponse associates an AuthenticationResponse with +// a http.Request. +func setAuthenticationResponse(r *http.Request, a *AuthenticationResponse) { + ctx := context.WithValue(r.Context(), authenticationResponseKey, a) + r2 := r.WithContext(ctx) + *r = *r2 +} + +// getAuthenticationResponse retrieves the AuthenticationResponse associated +// with a http.Request. +func getAuthenticationResponse(r *http.Request) *AuthenticationResponse { + if a := r.Context().Value(authenticationResponseKey); a != nil { + return a.(*AuthenticationResponse) + } else { + return nil // explicitly pass along the nil to caller -- conforms to previous impl + } +} + +// IsAuthenticated indicates whether the request has been authenticated with CAS. +func IsAuthenticated(r *http.Request) bool { + if a := getAuthenticationResponse(r); a != nil { + return true + } + + return false +} + +// Username returns the authenticated users username +func Username(r *http.Request) string { + if a := getAuthenticationResponse(r); a != nil { + return a.User + } + + return "" +} + +// Attributes returns the authenticated users attributes. +func Attributes(r *http.Request) UserAttributes { + if a := getAuthenticationResponse(r); a != nil { + return a.Attributes + } + + return nil +} + +// AuthenticationDate returns the date and time that authentication was performed. +// +// This may return time.IsZero if Authentication Date information is not included +// in the CAS service validation response. This will be the case for CAS 2.0 +// protocol servers. +func AuthenticationDate(r *http.Request) time.Time { + var t time.Time + if a := getAuthenticationResponse(r); a != nil { + t = a.AuthenticationDate + } + + return t +} + +// IsNewLogin indicates whether the CAS service ticket was granted following a +// new authentication. +// +// This may incorrectly return false if Is New Login information is not included +// in the CAS service validation response. This will be the case for CAS 2.0 +// protocol servers. +func IsNewLogin(r *http.Request) bool { + if a := getAuthenticationResponse(r); a != nil { + return a.IsNewLogin + } + + return false +} + +// IsRememberedLogin indicates whether the CAS service ticket was granted by the +// presence of a long term authentication token. +// +// This may incorrectly return false if Remembered Login information is not included +// in the CAS service validation response. This will be the case for CAS 2.0 +// protocol servers. +func IsRememberedLogin(r *http.Request) bool { + if a := getAuthenticationResponse(r); a != nil { + return a.IsRememberedLogin + } + + return false +} + +// MemberOf returns the list of groups which the user belongs to. +func MemberOf(r *http.Request) []string { + if a := getAuthenticationResponse(r); a != nil { + return a.MemberOf + } + + return nil +} diff --git a/vendor/gopkg.in/cas.v2/logout_request.go b/vendor/gopkg.in/cas.v2/logout_request.go new file mode 100644 index 00000000..c827e098 --- /dev/null +++ b/vendor/gopkg.in/cas.v2/logout_request.go @@ -0,0 +1,65 @@ +package cas + +import ( + "crypto/rand" + "encoding/xml" + "strings" + "time" +) + +// Represents the XML CAS Single Log Out Request data +type logoutRequest struct { + XMLName xml.Name `xml:"urn:oasis:names:tc:SAML:2.0:protocol LogoutRequest"` + Version string `xml:"Version,attr"` + IssueInstant time.Time `xml:"-"` + RawIssueInstant string `xml:"IssueInstant,attr"` + ID string `xml:"ID,attr"` + NameID string `xml:"urn:oasis:names:tc:SAML:2.0:assertion NameID"` + SessionIndex string `xml:"SessionIndex"` +} + +func parseLogoutRequest(data []byte) (*logoutRequest, error) { + l := &logoutRequest{} + if err := xml.Unmarshal(data, &l); err != nil { + return nil, err + } + + t, err := time.Parse(time.RFC1123Z, l.RawIssueInstant) + if err != nil { + return nil, err + } + + l.IssueInstant = t + l.NameID = strings.TrimSpace(l.NameID) + l.SessionIndex = strings.TrimSpace(l.SessionIndex) + + return l, nil +} + +func newLogoutRequestId() string { + const alphabet = "abcdef0123456789" + + // generate 64 character string + bytes := make([]byte, 64) + rand.Read(bytes) + + for k, v := range bytes { + bytes[k] = alphabet[v%byte(len(alphabet))] + } + + return string(bytes) +} + +func xmlLogoutRequest(ticket string) ([]byte, error) { + l := &logoutRequest{ + Version: "2.0", + IssueInstant: time.Now().UTC(), + ID: newLogoutRequestId(), + NameID: "@NOT_USED@", + SessionIndex: ticket, + } + + l.RawIssueInstant = l.IssueInstant.Format(time.RFC1123Z) + + return xml.MarshalIndent(l, "", " ") +} diff --git a/vendor/gopkg.in/cas.v2/memory_store.go b/vendor/gopkg.in/cas.v2/memory_store.go new file mode 100644 index 00000000..21b90787 --- /dev/null +++ b/vendor/gopkg.in/cas.v2/memory_store.go @@ -0,0 +1,60 @@ +package cas + +import ( + "sync" +) + +// MemoryStore implements the TicketStore interface storing ticket data in memory. +type MemoryStore struct { + mu sync.RWMutex + store map[string]*AuthenticationResponse +} + +// Read returns the AuthenticationResponse for a ticket +func (s *MemoryStore) Read(id string) (*AuthenticationResponse, error) { + s.mu.RLock() + + if s.store == nil { + s.mu.RUnlock() + return nil, ErrInvalidTicket + } + + t, ok := s.store[id] + s.mu.RUnlock() + + if !ok { + return nil, ErrInvalidTicket + } + + return t, nil +} + +// Write stores the AuthenticationResponse for a ticket +func (s *MemoryStore) Write(id string, ticket *AuthenticationResponse) error { + s.mu.Lock() + + if s.store == nil { + s.store = make(map[string]*AuthenticationResponse) + } + + s.store[id] = ticket + + s.mu.Unlock() + return nil +} + +// Delete removes the AuthenticationResponse for a ticket +func (s *MemoryStore) Delete(id string) error { + s.mu.Lock() + delete(s.store, id) + s.mu.Unlock() + return nil +} + +// Clear removes all ticket data +func (s *MemoryStore) Clear() error { + s.mu.Lock() + s.store = nil + s.mu.Unlock() + return nil +} diff --git a/vendor/gopkg.in/cas.v2/middleware.go b/vendor/gopkg.in/cas.v2/middleware.go new file mode 100644 index 00000000..32e80a4d --- /dev/null +++ b/vendor/gopkg.in/cas.v2/middleware.go @@ -0,0 +1,28 @@ +package cas + +import ( + "net/http" + + "github.com/golang/glog" +) + +func (c *Client) Handler(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if glog.V(2) { + glog.Infof("cas: handling %v request for %v", r.Method, r.URL) + } + + setClient(r, c) + + if !IsAuthenticated(r) { + RedirectToLogin(w, r) + return + } + + if r.URL.Path == "/logout" { + RedirectToLogout(w, r) + return + } + h.ServeHTTP(w, r) + }) +} diff --git a/vendor/gopkg.in/cas.v2/sanitise.go b/vendor/gopkg.in/cas.v2/sanitise.go new file mode 100644 index 00000000..a2cc17cb --- /dev/null +++ b/vendor/gopkg.in/cas.v2/sanitise.go @@ -0,0 +1,28 @@ +package cas + +import ( + "net/url" +) + +var ( + urlCleanParameters = []string{"gateway", "renew", "service", "ticket"} +) + +// sanitisedURL cleans a URL of CAS specific parameters +func sanitisedURL(unclean *url.URL) *url.URL { + // Shouldn't be any errors parsing an existing *url.URL + u, _ := url.Parse(unclean.String()) + q := u.Query() + + for _, param := range urlCleanParameters { + q.Del(param) + } + + u.RawQuery = q.Encode() + return u +} + +// sanitisedURLString cleans a URL and returns its string value +func sanitisedURLString(unclean *url.URL) string { + return sanitisedURL(unclean).String() +} diff --git a/vendor/gopkg.in/cas.v2/service_response.go b/vendor/gopkg.in/cas.v2/service_response.go new file mode 100644 index 00000000..e3a76e2e --- /dev/null +++ b/vendor/gopkg.in/cas.v2/service_response.go @@ -0,0 +1,177 @@ +package cas + +import ( + "encoding/xml" + "fmt" + "reflect" + "strings" + "time" + + "github.com/golang/glog" + "gopkg.in/yaml.v2" +) + +// AuthenticationError Code values +const ( + INVALID_REQUEST = "INVALID_REQUEST" + INVALID_TICKET_SPEC = "INVALID_TICKET_SPEC" + UNAUTHORIZED_SERVICE = "UNAUTHORIZED_SERVICE" + UNAUTHORIZED_SERVICE_PROXY = "UNAUTHORIZED_SERVICE_PROXY" + INVALID_PROXY_CALLBACK = "INVALID_PROXY_CALLBACK" + INVALID_TICKET = "INVALID_TICKET" + INVALID_SERVICE = "INVALID_SERVICE" + INTERNAL_ERROR = "INTERNAL_ERROR" +) + +// AuthenticationError represents a CAS AuthenticationFailure response +type AuthenticationError struct { + Code string + Message string +} + +// AuthenticationError provides a differentiator for casting. +func (e AuthenticationError) AuthenticationError() bool { + return true +} + +// Error returns the AuthenticationError as a string +func (e AuthenticationError) Error() string { + return fmt.Sprintf("%s: %s", e.Code, e.Message) +} + +// AuthenticationResponse captures authenticated user information +type AuthenticationResponse struct { + User string // Users login name + ProxyGrantingTicket string // Proxy Granting Ticket + Proxies []string // List of proxies + AuthenticationDate time.Time // Time at which authentication was performed + IsNewLogin bool // Whether new authentication was used to grant the service ticket + IsRememberedLogin bool // Whether a long term token was used to grant the service ticket + MemberOf []string // List of groups which the user is a member of + Attributes UserAttributes // Additional information about the user +} + +// UserAttributes represents additional data about the user +type UserAttributes map[string][]string + +// Get retrieves an attribute by name. +// +// Attributes are stored in arrays. Get will only return the first element. +func (a UserAttributes) Get(name string) string { + if v, ok := a[name]; ok { + return v[0] + } + + return "" +} + +// Add appends a new attribute. +func (a UserAttributes) Add(name, value string) { + a[name] = append(a[name], value) +} + +// ParseServiceResponse returns a successful response or an error +func ParseServiceResponse(data []byte) (*AuthenticationResponse, error) { + var x xmlServiceResponse + + if err := xml.Unmarshal(data, &x); err != nil { + return nil, err + } + + if x.Failure != nil { + msg := strings.TrimSpace(x.Failure.Message) + err := &AuthenticationError{Code: x.Failure.Code, Message: msg} + return nil, err + } + + r := &AuthenticationResponse{ + User: x.Success.User, + ProxyGrantingTicket: x.Success.ProxyGrantingTicket, + Attributes: make(UserAttributes), + } + + if p := x.Success.Proxies; p != nil { + r.Proxies = p.Proxies + } + + if a := x.Success.Attributes; a != nil { + r.AuthenticationDate = a.AuthenticationDate + r.IsRememberedLogin = a.LongTermAuthenticationRequestTokenUsed + r.IsNewLogin = a.IsFromNewLogin + r.MemberOf = a.MemberOf + + if a.UserAttributes != nil { + for _, ua := range a.UserAttributes.Attributes { + if ua.Name == "" { + continue + } + + r.Attributes.Add(ua.Name, strings.TrimSpace(ua.Value)) + } + + for _, ea := range a.UserAttributes.AnyAttributes { + r.Attributes.Add(ea.XMLName.Local, strings.TrimSpace(ea.Value)) + } + } + + if a.ExtraAttributes != nil { + for _, ea := range a.ExtraAttributes { + r.Attributes.Add(ea.XMLName.Local, strings.TrimSpace(ea.Value)) + } + } + } + + for _, ea := range x.Success.ExtraAttributes { + addRubycasAttribute(r.Attributes, ea.XMLName.Local, strings.TrimSpace(ea.Value)) + } + + return r, nil +} + +// addRubycasAttribute handles RubyCAS style additional attributes. +func addRubycasAttribute(attributes UserAttributes, key, value string) { + if !strings.HasPrefix(value, "---") { + attributes.Add(key, value) + return + } + + if value == "--- true" { + attributes.Add(key, "true") + return + } + + if value == "--- false" { + attributes.Add(key, "false") + return + } + + var decoded interface{} + if err := yaml.Unmarshal([]byte(value), &decoded); err != nil { + attributes.Add(key, err.Error()) + return + } + + switch reflect.TypeOf(decoded).Kind() { + case reflect.Slice: + s := reflect.ValueOf(decoded) + + for i := 0; i < s.Len(); i++ { + e := s.Index(i).Interface() + + switch reflect.TypeOf(e).Kind() { + case reflect.String: + attributes.Add(key, e.(string)) + } + } + case reflect.String: + s := reflect.ValueOf(decoded).Interface() + attributes.Add(key, s.(string)) + default: + if glog.V(2) { + kind := reflect.TypeOf(decoded).Kind() + glog.Warningf("cas: service response: unable to parse %v value: %#v (kind: %v)", key, decoded, kind) + } + } + + return +} diff --git a/vendor/gopkg.in/cas.v2/ticket_store.go b/vendor/gopkg.in/cas.v2/ticket_store.go new file mode 100644 index 00000000..42ae3cfb --- /dev/null +++ b/vendor/gopkg.in/cas.v2/ticket_store.go @@ -0,0 +1,27 @@ +package cas + +import ( + "errors" +) + +// TicketStore errors +var ( + // Given Ticket is not associated with an AuthenticationResponse + ErrInvalidTicket = errors.New("cas: ticket store: invalid ticket") +) + +// TicketStore provides an interface for storing and retrieving service +// ticket data. +type TicketStore interface { + // Read returns the AuthenticationResponse data associated with a ticket identifier. + Read(id string) (*AuthenticationResponse, error) + + // Write stores the AuthenticationResponse data received from a ticket validation. + Write(id string, ticket *AuthenticationResponse) error + + // Delete removes the AuthenticationResponse data associated with a ticket identifier. + Delete(id string) error + + // Clear removes all of the AuthenticationResponse data from the store. + Clear() error +} diff --git a/vendor/gopkg.in/cas.v2/xml_service_response.go b/vendor/gopkg.in/cas.v2/xml_service_response.go new file mode 100644 index 00000000..5a553691 --- /dev/null +++ b/vendor/gopkg.in/cas.v2/xml_service_response.go @@ -0,0 +1,95 @@ +package cas + +import ( + "encoding/xml" + "time" +) + +type xmlServiceResponse struct { + XMLName xml.Name `xml:"http://www.yale.edu/tp/cas serviceResponse"` + + Failure *xmlAuthenticationFailure + Success *xmlAuthenticationSuccess +} + +type xmlAuthenticationFailure struct { + XMLName xml.Name `xml:"authenticationFailure"` + Code string `xml:"code,attr"` + Message string `xml:",innerxml"` +} + +type xmlAuthenticationSuccess struct { + XMLName xml.Name `xml:"authenticationSuccess"` + User string `xml:"user"` + ProxyGrantingTicket string `xml:"proxyGrantingTicket,omitempty"` + Proxies *xmlProxies `xml:"proxies"` + Attributes *xmlAttributes `xml:"attributes"` + ExtraAttributes []*xmlAnyAttribute `xml:",any"` +} + +type xmlProxies struct { + XMLName xml.Name `xml:"proxies"` + Proxies []string `xml:"proxy"` +} + +func (p *xmlProxies) AddProxy(proxy string) { + p.Proxies = append(p.Proxies, proxy) +} + +type xmlAttributes struct { + XMLName xml.Name `xml:"attributes"` + AuthenticationDate time.Time `xml:"authenticationDate"` + LongTermAuthenticationRequestTokenUsed bool `xml:"longTermAuthenticationRequestTokenUsed"` + IsFromNewLogin bool `xml:"isFromNewLogin"` + MemberOf []string `xml:"memberOf"` + UserAttributes *xmlUserAttributes + ExtraAttributes []*xmlAnyAttribute `xml:",any"` +} + +type xmlUserAttributes struct { + XMLName xml.Name `xml:"userAttributes"` + Attributes []*xmlNamedAttribute `xml:"attribute"` + AnyAttributes []*xmlAnyAttribute `xml:",any"` +} + +type xmlNamedAttribute struct { + XMLName xml.Name `xml:"attribute"` + Name string `xml:"name,attr,omitempty"` + Value string `xml:",innerxml"` +} + +type xmlAnyAttribute struct { + XMLName xml.Name + Value string `xml:",chardata"` +} + +func (xsr *xmlServiceResponse) marshalXML(indent int) ([]byte, error) { + if indent == 0 { + return xml.Marshal(xsr) + } + + indentStr := "" + for i := 0; i < indent; i++ { + indentStr += " " + } + + return xml.MarshalIndent(xsr, "", indentStr) +} + +func failureServiceResponse(code, message string) *xmlServiceResponse { + return &xmlServiceResponse{ + Failure: &xmlAuthenticationFailure{ + Code: code, + Message: message, + }, + } +} + +func successServiceResponse(username, pgt string) *xmlServiceResponse { + return &xmlServiceResponse{ + Success: &xmlAuthenticationSuccess{ + User: username, + ProxyGrantingTicket: pgt, + }, + } +} diff --git a/vendor/gopkg.in/yaml.v2/.travis.yml b/vendor/gopkg.in/yaml.v2/.travis.yml new file mode 100644 index 00000000..9f556934 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/.travis.yml @@ -0,0 +1,12 @@ +language: go + +go: + - 1.4 + - 1.5 + - 1.6 + - 1.7 + - 1.8 + - 1.9 + - tip + +go_import_path: gopkg.in/yaml.v2 diff --git a/vendor/gopkg.in/yaml.v2/LICENSE b/vendor/gopkg.in/yaml.v2/LICENSE new file mode 100644 index 00000000..8dada3ed --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/gopkg.in/yaml.v2/LICENSE.libyaml b/vendor/gopkg.in/yaml.v2/LICENSE.libyaml new file mode 100644 index 00000000..8da58fbf --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/LICENSE.libyaml @@ -0,0 +1,31 @@ +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original copyright and license: + + apic.go + emitterc.go + parserc.go + readerc.go + scannerc.go + writerc.go + yamlh.go + yamlprivateh.go + +Copyright (c) 2006 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/gopkg.in/yaml.v2/NOTICE b/vendor/gopkg.in/yaml.v2/NOTICE new file mode 100644 index 00000000..866d74a7 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/NOTICE @@ -0,0 +1,13 @@ +Copyright 2011-2016 Canonical Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/vendor/gopkg.in/yaml.v2/README.md b/vendor/gopkg.in/yaml.v2/README.md new file mode 100644 index 00000000..b50c6e87 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/README.md @@ -0,0 +1,133 @@ +# YAML support for the Go language + +Introduction +------------ + +The yaml package enables Go programs to comfortably encode and decode YAML +values. It was developed within [Canonical](https://www.canonical.com) as +part of the [juju](https://juju.ubuntu.com) project, and is based on a +pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) +C library to parse and generate YAML data quickly and reliably. + +Compatibility +------------- + +The yaml package supports most of YAML 1.1 and 1.2, including support for +anchors, tags, map merging, etc. Multi-document unmarshalling is not yet +implemented, and base-60 floats from YAML 1.1 are purposefully not +supported since they're a poor design and are gone in YAML 1.2. + +Installation and usage +---------------------- + +The import path for the package is *gopkg.in/yaml.v2*. + +To install it, run: + + go get gopkg.in/yaml.v2 + +API documentation +----------------- + +If opened in a browser, the import path itself leads to the API documentation: + + * [https://gopkg.in/yaml.v2](https://gopkg.in/yaml.v2) + +API stability +------------- + +The package API for yaml v2 will remain stable as described in [gopkg.in](https://gopkg.in). + + +License +------- + +The yaml package is licensed under the Apache License 2.0. Please see the LICENSE file for details. + + +Example +------- + +```Go +package main + +import ( + "fmt" + "log" + + "gopkg.in/yaml.v2" +) + +var data = ` +a: Easy! +b: + c: 2 + d: [3, 4] +` + +// Note: struct fields must be public in order for unmarshal to +// correctly populate the data. +type T struct { + A string + B struct { + RenamedC int `yaml:"c"` + D []int `yaml:",flow"` + } +} + +func main() { + t := T{} + + err := yaml.Unmarshal([]byte(data), &t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t:\n%v\n\n", t) + + d, err := yaml.Marshal(&t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t dump:\n%s\n\n", string(d)) + + m := make(map[interface{}]interface{}) + + err = yaml.Unmarshal([]byte(data), &m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m:\n%v\n\n", m) + + d, err = yaml.Marshal(&m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m dump:\n%s\n\n", string(d)) +} +``` + +This example will generate the following output: + +``` +--- t: +{Easy! {2 [3 4]}} + +--- t dump: +a: Easy! +b: + c: 2 + d: [3, 4] + + +--- m: +map[a:Easy! b:map[c:2 d:[3 4]]] + +--- m dump: +a: Easy! +b: + c: 2 + d: + - 3 + - 4 +``` + diff --git a/vendor/gopkg.in/yaml.v2/apic.go b/vendor/gopkg.in/yaml.v2/apic.go new file mode 100644 index 00000000..1f7e87e6 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/apic.go @@ -0,0 +1,739 @@ +package yaml + +import ( + "io" +) + +func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { + //fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens)) + + // Check if we can move the queue at the beginning of the buffer. + if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) { + if parser.tokens_head != len(parser.tokens) { + copy(parser.tokens, parser.tokens[parser.tokens_head:]) + } + parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head] + parser.tokens_head = 0 + } + parser.tokens = append(parser.tokens, *token) + if pos < 0 { + return + } + copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:]) + parser.tokens[parser.tokens_head+pos] = *token +} + +// Create a new parser object. +func yaml_parser_initialize(parser *yaml_parser_t) bool { + *parser = yaml_parser_t{ + raw_buffer: make([]byte, 0, input_raw_buffer_size), + buffer: make([]byte, 0, input_buffer_size), + } + return true +} + +// Destroy a parser object. +func yaml_parser_delete(parser *yaml_parser_t) { + *parser = yaml_parser_t{} +} + +// String read handler. +func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + if parser.input_pos == len(parser.input) { + return 0, io.EOF + } + n = copy(buffer, parser.input[parser.input_pos:]) + parser.input_pos += n + return n, nil +} + +// Reader read handler. +func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + return parser.input_reader.Read(buffer) +} + +// Set a string input. +func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_string_read_handler + parser.input = input + parser.input_pos = 0 +} + +// Set a file input. +func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_reader_read_handler + parser.input_reader = r +} + +// Set the source encoding. +func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { + if parser.encoding != yaml_ANY_ENCODING { + panic("must set the encoding only once") + } + parser.encoding = encoding +} + +// Create a new emitter object. +func yaml_emitter_initialize(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{ + buffer: make([]byte, output_buffer_size), + raw_buffer: make([]byte, 0, output_raw_buffer_size), + states: make([]yaml_emitter_state_t, 0, initial_stack_size), + events: make([]yaml_event_t, 0, initial_queue_size), + } +} + +// Destroy an emitter object. +func yaml_emitter_delete(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{} +} + +// String write handler. +func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + *emitter.output_buffer = append(*emitter.output_buffer, buffer...) + return nil +} + +// yaml_writer_write_handler uses emitter.output_writer to write the +// emitted text. +func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + _, err := emitter.output_writer.Write(buffer) + return err +} + +// Set a string output. +func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_string_write_handler + emitter.output_buffer = output_buffer +} + +// Set a file output. +func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_writer_write_handler + emitter.output_writer = w +} + +// Set the output encoding. +func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) { + if emitter.encoding != yaml_ANY_ENCODING { + panic("must set the output encoding only once") + } + emitter.encoding = encoding +} + +// Set the canonical output style. +func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) { + emitter.canonical = canonical +} + +//// Set the indentation increment. +func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) { + if indent < 2 || indent > 9 { + indent = 2 + } + emitter.best_indent = indent +} + +// Set the preferred line width. +func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) { + if width < 0 { + width = -1 + } + emitter.best_width = width +} + +// Set if unescaped non-ASCII characters are allowed. +func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) { + emitter.unicode = unicode +} + +// Set the preferred line break character. +func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { + emitter.line_break = line_break +} + +///* +// * Destroy a token object. +// */ +// +//YAML_DECLARE(void) +//yaml_token_delete(yaml_token_t *token) +//{ +// assert(token); // Non-NULL token object expected. +// +// switch (token.type) +// { +// case YAML_TAG_DIRECTIVE_TOKEN: +// yaml_free(token.data.tag_directive.handle); +// yaml_free(token.data.tag_directive.prefix); +// break; +// +// case YAML_ALIAS_TOKEN: +// yaml_free(token.data.alias.value); +// break; +// +// case YAML_ANCHOR_TOKEN: +// yaml_free(token.data.anchor.value); +// break; +// +// case YAML_TAG_TOKEN: +// yaml_free(token.data.tag.handle); +// yaml_free(token.data.tag.suffix); +// break; +// +// case YAML_SCALAR_TOKEN: +// yaml_free(token.data.scalar.value); +// break; +// +// default: +// break; +// } +// +// memset(token, 0, sizeof(yaml_token_t)); +//} +// +///* +// * Check if a string is a valid UTF-8 sequence. +// * +// * Check 'reader.c' for more details on UTF-8 encoding. +// */ +// +//static int +//yaml_check_utf8(yaml_char_t *start, size_t length) +//{ +// yaml_char_t *end = start+length; +// yaml_char_t *pointer = start; +// +// while (pointer < end) { +// unsigned char octet; +// unsigned int width; +// unsigned int value; +// size_t k; +// +// octet = pointer[0]; +// width = (octet & 0x80) == 0x00 ? 1 : +// (octet & 0xE0) == 0xC0 ? 2 : +// (octet & 0xF0) == 0xE0 ? 3 : +// (octet & 0xF8) == 0xF0 ? 4 : 0; +// value = (octet & 0x80) == 0x00 ? octet & 0x7F : +// (octet & 0xE0) == 0xC0 ? octet & 0x1F : +// (octet & 0xF0) == 0xE0 ? octet & 0x0F : +// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0; +// if (!width) return 0; +// if (pointer+width > end) return 0; +// for (k = 1; k < width; k ++) { +// octet = pointer[k]; +// if ((octet & 0xC0) != 0x80) return 0; +// value = (value << 6) + (octet & 0x3F); +// } +// if (!((width == 1) || +// (width == 2 && value >= 0x80) || +// (width == 3 && value >= 0x800) || +// (width == 4 && value >= 0x10000))) return 0; +// +// pointer += width; +// } +// +// return 1; +//} +// + +// Create STREAM-START. +func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) { + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + encoding: encoding, + } +} + +// Create STREAM-END. +func yaml_stream_end_event_initialize(event *yaml_event_t) { + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + } +} + +// Create DOCUMENT-START. +func yaml_document_start_event_initialize( + event *yaml_event_t, + version_directive *yaml_version_directive_t, + tag_directives []yaml_tag_directive_t, + implicit bool, +) { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: implicit, + } +} + +// Create DOCUMENT-END. +func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + implicit: implicit, + } +} + +///* +// * Create ALIAS. +// */ +// +//YAML_DECLARE(int) +//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t) +//{ +// mark yaml_mark_t = { 0, 0, 0 } +// anchor_copy *yaml_char_t = NULL +// +// assert(event) // Non-NULL event object is expected. +// assert(anchor) // Non-NULL anchor is expected. +// +// if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0 +// +// anchor_copy = yaml_strdup(anchor) +// if (!anchor_copy) +// return 0 +// +// ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark) +// +// return 1 +//} + +// Create SCALAR. +func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + anchor: anchor, + tag: tag, + value: value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-START. +func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-END. +func yaml_sequence_end_event_initialize(event *yaml_event_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + } + return true +} + +// Create MAPPING-START. +func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) { + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } +} + +// Create MAPPING-END. +func yaml_mapping_end_event_initialize(event *yaml_event_t) { + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + } +} + +// Destroy an event object. +func yaml_event_delete(event *yaml_event_t) { + *event = yaml_event_t{} +} + +///* +// * Create a document object. +// */ +// +//YAML_DECLARE(int) +//yaml_document_initialize(document *yaml_document_t, +// version_directive *yaml_version_directive_t, +// tag_directives_start *yaml_tag_directive_t, +// tag_directives_end *yaml_tag_directive_t, +// start_implicit int, end_implicit int) +//{ +// struct { +// error yaml_error_type_t +// } context +// struct { +// start *yaml_node_t +// end *yaml_node_t +// top *yaml_node_t +// } nodes = { NULL, NULL, NULL } +// version_directive_copy *yaml_version_directive_t = NULL +// struct { +// start *yaml_tag_directive_t +// end *yaml_tag_directive_t +// top *yaml_tag_directive_t +// } tag_directives_copy = { NULL, NULL, NULL } +// value yaml_tag_directive_t = { NULL, NULL } +// mark yaml_mark_t = { 0, 0, 0 } +// +// assert(document) // Non-NULL document object is expected. +// assert((tag_directives_start && tag_directives_end) || +// (tag_directives_start == tag_directives_end)) +// // Valid tag directives are expected. +// +// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error +// +// if (version_directive) { +// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t)) +// if (!version_directive_copy) goto error +// version_directive_copy.major = version_directive.major +// version_directive_copy.minor = version_directive.minor +// } +// +// if (tag_directives_start != tag_directives_end) { +// tag_directive *yaml_tag_directive_t +// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE)) +// goto error +// for (tag_directive = tag_directives_start +// tag_directive != tag_directives_end; tag_directive ++) { +// assert(tag_directive.handle) +// assert(tag_directive.prefix) +// if (!yaml_check_utf8(tag_directive.handle, +// strlen((char *)tag_directive.handle))) +// goto error +// if (!yaml_check_utf8(tag_directive.prefix, +// strlen((char *)tag_directive.prefix))) +// goto error +// value.handle = yaml_strdup(tag_directive.handle) +// value.prefix = yaml_strdup(tag_directive.prefix) +// if (!value.handle || !value.prefix) goto error +// if (!PUSH(&context, tag_directives_copy, value)) +// goto error +// value.handle = NULL +// value.prefix = NULL +// } +// } +// +// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy, +// tag_directives_copy.start, tag_directives_copy.top, +// start_implicit, end_implicit, mark, mark) +// +// return 1 +// +//error: +// STACK_DEL(&context, nodes) +// yaml_free(version_directive_copy) +// while (!STACK_EMPTY(&context, tag_directives_copy)) { +// value yaml_tag_directive_t = POP(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// } +// STACK_DEL(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// +// return 0 +//} +// +///* +// * Destroy a document object. +// */ +// +//YAML_DECLARE(void) +//yaml_document_delete(document *yaml_document_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// tag_directive *yaml_tag_directive_t +// +// context.error = YAML_NO_ERROR // Eliminate a compiler warning. +// +// assert(document) // Non-NULL document object is expected. +// +// while (!STACK_EMPTY(&context, document.nodes)) { +// node yaml_node_t = POP(&context, document.nodes) +// yaml_free(node.tag) +// switch (node.type) { +// case YAML_SCALAR_NODE: +// yaml_free(node.data.scalar.value) +// break +// case YAML_SEQUENCE_NODE: +// STACK_DEL(&context, node.data.sequence.items) +// break +// case YAML_MAPPING_NODE: +// STACK_DEL(&context, node.data.mapping.pairs) +// break +// default: +// assert(0) // Should not happen. +// } +// } +// STACK_DEL(&context, document.nodes) +// +// yaml_free(document.version_directive) +// for (tag_directive = document.tag_directives.start +// tag_directive != document.tag_directives.end +// tag_directive++) { +// yaml_free(tag_directive.handle) +// yaml_free(tag_directive.prefix) +// } +// yaml_free(document.tag_directives.start) +// +// memset(document, 0, sizeof(yaml_document_t)) +//} +// +///** +// * Get a document node. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_node(document *yaml_document_t, index int) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (index > 0 && document.nodes.start + index <= document.nodes.top) { +// return document.nodes.start + index - 1 +// } +// return NULL +//} +// +///** +// * Get the root object. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_root_node(document *yaml_document_t) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (document.nodes.top != document.nodes.start) { +// return document.nodes.start +// } +// return NULL +//} +// +///* +// * Add a scalar node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_scalar(document *yaml_document_t, +// tag *yaml_char_t, value *yaml_char_t, length int, +// style yaml_scalar_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// value_copy *yaml_char_t = NULL +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// assert(value) // Non-NULL value is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (length < 0) { +// length = strlen((char *)value) +// } +// +// if (!yaml_check_utf8(value, length)) goto error +// value_copy = yaml_malloc(length+1) +// if (!value_copy) goto error +// memcpy(value_copy, value, length) +// value_copy[length] = '\0' +// +// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// yaml_free(tag_copy) +// yaml_free(value_copy) +// +// return 0 +//} +// +///* +// * Add a sequence node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_sequence(document *yaml_document_t, +// tag *yaml_char_t, style yaml_sequence_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_item_t +// end *yaml_node_item_t +// top *yaml_node_item_t +// } items = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error +// +// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, items) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Add a mapping node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_mapping(document *yaml_document_t, +// tag *yaml_char_t, style yaml_mapping_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_pair_t +// end *yaml_node_pair_t +// top *yaml_node_pair_t +// } pairs = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error +// +// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, pairs) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Append an item to a sequence node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_sequence_item(document *yaml_document_t, +// sequence int, item int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// assert(document) // Non-NULL document is required. +// assert(sequence > 0 +// && document.nodes.start + sequence <= document.nodes.top) +// // Valid sequence id is required. +// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE) +// // A sequence node is required. +// assert(item > 0 && document.nodes.start + item <= document.nodes.top) +// // Valid item id is required. +// +// if (!PUSH(&context, +// document.nodes.start[sequence-1].data.sequence.items, item)) +// return 0 +// +// return 1 +//} +// +///* +// * Append a pair of a key and a value to a mapping node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_mapping_pair(document *yaml_document_t, +// mapping int, key int, value int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// pair yaml_node_pair_t +// +// assert(document) // Non-NULL document is required. +// assert(mapping > 0 +// && document.nodes.start + mapping <= document.nodes.top) +// // Valid mapping id is required. +// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE) +// // A mapping node is required. +// assert(key > 0 && document.nodes.start + key <= document.nodes.top) +// // Valid key id is required. +// assert(value > 0 && document.nodes.start + value <= document.nodes.top) +// // Valid value id is required. +// +// pair.key = key +// pair.value = value +// +// if (!PUSH(&context, +// document.nodes.start[mapping-1].data.mapping.pairs, pair)) +// return 0 +// +// return 1 +//} +// +// diff --git a/vendor/gopkg.in/yaml.v2/decode.go b/vendor/gopkg.in/yaml.v2/decode.go new file mode 100644 index 00000000..e4e56e28 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/decode.go @@ -0,0 +1,775 @@ +package yaml + +import ( + "encoding" + "encoding/base64" + "fmt" + "io" + "math" + "reflect" + "strconv" + "time" +) + +const ( + documentNode = 1 << iota + mappingNode + sequenceNode + scalarNode + aliasNode +) + +type node struct { + kind int + line, column int + tag string + // For an alias node, alias holds the resolved alias. + alias *node + value string + implicit bool + children []*node + anchors map[string]*node +} + +// ---------------------------------------------------------------------------- +// Parser, produces a node tree out of a libyaml event stream. + +type parser struct { + parser yaml_parser_t + event yaml_event_t + doc *node + doneInit bool +} + +func newParser(b []byte) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + if len(b) == 0 { + b = []byte{'\n'} + } + yaml_parser_set_input_string(&p.parser, b) + return &p +} + +func newParserFromReader(r io.Reader) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + yaml_parser_set_input_reader(&p.parser, r) + return &p +} + +func (p *parser) init() { + if p.doneInit { + return + } + p.expect(yaml_STREAM_START_EVENT) + p.doneInit = true +} + +func (p *parser) destroy() { + if p.event.typ != yaml_NO_EVENT { + yaml_event_delete(&p.event) + } + yaml_parser_delete(&p.parser) +} + +// expect consumes an event from the event stream and +// checks that it's of the expected type. +func (p *parser) expect(e yaml_event_type_t) { + if p.event.typ == yaml_NO_EVENT { + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() + } + } + if p.event.typ == yaml_STREAM_END_EVENT { + failf("attempted to go past the end of stream; corrupted value?") + } + if p.event.typ != e { + p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ) + p.fail() + } + yaml_event_delete(&p.event) + p.event.typ = yaml_NO_EVENT +} + +// peek peeks at the next event in the event stream, +// puts the results into p.event and returns the event type. +func (p *parser) peek() yaml_event_type_t { + if p.event.typ != yaml_NO_EVENT { + return p.event.typ + } + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() + } + return p.event.typ +} + +func (p *parser) fail() { + var where string + var line int + if p.parser.problem_mark.line != 0 { + line = p.parser.problem_mark.line + // Scanner errors don't iterate line before returning error + if p.parser.error == yaml_SCANNER_ERROR { + line++ + } + } else if p.parser.context_mark.line != 0 { + line = p.parser.context_mark.line + } + if line != 0 { + where = "line " + strconv.Itoa(line) + ": " + } + var msg string + if len(p.parser.problem) > 0 { + msg = p.parser.problem + } else { + msg = "unknown problem parsing YAML content" + } + failf("%s%s", where, msg) +} + +func (p *parser) anchor(n *node, anchor []byte) { + if anchor != nil { + p.doc.anchors[string(anchor)] = n + } +} + +func (p *parser) parse() *node { + p.init() + switch p.peek() { + case yaml_SCALAR_EVENT: + return p.scalar() + case yaml_ALIAS_EVENT: + return p.alias() + case yaml_MAPPING_START_EVENT: + return p.mapping() + case yaml_SEQUENCE_START_EVENT: + return p.sequence() + case yaml_DOCUMENT_START_EVENT: + return p.document() + case yaml_STREAM_END_EVENT: + // Happens when attempting to decode an empty buffer. + return nil + default: + panic("attempted to parse unknown event: " + p.event.typ.String()) + } +} + +func (p *parser) node(kind int) *node { + return &node{ + kind: kind, + line: p.event.start_mark.line, + column: p.event.start_mark.column, + } +} + +func (p *parser) document() *node { + n := p.node(documentNode) + n.anchors = make(map[string]*node) + p.doc = n + p.expect(yaml_DOCUMENT_START_EVENT) + n.children = append(n.children, p.parse()) + p.expect(yaml_DOCUMENT_END_EVENT) + return n +} + +func (p *parser) alias() *node { + n := p.node(aliasNode) + n.value = string(p.event.anchor) + n.alias = p.doc.anchors[n.value] + if n.alias == nil { + failf("unknown anchor '%s' referenced", n.value) + } + p.expect(yaml_ALIAS_EVENT) + return n +} + +func (p *parser) scalar() *node { + n := p.node(scalarNode) + n.value = string(p.event.value) + n.tag = string(p.event.tag) + n.implicit = p.event.implicit + p.anchor(n, p.event.anchor) + p.expect(yaml_SCALAR_EVENT) + return n +} + +func (p *parser) sequence() *node { + n := p.node(sequenceNode) + p.anchor(n, p.event.anchor) + p.expect(yaml_SEQUENCE_START_EVENT) + for p.peek() != yaml_SEQUENCE_END_EVENT { + n.children = append(n.children, p.parse()) + } + p.expect(yaml_SEQUENCE_END_EVENT) + return n +} + +func (p *parser) mapping() *node { + n := p.node(mappingNode) + p.anchor(n, p.event.anchor) + p.expect(yaml_MAPPING_START_EVENT) + for p.peek() != yaml_MAPPING_END_EVENT { + n.children = append(n.children, p.parse(), p.parse()) + } + p.expect(yaml_MAPPING_END_EVENT) + return n +} + +// ---------------------------------------------------------------------------- +// Decoder, unmarshals a node into a provided value. + +type decoder struct { + doc *node + aliases map[*node]bool + mapType reflect.Type + terrors []string + strict bool +} + +var ( + mapItemType = reflect.TypeOf(MapItem{}) + durationType = reflect.TypeOf(time.Duration(0)) + defaultMapType = reflect.TypeOf(map[interface{}]interface{}{}) + ifaceType = defaultMapType.Elem() + timeType = reflect.TypeOf(time.Time{}) + ptrTimeType = reflect.TypeOf(&time.Time{}) +) + +func newDecoder(strict bool) *decoder { + d := &decoder{mapType: defaultMapType, strict: strict} + d.aliases = make(map[*node]bool) + return d +} + +func (d *decoder) terror(n *node, tag string, out reflect.Value) { + if n.tag != "" { + tag = n.tag + } + value := n.value + if tag != yaml_SEQ_TAG && tag != yaml_MAP_TAG { + if len(value) > 10 { + value = " `" + value[:7] + "...`" + } else { + value = " `" + value + "`" + } + } + d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.line+1, shortTag(tag), value, out.Type())) +} + +func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) { + terrlen := len(d.terrors) + err := u.UnmarshalYAML(func(v interface{}) (err error) { + defer handleErr(&err) + d.unmarshal(n, reflect.ValueOf(v)) + if len(d.terrors) > terrlen { + issues := d.terrors[terrlen:] + d.terrors = d.terrors[:terrlen] + return &TypeError{issues} + } + return nil + }) + if e, ok := err.(*TypeError); ok { + d.terrors = append(d.terrors, e.Errors...) + return false + } + if err != nil { + fail(err) + } + return true +} + +// d.prepare initializes and dereferences pointers and calls UnmarshalYAML +// if a value is found to implement it. +// It returns the initialized and dereferenced out value, whether +// unmarshalling was already done by UnmarshalYAML, and if so whether +// its types unmarshalled appropriately. +// +// If n holds a null value, prepare returns before doing anything. +func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { + if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "~" || n.value == "" && n.implicit) { + return out, false, false + } + again := true + for again { + again = false + if out.Kind() == reflect.Ptr { + if out.IsNil() { + out.Set(reflect.New(out.Type().Elem())) + } + out = out.Elem() + again = true + } + if out.CanAddr() { + if u, ok := out.Addr().Interface().(Unmarshaler); ok { + good = d.callUnmarshaler(n, u) + return out, true, good + } + } + } + return out, false, false +} + +func (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) { + switch n.kind { + case documentNode: + return d.document(n, out) + case aliasNode: + return d.alias(n, out) + } + out, unmarshaled, good := d.prepare(n, out) + if unmarshaled { + return good + } + switch n.kind { + case scalarNode: + good = d.scalar(n, out) + case mappingNode: + good = d.mapping(n, out) + case sequenceNode: + good = d.sequence(n, out) + default: + panic("internal error: unknown node kind: " + strconv.Itoa(n.kind)) + } + return good +} + +func (d *decoder) document(n *node, out reflect.Value) (good bool) { + if len(n.children) == 1 { + d.doc = n + d.unmarshal(n.children[0], out) + return true + } + return false +} + +func (d *decoder) alias(n *node, out reflect.Value) (good bool) { + if d.aliases[n] { + // TODO this could actually be allowed in some circumstances. + failf("anchor '%s' value contains itself", n.value) + } + d.aliases[n] = true + good = d.unmarshal(n.alias, out) + delete(d.aliases, n) + return good +} + +var zeroValue reflect.Value + +func resetMap(out reflect.Value) { + for _, k := range out.MapKeys() { + out.SetMapIndex(k, zeroValue) + } +} + +func (d *decoder) scalar(n *node, out reflect.Value) bool { + var tag string + var resolved interface{} + if n.tag == "" && !n.implicit { + tag = yaml_STR_TAG + resolved = n.value + } else { + tag, resolved = resolve(n.tag, n.value) + if tag == yaml_BINARY_TAG { + data, err := base64.StdEncoding.DecodeString(resolved.(string)) + if err != nil { + failf("!!binary value contains invalid base64 data") + } + resolved = string(data) + } + } + if resolved == nil { + if out.Kind() == reflect.Map && !out.CanAddr() { + resetMap(out) + } else { + out.Set(reflect.Zero(out.Type())) + } + return true + } + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + // We've resolved to exactly the type we want, so use that. + out.Set(resolvedv) + return true + } + // Perhaps we can use the value as a TextUnmarshaler to + // set its value. + if out.CanAddr() { + u, ok := out.Addr().Interface().(encoding.TextUnmarshaler) + if ok { + var text []byte + if tag == yaml_BINARY_TAG { + text = []byte(resolved.(string)) + } else { + // We let any value be unmarshaled into TextUnmarshaler. + // That might be more lax than we'd like, but the + // TextUnmarshaler itself should bowl out any dubious values. + text = []byte(n.value) + } + err := u.UnmarshalText(text) + if err != nil { + fail(err) + } + return true + } + } + switch out.Kind() { + case reflect.String: + if tag == yaml_BINARY_TAG { + out.SetString(resolved.(string)) + return true + } + if resolved != nil { + out.SetString(n.value) + return true + } + case reflect.Interface: + if resolved == nil { + out.Set(reflect.Zero(out.Type())) + } else if tag == yaml_TIMESTAMP_TAG { + // It looks like a timestamp but for backward compatibility + // reasons we set it as a string, so that code that unmarshals + // timestamp-like values into interface{} will continue to + // see a string and not a time.Time. + // TODO(v3) Drop this. + out.Set(reflect.ValueOf(n.value)) + } else { + out.Set(reflect.ValueOf(resolved)) + } + return true + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + switch resolved := resolved.(type) { + case int: + if !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case int64: + if !out.OverflowInt(resolved) { + out.SetInt(resolved) + return true + } + case uint64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case float64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case string: + if out.Type() == durationType { + d, err := time.ParseDuration(resolved) + if err == nil { + out.SetInt(int64(d)) + return true + } + } + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + switch resolved := resolved.(type) { + case int: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case int64: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case uint64: + if !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case float64: + if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + } + case reflect.Bool: + switch resolved := resolved.(type) { + case bool: + out.SetBool(resolved) + return true + } + case reflect.Float32, reflect.Float64: + switch resolved := resolved.(type) { + case int: + out.SetFloat(float64(resolved)) + return true + case int64: + out.SetFloat(float64(resolved)) + return true + case uint64: + out.SetFloat(float64(resolved)) + return true + case float64: + out.SetFloat(resolved) + return true + } + case reflect.Struct: + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + out.Set(resolvedv) + return true + } + case reflect.Ptr: + if out.Type().Elem() == reflect.TypeOf(resolved) { + // TODO DOes this make sense? When is out a Ptr except when decoding a nil value? + elem := reflect.New(out.Type().Elem()) + elem.Elem().Set(reflect.ValueOf(resolved)) + out.Set(elem) + return true + } + } + d.terror(n, tag, out) + return false +} + +func settableValueOf(i interface{}) reflect.Value { + v := reflect.ValueOf(i) + sv := reflect.New(v.Type()).Elem() + sv.Set(v) + return sv +} + +func (d *decoder) sequence(n *node, out reflect.Value) (good bool) { + l := len(n.children) + + var iface reflect.Value + switch out.Kind() { + case reflect.Slice: + out.Set(reflect.MakeSlice(out.Type(), l, l)) + case reflect.Array: + if l != out.Len() { + failf("invalid array: want %d elements but got %d", out.Len(), l) + } + case reflect.Interface: + // No type hints. Will have to use a generic sequence. + iface = out + out = settableValueOf(make([]interface{}, l)) + default: + d.terror(n, yaml_SEQ_TAG, out) + return false + } + et := out.Type().Elem() + + j := 0 + for i := 0; i < l; i++ { + e := reflect.New(et).Elem() + if ok := d.unmarshal(n.children[i], e); ok { + out.Index(j).Set(e) + j++ + } + } + if out.Kind() != reflect.Array { + out.Set(out.Slice(0, j)) + } + if iface.IsValid() { + iface.Set(out) + } + return true +} + +func (d *decoder) mapping(n *node, out reflect.Value) (good bool) { + switch out.Kind() { + case reflect.Struct: + return d.mappingStruct(n, out) + case reflect.Slice: + return d.mappingSlice(n, out) + case reflect.Map: + // okay + case reflect.Interface: + if d.mapType.Kind() == reflect.Map { + iface := out + out = reflect.MakeMap(d.mapType) + iface.Set(out) + } else { + slicev := reflect.New(d.mapType).Elem() + if !d.mappingSlice(n, slicev) { + return false + } + out.Set(slicev) + return true + } + default: + d.terror(n, yaml_MAP_TAG, out) + return false + } + outt := out.Type() + kt := outt.Key() + et := outt.Elem() + + mapType := d.mapType + if outt.Key() == ifaceType && outt.Elem() == ifaceType { + d.mapType = outt + } + + if out.IsNil() { + out.Set(reflect.MakeMap(outt)) + } + l := len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + k := reflect.New(kt).Elem() + if d.unmarshal(n.children[i], k) { + kkind := k.Kind() + if kkind == reflect.Interface { + kkind = k.Elem().Kind() + } + if kkind == reflect.Map || kkind == reflect.Slice { + failf("invalid map key: %#v", k.Interface()) + } + e := reflect.New(et).Elem() + if d.unmarshal(n.children[i+1], e) { + d.setMapIndex(n.children[i+1], out, k, e) + } + } + } + d.mapType = mapType + return true +} + +func (d *decoder) setMapIndex(n *node, out, k, v reflect.Value) { + if d.strict && out.MapIndex(k) != zeroValue { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: key %#v already set in map", n.line+1, k.Interface())) + return + } + out.SetMapIndex(k, v) +} + +func (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) { + outt := out.Type() + if outt.Elem() != mapItemType { + d.terror(n, yaml_MAP_TAG, out) + return false + } + + mapType := d.mapType + d.mapType = outt + + var slice []MapItem + var l = len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + item := MapItem{} + k := reflect.ValueOf(&item.Key).Elem() + if d.unmarshal(n.children[i], k) { + v := reflect.ValueOf(&item.Value).Elem() + if d.unmarshal(n.children[i+1], v) { + slice = append(slice, item) + } + } + } + out.Set(reflect.ValueOf(slice)) + d.mapType = mapType + return true +} + +func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) { + sinfo, err := getStructInfo(out.Type()) + if err != nil { + panic(err) + } + name := settableValueOf("") + l := len(n.children) + + var inlineMap reflect.Value + var elemType reflect.Type + if sinfo.InlineMap != -1 { + inlineMap = out.Field(sinfo.InlineMap) + inlineMap.Set(reflect.New(inlineMap.Type()).Elem()) + elemType = inlineMap.Type().Elem() + } + + var doneFields []bool + if d.strict { + doneFields = make([]bool, len(sinfo.FieldsList)) + } + for i := 0; i < l; i += 2 { + ni := n.children[i] + if isMerge(ni) { + d.merge(n.children[i+1], out) + continue + } + if !d.unmarshal(ni, name) { + continue + } + if info, ok := sinfo.FieldsMap[name.String()]; ok { + if d.strict { + if doneFields[info.Id] { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.line+1, name.String(), out.Type())) + continue + } + doneFields[info.Id] = true + } + var field reflect.Value + if info.Inline == nil { + field = out.Field(info.Num) + } else { + field = out.FieldByIndex(info.Inline) + } + d.unmarshal(n.children[i+1], field) + } else if sinfo.InlineMap != -1 { + if inlineMap.IsNil() { + inlineMap.Set(reflect.MakeMap(inlineMap.Type())) + } + value := reflect.New(elemType).Elem() + d.unmarshal(n.children[i+1], value) + d.setMapIndex(n.children[i+1], inlineMap, name, value) + } else if d.strict { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.line+1, name.String(), out.Type())) + } + } + return true +} + +func failWantMap() { + failf("map merge requires map or sequence of maps as the value") +} + +func (d *decoder) merge(n *node, out reflect.Value) { + switch n.kind { + case mappingNode: + d.unmarshal(n, out) + case aliasNode: + an, ok := d.doc.anchors[n.value] + if ok && an.kind != mappingNode { + failWantMap() + } + d.unmarshal(n, out) + case sequenceNode: + // Step backwards as earlier nodes take precedence. + for i := len(n.children) - 1; i >= 0; i-- { + ni := n.children[i] + if ni.kind == aliasNode { + an, ok := d.doc.anchors[ni.value] + if ok && an.kind != mappingNode { + failWantMap() + } + } else if ni.kind != mappingNode { + failWantMap() + } + d.unmarshal(ni, out) + } + default: + failWantMap() + } +} + +func isMerge(n *node) bool { + return n.kind == scalarNode && n.value == "<<" && (n.implicit == true || n.tag == yaml_MERGE_TAG) +} diff --git a/vendor/gopkg.in/yaml.v2/emitterc.go b/vendor/gopkg.in/yaml.v2/emitterc.go new file mode 100644 index 00000000..a1c2cc52 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/emitterc.go @@ -0,0 +1,1685 @@ +package yaml + +import ( + "bytes" + "fmt" +) + +// Flush the buffer if needed. +func flush(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) { + return yaml_emitter_flush(emitter) + } + return true +} + +// Put a character to the output buffer. +func put(emitter *yaml_emitter_t, value byte) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + emitter.buffer[emitter.buffer_pos] = value + emitter.buffer_pos++ + emitter.column++ + return true +} + +// Put a line break to the output buffer. +func put_break(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + switch emitter.line_break { + case yaml_CR_BREAK: + emitter.buffer[emitter.buffer_pos] = '\r' + emitter.buffer_pos += 1 + case yaml_LN_BREAK: + emitter.buffer[emitter.buffer_pos] = '\n' + emitter.buffer_pos += 1 + case yaml_CRLN_BREAK: + emitter.buffer[emitter.buffer_pos+0] = '\r' + emitter.buffer[emitter.buffer_pos+1] = '\n' + emitter.buffer_pos += 2 + default: + panic("unknown line break setting") + } + emitter.column = 0 + emitter.line++ + return true +} + +// Copy a character from a string into buffer. +func write(emitter *yaml_emitter_t, s []byte, i *int) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + p := emitter.buffer_pos + w := width(s[*i]) + switch w { + case 4: + emitter.buffer[p+3] = s[*i+3] + fallthrough + case 3: + emitter.buffer[p+2] = s[*i+2] + fallthrough + case 2: + emitter.buffer[p+1] = s[*i+1] + fallthrough + case 1: + emitter.buffer[p+0] = s[*i+0] + default: + panic("unknown character width") + } + emitter.column++ + emitter.buffer_pos += w + *i += w + return true +} + +// Write a whole string into buffer. +func write_all(emitter *yaml_emitter_t, s []byte) bool { + for i := 0; i < len(s); { + if !write(emitter, s, &i) { + return false + } + } + return true +} + +// Copy a line break character from a string into buffer. +func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool { + if s[*i] == '\n' { + if !put_break(emitter) { + return false + } + *i++ + } else { + if !write(emitter, s, i) { + return false + } + emitter.column = 0 + emitter.line++ + } + return true +} + +// Set an emitter error and return false. +func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_EMITTER_ERROR + emitter.problem = problem + return false +} + +// Emit an event. +func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.events = append(emitter.events, *event) + for !yaml_emitter_need_more_events(emitter) { + event := &emitter.events[emitter.events_head] + if !yaml_emitter_analyze_event(emitter, event) { + return false + } + if !yaml_emitter_state_machine(emitter, event) { + return false + } + yaml_event_delete(event) + emitter.events_head++ + } + return true +} + +// Check if we need to accumulate more events before emitting. +// +// We accumulate extra +// - 1 event for DOCUMENT-START +// - 2 events for SEQUENCE-START +// - 3 events for MAPPING-START +// +func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { + if emitter.events_head == len(emitter.events) { + return true + } + var accumulate int + switch emitter.events[emitter.events_head].typ { + case yaml_DOCUMENT_START_EVENT: + accumulate = 1 + break + case yaml_SEQUENCE_START_EVENT: + accumulate = 2 + break + case yaml_MAPPING_START_EVENT: + accumulate = 3 + break + default: + return false + } + if len(emitter.events)-emitter.events_head > accumulate { + return false + } + var level int + for i := emitter.events_head; i < len(emitter.events); i++ { + switch emitter.events[i].typ { + case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT: + level++ + case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT: + level-- + } + if level == 0 { + return false + } + } + return true +} + +// Append a directive to the directives stack. +func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool { + for i := 0; i < len(emitter.tag_directives); i++ { + if bytes.Equal(value.handle, emitter.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive") + } + } + + // [Go] Do we actually need to copy this given garbage collection + // and the lack of deallocating destructors? + tag_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(tag_copy.handle, value.handle) + copy(tag_copy.prefix, value.prefix) + emitter.tag_directives = append(emitter.tag_directives, tag_copy) + return true +} + +// Increase the indentation level. +func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { + emitter.indents = append(emitter.indents, emitter.indent) + if emitter.indent < 0 { + if flow { + emitter.indent = emitter.best_indent + } else { + emitter.indent = 0 + } + } else if !indentless { + emitter.indent += emitter.best_indent + } + return true +} + +// State dispatcher. +func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool { + switch emitter.state { + default: + case yaml_EMIT_STREAM_START_STATE: + return yaml_emitter_emit_stream_start(emitter, event) + + case yaml_EMIT_FIRST_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, true) + + case yaml_EMIT_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, false) + + case yaml_EMIT_DOCUMENT_CONTENT_STATE: + return yaml_emitter_emit_document_content(emitter, event) + + case yaml_EMIT_DOCUMENT_END_STATE: + return yaml_emitter_emit_document_end(emitter, event) + + case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, true) + + case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, false) + + case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, true) + + case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, false) + + case yaml_EMIT_END_STATE: + return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END") + } + panic("invalid emitter state") +} + +// Expect STREAM-START. +func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_STREAM_START_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START") + } + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = event.encoding + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = yaml_UTF8_ENCODING + } + } + if emitter.best_indent < 2 || emitter.best_indent > 9 { + emitter.best_indent = 2 + } + if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 { + emitter.best_width = 80 + } + if emitter.best_width < 0 { + emitter.best_width = 1<<31 - 1 + } + if emitter.line_break == yaml_ANY_BREAK { + emitter.line_break = yaml_LN_BREAK + } + + emitter.indent = -1 + emitter.line = 0 + emitter.column = 0 + emitter.whitespace = true + emitter.indention = true + + if emitter.encoding != yaml_UTF8_ENCODING { + if !yaml_emitter_write_bom(emitter) { + return false + } + } + emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE + return true +} + +// Expect DOCUMENT-START or STREAM-END. +func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + + if event.typ == yaml_DOCUMENT_START_EVENT { + + if event.version_directive != nil { + if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) { + return false + } + } + + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) { + return false + } + if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) { + return false + } + } + + for i := 0; i < len(default_tag_directives); i++ { + tag_directive := &default_tag_directives[i] + if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) { + return false + } + } + + implicit := event.implicit + if !first || emitter.canonical { + implicit = false + } + + if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if event.version_directive != nil { + implicit = false + if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if len(event.tag_directives) > 0 { + implicit = false + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) { + return false + } + if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + if yaml_emitter_check_empty_document(emitter) { + implicit = false + } + if !implicit { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) { + return false + } + if emitter.canonical { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE + return true + } + + if event.typ == yaml_STREAM_END_EVENT { + if emitter.open_ended { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_END_STATE + return true + } + + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END") +} + +// Expect the root node. +func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) + return yaml_emitter_emit_node(emitter, event, true, false, false, false) +} + +// Expect DOCUMENT-END. +func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_DOCUMENT_END_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END") + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !event.implicit { + // [Go] Allocate the slice elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_DOCUMENT_START_STATE + emitter.tag_directives = emitter.tag_directives[:0] + return true +} + +// Expect a flow item node. +func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a flow key node. +func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_MAPPING_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if !emitter.canonical && yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a flow value node. +func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block item node. +func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) { + return false + } + } + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a block key node. +func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, false) { + return false + } + } + if event.typ == yaml_MAPPING_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block value node. +func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a node. +func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, + root bool, sequence bool, mapping bool, simple_key bool) bool { + + emitter.root_context = root + emitter.sequence_context = sequence + emitter.mapping_context = mapping + emitter.simple_key_context = simple_key + + switch event.typ { + case yaml_ALIAS_EVENT: + return yaml_emitter_emit_alias(emitter, event) + case yaml_SCALAR_EVENT: + return yaml_emitter_emit_scalar(emitter, event) + case yaml_SEQUENCE_START_EVENT: + return yaml_emitter_emit_sequence_start(emitter, event) + case yaml_MAPPING_START_EVENT: + return yaml_emitter_emit_mapping_start(emitter, event) + default: + return yaml_emitter_set_emitter_error(emitter, + fmt.Sprintf("expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v", event.typ)) + } +} + +// Expect ALIAS. +func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SCALAR. +func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_select_scalar_style(emitter, event) { + return false + } + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + if !yaml_emitter_process_scalar(emitter) { + return false + } + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SEQUENCE-START. +func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE || + yaml_emitter_check_empty_sequence(emitter) { + emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE + } + return true +} + +// Expect MAPPING-START. +func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE || + yaml_emitter_check_empty_mapping(emitter) { + emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE + } + return true +} + +// Check if the document content is an empty scalar. +func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool { + return false // [Go] Huh? +} + +// Check if the next events represent an empty sequence. +func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT +} + +// Check if the next events represent an empty mapping. +func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT +} + +// Check if the next node can be expressed as a simple key. +func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool { + length := 0 + switch emitter.events[emitter.events_head].typ { + case yaml_ALIAS_EVENT: + length += len(emitter.anchor_data.anchor) + case yaml_SCALAR_EVENT: + if emitter.scalar_data.multiline { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + + len(emitter.scalar_data.value) + case yaml_SEQUENCE_START_EVENT: + if !yaml_emitter_check_empty_sequence(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + case yaml_MAPPING_START_EVENT: + if !yaml_emitter_check_empty_mapping(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + default: + return false + } + return length <= 128 +} + +// Determine an acceptable scalar style. +func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 + if no_tag && !event.implicit && !event.quoted_implicit { + return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified") + } + + style := event.scalar_style() + if style == yaml_ANY_SCALAR_STYLE { + style = yaml_PLAIN_SCALAR_STYLE + } + if emitter.canonical { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + if emitter.simple_key_context && emitter.scalar_data.multiline { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + + if style == yaml_PLAIN_SCALAR_STYLE { + if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed || + emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if no_tag && !event.implicit { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_SINGLE_QUOTED_SCALAR_STYLE { + if !emitter.scalar_data.single_quoted_allowed { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE { + if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + + if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE { + emitter.tag_data.handle = []byte{'!'} + } + emitter.scalar_data.style = style + return true +} + +// Write an anchor. +func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { + if emitter.anchor_data.anchor == nil { + return true + } + c := []byte{'&'} + if emitter.anchor_data.alias { + c[0] = '*' + } + if !yaml_emitter_write_indicator(emitter, c, true, false, false) { + return false + } + return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor) +} + +// Write a tag. +func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool { + if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 { + return true + } + if len(emitter.tag_data.handle) > 0 { + if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) { + return false + } + if len(emitter.tag_data.suffix) > 0 { + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + } + } else { + // [Go] Allocate these slices elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) { + return false + } + } + return true +} + +// Write a scalar. +func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool { + switch emitter.scalar_data.style { + case yaml_PLAIN_SCALAR_STYLE: + return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_SINGLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_DOUBLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_LITERAL_SCALAR_STYLE: + return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value) + + case yaml_FOLDED_SCALAR_STYLE: + return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value) + } + panic("unknown scalar style") +} + +// Check if a %YAML directive is valid. +func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool { + if version_directive.major != 1 || version_directive.minor != 1 { + return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive") + } + return true +} + +// Check if a %TAG directive is valid. +func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool { + handle := tag_directive.handle + prefix := tag_directive.prefix + if len(handle) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty") + } + if handle[0] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'") + } + if handle[len(handle)-1] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'") + } + for i := 1; i < len(handle)-1; i += width(handle[i]) { + if !is_alpha(handle, i) { + return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only") + } + } + if len(prefix) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty") + } + return true +} + +// Check if an anchor is valid. +func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool { + if len(anchor) == 0 { + problem := "anchor value must not be empty" + if alias { + problem = "alias value must not be empty" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + for i := 0; i < len(anchor); i += width(anchor[i]) { + if !is_alpha(anchor, i) { + problem := "anchor value must contain alphanumerical characters only" + if alias { + problem = "alias value must contain alphanumerical characters only" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + } + emitter.anchor_data.anchor = anchor + emitter.anchor_data.alias = alias + return true +} + +// Check if a tag is valid. +func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool { + if len(tag) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty") + } + for i := 0; i < len(emitter.tag_directives); i++ { + tag_directive := &emitter.tag_directives[i] + if bytes.HasPrefix(tag, tag_directive.prefix) { + emitter.tag_data.handle = tag_directive.handle + emitter.tag_data.suffix = tag[len(tag_directive.prefix):] + return true + } + } + emitter.tag_data.suffix = tag + return true +} + +// Check if a scalar is valid. +func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { + var ( + block_indicators = false + flow_indicators = false + line_breaks = false + special_characters = false + + leading_space = false + leading_break = false + trailing_space = false + trailing_break = false + break_space = false + space_break = false + + preceded_by_whitespace = false + followed_by_whitespace = false + previous_space = false + previous_break = false + ) + + emitter.scalar_data.value = value + + if len(value) == 0 { + emitter.scalar_data.multiline = false + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = false + return true + } + + if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) { + block_indicators = true + flow_indicators = true + } + + preceded_by_whitespace = true + for i, w := 0, 0; i < len(value); i += w { + w = width(value[i]) + followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w) + + if i == 0 { + switch value[i] { + case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`': + flow_indicators = true + block_indicators = true + case '?', ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '-': + if followed_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } else { + switch value[i] { + case ',', '?', '[', ']', '{', '}': + flow_indicators = true + case ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '#': + if preceded_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } + + if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode { + special_characters = true + } + if is_space(value, i) { + if i == 0 { + leading_space = true + } + if i+width(value[i]) == len(value) { + trailing_space = true + } + if previous_break { + break_space = true + } + previous_space = true + previous_break = false + } else if is_break(value, i) { + line_breaks = true + if i == 0 { + leading_break = true + } + if i+width(value[i]) == len(value) { + trailing_break = true + } + if previous_space { + space_break = true + } + previous_space = false + previous_break = true + } else { + previous_space = false + previous_break = false + } + + // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition. + preceded_by_whitespace = is_blankz(value, i) + } + + emitter.scalar_data.multiline = line_breaks + emitter.scalar_data.flow_plain_allowed = true + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = true + + if leading_space || leading_break || trailing_space || trailing_break { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if trailing_space { + emitter.scalar_data.block_allowed = false + } + if break_space { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + } + if space_break || special_characters { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + emitter.scalar_data.block_allowed = false + } + if line_breaks { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if flow_indicators { + emitter.scalar_data.flow_plain_allowed = false + } + if block_indicators { + emitter.scalar_data.block_plain_allowed = false + } + return true +} + +// Check if the event data is valid. +func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + emitter.anchor_data.anchor = nil + emitter.tag_data.handle = nil + emitter.tag_data.suffix = nil + emitter.scalar_data.value = nil + + switch event.typ { + case yaml_ALIAS_EVENT: + if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) { + return false + } + + case yaml_SCALAR_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + if !yaml_emitter_analyze_scalar(emitter, event.value) { + return false + } + + case yaml_SEQUENCE_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + + case yaml_MAPPING_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + } + return true +} + +// Write the BOM character. +func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool { + if !flush(emitter) { + return false + } + pos := emitter.buffer_pos + emitter.buffer[pos+0] = '\xEF' + emitter.buffer[pos+1] = '\xBB' + emitter.buffer[pos+2] = '\xBF' + emitter.buffer_pos += 3 + return true +} + +func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool { + indent := emitter.indent + if indent < 0 { + indent = 0 + } + if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) { + if !put_break(emitter) { + return false + } + } + for emitter.column < indent { + if !put(emitter, ' ') { + return false + } + } + emitter.whitespace = true + emitter.indention = true + return true +} + +func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, indicator) { + return false + } + emitter.whitespace = is_whitespace + emitter.indention = (emitter.indention && is_indention) + emitter.open_ended = false + return true +} + +func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool { + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + for i := 0; i < len(value); { + var must_write bool + switch value[i] { + case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']': + must_write = true + default: + must_write = is_alpha(value, i) + } + if must_write { + if !write(emitter, value, &i) { + return false + } + } else { + w := width(value[i]) + for k := 0; k < w; k++ { + octet := value[i] + i++ + if !put(emitter, '%') { + return false + } + + c := octet >> 4 + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + + c = octet & 0x0f + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + } + } + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + + emitter.whitespace = false + emitter.indention = false + if emitter.root_context { + emitter.open_ended = true + } + + return true +} + +func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) { + return false + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if value[i] == '\'' { + if !put(emitter, '\'') { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + spaces := false + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) { + return false + } + + for i := 0; i < len(value); { + if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) || + is_bom(value, i) || is_break(value, i) || + value[i] == '"' || value[i] == '\\' { + + octet := value[i] + + var w int + var v rune + switch { + case octet&0x80 == 0x00: + w, v = 1, rune(octet&0x7F) + case octet&0xE0 == 0xC0: + w, v = 2, rune(octet&0x1F) + case octet&0xF0 == 0xE0: + w, v = 3, rune(octet&0x0F) + case octet&0xF8 == 0xF0: + w, v = 4, rune(octet&0x07) + } + for k := 1; k < w; k++ { + octet = value[i+k] + v = (v << 6) + (rune(octet) & 0x3F) + } + i += w + + if !put(emitter, '\\') { + return false + } + + var ok bool + switch v { + case 0x00: + ok = put(emitter, '0') + case 0x07: + ok = put(emitter, 'a') + case 0x08: + ok = put(emitter, 'b') + case 0x09: + ok = put(emitter, 't') + case 0x0A: + ok = put(emitter, 'n') + case 0x0b: + ok = put(emitter, 'v') + case 0x0c: + ok = put(emitter, 'f') + case 0x0d: + ok = put(emitter, 'r') + case 0x1b: + ok = put(emitter, 'e') + case 0x22: + ok = put(emitter, '"') + case 0x5c: + ok = put(emitter, '\\') + case 0x85: + ok = put(emitter, 'N') + case 0xA0: + ok = put(emitter, '_') + case 0x2028: + ok = put(emitter, 'L') + case 0x2029: + ok = put(emitter, 'P') + default: + if v <= 0xFF { + ok = put(emitter, 'x') + w = 2 + } else if v <= 0xFFFF { + ok = put(emitter, 'u') + w = 4 + } else { + ok = put(emitter, 'U') + w = 8 + } + for k := (w - 1) * 4; ok && k >= 0; k -= 4 { + digit := byte((v >> uint(k)) & 0x0F) + if digit < 10 { + ok = put(emitter, digit+'0') + } else { + ok = put(emitter, digit+'A'-10) + } + } + } + if !ok { + return false + } + spaces = false + } else if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 { + if !yaml_emitter_write_indent(emitter) { + return false + } + if is_space(value, i+1) { + if !put(emitter, '\\') { + return false + } + } + i += width(value[i]) + } else if !write(emitter, value, &i) { + return false + } + spaces = true + } else { + if !write(emitter, value, &i) { + return false + } + spaces = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool { + if is_space(value, 0) || is_break(value, 0) { + indent_hint := []byte{'0' + byte(emitter.best_indent)} + if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) { + return false + } + } + + emitter.open_ended = false + + var chomp_hint [1]byte + if len(value) == 0 { + chomp_hint[0] = '-' + } else { + i := len(value) - 1 + for value[i]&0xC0 == 0x80 { + i-- + } + if !is_break(value, i) { + chomp_hint[0] = '-' + } else if i == 0 { + chomp_hint[0] = '+' + emitter.open_ended = true + } else { + i-- + for value[i]&0xC0 == 0x80 { + i-- + } + if is_break(value, i) { + chomp_hint[0] = '+' + emitter.open_ended = true + } + } + } + if chomp_hint[0] != 0 { + if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) { + return false + } + } + return true +} + +func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + breaks := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + breaks = false + } + } + + return true +} + +func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + + breaks := true + leading_spaces := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !breaks && !leading_spaces && value[i] == '\n' { + k := 0 + for is_break(value, k) { + k += width(value[k]) + } + if !is_blankz(value, k) { + if !put_break(emitter) { + return false + } + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + leading_spaces = is_blank(value, i) + } + if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + emitter.indention = false + breaks = false + } + } + return true +} diff --git a/vendor/gopkg.in/yaml.v2/encode.go b/vendor/gopkg.in/yaml.v2/encode.go new file mode 100644 index 00000000..0ee738e1 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/encode.go @@ -0,0 +1,390 @@ +package yaml + +import ( + "encoding" + "fmt" + "io" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "time" + "unicode/utf8" +) + +// jsonNumber is the interface of the encoding/json.Number datatype. +// Repeating the interface here avoids a dependency on encoding/json, and also +// supports other libraries like jsoniter, which use a similar datatype with +// the same interface. Detecting this interface is useful when dealing with +// structures containing json.Number, which is a string under the hood. The +// encoder should prefer the use of Int64(), Float64() and string(), in that +// order, when encoding this type. +type jsonNumber interface { + Float64() (float64, error) + Int64() (int64, error) + String() string +} + +type encoder struct { + emitter yaml_emitter_t + event yaml_event_t + out []byte + flow bool + // doneInit holds whether the initial stream_start_event has been + // emitted. + doneInit bool +} + +func newEncoder() *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) + yaml_emitter_set_output_string(&e.emitter, &e.out) + yaml_emitter_set_unicode(&e.emitter, true) + return e +} + +func newEncoderWithWriter(w io.Writer) *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) + yaml_emitter_set_output_writer(&e.emitter, w) + yaml_emitter_set_unicode(&e.emitter, true) + return e +} + +func (e *encoder) init() { + if e.doneInit { + return + } + yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING) + e.emit() + e.doneInit = true +} + +func (e *encoder) finish() { + e.emitter.open_ended = false + yaml_stream_end_event_initialize(&e.event) + e.emit() +} + +func (e *encoder) destroy() { + yaml_emitter_delete(&e.emitter) +} + +func (e *encoder) emit() { + // This will internally delete the e.event value. + e.must(yaml_emitter_emit(&e.emitter, &e.event)) +} + +func (e *encoder) must(ok bool) { + if !ok { + msg := e.emitter.problem + if msg == "" { + msg = "unknown problem generating YAML content" + } + failf("%s", msg) + } +} + +func (e *encoder) marshalDoc(tag string, in reflect.Value) { + e.init() + yaml_document_start_event_initialize(&e.event, nil, nil, true) + e.emit() + e.marshal(tag, in) + yaml_document_end_event_initialize(&e.event, true) + e.emit() +} + +func (e *encoder) marshal(tag string, in reflect.Value) { + if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() { + e.nilv() + return + } + iface := in.Interface() + switch m := iface.(type) { + case jsonNumber: + integer, err := m.Int64() + if err == nil { + // In this case the json.Number is a valid int64 + in = reflect.ValueOf(integer) + break + } + float, err := m.Float64() + if err == nil { + // In this case the json.Number is a valid float64 + in = reflect.ValueOf(float) + break + } + // fallback case - no number could be obtained + in = reflect.ValueOf(m.String()) + case time.Time, *time.Time: + // Although time.Time implements TextMarshaler, + // we don't want to treat it as a string for YAML + // purposes because YAML has special support for + // timestamps. + case Marshaler: + v, err := m.MarshalYAML() + if err != nil { + fail(err) + } + if v == nil { + e.nilv() + return + } + in = reflect.ValueOf(v) + case encoding.TextMarshaler: + text, err := m.MarshalText() + if err != nil { + fail(err) + } + in = reflect.ValueOf(string(text)) + case nil: + e.nilv() + return + } + switch in.Kind() { + case reflect.Interface: + e.marshal(tag, in.Elem()) + case reflect.Map: + e.mapv(tag, in) + case reflect.Ptr: + if in.Type() == ptrTimeType { + e.timev(tag, in.Elem()) + } else { + e.marshal(tag, in.Elem()) + } + case reflect.Struct: + if in.Type() == timeType { + e.timev(tag, in) + } else { + e.structv(tag, in) + } + case reflect.Slice, reflect.Array: + if in.Type().Elem() == mapItemType { + e.itemsv(tag, in) + } else { + e.slicev(tag, in) + } + case reflect.String: + e.stringv(tag, in) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if in.Type() == durationType { + e.stringv(tag, reflect.ValueOf(iface.(time.Duration).String())) + } else { + e.intv(tag, in) + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + e.uintv(tag, in) + case reflect.Float32, reflect.Float64: + e.floatv(tag, in) + case reflect.Bool: + e.boolv(tag, in) + default: + panic("cannot marshal type: " + in.Type().String()) + } +} + +func (e *encoder) mapv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + keys := keyList(in.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + e.marshal("", k) + e.marshal("", in.MapIndex(k)) + } + }) +} + +func (e *encoder) itemsv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + slice := in.Convert(reflect.TypeOf([]MapItem{})).Interface().([]MapItem) + for _, item := range slice { + e.marshal("", reflect.ValueOf(item.Key)) + e.marshal("", reflect.ValueOf(item.Value)) + } + }) +} + +func (e *encoder) structv(tag string, in reflect.Value) { + sinfo, err := getStructInfo(in.Type()) + if err != nil { + panic(err) + } + e.mappingv(tag, func() { + for _, info := range sinfo.FieldsList { + var value reflect.Value + if info.Inline == nil { + value = in.Field(info.Num) + } else { + value = in.FieldByIndex(info.Inline) + } + if info.OmitEmpty && isZero(value) { + continue + } + e.marshal("", reflect.ValueOf(info.Key)) + e.flow = info.Flow + e.marshal("", value) + } + if sinfo.InlineMap >= 0 { + m := in.Field(sinfo.InlineMap) + if m.Len() > 0 { + e.flow = false + keys := keyList(m.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + if _, found := sinfo.FieldsMap[k.String()]; found { + panic(fmt.Sprintf("Can't have key %q in inlined map; conflicts with struct field", k.String())) + } + e.marshal("", k) + e.flow = false + e.marshal("", m.MapIndex(k)) + } + } + } + }) +} + +func (e *encoder) mappingv(tag string, f func()) { + implicit := tag == "" + style := yaml_BLOCK_MAPPING_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_MAPPING_STYLE + } + yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style) + e.emit() + f() + yaml_mapping_end_event_initialize(&e.event) + e.emit() +} + +func (e *encoder) slicev(tag string, in reflect.Value) { + implicit := tag == "" + style := yaml_BLOCK_SEQUENCE_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_SEQUENCE_STYLE + } + e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) + e.emit() + n := in.Len() + for i := 0; i < n; i++ { + e.marshal("", in.Index(i)) + } + e.must(yaml_sequence_end_event_initialize(&e.event)) + e.emit() +} + +// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1. +// +// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported +// in YAML 1.2 and by this package, but these should be marshalled quoted for +// the time being for compatibility with other parsers. +func isBase60Float(s string) (result bool) { + // Fast path. + if s == "" { + return false + } + c := s[0] + if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 { + return false + } + // Do the full match. + return base60float.MatchString(s) +} + +// From http://yaml.org/type/float.html, except the regular expression there +// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix. +var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`) + +func (e *encoder) stringv(tag string, in reflect.Value) { + var style yaml_scalar_style_t + s := in.String() + canUsePlain := true + switch { + case !utf8.ValidString(s): + if tag == yaml_BINARY_TAG { + failf("explicitly tagged !!binary data must be base64-encoded") + } + if tag != "" { + failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) + } + // It can't be encoded directly as YAML so use a binary tag + // and encode it as base64. + tag = yaml_BINARY_TAG + s = encodeBase64(s) + case tag == "": + // Check to see if it would resolve to a specific + // tag when encoded unquoted. If it doesn't, + // there's no need to quote it. + rtag, _ := resolve("", s) + canUsePlain = rtag == yaml_STR_TAG && !isBase60Float(s) + } + // Note: it's possible for user code to emit invalid YAML + // if they explicitly specify a tag and a string containing + // text that's incompatible with that tag. + switch { + case strings.Contains(s, "\n"): + style = yaml_LITERAL_SCALAR_STYLE + case canUsePlain: + style = yaml_PLAIN_SCALAR_STYLE + default: + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + e.emitScalar(s, "", tag, style) +} + +func (e *encoder) boolv(tag string, in reflect.Value) { + var s string + if in.Bool() { + s = "true" + } else { + s = "false" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) intv(tag string, in reflect.Value) { + s := strconv.FormatInt(in.Int(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) uintv(tag string, in reflect.Value) { + s := strconv.FormatUint(in.Uint(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) timev(tag string, in reflect.Value) { + t := in.Interface().(time.Time) + s := t.Format(time.RFC3339Nano) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) floatv(tag string, in reflect.Value) { + // Issue #352: When formatting, use the precision of the underlying value + precision := 64 + if in.Kind() == reflect.Float32 { + precision = 32 + } + + s := strconv.FormatFloat(in.Float(), 'g', -1, precision) + switch s { + case "+Inf": + s = ".inf" + case "-Inf": + s = "-.inf" + case "NaN": + s = ".nan" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) nilv() { + e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) { + implicit := tag == "" + e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style)) + e.emit() +} diff --git a/vendor/gopkg.in/yaml.v2/go.mod b/vendor/gopkg.in/yaml.v2/go.mod new file mode 100644 index 00000000..1934e876 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/go.mod @@ -0,0 +1,5 @@ +module "gopkg.in/yaml.v2" + +require ( + "gopkg.in/check.v1" v0.0.0-20161208181325-20d25e280405 +) diff --git a/vendor/gopkg.in/yaml.v2/parserc.go b/vendor/gopkg.in/yaml.v2/parserc.go new file mode 100644 index 00000000..81d05dfe --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/parserc.go @@ -0,0 +1,1095 @@ +package yaml + +import ( + "bytes" +) + +// The parser implements the following grammar: +// +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// implicit_document ::= block_node DOCUMENT-END* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// block_node_or_indentless_sequence ::= +// ALIAS +// | properties (block_content | indentless_block_sequence)? +// | block_content +// | indentless_block_sequence +// block_node ::= ALIAS +// | properties block_content? +// | block_content +// flow_node ::= ALIAS +// | properties flow_content? +// | flow_content +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// block_content ::= block_collection | flow_collection | SCALAR +// flow_content ::= flow_collection | SCALAR +// block_collection ::= block_sequence | block_mapping +// flow_collection ::= flow_sequence | flow_mapping +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// block_mapping ::= BLOCK-MAPPING_START +// ((KEY block_node_or_indentless_sequence?)? +// (VALUE block_node_or_indentless_sequence?)?)* +// BLOCK-END +// flow_sequence ::= FLOW-SEQUENCE-START +// (flow_sequence_entry FLOW-ENTRY)* +// flow_sequence_entry? +// FLOW-SEQUENCE-END +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// flow_mapping ::= FLOW-MAPPING-START +// (flow_mapping_entry FLOW-ENTRY)* +// flow_mapping_entry? +// FLOW-MAPPING-END +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? + +// Peek the next token in the token queue. +func peek_token(parser *yaml_parser_t) *yaml_token_t { + if parser.token_available || yaml_parser_fetch_more_tokens(parser) { + return &parser.tokens[parser.tokens_head] + } + return nil +} + +// Remove the next token from the queue (must be called after peek_token). +func skip_token(parser *yaml_parser_t) { + parser.token_available = false + parser.tokens_parsed++ + parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN + parser.tokens_head++ +} + +// Get the next event. +func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool { + // Erase the event object. + *event = yaml_event_t{} + + // No events after the end of the stream or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE { + return true + } + + // Generate the next event. + return yaml_parser_state_machine(parser, event) +} + +// Set parser error. +func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +// State dispatcher. +func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool { + //trace("yaml_parser_state_machine", "state:", parser.state.String()) + + switch parser.state { + case yaml_PARSE_STREAM_START_STATE: + return yaml_parser_parse_stream_start(parser, event) + + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, true) + + case yaml_PARSE_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, false) + + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return yaml_parser_parse_document_content(parser, event) + + case yaml_PARSE_DOCUMENT_END_STATE: + return yaml_parser_parse_document_end(parser, event) + + case yaml_PARSE_BLOCK_NODE_STATE: + return yaml_parser_parse_node(parser, event, true, false) + + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return yaml_parser_parse_node(parser, event, true, true) + + case yaml_PARSE_FLOW_NODE_STATE: + return yaml_parser_parse_node(parser, event, false, false) + + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, true) + + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, false) + + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_indentless_sequence_entry(parser, event) + + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, true) + + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, false) + + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return yaml_parser_parse_block_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, true) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, false) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event) + + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, true) + + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, true) + + default: + panic("invalid parser state") + } +} + +// Parse the production: +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// ************ +func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_STREAM_START_TOKEN { + return yaml_parser_set_parser_error(parser, "did not find expected ", token.start_mark) + } + parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + encoding: token.encoding, + } + skip_token(parser) + return true +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// * +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// ************************* +func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool { + + token := peek_token(parser) + if token == nil { + return false + } + + // Parse extra document end indicators. + if !implicit { + for token.typ == yaml_DOCUMENT_END_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN && + token.typ != yaml_TAG_DIRECTIVE_TOKEN && + token.typ != yaml_DOCUMENT_START_TOKEN && + token.typ != yaml_STREAM_END_TOKEN { + // Parse an implicit document. + if !yaml_parser_process_directives(parser, nil, nil) { + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_BLOCK_NODE_STATE + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + } else if token.typ != yaml_STREAM_END_TOKEN { + // Parse an explicit document. + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + start_mark := token.start_mark + if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) { + return false + } + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_DOCUMENT_START_TOKEN { + yaml_parser_set_parser_error(parser, + "did not find expected ", token.start_mark) + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE + end_mark := token.end_mark + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: false, + } + skip_token(parser) + + } else { + // Parse the stream end. + parser.state = yaml_PARSE_END_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + } + + return true +} + +// Parse the productions: +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// *********** +// +func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN || + token.typ == yaml_TAG_DIRECTIVE_TOKEN || + token.typ == yaml_DOCUMENT_START_TOKEN || + token.typ == yaml_DOCUMENT_END_TOKEN || + token.typ == yaml_STREAM_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + return yaml_parser_process_empty_scalar(parser, event, + token.start_mark) + } + return yaml_parser_parse_node(parser, event, true, false) +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// ************* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// +func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + start_mark := token.start_mark + end_mark := token.start_mark + + implicit := true + if token.typ == yaml_DOCUMENT_END_TOKEN { + end_mark = token.end_mark + skip_token(parser) + implicit = false + } + + parser.tag_directives = parser.tag_directives[:0] + + parser.state = yaml_PARSE_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + start_mark: start_mark, + end_mark: end_mark, + implicit: implicit, + } + return true +} + +// Parse the productions: +// block_node_or_indentless_sequence ::= +// ALIAS +// ***** +// | properties (block_content | indentless_block_sequence)? +// ********** * +// | block_content | indentless_block_sequence +// * +// block_node ::= ALIAS +// ***** +// | properties block_content? +// ********** * +// | block_content +// * +// flow_node ::= ALIAS +// ***** +// | properties flow_content? +// ********** * +// | flow_content +// * +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// ************************* +// block_content ::= block_collection | flow_collection | SCALAR +// ****** +// flow_content ::= flow_collection | SCALAR +// ****** +func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool { + //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)() + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_ALIAS_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + *event = yaml_event_t{ + typ: yaml_ALIAS_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + anchor: token.value, + } + skip_token(parser) + return true + } + + start_mark := token.start_mark + end_mark := token.start_mark + + var tag_token bool + var tag_handle, tag_suffix, anchor []byte + var tag_mark yaml_mark_t + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + start_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } else if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + start_mark = token.start_mark + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + var tag []byte + if tag_token { + if len(tag_handle) == 0 { + tag = tag_suffix + tag_suffix = nil + } else { + for i := range parser.tag_directives { + if bytes.Equal(parser.tag_directives[i].handle, tag_handle) { + tag = append([]byte(nil), parser.tag_directives[i].prefix...) + tag = append(tag, tag_suffix...) + break + } + } + if len(tag) == 0 { + yaml_parser_set_parser_error_context(parser, + "while parsing a node", start_mark, + "found undefined tag handle", tag_mark) + return false + } + } + } + + implicit := len(tag) == 0 + if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_SCALAR_TOKEN { + var plain_implicit, quoted_implicit bool + end_mark = token.end_mark + if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') { + plain_implicit = true + } else if len(tag) == 0 { + quoted_implicit = true + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + value: token.value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(token.style), + } + skip_token(parser) + return true + } + if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN { + // [Go] Some of the events below can be merged as they differ only on style. + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_FLOW_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), + } + return true + } + if len(anchor) > 0 || len(tag) > 0 { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + quoted_implicit: false, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true + } + + context := "while parsing a flow node" + if block { + context = "while parsing a block node" + } + yaml_parser_set_parser_error_context(parser, context, start_mark, + "did not find expected node content", token.start_mark) + return false +} + +// Parse the productions: +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// ******************** *********** * ********* +// +func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } else { + parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } + if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block collection", context_mark, + "did not find expected '-' indicator", token.start_mark) +} + +// Parse the productions: +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// *********** * +func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && + token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark? + } + return true +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// ******************* +// ((KEY block_node_or_indentless_sequence?)? +// *** * +// (VALUE block_node_or_indentless_sequence?)?)* +// +// BLOCK-END +// ********* +// +func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_KEY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } else { + parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } else if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block mapping", context_mark, + "did not find expected key", token.start_mark) +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// +// ((KEY block_node_or_indentless_sequence?)? +// +// (VALUE block_node_or_indentless_sequence?)?)* +// ***** * +// BLOCK-END +// +// +func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence ::= FLOW-SEQUENCE-START +// ******************* +// (flow_sequence_entry FLOW-ENTRY)* +// * ********** +// flow_sequence_entry? +// * +// FLOW-SEQUENCE-END +// ***************** +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow sequence", context_mark, + "did not find expected ',' or ']'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + implicit: true, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + skip_token(parser) + return true + } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true +} + +// +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// *** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + mark := token.end_mark + skip_token(parser) + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// ***** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be end_mark? + } + return true +} + +// Parse the productions: +// flow_mapping ::= FLOW-MAPPING-START +// ****************** +// (flow_mapping_entry FLOW-ENTRY)* +// * ********** +// flow_mapping_entry? +// ****************** +// FLOW-MAPPING-END +// **************** +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * *** * +// +func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow mapping", context_mark, + "did not find expected ',' or '}'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } else { + parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true +} + +// Parse the productions: +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * ***** * +// +func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool { + token := peek_token(parser) + if token == nil { + return false + } + if empty { + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Generate an empty scalar event. +func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: mark, + end_mark: mark, + value: nil, // Empty + implicit: true, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true +} + +var default_tag_directives = []yaml_tag_directive_t{ + {[]byte("!"), []byte("!")}, + {[]byte("!!"), []byte("tag:yaml.org,2002:")}, +} + +// Parse directives. +func yaml_parser_process_directives(parser *yaml_parser_t, + version_directive_ref **yaml_version_directive_t, + tag_directives_ref *[]yaml_tag_directive_t) bool { + + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + + token := peek_token(parser) + if token == nil { + return false + } + + for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN { + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN { + if version_directive != nil { + yaml_parser_set_parser_error(parser, + "found duplicate %YAML directive", token.start_mark) + return false + } + if token.major != 1 || token.minor != 1 { + yaml_parser_set_parser_error(parser, + "found incompatible YAML document", token.start_mark) + return false + } + version_directive = &yaml_version_directive_t{ + major: token.major, + minor: token.minor, + } + } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN { + value := yaml_tag_directive_t{ + handle: token.value, + prefix: token.prefix, + } + if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) { + return false + } + tag_directives = append(tag_directives, value) + } + + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + + for i := range default_tag_directives { + if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) { + return false + } + } + + if version_directive_ref != nil { + *version_directive_ref = version_directive + } + if tag_directives_ref != nil { + *tag_directives_ref = tag_directives + } + return true +} + +// Append a tag directive to the directives stack. +func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool { + for i := range parser.tag_directives { + if bytes.Equal(value.handle, parser.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark) + } + } + + // [Go] I suspect the copy is unnecessary. This was likely done + // because there was no way to track ownership of the data. + value_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(value_copy.handle, value.handle) + copy(value_copy.prefix, value.prefix) + parser.tag_directives = append(parser.tag_directives, value_copy) + return true +} diff --git a/vendor/gopkg.in/yaml.v2/readerc.go b/vendor/gopkg.in/yaml.v2/readerc.go new file mode 100644 index 00000000..7c1f5fac --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/readerc.go @@ -0,0 +1,412 @@ +package yaml + +import ( + "io" +) + +// Set the reader error and return 0. +func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool { + parser.error = yaml_READER_ERROR + parser.problem = problem + parser.problem_offset = offset + parser.problem_value = value + return false +} + +// Byte order marks. +const ( + bom_UTF8 = "\xef\xbb\xbf" + bom_UTF16LE = "\xff\xfe" + bom_UTF16BE = "\xfe\xff" +) + +// Determine the input stream encoding by checking the BOM symbol. If no BOM is +// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure. +func yaml_parser_determine_encoding(parser *yaml_parser_t) bool { + // Ensure that we had enough bytes in the raw buffer. + for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 { + if !yaml_parser_update_raw_buffer(parser) { + return false + } + } + + // Determine the encoding. + buf := parser.raw_buffer + pos := parser.raw_buffer_pos + avail := len(buf) - pos + if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] { + parser.encoding = yaml_UTF16LE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] { + parser.encoding = yaml_UTF16BE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] { + parser.encoding = yaml_UTF8_ENCODING + parser.raw_buffer_pos += 3 + parser.offset += 3 + } else { + parser.encoding = yaml_UTF8_ENCODING + } + return true +} + +// Update the raw buffer. +func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool { + size_read := 0 + + // Return if the raw buffer is full. + if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) { + return true + } + + // Return on EOF. + if parser.eof { + return true + } + + // Move the remaining bytes in the raw buffer to the beginning. + if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) { + copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:]) + } + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos] + parser.raw_buffer_pos = 0 + + // Call the read handler to fill the buffer. + size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)]) + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read] + if err == io.EOF { + parser.eof = true + } else if err != nil { + return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1) + } + return true +} + +// Ensure that the buffer contains at least `length` characters. +// Return true on success, false on failure. +// +// The length is supposed to be significantly less that the buffer size. +func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { + if parser.read_handler == nil { + panic("read handler must be set") + } + + // [Go] This function was changed to guarantee the requested length size at EOF. + // The fact we need to do this is pretty awful, but the description above implies + // for that to be the case, and there are tests + + // If the EOF flag is set and the raw buffer is empty, do nothing. + if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { + // [Go] ACTUALLY! Read the documentation of this function above. + // This is just broken. To return true, we need to have the + // given length in the buffer. Not doing that means every single + // check that calls this function to make sure the buffer has a + // given length is Go) panicking; or C) accessing invalid memory. + //return true + } + + // Return if the buffer contains enough characters. + if parser.unread >= length { + return true + } + + // Determine the input encoding if it is not known yet. + if parser.encoding == yaml_ANY_ENCODING { + if !yaml_parser_determine_encoding(parser) { + return false + } + } + + // Move the unread characters to the beginning of the buffer. + buffer_len := len(parser.buffer) + if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len { + copy(parser.buffer, parser.buffer[parser.buffer_pos:]) + buffer_len -= parser.buffer_pos + parser.buffer_pos = 0 + } else if parser.buffer_pos == buffer_len { + buffer_len = 0 + parser.buffer_pos = 0 + } + + // Open the whole buffer for writing, and cut it before returning. + parser.buffer = parser.buffer[:cap(parser.buffer)] + + // Fill the buffer until it has enough characters. + first := true + for parser.unread < length { + + // Fill the raw buffer if necessary. + if !first || parser.raw_buffer_pos == len(parser.raw_buffer) { + if !yaml_parser_update_raw_buffer(parser) { + parser.buffer = parser.buffer[:buffer_len] + return false + } + } + first = false + + // Decode the raw buffer. + inner: + for parser.raw_buffer_pos != len(parser.raw_buffer) { + var value rune + var width int + + raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos + + // Decode the next character. + switch parser.encoding { + case yaml_UTF8_ENCODING: + // Decode a UTF-8 character. Check RFC 3629 + // (http://www.ietf.org/rfc/rfc3629.txt) for more details. + // + // The following table (taken from the RFC) is used for + // decoding. + // + // Char. number range | UTF-8 octet sequence + // (hexadecimal) | (binary) + // --------------------+------------------------------------ + // 0000 0000-0000 007F | 0xxxxxxx + // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx + // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx + // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + // + // Additionally, the characters in the range 0xD800-0xDFFF + // are prohibited as they are reserved for use with UTF-16 + // surrogate pairs. + + // Determine the length of the UTF-8 sequence. + octet := parser.raw_buffer[parser.raw_buffer_pos] + switch { + case octet&0x80 == 0x00: + width = 1 + case octet&0xE0 == 0xC0: + width = 2 + case octet&0xF0 == 0xE0: + width = 3 + case octet&0xF8 == 0xF0: + width = 4 + default: + // The leading octet is invalid. + return yaml_parser_set_reader_error(parser, + "invalid leading UTF-8 octet", + parser.offset, int(octet)) + } + + // Check if the raw buffer contains an incomplete character. + if width > raw_unread { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-8 octet sequence", + parser.offset, -1) + } + break inner + } + + // Decode the leading octet. + switch { + case octet&0x80 == 0x00: + value = rune(octet & 0x7F) + case octet&0xE0 == 0xC0: + value = rune(octet & 0x1F) + case octet&0xF0 == 0xE0: + value = rune(octet & 0x0F) + case octet&0xF8 == 0xF0: + value = rune(octet & 0x07) + default: + value = 0 + } + + // Check and decode the trailing octets. + for k := 1; k < width; k++ { + octet = parser.raw_buffer[parser.raw_buffer_pos+k] + + // Check if the octet is valid. + if (octet & 0xC0) != 0x80 { + return yaml_parser_set_reader_error(parser, + "invalid trailing UTF-8 octet", + parser.offset+k, int(octet)) + } + + // Decode the octet. + value = (value << 6) + rune(octet&0x3F) + } + + // Check the length of the sequence against the value. + switch { + case width == 1: + case width == 2 && value >= 0x80: + case width == 3 && value >= 0x800: + case width == 4 && value >= 0x10000: + default: + return yaml_parser_set_reader_error(parser, + "invalid length of a UTF-8 sequence", + parser.offset, -1) + } + + // Check the range of the value. + if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF { + return yaml_parser_set_reader_error(parser, + "invalid Unicode character", + parser.offset, int(value)) + } + + case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING: + var low, high int + if parser.encoding == yaml_UTF16LE_ENCODING { + low, high = 0, 1 + } else { + low, high = 1, 0 + } + + // The UTF-16 encoding is not as simple as one might + // naively think. Check RFC 2781 + // (http://www.ietf.org/rfc/rfc2781.txt). + // + // Normally, two subsequent bytes describe a Unicode + // character. However a special technique (called a + // surrogate pair) is used for specifying character + // values larger than 0xFFFF. + // + // A surrogate pair consists of two pseudo-characters: + // high surrogate area (0xD800-0xDBFF) + // low surrogate area (0xDC00-0xDFFF) + // + // The following formulas are used for decoding + // and encoding characters using surrogate pairs: + // + // U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF) + // U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF) + // W1 = 110110yyyyyyyyyy + // W2 = 110111xxxxxxxxxx + // + // where U is the character value, W1 is the high surrogate + // area, W2 is the low surrogate area. + + // Check for incomplete UTF-16 character. + if raw_unread < 2 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 character", + parser.offset, -1) + } + break inner + } + + // Get the character. + value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8) + + // Check for unexpected low surrogate area. + if value&0xFC00 == 0xDC00 { + return yaml_parser_set_reader_error(parser, + "unexpected low surrogate area", + parser.offset, int(value)) + } + + // Check for a high surrogate area. + if value&0xFC00 == 0xD800 { + width = 4 + + // Check for incomplete surrogate pair. + if raw_unread < 4 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 surrogate pair", + parser.offset, -1) + } + break inner + } + + // Get the next character. + value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8) + + // Check for a low surrogate area. + if value2&0xFC00 != 0xDC00 { + return yaml_parser_set_reader_error(parser, + "expected low surrogate area", + parser.offset+2, int(value2)) + } + + // Generate the value of the surrogate pair. + value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF) + } else { + width = 2 + } + + default: + panic("impossible") + } + + // Check if the character is in the allowed range: + // #x9 | #xA | #xD | [#x20-#x7E] (8 bit) + // | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit) + // | [#x10000-#x10FFFF] (32 bit) + switch { + case value == 0x09: + case value == 0x0A: + case value == 0x0D: + case value >= 0x20 && value <= 0x7E: + case value == 0x85: + case value >= 0xA0 && value <= 0xD7FF: + case value >= 0xE000 && value <= 0xFFFD: + case value >= 0x10000 && value <= 0x10FFFF: + default: + return yaml_parser_set_reader_error(parser, + "control characters are not allowed", + parser.offset, int(value)) + } + + // Move the raw pointers. + parser.raw_buffer_pos += width + parser.offset += width + + // Finally put the character into the buffer. + if value <= 0x7F { + // 0000 0000-0000 007F . 0xxxxxxx + parser.buffer[buffer_len+0] = byte(value) + buffer_len += 1 + } else if value <= 0x7FF { + // 0000 0080-0000 07FF . 110xxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6)) + parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F)) + buffer_len += 2 + } else if value <= 0xFFFF { + // 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F)) + buffer_len += 3 + } else { + // 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F)) + buffer_len += 4 + } + + parser.unread++ + } + + // On EOF, put NUL into the buffer and return. + if parser.eof { + parser.buffer[buffer_len] = 0 + buffer_len++ + parser.unread++ + break + } + } + // [Go] Read the documentation of this function above. To return true, + // we need to have the given length in the buffer. Not doing that means + // every single check that calls this function to make sure the buffer + // has a given length is Go) panicking; or C) accessing invalid memory. + // This happens here due to the EOF above breaking early. + for buffer_len < length { + parser.buffer[buffer_len] = 0 + buffer_len++ + } + parser.buffer = parser.buffer[:buffer_len] + return true +} diff --git a/vendor/gopkg.in/yaml.v2/resolve.go b/vendor/gopkg.in/yaml.v2/resolve.go new file mode 100644 index 00000000..6c151db6 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/resolve.go @@ -0,0 +1,258 @@ +package yaml + +import ( + "encoding/base64" + "math" + "regexp" + "strconv" + "strings" + "time" +) + +type resolveMapItem struct { + value interface{} + tag string +} + +var resolveTable = make([]byte, 256) +var resolveMap = make(map[string]resolveMapItem) + +func init() { + t := resolveTable + t[int('+')] = 'S' // Sign + t[int('-')] = 'S' + for _, c := range "0123456789" { + t[int(c)] = 'D' // Digit + } + for _, c := range "yYnNtTfFoO~" { + t[int(c)] = 'M' // In map + } + t[int('.')] = '.' // Float (potentially in map) + + var resolveMapList = []struct { + v interface{} + tag string + l []string + }{ + {true, yaml_BOOL_TAG, []string{"y", "Y", "yes", "Yes", "YES"}}, + {true, yaml_BOOL_TAG, []string{"true", "True", "TRUE"}}, + {true, yaml_BOOL_TAG, []string{"on", "On", "ON"}}, + {false, yaml_BOOL_TAG, []string{"n", "N", "no", "No", "NO"}}, + {false, yaml_BOOL_TAG, []string{"false", "False", "FALSE"}}, + {false, yaml_BOOL_TAG, []string{"off", "Off", "OFF"}}, + {nil, yaml_NULL_TAG, []string{"", "~", "null", "Null", "NULL"}}, + {math.NaN(), yaml_FLOAT_TAG, []string{".nan", ".NaN", ".NAN"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{".inf", ".Inf", ".INF"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{"+.inf", "+.Inf", "+.INF"}}, + {math.Inf(-1), yaml_FLOAT_TAG, []string{"-.inf", "-.Inf", "-.INF"}}, + {"<<", yaml_MERGE_TAG, []string{"<<"}}, + } + + m := resolveMap + for _, item := range resolveMapList { + for _, s := range item.l { + m[s] = resolveMapItem{item.v, item.tag} + } + } +} + +const longTagPrefix = "tag:yaml.org,2002:" + +func shortTag(tag string) string { + // TODO This can easily be made faster and produce less garbage. + if strings.HasPrefix(tag, longTagPrefix) { + return "!!" + tag[len(longTagPrefix):] + } + return tag +} + +func longTag(tag string) string { + if strings.HasPrefix(tag, "!!") { + return longTagPrefix + tag[2:] + } + return tag +} + +func resolvableTag(tag string) bool { + switch tag { + case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG, yaml_TIMESTAMP_TAG: + return true + } + return false +} + +var yamlStyleFloat = regexp.MustCompile(`^[-+]?[0-9]*\.?[0-9]+([eE][-+][0-9]+)?$`) + +func resolve(tag string, in string) (rtag string, out interface{}) { + if !resolvableTag(tag) { + return tag, in + } + + defer func() { + switch tag { + case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG: + return + case yaml_FLOAT_TAG: + if rtag == yaml_INT_TAG { + switch v := out.(type) { + case int64: + rtag = yaml_FLOAT_TAG + out = float64(v) + return + case int: + rtag = yaml_FLOAT_TAG + out = float64(v) + return + } + } + } + failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)) + }() + + // Any data is accepted as a !!str or !!binary. + // Otherwise, the prefix is enough of a hint about what it might be. + hint := byte('N') + if in != "" { + hint = resolveTable[in[0]] + } + if hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG { + // Handle things we can lookup in a map. + if item, ok := resolveMap[in]; ok { + return item.tag, item.value + } + + // Base 60 floats are a bad idea, were dropped in YAML 1.2, and + // are purposefully unsupported here. They're still quoted on + // the way out for compatibility with other parser, though. + + switch hint { + case 'M': + // We've already checked the map above. + + case '.': + // Not in the map, so maybe a normal float. + floatv, err := strconv.ParseFloat(in, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + + case 'D', 'S': + // Int, float, or timestamp. + // Only try values as a timestamp if the value is unquoted or there's an explicit + // !!timestamp tag. + if tag == "" || tag == yaml_TIMESTAMP_TAG { + t, ok := parseTimestamp(in) + if ok { + return yaml_TIMESTAMP_TAG, t + } + } + + plain := strings.Replace(in, "_", "", -1) + intv, err := strconv.ParseInt(plain, 0, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain, 0, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + if yamlStyleFloat.MatchString(plain) { + floatv, err := strconv.ParseFloat(plain, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + } + if strings.HasPrefix(plain, "0b") { + intv, err := strconv.ParseInt(plain[2:], 2, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain[2:], 2, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + } else if strings.HasPrefix(plain, "-0b") { + intv, err := strconv.ParseInt("-" + plain[3:], 2, 64) + if err == nil { + if true || intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + } + default: + panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")") + } + } + return yaml_STR_TAG, in +} + +// encodeBase64 encodes s as base64 that is broken up into multiple lines +// as appropriate for the resulting length. +func encodeBase64(s string) string { + const lineLen = 70 + encLen := base64.StdEncoding.EncodedLen(len(s)) + lines := encLen/lineLen + 1 + buf := make([]byte, encLen*2+lines) + in := buf[0:encLen] + out := buf[encLen:] + base64.StdEncoding.Encode(in, []byte(s)) + k := 0 + for i := 0; i < len(in); i += lineLen { + j := i + lineLen + if j > len(in) { + j = len(in) + } + k += copy(out[k:], in[i:j]) + if lines > 1 { + out[k] = '\n' + k++ + } + } + return string(out[:k]) +} + +// This is a subset of the formats allowed by the regular expression +// defined at http://yaml.org/type/timestamp.html. +var allowedTimestampFormats = []string{ + "2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields. + "2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t". + "2006-1-2 15:4:5.999999999", // space separated with no time zone + "2006-1-2", // date only + // Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5" + // from the set of examples. +} + +// parseTimestamp parses s as a timestamp string and +// returns the timestamp and reports whether it succeeded. +// Timestamp formats are defined at http://yaml.org/type/timestamp.html +func parseTimestamp(s string) (time.Time, bool) { + // TODO write code to check all the formats supported by + // http://yaml.org/type/timestamp.html instead of using time.Parse. + + // Quick check: all date formats start with YYYY-. + i := 0 + for ; i < len(s); i++ { + if c := s[i]; c < '0' || c > '9' { + break + } + } + if i != 4 || i == len(s) || s[i] != '-' { + return time.Time{}, false + } + for _, format := range allowedTimestampFormats { + if t, err := time.Parse(format, s); err == nil { + return t, true + } + } + return time.Time{}, false +} diff --git a/vendor/gopkg.in/yaml.v2/scannerc.go b/vendor/gopkg.in/yaml.v2/scannerc.go new file mode 100644 index 00000000..077fd1dd --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/scannerc.go @@ -0,0 +1,2696 @@ +package yaml + +import ( + "bytes" + "fmt" +) + +// Introduction +// ************ +// +// The following notes assume that you are familiar with the YAML specification +// (http://yaml.org/spec/1.2/spec.html). We mostly follow it, although in +// some cases we are less restrictive that it requires. +// +// The process of transforming a YAML stream into a sequence of events is +// divided on two steps: Scanning and Parsing. +// +// The Scanner transforms the input stream into a sequence of tokens, while the +// parser transform the sequence of tokens produced by the Scanner into a +// sequence of parsing events. +// +// The Scanner is rather clever and complicated. The Parser, on the contrary, +// is a straightforward implementation of a recursive-descendant parser (or, +// LL(1) parser, as it is usually called). +// +// Actually there are two issues of Scanning that might be called "clever", the +// rest is quite straightforward. The issues are "block collection start" and +// "simple keys". Both issues are explained below in details. +// +// Here the Scanning step is explained and implemented. We start with the list +// of all the tokens produced by the Scanner together with short descriptions. +// +// Now, tokens: +// +// STREAM-START(encoding) # The stream start. +// STREAM-END # The stream end. +// VERSION-DIRECTIVE(major,minor) # The '%YAML' directive. +// TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive. +// DOCUMENT-START # '---' +// DOCUMENT-END # '...' +// BLOCK-SEQUENCE-START # Indentation increase denoting a block +// BLOCK-MAPPING-START # sequence or a block mapping. +// BLOCK-END # Indentation decrease. +// FLOW-SEQUENCE-START # '[' +// FLOW-SEQUENCE-END # ']' +// BLOCK-SEQUENCE-START # '{' +// BLOCK-SEQUENCE-END # '}' +// BLOCK-ENTRY # '-' +// FLOW-ENTRY # ',' +// KEY # '?' or nothing (simple keys). +// VALUE # ':' +// ALIAS(anchor) # '*anchor' +// ANCHOR(anchor) # '&anchor' +// TAG(handle,suffix) # '!handle!suffix' +// SCALAR(value,style) # A scalar. +// +// The following two tokens are "virtual" tokens denoting the beginning and the +// end of the stream: +// +// STREAM-START(encoding) +// STREAM-END +// +// We pass the information about the input stream encoding with the +// STREAM-START token. +// +// The next two tokens are responsible for tags: +// +// VERSION-DIRECTIVE(major,minor) +// TAG-DIRECTIVE(handle,prefix) +// +// Example: +// +// %YAML 1.1 +// %TAG ! !foo +// %TAG !yaml! tag:yaml.org,2002: +// --- +// +// The correspoding sequence of tokens: +// +// STREAM-START(utf-8) +// VERSION-DIRECTIVE(1,1) +// TAG-DIRECTIVE("!","!foo") +// TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:") +// DOCUMENT-START +// STREAM-END +// +// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole +// line. +// +// The document start and end indicators are represented by: +// +// DOCUMENT-START +// DOCUMENT-END +// +// Note that if a YAML stream contains an implicit document (without '---' +// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be +// produced. +// +// In the following examples, we present whole documents together with the +// produced tokens. +// +// 1. An implicit document: +// +// 'a scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// STREAM-END +// +// 2. An explicit document: +// +// --- +// 'a scalar' +// ... +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// SCALAR("a scalar",single-quoted) +// DOCUMENT-END +// STREAM-END +// +// 3. Several documents in a stream: +// +// 'a scalar' +// --- +// 'another scalar' +// --- +// 'yet another scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// DOCUMENT-START +// SCALAR("another scalar",single-quoted) +// DOCUMENT-START +// SCALAR("yet another scalar",single-quoted) +// STREAM-END +// +// We have already introduced the SCALAR token above. The following tokens are +// used to describe aliases, anchors, tag, and scalars: +// +// ALIAS(anchor) +// ANCHOR(anchor) +// TAG(handle,suffix) +// SCALAR(value,style) +// +// The following series of examples illustrate the usage of these tokens: +// +// 1. A recursive sequence: +// +// &A [ *A ] +// +// Tokens: +// +// STREAM-START(utf-8) +// ANCHOR("A") +// FLOW-SEQUENCE-START +// ALIAS("A") +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A tagged scalar: +// +// !!float "3.14" # A good approximation. +// +// Tokens: +// +// STREAM-START(utf-8) +// TAG("!!","float") +// SCALAR("3.14",double-quoted) +// STREAM-END +// +// 3. Various scalar styles: +// +// --- # Implicit empty plain scalars do not produce tokens. +// --- a plain scalar +// --- 'a single-quoted scalar' +// --- "a double-quoted scalar" +// --- |- +// a literal scalar +// --- >- +// a folded +// scalar +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// DOCUMENT-START +// SCALAR("a plain scalar",plain) +// DOCUMENT-START +// SCALAR("a single-quoted scalar",single-quoted) +// DOCUMENT-START +// SCALAR("a double-quoted scalar",double-quoted) +// DOCUMENT-START +// SCALAR("a literal scalar",literal) +// DOCUMENT-START +// SCALAR("a folded scalar",folded) +// STREAM-END +// +// Now it's time to review collection-related tokens. We will start with +// flow collections: +// +// FLOW-SEQUENCE-START +// FLOW-SEQUENCE-END +// FLOW-MAPPING-START +// FLOW-MAPPING-END +// FLOW-ENTRY +// KEY +// VALUE +// +// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and +// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}' +// correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the +// indicators '?' and ':', which are used for denoting mapping keys and values, +// are represented by the KEY and VALUE tokens. +// +// The following examples show flow collections: +// +// 1. A flow sequence: +// +// [item 1, item 2, item 3] +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-SEQUENCE-START +// SCALAR("item 1",plain) +// FLOW-ENTRY +// SCALAR("item 2",plain) +// FLOW-ENTRY +// SCALAR("item 3",plain) +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A flow mapping: +// +// { +// a simple key: a value, # Note that the KEY token is produced. +// ? a complex key: another value, +// } +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// FLOW-ENTRY +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// FLOW-ENTRY +// FLOW-MAPPING-END +// STREAM-END +// +// A simple key is a key which is not denoted by the '?' indicator. Note that +// the Scanner still produce the KEY token whenever it encounters a simple key. +// +// For scanning block collections, the following tokens are used (note that we +// repeat KEY and VALUE here): +// +// BLOCK-SEQUENCE-START +// BLOCK-MAPPING-START +// BLOCK-END +// BLOCK-ENTRY +// KEY +// VALUE +// +// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation +// increase that precedes a block collection (cf. the INDENT token in Python). +// The token BLOCK-END denote indentation decrease that ends a block collection +// (cf. the DEDENT token in Python). However YAML has some syntax pecularities +// that makes detections of these tokens more complex. +// +// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators +// '-', '?', and ':' correspondingly. +// +// The following examples show how the tokens BLOCK-SEQUENCE-START, +// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner: +// +// 1. Block sequences: +// +// - item 1 +// - item 2 +// - +// - item 3.1 +// - item 3.2 +// - +// key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 3.1",plain) +// BLOCK-ENTRY +// SCALAR("item 3.2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Block mappings: +// +// a simple key: a value # The KEY token is produced here. +// ? a complex key +// : another value +// a mapping: +// key 1: value 1 +// key 2: value 2 +// a sequence: +// - item 1 +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// KEY +// SCALAR("a mapping",plain) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML does not always require to start a new block collection from a new +// line. If the current line contains only '-', '?', and ':' indicators, a new +// block collection may start at the current line. The following examples +// illustrate this case: +// +// 1. Collections in a sequence: +// +// - - item 1 +// - item 2 +// - key 1: value 1 +// key 2: value 2 +// - ? complex key +// : complex value +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("complex key") +// VALUE +// SCALAR("complex value") +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Collections in a mapping: +// +// ? a sequence +// : - item 1 +// - item 2 +// ? a mapping +// : key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// KEY +// SCALAR("a mapping",plain) +// VALUE +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML also permits non-indented sequences if they are included into a block +// mapping. In this case, the token BLOCK-SEQUENCE-START is not produced: +// +// key: +// - item 1 # BLOCK-SEQUENCE-START is NOT produced here. +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key",plain) +// VALUE +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// + +// Ensure that the buffer contains the required number of characters. +// Return true on success, false on failure (reader error or memory error). +func cache(parser *yaml_parser_t, length int) bool { + // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B) + return parser.unread >= length || yaml_parser_update_buffer(parser, length) +} + +// Advance the buffer pointer. +func skip(parser *yaml_parser_t) { + parser.mark.index++ + parser.mark.column++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) +} + +func skip_line(parser *yaml_parser_t) { + if is_crlf(parser.buffer, parser.buffer_pos) { + parser.mark.index += 2 + parser.mark.column = 0 + parser.mark.line++ + parser.unread -= 2 + parser.buffer_pos += 2 + } else if is_break(parser.buffer, parser.buffer_pos) { + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) + } +} + +// Copy a character to a string buffer and advance pointers. +func read(parser *yaml_parser_t, s []byte) []byte { + w := width(parser.buffer[parser.buffer_pos]) + if w == 0 { + panic("invalid character sequence") + } + if len(s) == 0 { + s = make([]byte, 0, 32) + } + if w == 1 && len(s)+w <= cap(s) { + s = s[:len(s)+1] + s[len(s)-1] = parser.buffer[parser.buffer_pos] + parser.buffer_pos++ + } else { + s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...) + parser.buffer_pos += w + } + parser.mark.index++ + parser.mark.column++ + parser.unread-- + return s +} + +// Copy a line break character to a string buffer and advance pointers. +func read_line(parser *yaml_parser_t, s []byte) []byte { + buf := parser.buffer + pos := parser.buffer_pos + switch { + case buf[pos] == '\r' && buf[pos+1] == '\n': + // CR LF . LF + s = append(s, '\n') + parser.buffer_pos += 2 + parser.mark.index++ + parser.unread-- + case buf[pos] == '\r' || buf[pos] == '\n': + // CR|LF . LF + s = append(s, '\n') + parser.buffer_pos += 1 + case buf[pos] == '\xC2' && buf[pos+1] == '\x85': + // NEL . LF + s = append(s, '\n') + parser.buffer_pos += 2 + case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'): + // LS|PS . LS|PS + s = append(s, buf[parser.buffer_pos:pos+3]...) + parser.buffer_pos += 3 + default: + return s + } + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + return s +} + +// Get the next token. +func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool { + // Erase the token object. + *token = yaml_token_t{} // [Go] Is this necessary? + + // No tokens after STREAM-END or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR { + return true + } + + // Ensure that the tokens queue contains enough tokens. + if !parser.token_available { + if !yaml_parser_fetch_more_tokens(parser) { + return false + } + } + + // Fetch the next token from the queue. + *token = parser.tokens[parser.tokens_head] + parser.tokens_head++ + parser.tokens_parsed++ + parser.token_available = false + + if token.typ == yaml_STREAM_END_TOKEN { + parser.stream_end_produced = true + } + return true +} + +// Set the scanner error and return false. +func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool { + parser.error = yaml_SCANNER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = parser.mark + return false +} + +func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool { + context := "while parsing a tag" + if directive { + context = "while parsing a %TAG directive" + } + return yaml_parser_set_scanner_error(parser, context, context_mark, problem) +} + +func trace(args ...interface{}) func() { + pargs := append([]interface{}{"+++"}, args...) + fmt.Println(pargs...) + pargs = append([]interface{}{"---"}, args...) + return func() { fmt.Println(pargs...) } +} + +// Ensure that the tokens queue contains at least one token which can be +// returned to the Parser. +func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { + // While we need more tokens to fetch, do it. + for { + // Check if we really need to fetch more tokens. + need_more_tokens := false + + if parser.tokens_head == len(parser.tokens) { + // Queue is empty. + need_more_tokens = true + } else { + // Check if any potential simple key may occupy the head position. + if !yaml_parser_stale_simple_keys(parser) { + return false + } + + for i := range parser.simple_keys { + simple_key := &parser.simple_keys[i] + if simple_key.possible && simple_key.token_number == parser.tokens_parsed { + need_more_tokens = true + break + } + } + } + + // We are finished. + if !need_more_tokens { + break + } + // Fetch the next token. + if !yaml_parser_fetch_next_token(parser) { + return false + } + } + + parser.token_available = true + return true +} + +// The dispatcher for token fetchers. +func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool { + // Ensure that the buffer is initialized. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we just started scanning. Fetch STREAM-START then. + if !parser.stream_start_produced { + return yaml_parser_fetch_stream_start(parser) + } + + // Eat whitespaces and comments until we reach the next token. + if !yaml_parser_scan_to_next_token(parser) { + return false + } + + // Remove obsolete potential simple keys. + if !yaml_parser_stale_simple_keys(parser) { + return false + } + + // Check the indentation level against the current column. + if !yaml_parser_unroll_indent(parser, parser.mark.column) { + return false + } + + // Ensure that the buffer contains at least 4 characters. 4 is the length + // of the longest indicators ('--- ' and '... '). + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + // Is it the end of the stream? + if is_z(parser.buffer, parser.buffer_pos) { + return yaml_parser_fetch_stream_end(parser) + } + + // Is it a directive? + if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' { + return yaml_parser_fetch_directive(parser) + } + + buf := parser.buffer + pos := parser.buffer_pos + + // Is it the document start indicator? + if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN) + } + + // Is it the document end indicator? + if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN) + } + + // Is it the flow sequence start indicator? + if buf[pos] == '[' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN) + } + + // Is it the flow mapping start indicator? + if parser.buffer[parser.buffer_pos] == '{' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN) + } + + // Is it the flow sequence end indicator? + if parser.buffer[parser.buffer_pos] == ']' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_SEQUENCE_END_TOKEN) + } + + // Is it the flow mapping end indicator? + if parser.buffer[parser.buffer_pos] == '}' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_MAPPING_END_TOKEN) + } + + // Is it the flow entry indicator? + if parser.buffer[parser.buffer_pos] == ',' { + return yaml_parser_fetch_flow_entry(parser) + } + + // Is it the block entry indicator? + if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) { + return yaml_parser_fetch_block_entry(parser) + } + + // Is it the key indicator? + if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_key(parser) + } + + // Is it the value indicator? + if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_value(parser) + } + + // Is it an alias? + if parser.buffer[parser.buffer_pos] == '*' { + return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN) + } + + // Is it an anchor? + if parser.buffer[parser.buffer_pos] == '&' { + return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN) + } + + // Is it a tag? + if parser.buffer[parser.buffer_pos] == '!' { + return yaml_parser_fetch_tag(parser) + } + + // Is it a literal scalar? + if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, true) + } + + // Is it a folded scalar? + if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, false) + } + + // Is it a single-quoted scalar? + if parser.buffer[parser.buffer_pos] == '\'' { + return yaml_parser_fetch_flow_scalar(parser, true) + } + + // Is it a double-quoted scalar? + if parser.buffer[parser.buffer_pos] == '"' { + return yaml_parser_fetch_flow_scalar(parser, false) + } + + // Is it a plain scalar? + // + // A plain scalar may start with any non-blank characters except + // + // '-', '?', ':', ',', '[', ']', '{', '}', + // '#', '&', '*', '!', '|', '>', '\'', '\"', + // '%', '@', '`'. + // + // In the block context (and, for the '-' indicator, in the flow context + // too), it may also start with the characters + // + // '-', '?', ':' + // + // if it is followed by a non-space character. + // + // The last rule is more restrictive than the specification requires. + // [Go] Make this logic more reasonable. + //switch parser.buffer[parser.buffer_pos] { + //case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`': + //} + if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' || + parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' || + parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') || + (parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level == 0 && + (parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') && + !is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_plain_scalar(parser) + } + + // If we don't determine the token type so far, it is an error. + return yaml_parser_set_scanner_error(parser, + "while scanning for the next token", parser.mark, + "found character that cannot start any token") +} + +// Check the list of potential simple keys and remove the positions that +// cannot contain simple keys anymore. +func yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool { + // Check for a potential simple key for each flow level. + for i := range parser.simple_keys { + simple_key := &parser.simple_keys[i] + + // The specification requires that a simple key + // + // - is limited to a single line, + // - is shorter than 1024 characters. + if simple_key.possible && (simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index) { + + // Check if the potential simple key to be removed is required. + if simple_key.required { + return yaml_parser_set_scanner_error(parser, + "while scanning a simple key", simple_key.mark, + "could not find expected ':'") + } + simple_key.possible = false + } + } + return true +} + +// Check if a simple key may start at the current position and add it if +// needed. +func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { + // A simple key is required at the current position if the scanner is in + // the block context and the current column coincides with the indentation + // level. + + required := parser.flow_level == 0 && parser.indent == parser.mark.column + + // + // If the current position may start a simple key, save it. + // + if parser.simple_key_allowed { + simple_key := yaml_simple_key_t{ + possible: true, + required: required, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + } + simple_key.mark = parser.mark + + if !yaml_parser_remove_simple_key(parser) { + return false + } + parser.simple_keys[len(parser.simple_keys)-1] = simple_key + } + return true +} + +// Remove a potential simple key at the current flow level. +func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool { + i := len(parser.simple_keys) - 1 + if parser.simple_keys[i].possible { + // If the key is required, it is an error. + if parser.simple_keys[i].required { + return yaml_parser_set_scanner_error(parser, + "while scanning a simple key", parser.simple_keys[i].mark, + "could not find expected ':'") + } + } + // Remove the key from the stack. + parser.simple_keys[i].possible = false + return true +} + +// Increase the flow level and resize the simple key list if needed. +func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { + // Reset the simple key on the next level. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) + + // Increase the flow level. + parser.flow_level++ + return true +} + +// Decrease the flow level. +func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool { + if parser.flow_level > 0 { + parser.flow_level-- + parser.simple_keys = parser.simple_keys[:len(parser.simple_keys)-1] + } + return true +} + +// Push the current indentation level to the stack and set the new level +// the current column is greater than the indentation level. In this case, +// append or insert the specified token into the token queue. +func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + if parser.indent < column { + // Push the current indentation level to the stack and set the new + // indentation level. + parser.indents = append(parser.indents, parser.indent) + parser.indent = column + + // Create a token and insert it into the queue. + token := yaml_token_t{ + typ: typ, + start_mark: mark, + end_mark: mark, + } + if number > -1 { + number -= parser.tokens_parsed + } + yaml_insert_token(parser, number, &token) + } + return true +} + +// Pop indentation levels from the indents stack until the current level +// becomes less or equal to the column. For each indentation level, append +// the BLOCK-END token. +func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + // Loop through the indentation levels in the stack. + for parser.indent > column { + // Create a token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + + // Pop the indentation level. + parser.indent = parser.indents[len(parser.indents)-1] + parser.indents = parser.indents[:len(parser.indents)-1] + } + return true +} + +// Initialize the scanner and produce the STREAM-START token. +func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool { + + // Set the initial indentation. + parser.indent = -1 + + // Initialize the simple key stack. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) + + // A simple key is allowed at the beginning of the stream. + parser.simple_key_allowed = true + + // We have started. + parser.stream_start_produced = true + + // Create the STREAM-START token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_START_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + encoding: parser.encoding, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the STREAM-END token and shut down the scanner. +func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool { + + // Force new line. + if parser.mark.column != 0 { + parser.mark.column = 0 + parser.mark.line++ + } + + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the STREAM-END token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token. +func yaml_parser_fetch_directive(parser *yaml_parser_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. + token := yaml_token_t{} + if !yaml_parser_scan_directive(parser, &token) { + return false + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the DOCUMENT-START or DOCUMENT-END token. +func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Consume the token. + start_mark := parser.mark + + skip(parser) + skip(parser) + skip(parser) + + end_mark := parser.mark + + // Create the DOCUMENT-START or DOCUMENT-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token. +func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // The indicators '[' and '{' may start a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // Increase the flow level. + if !yaml_parser_increase_flow_level(parser) { + return false + } + + // A simple key may follow the indicators '[' and '{'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token. +func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset any potential simple key on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Decrease the flow level. + if !yaml_parser_decrease_flow_level(parser) { + return false + } + + // No simple keys after the indicators ']' and '}'. + parser.simple_key_allowed = false + + // Consume the token. + + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-ENTRY token. +func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool { + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after ','. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_FLOW_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the BLOCK-ENTRY token. +func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool { + // Check if the scanner is in the block context. + if parser.flow_level == 0 { + // Check if we are allowed to start a new entry. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "block sequence entries are not allowed in this context") + } + // Add the BLOCK-SEQUENCE-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) { + return false + } + } else { + // It is an error for the '-' indicator to occur in the flow context, + // but we let the Parser detect and report about it because the Parser + // is able to point to the context. + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '-'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the BLOCK-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the KEY token. +func yaml_parser_fetch_key(parser *yaml_parser_t) bool { + + // In the block context, additional checks are required. + if parser.flow_level == 0 { + // Check if we are allowed to start a new key (not nessesary simple). + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping keys are not allowed in this context") + } + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '?' in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the KEY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the VALUE token. +func yaml_parser_fetch_value(parser *yaml_parser_t) bool { + + simple_key := &parser.simple_keys[len(parser.simple_keys)-1] + + // Have we found a simple key? + if simple_key.possible { + // Create the KEY token and insert it into the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: simple_key.mark, + end_mark: simple_key.mark, + } + yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token) + + // In the block context, we may need to add the BLOCK-MAPPING-START token. + if !yaml_parser_roll_indent(parser, simple_key.mark.column, + simple_key.token_number, + yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) { + return false + } + + // Remove the simple key. + simple_key.possible = false + + // A simple key cannot follow another simple key. + parser.simple_key_allowed = false + + } else { + // The ':' indicator follows a complex key. + + // In the block context, extra checks are required. + if parser.flow_level == 0 { + + // Check if we are allowed to start a complex value. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping values are not allowed in this context") + } + + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Simple keys after ':' are allowed in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + } + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the VALUE token and append it to the queue. + token := yaml_token_t{ + typ: yaml_VALUE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the ALIAS or ANCHOR token. +func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // An anchor or an alias could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow an anchor or an alias. + parser.simple_key_allowed = false + + // Create the ALIAS or ANCHOR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_anchor(parser, &token, typ) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the TAG token. +func yaml_parser_fetch_tag(parser *yaml_parser_t) bool { + // A tag could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a tag. + parser.simple_key_allowed = false + + // Create the TAG token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_tag(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens. +func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool { + // Remove any potential simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // A simple key may follow a block scalar. + parser.simple_key_allowed = true + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_block_scalar(parser, &token, literal) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens. +func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_flow_scalar(parser, &token, single) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,plain) token. +func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_plain_scalar(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Eat whitespaces and comments until the next token is found. +func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { + + // Until the next token is not found. + for { + // Allow the BOM mark to start a line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) { + skip(parser) + } + + // Eat whitespaces. + // Tabs are allowed: + // - in the flow context + // - in the block context, but not at the beginning of the line or + // after '-', '?', or ':' (complex value). + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Eat a comment until a line break. + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // If it is a line break, eat it. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + + // In the block context, a new line may start a simple key. + if parser.flow_level == 0 { + parser.simple_key_allowed = true + } + } else { + break // We have found a token. + } + } + + return true +} + +// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { + // Eat '%'. + start_mark := parser.mark + skip(parser) + + // Scan the directive name. + var name []byte + if !yaml_parser_scan_directive_name(parser, start_mark, &name) { + return false + } + + // Is it a YAML directive? + if bytes.Equal(name, []byte("YAML")) { + // Scan the VERSION directive value. + var major, minor int8 + if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) { + return false + } + end_mark := parser.mark + + // Create a VERSION-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_VERSION_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + major: major, + minor: minor, + } + + // Is it a TAG directive? + } else if bytes.Equal(name, []byte("TAG")) { + // Scan the TAG directive value. + var handle, prefix []byte + if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) { + return false + } + end_mark := parser.mark + + // Create a TAG-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_TAG_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + prefix: prefix, + } + + // Unknown directive. + } else { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unknown directive name") + return false + } + + // Eat the rest of the line including any comments. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + return true +} + +// Scan the directive name. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^ +// +func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { + // Consume the directive name. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + var s []byte + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the name is empty. + if len(s) == 0 { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "could not find expected directive name") + return false + } + + // Check for an blank character after the name. + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unexpected non-alphabetical character") + return false + } + *name = s + return true +} + +// Scan the value of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^ +func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the major version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, major) { + return false + } + + // Eat '.'. + if parser.buffer[parser.buffer_pos] != '.' { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected digit or '.' character") + } + + skip(parser) + + // Consume the minor version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) { + return false + } + return true +} + +const max_number_length = 2 + +// Scan the version number of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^ +// %YAML 1.1 # a comment \n +// ^ +func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { + + // Repeat while the next character is digit. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var value, length int8 + for is_digit(parser.buffer, parser.buffer_pos) { + // Check if the number is too long. + length++ + if length > max_number_length { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "found extremely long version number") + } + value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos)) + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the number was present. + if length == 0 { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected version number") + } + *number = value + return true +} + +// Scan the value of a TAG-DIRECTIVE token. +// +// Scope: +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool { + var handle_value, prefix_value []byte + + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a handle. + if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) { + return false + } + + // Expect a whitespace. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blank(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace") + return false + } + + // Eat whitespaces. + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a prefix. + if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) { + return false + } + + // Expect a whitespace or line break. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace or line break") + return false + } + + *handle = handle_value + *prefix = prefix_value + return true +} + +func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool { + var s []byte + + // Eat the indicator character. + start_mark := parser.mark + skip(parser) + + // Consume the value. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + end_mark := parser.mark + + /* + * Check if length of the anchor is greater than 0 and it is followed by + * a whitespace character or one of the indicators: + * + * '?', ':', ',', ']', '}', '%', '@', '`'. + */ + + if len(s) == 0 || + !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' || + parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '`') { + context := "while scanning an alias" + if typ == yaml_ANCHOR_TOKEN { + context = "while scanning an anchor" + } + yaml_parser_set_scanner_error(parser, context, start_mark, + "did not find expected alphabetic or numeric character") + return false + } + + // Create a token. + *token = yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + value: s, + } + + return true +} + +/* + * Scan a TAG token. + */ + +func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool { + var handle, suffix []byte + + start_mark := parser.mark + + // Check if the tag is in the canonical form. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + if parser.buffer[parser.buffer_pos+1] == '<' { + // Keep the handle as '' + + // Eat '!<' + skip(parser) + skip(parser) + + // Consume the tag value. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + + // Check for '>' and eat it. + if parser.buffer[parser.buffer_pos] != '>' { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find the expected '>'") + return false + } + + skip(parser) + } else { + // The tag has either the '!suffix' or the '!handle!suffix' form. + + // First, try to scan a handle. + if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) { + return false + } + + // Check if it is, indeed, handle. + if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' { + // Scan the suffix now. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + } else { + // It wasn't a handle after all. Scan the rest of the tag. + if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) { + return false + } + + // Set the handle to '!'. + handle = []byte{'!'} + + // A special case: the '!' tag. Set the handle to '' and the + // suffix to '!'. + if len(suffix) == 0 { + handle, suffix = suffix, handle + } + } + } + + // Check the character which ends the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find expected whitespace or line break") + return false + } + + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_TAG_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + suffix: suffix, + } + return true +} + +// Scan a tag handle. +func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool { + // Check the initial '!' character. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] != '!' { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + + var s []byte + + // Copy the '!' character. + s = read(parser, s) + + // Copy all subsequent alphabetical and numerical characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the trailing character is '!' and copy it. + if parser.buffer[parser.buffer_pos] == '!' { + s = read(parser, s) + } else { + // It's either the '!' tag or not really a tag handle. If it's a %TAG + // directive, it's an error. If it's a tag token, it must be a part of URI. + if directive && string(s) != "!" { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + } + + *handle = s + return true +} + +// Scan a tag. +func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool { + //size_t length = head ? strlen((char *)head) : 0 + var s []byte + hasTag := len(head) > 0 + + // Copy the head if needed. + // + // Note that we don't copy the leading '!' character. + if len(head) > 1 { + s = append(s, head[1:]...) + } + + // Scan the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // The set of characters that may appear in URI is as follows: + // + // '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', + // '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', + // '%'. + // [Go] Convert this into more reasonable logic. + for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' || + parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' || + parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' || + parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' || + parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' || + parser.buffer[parser.buffer_pos] == '%' { + // Check if it is a URI-escape sequence. + if parser.buffer[parser.buffer_pos] == '%' { + if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) { + return false + } + } else { + s = read(parser, s) + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + hasTag = true + } + + if !hasTag { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected tag URI") + return false + } + *uri = s + return true +} + +// Decode an URI-escape sequence corresponding to a single UTF-8 character. +func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool { + + // Decode the required number of characters. + w := 1024 + for w > 0 { + // Check for a URI-escaped octet. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + + if !(parser.buffer[parser.buffer_pos] == '%' && + is_hex(parser.buffer, parser.buffer_pos+1) && + is_hex(parser.buffer, parser.buffer_pos+2)) { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find URI escaped octet") + } + + // Get the octet. + octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2)) + + // If it is the leading octet, determine the length of the UTF-8 sequence. + if w == 1024 { + w = width(octet) + if w == 0 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect leading UTF-8 octet") + } + } else { + // Check if the trailing octet is correct. + if octet&0xC0 != 0x80 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect trailing UTF-8 octet") + } + } + + // Copy the octet and move the pointers. + *s = append(*s, octet) + skip(parser) + skip(parser) + skip(parser) + w-- + } + return true +} + +// Scan a block scalar. +func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool { + // Eat the indicator '|' or '>'. + start_mark := parser.mark + skip(parser) + + // Scan the additional block scalar indicators. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check for a chomping indicator. + var chomping, increment int + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + // Set the chomping method and eat the indicator. + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + + // Check for an indentation indicator. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if is_digit(parser.buffer, parser.buffer_pos) { + // Check that the indentation is greater than 0. + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + + // Get the indentation level and eat the indicator. + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + } + + } else if is_digit(parser.buffer, parser.buffer_pos) { + // Do the same as above, but in the opposite order. + + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + } + } + + // Eat whitespaces and comments to the end of the line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + end_mark := parser.mark + + // Set the indentation level if it was specified. + var indent int + if increment > 0 { + if parser.indent >= 0 { + indent = parser.indent + increment + } else { + indent = increment + } + } + + // Scan the leading line breaks and determine the indentation level if needed. + var s, leading_break, trailing_breaks []byte + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + + // Scan the block scalar content. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var leading_blank, trailing_blank bool + for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) { + // We are at the beginning of a non-empty line. + + // Is it a trailing whitespace? + trailing_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Check if we need to fold the leading line break. + if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' { + // Do we need to join the lines by space? + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } + } else { + s = append(s, leading_break...) + } + leading_break = leading_break[:0] + + // Append the remaining line breaks. + s = append(s, trailing_breaks...) + trailing_breaks = trailing_breaks[:0] + + // Is it a leading whitespace? + leading_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Consume the current line. + for !is_breakz(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + leading_break = read_line(parser, leading_break) + + // Eat the following indentation spaces and line breaks. + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + } + + // Chomp the tail. + if chomping != -1 { + s = append(s, leading_break...) + } + if chomping == 1 { + s = append(s, trailing_breaks...) + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_LITERAL_SCALAR_STYLE, + } + if !literal { + token.style = yaml_FOLDED_SCALAR_STYLE + } + return true +} + +// Scan indentation spaces and line breaks for a block scalar. Determine the +// indentation level if needed. +func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool { + *end_mark = parser.mark + + // Eat the indentation spaces and line breaks. + max_indent := 0 + for { + // Eat the indentation spaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.mark.column > max_indent { + max_indent = parser.mark.column + } + + // Check for a tab character messing the indentation. + if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) { + return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found a tab character where an indentation space is expected") + } + + // Have we found a non-empty line? + if !is_break(parser.buffer, parser.buffer_pos) { + break + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + // [Go] Should really be returning breaks instead. + *breaks = read_line(parser, *breaks) + *end_mark = parser.mark + } + + // Determine the indentation level if needed. + if *indent == 0 { + *indent = max_indent + if *indent < parser.indent+1 { + *indent = parser.indent + 1 + } + if *indent < 1 { + *indent = 1 + } + } + return true +} + +// Scan a quoted scalar. +func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool { + // Eat the left quote. + start_mark := parser.mark + skip(parser) + + // Consume the content of the quoted scalar. + var s, leading_break, trailing_breaks, whitespaces []byte + for { + // Check that there are no document indicators at the beginning of the line. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected document indicator") + return false + } + + // Check for EOF. + if is_z(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected end of stream") + return false + } + + // Consume non-blank characters. + leading_blanks := false + for !is_blankz(parser.buffer, parser.buffer_pos) { + if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' { + // Is is an escaped single quote. + s = append(s, '\'') + skip(parser) + skip(parser) + + } else if single && parser.buffer[parser.buffer_pos] == '\'' { + // It is a right single quote. + break + } else if !single && parser.buffer[parser.buffer_pos] == '"' { + // It is a right double quote. + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) { + // It is an escaped line break. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + skip(parser) + skip_line(parser) + leading_blanks = true + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' { + // It is an escape sequence. + code_length := 0 + + // Check the escape character. + switch parser.buffer[parser.buffer_pos+1] { + case '0': + s = append(s, 0) + case 'a': + s = append(s, '\x07') + case 'b': + s = append(s, '\x08') + case 't', '\t': + s = append(s, '\x09') + case 'n': + s = append(s, '\x0A') + case 'v': + s = append(s, '\x0B') + case 'f': + s = append(s, '\x0C') + case 'r': + s = append(s, '\x0D') + case 'e': + s = append(s, '\x1B') + case ' ': + s = append(s, '\x20') + case '"': + s = append(s, '"') + case '\'': + s = append(s, '\'') + case '\\': + s = append(s, '\\') + case 'N': // NEL (#x85) + s = append(s, '\xC2') + s = append(s, '\x85') + case '_': // #xA0 + s = append(s, '\xC2') + s = append(s, '\xA0') + case 'L': // LS (#x2028) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA8') + case 'P': // PS (#x2029) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA9') + case 'x': + code_length = 2 + case 'u': + code_length = 4 + case 'U': + code_length = 8 + default: + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found unknown escape character") + return false + } + + skip(parser) + skip(parser) + + // Consume an arbitrary escape code. + if code_length > 0 { + var value int + + // Scan the character value. + if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) { + return false + } + for k := 0; k < code_length; k++ { + if !is_hex(parser.buffer, parser.buffer_pos+k) { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "did not find expected hexdecimal number") + return false + } + value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k) + } + + // Check the value and write the character. + if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found invalid Unicode character escape code") + return false + } + if value <= 0x7F { + s = append(s, byte(value)) + } else if value <= 0x7FF { + s = append(s, byte(0xC0+(value>>6))) + s = append(s, byte(0x80+(value&0x3F))) + } else if value <= 0xFFFF { + s = append(s, byte(0xE0+(value>>12))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } else { + s = append(s, byte(0xF0+(value>>18))) + s = append(s, byte(0x80+((value>>12)&0x3F))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } + + // Advance the pointer. + for k := 0; k < code_length; k++ { + skip(parser) + } + } + } else { + // It is a non-escaped non-blank character. + s = read(parser, s) + } + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we are at the end of the scalar. + if single { + if parser.buffer[parser.buffer_pos] == '\'' { + break + } + } else { + if parser.buffer[parser.buffer_pos] == '"' { + break + } + } + + // Consume blank characters. + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Join the whitespaces or fold line breaks. + if leading_blanks { + // Do we need to fold line breaks? + if len(leading_break) > 0 && leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Eat the right quote. + skip(parser) + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_SINGLE_QUOTED_SCALAR_STYLE, + } + if !single { + token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + return true +} + +// Scan a plain scalar. +func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { + + var s, leading_break, trailing_breaks, whitespaces []byte + var leading_blanks bool + var indent = parser.indent + 1 + + start_mark := parser.mark + end_mark := parser.mark + + // Consume the content of the plain scalar. + for { + // Check for a document indicator. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + break + } + + // Check for a comment. + if parser.buffer[parser.buffer_pos] == '#' { + break + } + + // Consume non-blank characters. + for !is_blankz(parser.buffer, parser.buffer_pos) { + + // Check for indicators that may end a plain scalar. + if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level > 0 && + (parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}')) { + break + } + + // Check if we need to join whitespaces and breaks. + if leading_blanks || len(whitespaces) > 0 { + if leading_blanks { + // Do we need to fold line breaks? + if leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + leading_blanks = false + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Copy the character. + s = read(parser, s) + + end_mark = parser.mark + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + // Is it the end? + if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) { + break + } + + // Consume blank characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + + // Check for tab characters that abuse indentation. + if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", + start_mark, "found a tab character that violates indentation") + return false + } + + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check indentation level. + if parser.flow_level == 0 && parser.mark.column < indent { + break + } + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_PLAIN_SCALAR_STYLE, + } + + // Note that we change the 'simple_key_allowed' flag. + if leading_blanks { + parser.simple_key_allowed = true + } + return true +} diff --git a/vendor/gopkg.in/yaml.v2/sorter.go b/vendor/gopkg.in/yaml.v2/sorter.go new file mode 100644 index 00000000..4c45e660 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/sorter.go @@ -0,0 +1,113 @@ +package yaml + +import ( + "reflect" + "unicode" +) + +type keyList []reflect.Value + +func (l keyList) Len() int { return len(l) } +func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } +func (l keyList) Less(i, j int) bool { + a := l[i] + b := l[j] + ak := a.Kind() + bk := b.Kind() + for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() { + a = a.Elem() + ak = a.Kind() + } + for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() { + b = b.Elem() + bk = b.Kind() + } + af, aok := keyFloat(a) + bf, bok := keyFloat(b) + if aok && bok { + if af != bf { + return af < bf + } + if ak != bk { + return ak < bk + } + return numLess(a, b) + } + if ak != reflect.String || bk != reflect.String { + return ak < bk + } + ar, br := []rune(a.String()), []rune(b.String()) + for i := 0; i < len(ar) && i < len(br); i++ { + if ar[i] == br[i] { + continue + } + al := unicode.IsLetter(ar[i]) + bl := unicode.IsLetter(br[i]) + if al && bl { + return ar[i] < br[i] + } + if al || bl { + return bl + } + var ai, bi int + var an, bn int64 + if ar[i] == '0' || br[i] == '0' { + for j := i-1; j >= 0 && unicode.IsDigit(ar[j]); j-- { + if ar[j] != '0' { + an = 1 + bn = 1 + break + } + } + } + for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ { + an = an*10 + int64(ar[ai]-'0') + } + for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ { + bn = bn*10 + int64(br[bi]-'0') + } + if an != bn { + return an < bn + } + if ai != bi { + return ai < bi + } + return ar[i] < br[i] + } + return len(ar) < len(br) +} + +// keyFloat returns a float value for v if it is a number/bool +// and whether it is a number/bool or not. +func keyFloat(v reflect.Value) (f float64, ok bool) { + switch v.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return float64(v.Int()), true + case reflect.Float32, reflect.Float64: + return v.Float(), true + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return float64(v.Uint()), true + case reflect.Bool: + if v.Bool() { + return 1, true + } + return 0, true + } + return 0, false +} + +// numLess returns whether a < b. +// a and b must necessarily have the same kind. +func numLess(a, b reflect.Value) bool { + switch a.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return a.Int() < b.Int() + case reflect.Float32, reflect.Float64: + return a.Float() < b.Float() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return a.Uint() < b.Uint() + case reflect.Bool: + return !a.Bool() && b.Bool() + } + panic("not a number") +} diff --git a/vendor/gopkg.in/yaml.v2/writerc.go b/vendor/gopkg.in/yaml.v2/writerc.go new file mode 100644 index 00000000..a2dde608 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/writerc.go @@ -0,0 +1,26 @@ +package yaml + +// Set the writer error and return false. +func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_WRITER_ERROR + emitter.problem = problem + return false +} + +// Flush the output buffer. +func yaml_emitter_flush(emitter *yaml_emitter_t) bool { + if emitter.write_handler == nil { + panic("write handler not set") + } + + // Check if the buffer is empty. + if emitter.buffer_pos == 0 { + return true + } + + if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { + return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) + } + emitter.buffer_pos = 0 + return true +} diff --git a/vendor/gopkg.in/yaml.v2/yaml.go b/vendor/gopkg.in/yaml.v2/yaml.go new file mode 100644 index 00000000..de85aa4c --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/yaml.go @@ -0,0 +1,466 @@ +// Package yaml implements YAML support for the Go language. +// +// Source code and other details for the project are available at GitHub: +// +// https://github.com/go-yaml/yaml +// +package yaml + +import ( + "errors" + "fmt" + "io" + "reflect" + "strings" + "sync" +) + +// MapSlice encodes and decodes as a YAML map. +// The order of keys is preserved when encoding and decoding. +type MapSlice []MapItem + +// MapItem is an item in a MapSlice. +type MapItem struct { + Key, Value interface{} +} + +// The Unmarshaler interface may be implemented by types to customize their +// behavior when being unmarshaled from a YAML document. The UnmarshalYAML +// method receives a function that may be called to unmarshal the original +// YAML value into a field or variable. It is safe to call the unmarshal +// function parameter more than once if necessary. +type Unmarshaler interface { + UnmarshalYAML(unmarshal func(interface{}) error) error +} + +// The Marshaler interface may be implemented by types to customize their +// behavior when being marshaled into a YAML document. The returned value +// is marshaled in place of the original value implementing Marshaler. +// +// If an error is returned by MarshalYAML, the marshaling procedure stops +// and returns with the provided error. +type Marshaler interface { + MarshalYAML() (interface{}, error) +} + +// Unmarshal decodes the first document found within the in byte slice +// and assigns decoded values into the out value. +// +// Maps and pointers (to a struct, string, int, etc) are accepted as out +// values. If an internal pointer within a struct is not initialized, +// the yaml package will initialize it if necessary for unmarshalling +// the provided data. The out parameter must not be nil. +// +// The type of the decoded values should be compatible with the respective +// values in out. If one or more values cannot be decoded due to a type +// mismatches, decoding continues partially until the end of the YAML +// content, and a *yaml.TypeError is returned with details for all +// missed values. +// +// Struct fields are only unmarshalled if they are exported (have an +// upper case first letter), and are unmarshalled using the field name +// lowercased as the default key. Custom keys may be defined via the +// "yaml" name in the field tag: the content preceding the first comma +// is used as the key, and the following comma-separated options are +// used to tweak the marshalling process (see Marshal). +// Conflicting names result in a runtime error. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// var t T +// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) +// +// See the documentation of Marshal for the format of tags and a list of +// supported tag options. +// +func Unmarshal(in []byte, out interface{}) (err error) { + return unmarshal(in, out, false) +} + +// UnmarshalStrict is like Unmarshal except that any fields that are found +// in the data that do not have corresponding struct members, or mapping +// keys that are duplicates, will result in +// an error. +func UnmarshalStrict(in []byte, out interface{}) (err error) { + return unmarshal(in, out, true) +} + +// A Decorder reads and decodes YAML values from an input stream. +type Decoder struct { + strict bool + parser *parser +} + +// NewDecoder returns a new decoder that reads from r. +// +// The decoder introduces its own buffering and may read +// data from r beyond the YAML values requested. +func NewDecoder(r io.Reader) *Decoder { + return &Decoder{ + parser: newParserFromReader(r), + } +} + +// SetStrict sets whether strict decoding behaviour is enabled when +// decoding items in the data (see UnmarshalStrict). By default, decoding is not strict. +func (dec *Decoder) SetStrict(strict bool) { + dec.strict = strict +} + +// Decode reads the next YAML-encoded value from its input +// and stores it in the value pointed to by v. +// +// See the documentation for Unmarshal for details about the +// conversion of YAML into a Go value. +func (dec *Decoder) Decode(v interface{}) (err error) { + d := newDecoder(dec.strict) + defer handleErr(&err) + node := dec.parser.parse() + if node == nil { + return io.EOF + } + out := reflect.ValueOf(v) + if out.Kind() == reflect.Ptr && !out.IsNil() { + out = out.Elem() + } + d.unmarshal(node, out) + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +func unmarshal(in []byte, out interface{}, strict bool) (err error) { + defer handleErr(&err) + d := newDecoder(strict) + p := newParser(in) + defer p.destroy() + node := p.parse() + if node != nil { + v := reflect.ValueOf(out) + if v.Kind() == reflect.Ptr && !v.IsNil() { + v = v.Elem() + } + d.unmarshal(node, v) + } + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +// Marshal serializes the value provided into a YAML document. The structure +// of the generated document will reflect the structure of the value itself. +// Maps and pointers (to struct, string, int, etc) are accepted as the in value. +// +// Struct fields are only marshalled if they are exported (have an upper case +// first letter), and are marshalled using the field name lowercased as the +// default key. Custom keys may be defined via the "yaml" name in the field +// tag: the content preceding the first comma is used as the key, and the +// following comma-separated options are used to tweak the marshalling process. +// Conflicting names result in a runtime error. +// +// The field tag format accepted is: +// +// `(...) yaml:"[][,[,]]" (...)` +// +// The following flags are currently supported: +// +// omitempty Only include the field if it's not set to the zero +// value for the type or to empty slices or maps. +// Zero valued structs will be omitted if all their public +// fields are zero, unless they implement an IsZero +// method (see the IsZeroer interface type), in which +// case the field will be included if that method returns true. +// +// flow Marshal using a flow style (useful for structs, +// sequences and maps). +// +// inline Inline the field, which must be a struct or a map, +// causing all of its fields or keys to be processed as if +// they were part of the outer struct. For maps, keys must +// not conflict with the yaml keys of other struct fields. +// +// In addition, if the key is "-", the field is ignored. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" +// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" +// +func Marshal(in interface{}) (out []byte, err error) { + defer handleErr(&err) + e := newEncoder() + defer e.destroy() + e.marshalDoc("", reflect.ValueOf(in)) + e.finish() + out = e.out + return +} + +// An Encoder writes YAML values to an output stream. +type Encoder struct { + encoder *encoder +} + +// NewEncoder returns a new encoder that writes to w. +// The Encoder should be closed after use to flush all data +// to w. +func NewEncoder(w io.Writer) *Encoder { + return &Encoder{ + encoder: newEncoderWithWriter(w), + } +} + +// Encode writes the YAML encoding of v to the stream. +// If multiple items are encoded to the stream, the +// second and subsequent document will be preceded +// with a "---" document separator, but the first will not. +// +// See the documentation for Marshal for details about the conversion of Go +// values to YAML. +func (e *Encoder) Encode(v interface{}) (err error) { + defer handleErr(&err) + e.encoder.marshalDoc("", reflect.ValueOf(v)) + return nil +} + +// Close closes the encoder by writing any remaining data. +// It does not write a stream terminating string "...". +func (e *Encoder) Close() (err error) { + defer handleErr(&err) + e.encoder.finish() + return nil +} + +func handleErr(err *error) { + if v := recover(); v != nil { + if e, ok := v.(yamlError); ok { + *err = e.err + } else { + panic(v) + } + } +} + +type yamlError struct { + err error +} + +func fail(err error) { + panic(yamlError{err}) +} + +func failf(format string, args ...interface{}) { + panic(yamlError{fmt.Errorf("yaml: "+format, args...)}) +} + +// A TypeError is returned by Unmarshal when one or more fields in +// the YAML document cannot be properly decoded into the requested +// types. When this error is returned, the value is still +// unmarshaled partially. +type TypeError struct { + Errors []string +} + +func (e *TypeError) Error() string { + return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n ")) +} + +// -------------------------------------------------------------------------- +// Maintain a mapping of keys to structure field indexes + +// The code in this section was copied from mgo/bson. + +// structInfo holds details for the serialization of fields of +// a given struct. +type structInfo struct { + FieldsMap map[string]fieldInfo + FieldsList []fieldInfo + + // InlineMap is the number of the field in the struct that + // contains an ,inline map, or -1 if there's none. + InlineMap int +} + +type fieldInfo struct { + Key string + Num int + OmitEmpty bool + Flow bool + // Id holds the unique field identifier, so we can cheaply + // check for field duplicates without maintaining an extra map. + Id int + + // Inline holds the field index if the field is part of an inlined struct. + Inline []int +} + +var structMap = make(map[reflect.Type]*structInfo) +var fieldMapMutex sync.RWMutex + +func getStructInfo(st reflect.Type) (*structInfo, error) { + fieldMapMutex.RLock() + sinfo, found := structMap[st] + fieldMapMutex.RUnlock() + if found { + return sinfo, nil + } + + n := st.NumField() + fieldsMap := make(map[string]fieldInfo) + fieldsList := make([]fieldInfo, 0, n) + inlineMap := -1 + for i := 0; i != n; i++ { + field := st.Field(i) + if field.PkgPath != "" && !field.Anonymous { + continue // Private field + } + + info := fieldInfo{Num: i} + + tag := field.Tag.Get("yaml") + if tag == "" && strings.Index(string(field.Tag), ":") < 0 { + tag = string(field.Tag) + } + if tag == "-" { + continue + } + + inline := false + fields := strings.Split(tag, ",") + if len(fields) > 1 { + for _, flag := range fields[1:] { + switch flag { + case "omitempty": + info.OmitEmpty = true + case "flow": + info.Flow = true + case "inline": + inline = true + default: + return nil, errors.New(fmt.Sprintf("Unsupported flag %q in tag %q of type %s", flag, tag, st)) + } + } + tag = fields[0] + } + + if inline { + switch field.Type.Kind() { + case reflect.Map: + if inlineMap >= 0 { + return nil, errors.New("Multiple ,inline maps in struct " + st.String()) + } + if field.Type.Key() != reflect.TypeOf("") { + return nil, errors.New("Option ,inline needs a map with string keys in struct " + st.String()) + } + inlineMap = info.Num + case reflect.Struct: + sinfo, err := getStructInfo(field.Type) + if err != nil { + return nil, err + } + for _, finfo := range sinfo.FieldsList { + if _, found := fieldsMap[finfo.Key]; found { + msg := "Duplicated key '" + finfo.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + if finfo.Inline == nil { + finfo.Inline = []int{i, finfo.Num} + } else { + finfo.Inline = append([]int{i}, finfo.Inline...) + } + finfo.Id = len(fieldsList) + fieldsMap[finfo.Key] = finfo + fieldsList = append(fieldsList, finfo) + } + default: + //return nil, errors.New("Option ,inline needs a struct value or map field") + return nil, errors.New("Option ,inline needs a struct value field") + } + continue + } + + if tag != "" { + info.Key = tag + } else { + info.Key = strings.ToLower(field.Name) + } + + if _, found = fieldsMap[info.Key]; found { + msg := "Duplicated key '" + info.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + + info.Id = len(fieldsList) + fieldsList = append(fieldsList, info) + fieldsMap[info.Key] = info + } + + sinfo = &structInfo{ + FieldsMap: fieldsMap, + FieldsList: fieldsList, + InlineMap: inlineMap, + } + + fieldMapMutex.Lock() + structMap[st] = sinfo + fieldMapMutex.Unlock() + return sinfo, nil +} + +// IsZeroer is used to check whether an object is zero to +// determine whether it should be omitted when marshaling +// with the omitempty flag. One notable implementation +// is time.Time. +type IsZeroer interface { + IsZero() bool +} + +func isZero(v reflect.Value) bool { + kind := v.Kind() + if z, ok := v.Interface().(IsZeroer); ok { + if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() { + return true + } + return z.IsZero() + } + switch kind { + case reflect.String: + return len(v.String()) == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + case reflect.Slice: + return v.Len() == 0 + case reflect.Map: + return v.Len() == 0 + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Struct: + vt := v.Type() + for i := v.NumField() - 1; i >= 0; i-- { + if vt.Field(i).PkgPath != "" { + continue // Private field + } + if !isZero(v.Field(i)) { + return false + } + } + return true + } + return false +} diff --git a/vendor/gopkg.in/yaml.v2/yamlh.go b/vendor/gopkg.in/yaml.v2/yamlh.go new file mode 100644 index 00000000..e25cee56 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/yamlh.go @@ -0,0 +1,738 @@ +package yaml + +import ( + "fmt" + "io" +) + +// The version directive data. +type yaml_version_directive_t struct { + major int8 // The major version number. + minor int8 // The minor version number. +} + +// The tag directive data. +type yaml_tag_directive_t struct { + handle []byte // The tag handle. + prefix []byte // The tag prefix. +} + +type yaml_encoding_t int + +// The stream encoding. +const ( + // Let the parser choose the encoding. + yaml_ANY_ENCODING yaml_encoding_t = iota + + yaml_UTF8_ENCODING // The default UTF-8 encoding. + yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM. + yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM. +) + +type yaml_break_t int + +// Line break types. +const ( + // Let the parser choose the break type. + yaml_ANY_BREAK yaml_break_t = iota + + yaml_CR_BREAK // Use CR for line breaks (Mac style). + yaml_LN_BREAK // Use LN for line breaks (Unix style). + yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style). +) + +type yaml_error_type_t int + +// Many bad things could happen with the parser and emitter. +const ( + // No error is produced. + yaml_NO_ERROR yaml_error_type_t = iota + + yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory. + yaml_READER_ERROR // Cannot read or decode the input stream. + yaml_SCANNER_ERROR // Cannot scan the input stream. + yaml_PARSER_ERROR // Cannot parse the input stream. + yaml_COMPOSER_ERROR // Cannot compose a YAML document. + yaml_WRITER_ERROR // Cannot write to the output stream. + yaml_EMITTER_ERROR // Cannot emit a YAML stream. +) + +// The pointer position. +type yaml_mark_t struct { + index int // The position index. + line int // The position line. + column int // The position column. +} + +// Node Styles + +type yaml_style_t int8 + +type yaml_scalar_style_t yaml_style_t + +// Scalar styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota + + yaml_PLAIN_SCALAR_STYLE // The plain scalar style. + yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style. + yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style. + yaml_LITERAL_SCALAR_STYLE // The literal scalar style. + yaml_FOLDED_SCALAR_STYLE // The folded scalar style. +) + +type yaml_sequence_style_t yaml_style_t + +// Sequence styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota + + yaml_BLOCK_SEQUENCE_STYLE // The block sequence style. + yaml_FLOW_SEQUENCE_STYLE // The flow sequence style. +) + +type yaml_mapping_style_t yaml_style_t + +// Mapping styles. +const ( + // Let the emitter choose the style. + yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota + + yaml_BLOCK_MAPPING_STYLE // The block mapping style. + yaml_FLOW_MAPPING_STYLE // The flow mapping style. +) + +// Tokens + +type yaml_token_type_t int + +// Token types. +const ( + // An empty token. + yaml_NO_TOKEN yaml_token_type_t = iota + + yaml_STREAM_START_TOKEN // A STREAM-START token. + yaml_STREAM_END_TOKEN // A STREAM-END token. + + yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token. + yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token. + yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token. + yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token. + + yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token. + yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token. + yaml_BLOCK_END_TOKEN // A BLOCK-END token. + + yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token. + yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token. + yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token. + yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token. + + yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token. + yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token. + yaml_KEY_TOKEN // A KEY token. + yaml_VALUE_TOKEN // A VALUE token. + + yaml_ALIAS_TOKEN // An ALIAS token. + yaml_ANCHOR_TOKEN // An ANCHOR token. + yaml_TAG_TOKEN // A TAG token. + yaml_SCALAR_TOKEN // A SCALAR token. +) + +func (tt yaml_token_type_t) String() string { + switch tt { + case yaml_NO_TOKEN: + return "yaml_NO_TOKEN" + case yaml_STREAM_START_TOKEN: + return "yaml_STREAM_START_TOKEN" + case yaml_STREAM_END_TOKEN: + return "yaml_STREAM_END_TOKEN" + case yaml_VERSION_DIRECTIVE_TOKEN: + return "yaml_VERSION_DIRECTIVE_TOKEN" + case yaml_TAG_DIRECTIVE_TOKEN: + return "yaml_TAG_DIRECTIVE_TOKEN" + case yaml_DOCUMENT_START_TOKEN: + return "yaml_DOCUMENT_START_TOKEN" + case yaml_DOCUMENT_END_TOKEN: + return "yaml_DOCUMENT_END_TOKEN" + case yaml_BLOCK_SEQUENCE_START_TOKEN: + return "yaml_BLOCK_SEQUENCE_START_TOKEN" + case yaml_BLOCK_MAPPING_START_TOKEN: + return "yaml_BLOCK_MAPPING_START_TOKEN" + case yaml_BLOCK_END_TOKEN: + return "yaml_BLOCK_END_TOKEN" + case yaml_FLOW_SEQUENCE_START_TOKEN: + return "yaml_FLOW_SEQUENCE_START_TOKEN" + case yaml_FLOW_SEQUENCE_END_TOKEN: + return "yaml_FLOW_SEQUENCE_END_TOKEN" + case yaml_FLOW_MAPPING_START_TOKEN: + return "yaml_FLOW_MAPPING_START_TOKEN" + case yaml_FLOW_MAPPING_END_TOKEN: + return "yaml_FLOW_MAPPING_END_TOKEN" + case yaml_BLOCK_ENTRY_TOKEN: + return "yaml_BLOCK_ENTRY_TOKEN" + case yaml_FLOW_ENTRY_TOKEN: + return "yaml_FLOW_ENTRY_TOKEN" + case yaml_KEY_TOKEN: + return "yaml_KEY_TOKEN" + case yaml_VALUE_TOKEN: + return "yaml_VALUE_TOKEN" + case yaml_ALIAS_TOKEN: + return "yaml_ALIAS_TOKEN" + case yaml_ANCHOR_TOKEN: + return "yaml_ANCHOR_TOKEN" + case yaml_TAG_TOKEN: + return "yaml_TAG_TOKEN" + case yaml_SCALAR_TOKEN: + return "yaml_SCALAR_TOKEN" + } + return "" +} + +// The token structure. +type yaml_token_t struct { + // The token type. + typ yaml_token_type_t + + // The start/end of the token. + start_mark, end_mark yaml_mark_t + + // The stream encoding (for yaml_STREAM_START_TOKEN). + encoding yaml_encoding_t + + // The alias/anchor/scalar value or tag/tag directive handle + // (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN). + value []byte + + // The tag suffix (for yaml_TAG_TOKEN). + suffix []byte + + // The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN). + prefix []byte + + // The scalar style (for yaml_SCALAR_TOKEN). + style yaml_scalar_style_t + + // The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN). + major, minor int8 +} + +// Events + +type yaml_event_type_t int8 + +// Event types. +const ( + // An empty event. + yaml_NO_EVENT yaml_event_type_t = iota + + yaml_STREAM_START_EVENT // A STREAM-START event. + yaml_STREAM_END_EVENT // A STREAM-END event. + yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event. + yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event. + yaml_ALIAS_EVENT // An ALIAS event. + yaml_SCALAR_EVENT // A SCALAR event. + yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event. + yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event. + yaml_MAPPING_START_EVENT // A MAPPING-START event. + yaml_MAPPING_END_EVENT // A MAPPING-END event. +) + +var eventStrings = []string{ + yaml_NO_EVENT: "none", + yaml_STREAM_START_EVENT: "stream start", + yaml_STREAM_END_EVENT: "stream end", + yaml_DOCUMENT_START_EVENT: "document start", + yaml_DOCUMENT_END_EVENT: "document end", + yaml_ALIAS_EVENT: "alias", + yaml_SCALAR_EVENT: "scalar", + yaml_SEQUENCE_START_EVENT: "sequence start", + yaml_SEQUENCE_END_EVENT: "sequence end", + yaml_MAPPING_START_EVENT: "mapping start", + yaml_MAPPING_END_EVENT: "mapping end", +} + +func (e yaml_event_type_t) String() string { + if e < 0 || int(e) >= len(eventStrings) { + return fmt.Sprintf("unknown event %d", e) + } + return eventStrings[e] +} + +// The event structure. +type yaml_event_t struct { + + // The event type. + typ yaml_event_type_t + + // The start and end of the event. + start_mark, end_mark yaml_mark_t + + // The document encoding (for yaml_STREAM_START_EVENT). + encoding yaml_encoding_t + + // The version directive (for yaml_DOCUMENT_START_EVENT). + version_directive *yaml_version_directive_t + + // The list of tag directives (for yaml_DOCUMENT_START_EVENT). + tag_directives []yaml_tag_directive_t + + // The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT). + anchor []byte + + // The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + tag []byte + + // The scalar value (for yaml_SCALAR_EVENT). + value []byte + + // Is the document start/end indicator implicit, or the tag optional? + // (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT). + implicit bool + + // Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT). + quoted_implicit bool + + // The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + style yaml_style_t +} + +func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) } +func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) } +func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) } + +// Nodes + +const ( + yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null. + yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false. + yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values. + yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values. + yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values. + yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values. + + yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences. + yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping. + + // Not in original libyaml. + yaml_BINARY_TAG = "tag:yaml.org,2002:binary" + yaml_MERGE_TAG = "tag:yaml.org,2002:merge" + + yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str. + yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq. + yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map. +) + +type yaml_node_type_t int + +// Node types. +const ( + // An empty node. + yaml_NO_NODE yaml_node_type_t = iota + + yaml_SCALAR_NODE // A scalar node. + yaml_SEQUENCE_NODE // A sequence node. + yaml_MAPPING_NODE // A mapping node. +) + +// An element of a sequence node. +type yaml_node_item_t int + +// An element of a mapping node. +type yaml_node_pair_t struct { + key int // The key of the element. + value int // The value of the element. +} + +// The node structure. +type yaml_node_t struct { + typ yaml_node_type_t // The node type. + tag []byte // The node tag. + + // The node data. + + // The scalar parameters (for yaml_SCALAR_NODE). + scalar struct { + value []byte // The scalar value. + length int // The length of the scalar value. + style yaml_scalar_style_t // The scalar style. + } + + // The sequence parameters (for YAML_SEQUENCE_NODE). + sequence struct { + items_data []yaml_node_item_t // The stack of sequence items. + style yaml_sequence_style_t // The sequence style. + } + + // The mapping parameters (for yaml_MAPPING_NODE). + mapping struct { + pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value). + pairs_start *yaml_node_pair_t // The beginning of the stack. + pairs_end *yaml_node_pair_t // The end of the stack. + pairs_top *yaml_node_pair_t // The top of the stack. + style yaml_mapping_style_t // The mapping style. + } + + start_mark yaml_mark_t // The beginning of the node. + end_mark yaml_mark_t // The end of the node. + +} + +// The document structure. +type yaml_document_t struct { + + // The document nodes. + nodes []yaml_node_t + + // The version directive. + version_directive *yaml_version_directive_t + + // The list of tag directives. + tag_directives_data []yaml_tag_directive_t + tag_directives_start int // The beginning of the tag directives list. + tag_directives_end int // The end of the tag directives list. + + start_implicit int // Is the document start indicator implicit? + end_implicit int // Is the document end indicator implicit? + + // The start/end of the document. + start_mark, end_mark yaml_mark_t +} + +// The prototype of a read handler. +// +// The read handler is called when the parser needs to read more bytes from the +// source. The handler should write not more than size bytes to the buffer. +// The number of written bytes should be set to the size_read variable. +// +// [in,out] data A pointer to an application data specified by +// yaml_parser_set_input(). +// [out] buffer The buffer to write the data from the source. +// [in] size The size of the buffer. +// [out] size_read The actual number of bytes read from the source. +// +// On success, the handler should return 1. If the handler failed, +// the returned value should be 0. On EOF, the handler should set the +// size_read to 0 and return 1. +type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) + +// This structure holds information about a potential simple key. +type yaml_simple_key_t struct { + possible bool // Is a simple key possible? + required bool // Is a simple key required? + token_number int // The number of the token. + mark yaml_mark_t // The position mark. +} + +// The states of the parser. +type yaml_parser_state_t int + +const ( + yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota + + yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document. + yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START. + yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_PARSE_BLOCK_NODE_STATE // Expect a block node. + yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence. + yaml_PARSE_FLOW_NODE_STATE // Expect a flow node. + yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence. + yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence. + yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence. + yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key. + yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value. + yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry. + yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping. + yaml_PARSE_END_STATE // Expect nothing. +) + +func (ps yaml_parser_state_t) String() string { + switch ps { + case yaml_PARSE_STREAM_START_STATE: + return "yaml_PARSE_STREAM_START_STATE" + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_START_STATE: + return "yaml_PARSE_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return "yaml_PARSE_DOCUMENT_CONTENT_STATE" + case yaml_PARSE_DOCUMENT_END_STATE: + return "yaml_PARSE_DOCUMENT_END_STATE" + case yaml_PARSE_BLOCK_NODE_STATE: + return "yaml_PARSE_BLOCK_NODE_STATE" + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE" + case yaml_PARSE_FLOW_NODE_STATE: + return "yaml_PARSE_FLOW_NODE_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE" + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE" + case yaml_PARSE_END_STATE: + return "yaml_PARSE_END_STATE" + } + return "" +} + +// This structure holds aliases data. +type yaml_alias_data_t struct { + anchor []byte // The anchor. + index int // The node id. + mark yaml_mark_t // The anchor mark. +} + +// The parser structure. +// +// All members are internal. Manage the structure using the +// yaml_parser_ family of functions. +type yaml_parser_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + + problem string // Error description. + + // The byte about which the problem occurred. + problem_offset int + problem_value int + problem_mark yaml_mark_t + + // The error context. + context string + context_mark yaml_mark_t + + // Reader stuff + + read_handler yaml_read_handler_t // Read handler. + + input_reader io.Reader // File input data. + input []byte // String input data. + input_pos int + + eof bool // EOF flag + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + unread int // The number of unread characters in the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The input encoding. + + offset int // The offset of the current position (in bytes). + mark yaml_mark_t // The mark of the current position. + + // Scanner stuff + + stream_start_produced bool // Have we started to scan the input stream? + stream_end_produced bool // Have we reached the end of the input stream? + + flow_level int // The number of unclosed '[' and '{' indicators. + + tokens []yaml_token_t // The tokens queue. + tokens_head int // The head of the tokens queue. + tokens_parsed int // The number of tokens fetched from the queue. + token_available bool // Does the tokens queue contain a token ready for dequeueing. + + indent int // The current indentation level. + indents []int // The indentation levels stack. + + simple_key_allowed bool // May a simple key occur at the current position? + simple_keys []yaml_simple_key_t // The stack of simple keys. + + // Parser stuff + + state yaml_parser_state_t // The current parser state. + states []yaml_parser_state_t // The parser states stack. + marks []yaml_mark_t // The stack of marks. + tag_directives []yaml_tag_directive_t // The list of TAG directives. + + // Dumper stuff + + aliases []yaml_alias_data_t // The alias data. + + document *yaml_document_t // The currently parsed document. +} + +// Emitter Definitions + +// The prototype of a write handler. +// +// The write handler is called when the emitter needs to flush the accumulated +// characters to the output. The handler should write @a size bytes of the +// @a buffer to the output. +// +// @param[in,out] data A pointer to an application data specified by +// yaml_emitter_set_output(). +// @param[in] buffer The buffer with bytes to be written. +// @param[in] size The size of the buffer. +// +// @returns On success, the handler should return @c 1. If the handler failed, +// the returned value should be @c 0. +// +type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error + +type yaml_emitter_state_t int + +// The emitter states. +const ( + // Expect STREAM-START. + yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota + + yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence. + yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence. + yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence. + yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence. + yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping. + yaml_EMIT_END_STATE // Expect nothing. +) + +// The emitter structure. +// +// All members are internal. Manage the structure using the @c yaml_emitter_ +// family of functions. +type yaml_emitter_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + problem string // Error description. + + // Writer stuff + + write_handler yaml_write_handler_t // Write handler. + + output_buffer *[]byte // String output data. + output_writer io.Writer // File output data. + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The stream encoding. + + // Emitter stuff + + canonical bool // If the output is in the canonical style? + best_indent int // The number of indentation spaces. + best_width int // The preferred width of the output lines. + unicode bool // Allow unescaped non-ASCII characters? + line_break yaml_break_t // The preferred line break. + + state yaml_emitter_state_t // The current emitter state. + states []yaml_emitter_state_t // The stack of states. + + events []yaml_event_t // The event queue. + events_head int // The head of the event queue. + + indents []int // The stack of indentation levels. + + tag_directives []yaml_tag_directive_t // The list of tag directives. + + indent int // The current indentation level. + + flow_level int // The current flow level. + + root_context bool // Is it the document root context? + sequence_context bool // Is it a sequence context? + mapping_context bool // Is it a mapping context? + simple_key_context bool // Is it a simple mapping key context? + + line int // The current line. + column int // The current column. + whitespace bool // If the last character was a whitespace? + indention bool // If the last character was an indentation character (' ', '-', '?', ':')? + open_ended bool // If an explicit document end is required? + + // Anchor analysis. + anchor_data struct { + anchor []byte // The anchor value. + alias bool // Is it an alias? + } + + // Tag analysis. + tag_data struct { + handle []byte // The tag handle. + suffix []byte // The tag suffix. + } + + // Scalar analysis. + scalar_data struct { + value []byte // The scalar value. + multiline bool // Does the scalar contain line breaks? + flow_plain_allowed bool // Can the scalar be expessed in the flow plain style? + block_plain_allowed bool // Can the scalar be expressed in the block plain style? + single_quoted_allowed bool // Can the scalar be expressed in the single quoted style? + block_allowed bool // Can the scalar be expressed in the literal or folded styles? + style yaml_scalar_style_t // The output style. + } + + // Dumper stuff + + opened bool // If the stream was already opened? + closed bool // If the stream was already closed? + + // The information associated with the document nodes. + anchors *struct { + references int // The number of references. + anchor int // The anchor id. + serialized bool // If the node has been emitted? + } + + last_anchor_id int // The last assigned anchor id. + + document *yaml_document_t // The currently emitted document. +} diff --git a/vendor/gopkg.in/yaml.v2/yamlprivateh.go b/vendor/gopkg.in/yaml.v2/yamlprivateh.go new file mode 100644 index 00000000..8110ce3c --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/yamlprivateh.go @@ -0,0 +1,173 @@ +package yaml + +const ( + // The size of the input raw buffer. + input_raw_buffer_size = 512 + + // The size of the input buffer. + // It should be possible to decode the whole raw buffer. + input_buffer_size = input_raw_buffer_size * 3 + + // The size of the output buffer. + output_buffer_size = 128 + + // The size of the output raw buffer. + // It should be possible to encode the whole output buffer. + output_raw_buffer_size = (output_buffer_size*2 + 2) + + // The size of other stacks and queues. + initial_stack_size = 16 + initial_queue_size = 16 + initial_string_size = 16 +) + +// Check if the character at the specified position is an alphabetical +// character, a digit, '_', or '-'. +func is_alpha(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-' +} + +// Check if the character at the specified position is a digit. +func is_digit(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' +} + +// Get the value of a digit. +func as_digit(b []byte, i int) int { + return int(b[i]) - '0' +} + +// Check if the character at the specified position is a hex-digit. +func is_hex(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f' +} + +// Get the value of a hex-digit. +func as_hex(b []byte, i int) int { + bi := b[i] + if bi >= 'A' && bi <= 'F' { + return int(bi) - 'A' + 10 + } + if bi >= 'a' && bi <= 'f' { + return int(bi) - 'a' + 10 + } + return int(bi) - '0' +} + +// Check if the character is ASCII. +func is_ascii(b []byte, i int) bool { + return b[i] <= 0x7F +} + +// Check if the character at the start of the buffer can be printed unescaped. +func is_printable(b []byte, i int) bool { + return ((b[i] == 0x0A) || // . == #x0A + (b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E + (b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF + (b[i] > 0xC2 && b[i] < 0xED) || + (b[i] == 0xED && b[i+1] < 0xA0) || + (b[i] == 0xEE) || + (b[i] == 0xEF && // #xE000 <= . <= #xFFFD + !(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF + !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF)))) +} + +// Check if the character at the specified position is NUL. +func is_z(b []byte, i int) bool { + return b[i] == 0x00 +} + +// Check if the beginning of the buffer is a BOM. +func is_bom(b []byte, i int) bool { + return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF +} + +// Check if the character at the specified position is space. +func is_space(b []byte, i int) bool { + return b[i] == ' ' +} + +// Check if the character at the specified position is tab. +func is_tab(b []byte, i int) bool { + return b[i] == '\t' +} + +// Check if the character at the specified position is blank (space or tab). +func is_blank(b []byte, i int) bool { + //return is_space(b, i) || is_tab(b, i) + return b[i] == ' ' || b[i] == '\t' +} + +// Check if the character at the specified position is a line break. +func is_break(b []byte, i int) bool { + return (b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029) +} + +func is_crlf(b []byte, i int) bool { + return b[i] == '\r' && b[i+1] == '\n' +} + +// Check if the character is a line break or NUL. +func is_breakz(b []byte, i int) bool { + //return is_break(b, i) || is_z(b, i) + return ( // is_break: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + // is_z: + b[i] == 0) +} + +// Check if the character is a line break, space, or NUL. +func is_spacez(b []byte, i int) bool { + //return is_space(b, i) || is_breakz(b, i) + return ( // is_space: + b[i] == ' ' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Check if the character is a line break, space, tab, or NUL. +func is_blankz(b []byte, i int) bool { + //return is_blank(b, i) || is_breakz(b, i) + return ( // is_blank: + b[i] == ' ' || b[i] == '\t' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Determine the width of the character. +func width(b byte) int { + // Don't replace these by a switch without first + // confirming that it is being inlined. + if b&0x80 == 0x00 { + return 1 + } + if b&0xE0 == 0xC0 { + return 2 + } + if b&0xF0 == 0xE0 { + return 3 + } + if b&0xF8 == 0xF0 { + return 4 + } + return 0 + +}