From f54d97e4a9839d5954c4093459a13caf4ab012d5 Mon Sep 17 00:00:00 2001 From: Wingysam Date: Tue, 20 Nov 2018 14:19:58 -0500 Subject: [PATCH] Initial Commit --- .gitignore | 39 + README.md | 27 + config/index.js | 8 + index.js | 57 ++ logger.js | 12 + middlewares/locals.js | 8 + middlewares/verifyAuth.js | 11 + package.json | 27 + routes/adminSettings/index.js | 60 ++ routes/index.js | 37 + routes/login/index.js | 29 + routes/logout/index.js | 14 + routes/profile/index.js | 39 + routes/setup/index.js | 39 + routes/wishlist/index.js | 119 +++ static/css/main.css | 14 + static/img/logo.png | Bin 0 -> 99892 bytes static/js/nav.js | 8 + views/adminSettings.pug | 30 + views/includes/messages.pug | 6 + views/includes/navbar.pug | 36 + views/layout.pug | 28 + views/login.pug | 20 + views/logout.pug | 7 + views/profile.pug | 20 + views/remove.pug | 7 + views/setup.pug | 20 + views/wishlist.pug | 36 + views/wishlists.pug | 12 + yarn.lock | 1762 +++++++++++++++++++++++++++++++++ 30 files changed, 2532 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 config/index.js create mode 100644 index.js create mode 100644 logger.js create mode 100644 middlewares/locals.js create mode 100644 middlewares/verifyAuth.js create mode 100644 package.json create mode 100644 routes/adminSettings/index.js create mode 100644 routes/index.js create mode 100644 routes/login/index.js create mode 100644 routes/logout/index.js create mode 100644 routes/profile/index.js create mode 100644 routes/setup/index.js create mode 100644 routes/wishlist/index.js create mode 100644 static/css/main.css create mode 100644 static/img/logo.png create mode 100644 static/js/nav.js create mode 100644 views/adminSettings.pug create mode 100644 views/includes/messages.pug create mode 100644 views/includes/navbar.pug create mode 100644 views/layout.pug create mode 100644 views/login.pug create mode 100644 views/logout.pug create mode 100644 views/profile.pug create mode 100644 views/remove.pug create mode 100644 views/setup.pug create mode 100644 views/wishlist.pug create mode 100644 views/wishlists.pug create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9df9fcb --- /dev/null +++ b/.gitignore @@ -0,0 +1,39 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Dependency directories +node_modules/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# Mac files +.DS_Store + +# Database +db/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2f190f5 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# Christmas Community +Web app for your family's Christmas shopping + +## Purpose +To create a simple place for your entire family to use to find gifts that people want, and to avoid double-gifting. + +## Install +```sh +git clone https://gitlab.com/wingysam/christmas-community +cd christmas-community +yarn +``` + +## Configuration +Add environment variables with a .env. Example: +```env +SITE_TITLE="Christmas Zone" +PORT=80 +``` + +## Startup +```sh +yarn start +``` + +## Setup +Visit `/` on the HTTP server to add an admin account. \ No newline at end of file diff --git a/config/index.js b/config/index.js new file mode 100644 index 0000000..afb8523 --- /dev/null +++ b/config/index.js @@ -0,0 +1,8 @@ +require('dotenv').config(); +module.exports = { + dbUrl: process.env.DB_URL || 'db', + defaultFailureRedirect: process.env.DEFAULT_FAILURE_REDIRECT || '/login', + port: process.env.PORT || 3000, + secret: process.env.SECRET || require('uuid/v4')(), + siteTitle: process.env.SITE_TITLE || 'Christmas Community' +}; diff --git a/index.js b/index.js new file mode 100644 index 0000000..54b3a09 --- /dev/null +++ b/index.js @@ -0,0 +1,57 @@ +const LocalStrategy = require('passport-local').Strategy; +const bcrypt = require('bcrypt-nodejs'); +const flash = require('connect-flash'); +const passport = require('passport'); +const express = require('express'); +const PouchDB = require('pouchdb'); + +const config = require('./config'); + +const logger = require('./logger'); + +const app = express(); + +const db = new PouchDB(config.dbUrl); + +passport.use('local', new LocalStrategy( + (username, password, done) => { + db.get(username) + .then(doc => { + bcrypt.compare(password, doc.password, (err, correct) => { + if (err) return done(err); + if (!correct) return done(null, false, { message: 'Incorrect password' }); + if (correct) return done(null, doc); + }); + }) + .catch(err => { + if (err.message === 'missing') return done(null, false, { message: 'Incorrect username.' }); + return done(err); + }); + } +)); + +passport.serializeUser((user, callback) => callback(null, user._id)); + +passport.deserializeUser((user, callback) => { + db.get(user) + .then(dbUser => callback(null, dbUser)) + .catch(err => callback(err)); +}); + +app.use(require('body-parser').urlencoded({ extended: true })); +app.use(require('express-session')({ secret: config.secret, resave: false, saveUninitialized: true })); +app.use(flash()); +app.use(passport.initialize()); +app.use(passport.session()); + +app.use(require('./middlewares/locals')); + +app.use((req, res, next) => { + logger.log('express', `${req.ip} - ${req.method} ${req.originalUrl}`); + next(); +}); + +app.set('view engine', 'pug'); +app.use('/', require('./routes')(db)); + +app.listen(config.port, () => logger.success('express', `Express server started on port ${config.port}!`)) diff --git a/logger.js b/logger.js new file mode 100644 index 0000000..7076ecd --- /dev/null +++ b/logger.js @@ -0,0 +1,12 @@ +const chalk = require('chalk'); +const config = require('./config'); +const colors = {log: 'blue', success: 'green', error: 'red', warn: 'yellow'}; + +// rewrite to use Object.keys() +for (let property in colors) { + if (colors.hasOwnProperty(property)) { + module.exports[property] = (type, msg) => { + console.log(chalk.keyword(colors[property])(`[ ${type.toUpperCase()} ] ${msg}`)); + }; + } +} diff --git a/middlewares/locals.js b/middlewares/locals.js new file mode 100644 index 0000000..dcf8de0 --- /dev/null +++ b/middlewares/locals.js @@ -0,0 +1,8 @@ +const config = require('../config'); +module.exports = (req, res, next) => { + res.locals.successes = req.flash('success'); + res.locals.errors = req.flash('error'); + res.locals.config = config; + res.locals.req = req; + next(); +}; diff --git a/middlewares/verifyAuth.js b/middlewares/verifyAuth.js new file mode 100644 index 0000000..1d43679 --- /dev/null +++ b/middlewares/verifyAuth.js @@ -0,0 +1,11 @@ +const config = require('../config'); +module.exports = options => { + return (req, res, next) => { + options = options ? options : {}; + if (req.isAuthenticated()) { + next(); + } else { + res.redirect(options.failureRedirect || config.defaultFailureRedirect); + } + }; +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..f6c53ce --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "christmas-community", + "version": "1.0.0", + "description": "Christmas lists for communities", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node index.js" + }, + "author": "Wingysam ", + "license": "MIT", + "dependencies": { + "bcrypt-nodejs": "^0.0.3", + "body-parser": "^1.18.3", + "chalk": "^2.4.1", + "connect-flash": "^0.1.1", + "dotenv": "^6.1.0", + "express": "^4.16.4", + "express-session": "^1.15.6", + "get-product-name": "^0.0.2", + "passport": "^0.4.0", + "passport-local": "^1.0.0", + "pouchdb": "^7.0.0", + "pug": "^2.0.3", + "uuid": "^3.3.2" + } +} diff --git a/routes/adminSettings/index.js b/routes/adminSettings/index.js new file mode 100644 index 0000000..896c1a7 --- /dev/null +++ b/routes/adminSettings/index.js @@ -0,0 +1,60 @@ +const verifyAuth = require('../../middlewares/verifyAuth'); +const bcrypt = require('bcrypt-nodejs'); +const express = require('express'); + +module.exports = (db) => { + const router = express.Router(); + + router.get('/', verifyAuth(), (req, res) => { + if (!req.user.admin) return res.redirect('/'); + db.allDocs({ include_docs: true }) + .then(docs => { + res.render('adminSettings', { title: 'Admin Settings', users: docs.rows }) + }) + .catch(err => { throw err; }); + }); + + router.post('/add', verifyAuth(), async (req, res) => { + if (!req.user.admin) return res.redirect('/'); + bcrypt.hash(req.body.newUserPassword, null, null, async (err, newUserPasswordHash) => { + if (err) throw err; + await db.put({ + _id: req.body.newUserUsername, + password: newUserPasswordHash, + admin: false, + wishlist: [] + }); + req.flash('success', `Successfully added user ${req.body.newUserUsername}!`); + res.redirect('/admin-settings'); + }); + }); + + router.get('/remove/:userToRemove', verifyAuth(), (req, res) => { + if (!req.user.admin) return res.redirect('/'); + res.render('remove', { userToRemove: req.params.userToRemove }); + }); + + router.post('/remove/:userToRemove', verifyAuth(), async (req, res) => { + if (!req.user.admin) return res.redirect('/'); + const doc = await db.get(req.params.userToRemove); + if (doc.admin) { + req.flash('error', 'Failed to remove: user is admin.'); + return res.redirect('/admin-settings'); + } + await db.remove(doc); + const docs = await db.allDocs({ include_docs: true }); + for (let i = 0; i < docs.length; i++) { + for (let j = 0; j < docs[i].doc.wishlist.length; j++) { + if (docs[i].doc.wishlist[j].pledgedBy === req.params.userToRemove) { + docs[i].doc.wishlist[j].pledgedBy === undefined; + if (docs[i].doc.wishlist[j].addedBy === req.params.userToRemove) await db.remove(doc); + else await db.put(docs[i].doc); + } + } + } + req.flash('success', `Successfully removed user ${req.params.userToRemove}`); + res.redirect('/admin-settings') + }); + + return router; +}; \ No newline at end of file diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..903c1b3 --- /dev/null +++ b/routes/index.js @@ -0,0 +1,37 @@ +const verifyAuth = require('../middlewares/verifyAuth'); +const express = require('express'); +const path = require('path'); + +module.exports = (db) => { + const router = express.Router(); + + router.use('/', express.static(path.join(__dirname, '../static'))); + + router.get('/', + async (req, res, next) => { + dbInfo = await db.info(); + if (dbInfo.doc_count === 0) { + res.redirect('/setup'); + } else { + next(); + } + }, + verifyAuth(), + (req, res) => { + res.redirect('/wishlist'); + } + ); + + router.use('/setup', require('./setup')(db)); + + router.use('/login', require('./login')()); + router.use('/logout', require('./logout')()); + + router.use('/wishlist', require('./wishlist')(db)); + + router.use('/profile', require('./profile')(db)); + + router.use('/admin-settings', require('./adminSettings')(db)); + + return router; +} \ No newline at end of file diff --git a/routes/login/index.js b/routes/login/index.js new file mode 100644 index 0000000..1b32eb0 --- /dev/null +++ b/routes/login/index.js @@ -0,0 +1,29 @@ +const passport = require('passport'); +const express = require('express'); + +module.exports = () => { + const router = express.Router(); + + router.get('/', + (req, res) => { + if (req.isAuthenticated()) { + res.redirect('/'); + } else { + res.render('login'); + } + } + ); + + router.post( + '/', + (req, res, next) => { + next(); + }, + passport.authenticate('local', { + successRedirect: '/', + failureRedirect: '/login', + failureFlash: 'Invalid username or password' + }) + ); + return router; +}; \ No newline at end of file diff --git a/routes/logout/index.js b/routes/logout/index.js new file mode 100644 index 0000000..1353316 --- /dev/null +++ b/routes/logout/index.js @@ -0,0 +1,14 @@ +const verifyAuth = require('../../middlewares/verifyAuth'); +const express = require('express'); + +module.exports = () => { + const router = express.Router(); + + router.get('/', verifyAuth(), (req, res) => res.render('logout')); + router.post('/', (req, res) => { + req.logout(); + res.redirect('/'); + }); + + return router; +}; \ No newline at end of file diff --git a/routes/profile/index.js b/routes/profile/index.js new file mode 100644 index 0000000..bca3cd0 --- /dev/null +++ b/routes/profile/index.js @@ -0,0 +1,39 @@ +const verifyAuth = require('../../middlewares/verifyAuth'); +const bcrypt = require('bcrypt-nodejs'); +const express = require('express'); + +module.exports = (db) => { + const router = express.Router(); + + router.get('/', verifyAuth(), (req, res) => res.render('profile', { title: `Profile Settings - ${req.user._id}`})); + router.post('/', verifyAuth(), (req, res) => { + if (req.body.oldPassword && req.body.newPassword) { + bcrypt.compare(req.body.oldPassword, req.user.password, (err, correct) => { + if (err) throw err; + if (correct) { + bcrypt.hash(req.body.newPassword, null, null, (err, hash) => { + if (err) throw err; + db.get(req.user._id) + .then(doc => { + doc.password = hash; + db.put(doc) + .then(() => { + req.flash('success', 'Changes saved successfully!'); + res.redirect('/profile'); + }) + .catch(err => { throw err; }); + }) + .catch(err => { throw err; }); + }); + } else { + req.flash('error', 'Incorrect old password'); + res.redirect('/profile'); + } + }); + } else { + res.redirect('/profile'); + } + }); + + return router; +}; \ No newline at end of file diff --git a/routes/setup/index.js b/routes/setup/index.js new file mode 100644 index 0000000..bd0f043 --- /dev/null +++ b/routes/setup/index.js @@ -0,0 +1,39 @@ +const bcrypt = require('bcrypt-nodejs') +const express = require('express'); + +module.exports = (db) => { + const router = express.Router(); + + router.get('/', + async (req, res) => { + const dbInfo = await db.info(); + if (dbInfo.doc_count === 0) { + res.render('setup', { title: 'Setup' }); + } else { + res.redirect('/'); + } + } + ); + + router.post('/', + async (req, res) => { + const dbInfo = await db.info(); + if (dbInfo.doc_count === 0) { + bcrypt.hash(req.body.adminPassword, null, null, (err, adminPasswordHash) => { + if (err) throw err; + db.put({ + _id: req.body.adminUsername, + password: adminPasswordHash, + admin: true, + wishlist: [] + }) + res.redirect('/'); + }); + } else { + res.redirect('/'); + } + } + ); + + return router; +} \ No newline at end of file diff --git a/routes/wishlist/index.js b/routes/wishlist/index.js new file mode 100644 index 0000000..1e53c07 --- /dev/null +++ b/routes/wishlist/index.js @@ -0,0 +1,119 @@ +const verifyAuth = require('../../middlewares/verifyAuth'); +const getProductName = require('get-product-name'); +const bcrypt = require('bcrypt-nodejs'); +const express = require('express'); +const uuid = require('uuid/v4'); + +const totals = wishlist => { + let unpledged = 0; + let pledged = 0; + wishlist.forEach(wishItem => { + if (wishItem.pledgedBy) pledged += 1; + else unpledged += 1; + }); + return { unpledged, pledged }; +}; + +const ValidURL = (string) => { // Ty SO + try { + new URL(string); + return true; + } catch (_) { + return false; + } +} + +module.exports = (db) => { + const router = express.Router(); + + router.get('/', verifyAuth(), async (req, res) => { + const docs = await db.allDocs({ include_docs: true }) + res.render('wishlists', { title: 'Wishlists', users: docs.rows, totals}) + }); + + router.get('/:user', verifyAuth(), async (req, res) => { + try { + const dbUser = await db.get(req.params.user); + res.render('wishlist', { title: `Wishlist - ${dbUser._id}`, wishlist: dbUser.wishlist }); + } catch (error) { + res.redirect('/wishlist'); + } + }); + + router.post('/:user', verifyAuth(), async (req, res) => { + const isUrl = ValidURL(req.body.itemUrlOrName); + const item = {}; + let productData; + try { + if (isUrl) productData = await getProductName(req.body.itemUrlOrName); + } catch (err) {} + item.name = (productData ? productData.name : req.body.itemUrlOrName); + item.addedBy = req.user._id; + item.pledgedBy = (req.user._id === req.params.user ? undefined : req.user._id); + if (isUrl) item.url = req.body.itemUrlOrName; + item.id = uuid(); + const doc = await db.get(req.params.user); + doc.wishlist.push(item); + await db.put(doc); + req.flash('success', (req.user._id === req.params.user ? 'Added item to wishlist' : `Pleged item for ${req.params.user}`)); + res.redirect(`/wishlist/${req.params.user}`); + }); + + router.post('/:user/pledge/:itemId', verifyAuth(), async (req, res) => { + const docs = await db.allDocs({ include_docs: true }); + for (let i = 0; i < docs.rows.length; i++) { + for (let j = 0; j < docs.rows[i].doc.wishlist.length; j++) { + if (docs.rows[i].doc.wishlist[j].id === req.params.itemId) { + if (docs.rows[i].doc.wishlist[j].pledgedBy !== undefined) { + req.flash('error', 'Item already pledged for'); + return res.redirect(`/wishlist/${req.params.user}`); + } + docs.rows[i].doc.wishlist[j].pledgedBy = req.user._id; + await db.put(docs.rows[i].doc); + req.flash('success', 'Successfully pledged for item!'); + return res.redirect(`/wishlist/${req.params.user}`); + } + } + } + }); + router.post('/:user/unpledge/:itemId', verifyAuth(), async (req, res) => { + const docs = await db.allDocs({ include_docs: true }); + for (let i = 0; i < docs.rows.length; i++) { + for (let j = 0; j < docs.rows[i].doc.wishlist.length; j++) { + if (docs.rows[i].doc.wishlist[j].id === req.params.itemId) { + if (docs.rows[i].doc.wishlist[j].pledgedBy !== req.user._id) { + req.flash('error', 'You did not pledge for this'); + return res.redirect(`/wishlist/${req.params.user}`); + } + docs.rows[i].doc.wishlist[j].pledgedBy = undefined; + if (docs.rows[i].doc.wishlist[j].addedBy === req.user._id) docs.rows[i].doc.wishlist.pop(j); + await db.put(docs.rows[i].doc); + req.flash('success', 'Successfully unpledged for item'); + return res.redirect(`/wishlist/${req.params.user}`); + } + } + } + req.flash('error', 'Failed to find item'); + return res.redirect(`/wishlist/${req.params.user}`); + }); + + router.post('/:user/remove/:itemId', verifyAuth(), async (req, res) => { + if (req.user._id !== req.params.user) { + req.flash('error', 'Not correct user'); + return res.redirect(`/wishlists/${req.params.user}`); + } + const doc = await db.get(req.user._id); + for (let i = 0; i < doc.wishlist.length; i++) { + if (doc.wishlist[i].id === req.params.itemId) { + doc.wishlist.pop(i); + await db.put(doc); + req.flash('success', 'Successfully removed from wishlist'); + return res.redirect(`/wishlist/${req.params.user}`); + } + } + req.flash('error', 'Failed to find item'); + return res.redirect(`/wishlist/${req.params.user}`); + }); + + return router; +}; \ No newline at end of file diff --git a/static/css/main.css b/static/css/main.css new file mode 100644 index 0000000..d268c00 --- /dev/null +++ b/static/css/main.css @@ -0,0 +1,14 @@ +@import "https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.0/css/bulma.min.css"; + +.inline { + display: inline; +} + +.linkButton { + background: none; + border: none; +} + +ul.noStyle li { + list-style-type: none; +} \ No newline at end of file diff --git a/static/img/logo.png b/static/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..09366a25d2ba0082006a687101ad61b6bf44864f GIT binary patch literal 99892 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
Yb1wvb8vs=3_sX;V0CXMX^2D>Cs@!FHth z`P&(_sEB5sW!Qlsi%J}gDPH*#-A+EiLfUR~=c4 z4a~B`Hbal@{Er#w-k-OxGhXXt1Q84saA&cZ`o{2f&bFa06We*K5aXtQfRT*lv=(LV zCH6r3Y~B{pQa8_>_(M*QO93H@^>~~*&W^SH;tVXm#dHC1xAts3{kXCGa`r7UVo9N6 z{`@qd3`p=&Qq%A3n3c`#u$u)c!59i@r@)&0Ldj;MM>losPr%eZ9*5fz2A$PZb^hho zf|VP%NI=in;d9Mz58nX2QN>nl6KWy~*cAR3XlMMDZ$^gn|3V$P5=c0+vtiBY^9jxv zaO!Ys+9QU`#?N}H-z_P`=u}SDdxcpf39g4nGQu7w`AF2HyWcMv4awEjHL5+DKFmo| z|H=FDnf#ipI^LmqiEz;~eo??(J4cy&M=NT1Ic zMn(Wadpa+S$P3y0$uyk)AxBm;;)j%dTq1o3K)L0-#p(qgwV-fQ^kT5uf;X>Atb#E> ziZ4mC&VsX9g@J*v{I=fwG0iDMBg5@7Dg~lJ-gG&<>t7$Dzv${Tpu?8wXb7xPB#$%g zFo9&vXH?~uX+MR#EqcDvYs-4|)9>^Ho%3kicIz=EdTM!Eszfd>1OqnJ%OA*t80F;T z$gWt1j05gi(t$vkB6lMy0+^g?ums{Wm@%0dKK%UU3yE*JyS|FgXS;e^I1@$2sZBrH$gDNA8BGN+#I(bW_T_J@2Iy zhw#=K3!>?rglc z*dBox&+Hbeuv-o(vkHTBatEPZfbcxX@dVv=0z4^zPmInD*2q7e4`{Ny{ln{hR8*%m zahb{YI48iZzg}=CLFv@#H8WNeD9jO{b5jUj)B0ntrH=1VC_S?piljx8D5UKea9C81R;uDSIj-BEHkQX4_x^ z$s$?@X)0+&x~mJdj=buL54?+*hyJW^$;3s&;lxJ3rmK}FSe3r>Fr=?khl8+o@dIw{OX%6<3}slvcO+!+fm;AN5toZWmdOQq<~ zVyWD`GE|Pk<>eM`8I!~AC zfN`g%uJ0^!R%_B1+1smT%y3xTpd4JTir6NdDH|^hxZ8CDCV#4LGIAg!>(H0+;T=Yh zvC(8LJ{H4oL&NI4g038w*XLW;Nl!8fZE!(_fJrc&_sfq1kw`+JEGAI72I^M}RhE?G zaJim7ER39gWS(j?@|X^~`7-*~&yOGUAXs+an8zBlw5BcMaL5C=Jz+Vo8Y^P&=po_*j(?Y85XkN}LYpDo)^rJfI7|qsaMS zdo0bW3PVB51N=&vNDg=MShTbHf2sDy^|OEg(SYX11|O0fMa=$8QIu zNf}>PoBjyu+`J`~u@5Hfpm9?#u(9xH>>j*axDn8u!1ydD> z=$Jl&1Q>?)+dBXcb1up;Fnaad3I*v zs$ROH>PQNqrFHECos`E>QO)f|)AG$3K(nRay54S$t|lWD*txG$;+Nbwqw*^n=H1eA zQZ)E|*SO9NTwH=*e+d%GFx2sa?}u&O$no7BuZ?tlDO4AOc>Zc?ex}3@M7}ims(3p| z4^FA;f0#B_4s9_-g_5#l57P^27nqiR%--bO%;lLqgL*Pdf z^;V%csk!uVD>;lvuh}m^M|Jol{pxd@$d0~;Z|n3>;>d}rRAEoO0WJI>>Sdp+P*Hlk z5REaY^{f4QYw&vT6Aes#F&gCGtiRx1n_9?Q3j8y8p=)1vcAQJ0G*I3w@9hJDu7;~^ zAuRqlp@ul74%3eqB1ZTCKxT@^|Wo1nVy`>YXn!K~qZ!gYu@dF^6k+ehGTM`$n z-I7h8YyiD!!|3=X9}1Q&=Q!B zS~LHXI?}QOSY1l?6D^zo545(U$vQY9;AX8Tr*>lij8MQi6*TbjD5L#N152b!KW_#r z05&&T|2++;FG|$#{E#a_Pb41PS?rCaCtn>`tAJGiq4;K>fLaG*dY)@&?~vBN#n(i&8~#LOyqbqL?g z=H(2{Ev5L`Ze(U=HS{(vY=PL$9A-lpfUR)>;M{$g~G&V4V!w;-lMyZz7*G#`+D zYm52Ht$E&7JGmGA5k}73yY|& zlHiX&;8~LOsO9eZG9 z$8vIl%`FvRf4u-PZ(FM*w8RKc-VwT_^uvvbYSspztRq(&b4#uC*Sz5RCwqLg+uz(x zTg8|B8MJTMtrP2DvhH5fIl)E0e}Ff@dk1pCyrs4*aS*YND!#7H7gY^U%;0ZFRA==c z!K(|+YgJRCcZ=2YWX(z*s64)_D*66=Mh1n3r&$)qmuPWKU;P4%2u&=)M5S{pIVqH< zDGv+`-@YzGgu6WPok$y-sst3X+Xf|Z!7K?4M!+w}Q6iWo^1@Ge8AES0a3%R-OBKu2 z@HKRSD4e>TPcWASSSf!|>^;y+e``31X53+t|)ld57G&f_l_ zPX<+;Vc&v<5XAm|cJjKzg!(1$M!QnAnJxPedm&H+v>qW5Zu%Z0W&4}#0J>UOkZS2v zH9kjTfD6?GuU$FkPja6AP-ccIus+u}_iD`m*l1?X4a6^*Qb8Q9b+i8*eY8_078<{k zu|v*Mo4`D3H^D1l%lQ8lQkBz5{i=I)167~GZ#9TH0tVZe(m_d8lt~P8Lf`cGv=oeG z`B5HXecp_`oiv;>XitX(U_3J z`}%pnkgyy8J>iX3$%^w#+5s34vGN-UaSGX!8AK zR0Q_HUVzCQLL|PO*)oKZvaPqp(k$~cCQIVysg~IbmnmT~DBra{l-sdP-R))_8yc`Y z(D{}<LKA7_KNr_>CpIww{89I%`anRLqoI%))+Vy*CkL6GF~ceXq5c zR>Q#O6FLK&$Ncw7FOqsJ7JCf#!zq4JWO6W0@#Les%V+l>St8}t(+h$XmJi*)e!!t7 z|H_Y<28%*OKC)IE?XgFCLm=e&!)jjUiyu~NX3G|V`@#qoR$7&!tt-Z;t?B>_Fmk4N zZRH*2FS@$BjL&3wz|O6L$E)%8XW)&6U7$kp7t+^E z^95A}5yp?t0py@jlGM5vqbb?Y8TPjB{_7RIs%>7~Fon#ML+RjgB~A$z8bR4E8gX%1 zX3Do{~k*dXS zzv^A-ujqA8yl%tch|mt~1J#`Kkk?8o8A(1RVhoc#Z$~1YV+y02^iI>vCkjeHmgW8D zZK^H(tbOQmhosM2coR#tx%r2@yIXp*(}hP%C|9(p02B?u2pKZ6_PnH>G>QKZ13zzD zzq%BRR{#{K91R~brBvxtMP|11#;5nH9Kgh<;#AC$TUOovX$Ja6`oLN@gilNJbo>`M1Ok zAph+|dL^d6$e-a}%Hdv38?0tivqdECkk`{JEQLpNz&#$aDHG*h?ZuVSOUmY+tyeTP z0I~CVUCO`uNujs+Ue*J|0=&@;qr214G>mg(DSwoU`gLorVq}hj(44E? zbne^qp_4_=J=#tMh->F5t>5CiE(>d;8gz_QpmtKthn_FoksT0?u_Z%4p75@T1&>aw z^su2abvef?hHI-#XMe5)lPjBm1_V^xf|SD$%RymMsScz#Cq7&Mh+R zS3Uh=nwsS<#f0SlVKpmyMlaGjyuVsOIj~$5)V<1#ST$OtuP-jvO&~qUXgMO;6{#OO zu8xs#Z%kkODslpR9kZP}QFoYn#e+6e5YJ9_k8jJCi4a0+Zqp7Mee;(_WWE}E%IijZ)Lj##HDDWzvGh?_flzUaV@ZVVL5I%lLGG>0H0 z#WdDa=@mm^6cp@weEQ^v_@TMkXG27C>&)G&3G;coH47C)?n~iEax!0HJmWz0sl)Q94@kUZgn`8u0bL_7%eLhGBnXxFLZkXJe* z?JVD=t`78A?e~#;wFNhO8wC~IZn`b`AHojCdc&Pl>=7MOlAs8 z%B=dlopfL0=T8gihrYX#hY#}PMepCAD9?q$sF(=~pOpuC#WO)?F=#sLyVyDTitN|F zTj`0@J{FXnxY z;4|0oIGejfOtSag&zGyWtw=W*)ozx$`A0cqPDxMIE&obv7vJ0exo(-Sjbwo@pZSk7 z#pOK9z}kGRueT{BX=J;wD_f+&GR<;3P>hYUf%QVFAv=YV{!{}MPnTD>>PBtfy13}~ z%JhmmyL$3VNkuj}joy7KAW)+N#ZLb<#!@gr+;Z`9ACF+J@9Jvb%8@E+L}0G2>>ZR~ z`2b8#@XUYzz3M8_tNDe=0xO?$lRiDO+Zn&sc49$m9V}twDV>-y9hlD=ht!{2ZBCcj zt`{|Vu~g?Jz^?-0##IF`p+j={zvdk;^mLsjt-)loqxj#Q%zwGjM2_!)Ml1J%#$st> zGw)~${1okjQ66L=rat6R>hP zXF~ZE<(cR5E5`*9V-=Q7_Uj61`tOK|=`Kq5g@p?5Ex~C&&>9)hPBV2~u8OtI1Sz&W zJsFcq=uq8RO<~`5>AFKPNzXiy9Wr4(fvLuZHhhOKFC+X0 zhetPKTYLz3t)|AVNDZ+YU8!QNXtUHR6D3c7e|;J@8WU5!L4rWuuSW}>l?J^eTcpg< zck=Cy{a{H+DZkbp1RkPqU;u@dJB_vnx!MC~8)@e)_2E^iW8L_igUIFIoK13WOWrqv z)OJ53W}*!AXih;q^+DW@MjVL_EQVu&f{HyJAc;$pKfD+WNWVmOE9$q#NOQ=6pKh0L z2*U3Qw+&EX_@ylzJ zfxPeaWfup$lkl$^MTW{@>~-YEv%{Zjg$agIAze3+^w(Fu2_~1p$~A|c4B+K!B_@K7 z$xIiLfFdMcl_Eq2L)A%D;~Jm_|#&YZF;-R@x2)OqXvw1 z_^w)2tc&R*Ixq0vR1V^uo_-|_}Xd60gtNgi!1A21$dw@W6Y;-A(XME9+uHXk%dO#0n%-Pvg& z7SIbm`i1BWCpYkzvUZ{pxnJAixf)A5^J^wCb*P|=`qUL=umZkC7%B3<|FB3@S?2Qx z+fU5j6sjG_f81emI^YwqHF2z;7(0Vr|I<4JQIL1+>1bC2_oR7|ZdG(?%x; zzWRi%HFwy>4158_(G2V>1vxmpQ4f+heXggZXpHoi+W>>PQkgUYkU|Ccm>~MDwSLlm zX;Jk5E*U>7dh*cd6yZfO*p*%ON>HeF=M=c2RO^s=+BvZ3)up)z zQdU+bau(Cvx0G&^Dp1PZd4obF`TTek*bqOia2h6`+4oAlJ3+aub?5U|xF<)wsKpC% zIgc&d`g{B>rT<)38XDhhIO+#ZQO4mixgSB>xpc4G^NI-cUA#66Ik^(1sVWdVUQVy- zM?lKcUUi$W_DU?LZsB~?^{MA96wS$z#JU)mtEL((+kj)R2pb8vYkD2|Vrc|V{;BA} zW(g6c{hE~Ydt;e(+RyJ_)&)$62sLW3)hvn##R52l((Cs2e`Z*>u~zR>T~?nxLWVWH zg1iEjggMjFx;s()WN~Y-^Z9rUoej!it*M@ZeK6=(b6o2ZO7bz=RHggQ(xkx6nZW@{ zu4Hfa(^|hHLHp#XaBvU2a@edD8ZtnkEUgw_G|)egGyPu)-L7_LB^kN62YCI~W6#kPXAuE=%)8o28++Kj7 z$ir8z4qmg~Z!OZ!ErU$4Vfn>fG(%eqh{EDZK0*Bb0YB4vdlxLd?6ZH1SerEm7SVT& z*X%Fb<*y(Yp6vOkJoukF5pf1r9!N&&SQj6b5W2fqv9;X+;;vkcG`sR`(?HV2+Hzuo z#!^mpu*#z>_R;yC{iW}yR`!y?5>8Kc2F9tMH1-ePtdgn+zQ~Dh|A{a$HT~?uhp}R< z7Mb{{L^%mZtkR^~I)}qOZ^9{V^wBN5tviChhPBYp_Ed+OHx8G=pE*iodDYuutMU)L zeqcr4dq^*RN=-GY&^DstDEW*E0gNMd2)y_2lLKZe`LA!&)(~FpE43v_yt!^=cdQfr zzA8E=M`_p?S+k1?uyH6pKCa`VY3ls^@iVDXHdOhTd;3CzA1=KgM)P(i@CDth|9hM& zV}jy$=80?H7woVdlrif^Hm}qL85p#3tR~n{&5sBzEun`a7FBJQ0@U~)g$Z3`q?CxY zskV`$qrMKgvZ~S{S#ReUHK}vq$Fc7i`@_`>E3Le$*Ihl-H4faUaSRMx#3~>ShZj)k z7MVLL)d)QwE;=Y9AHJvr@udDdX?!g5B>4NlSZIPVQW;I`9b5_*XnEMr9U^ppL??b6%Zm(e@~~Mwx3u%|y%Lxd*16OAjg`fFtpjhM2d<=1 zYW;u;vSI(7ffr>`q%arv^{Ff15Z-t0{}o4A_}Z@GUN1eNH9Dsrii!Q9)1T8bP)jW- z75%1HgnsG1vT{+^_$&3Ig{sCaDyfi!O7(@eqV4@9%CmTqQysUJCZ~!4<9`XC8g|u# zU%R!*{M ztNHe0sNjbpkMw;~<}W5g)wT{o6+nbP{5@89Zz{Wt+J|&oTD4494?4LiYvnkiPofKoKW^CIP99g z`$iYI`>62Ca`!ILI&@-IY1&q!iyRI0mE&X=TU{I0H%R(|H*&e^}D$R4$S1$auxyxjW} zmURn1m&5x6xH(2>ct^d?F{1RPt+~H*8t*nQ9|X31n+FGfbI4Se0Z&UZSRhMbt9nX++4;PDs|!DGwmz07nyes|2&wQ=#gq#Qt?&_n?MJN zP8QX)Wc0LKRLP%PJpa4*Bez?*R2)1l#qRiyU$SZqsIc=p`GAOmKZF7iCDHUIRb(>L zk0Ff#HxI2lH;<0%c<4(@a(5vC4|L7g^90L9i`4{3R4-#R-)3Kqnropro3eh{k-)TJ zBrk9t_>i2z+kd(vp7|Zw8yOkeF8J$*HSPqhZ>)=B+EmW)Rirmf`b(P0_m;mHTZP}6 z#`)P774zX_tDxnm#boUV!cS9EbIQ!2%`~NT`?kHPbeUqYomK%u_ zxqhQt|6zZLTnS}r6Hm*g@$Z4UeYBnr=$AZrQ8`PPW9ACcb!RP)VcF)=h>87A*&_Sza|=bL)hZBE`Q!+T z9;BG*5Vkb8;Gvk9OG-+rgPx`Fz$Rz>YBMiWEa=tr7ELfa3*;O`M!QLT?AEsK>g3sT z0&F&1Er8R|B-wUz`|mLP?a_scSKl3)nT6YeK>s3fdqhC*@5|JRCYfiim~>9y+!p%QG!Bp6=WZ|6T(Xbor2k3Mwit)-y-^ z0zXAo^=p4TRpJ3^7P?9gkBbHd$@*lcbXx5PFWjCj+HS*P(sWfPW05*tl+1dY>dDgA zZ9tKE`&%lrnwm3_N(0D(9@O{lD~PvUI(SSiO-MfJu5>${E1zO&xXEs)Oeuoc6 zVX12d$+EpswsZca0;F72VopZ)Q{*F?zf7^WtdlRuzxu4z!!&DmEdPZ7neJidtFjzY{{ zOeGW!PeHwkoQJ~7RXaJ-HM|1f|Ln<7;^VvaNT{TtlA-PvWDJx}GDIntQyI9pd#+|KV0QnMZs0AO4*f~^ktSQ42YXYFK;7@^ zl7ANzJv=HWd>9;jkrAuN#*m!{!Aae}(KN|(HNE8XS`dI?P2IM1ZKk;+?gOXEl~Mwn zCZ(vvvH~G_*YNgDql2@PLj86k|Ae$f?5;wS@!vdb?LKGD-4s?fJtKW(O-;>G{NAyA zUVFtI?y$|dtp_6NN*}R*Kg78FB`NYoG5$T}P52IL<#&l-`&SBy*!0(p)dp@KIrB`_ z9wYfW?;ID3b*>aYMHZCZ1vczAT3u7i-Z=qo9e+oDMcHZ<@`#Q++j8(Z@5H2j@{!Mi z*#f)Fn@=1jz&^k?n*r6(TAewSM8HyZeLSMi&DqTFel_ZEWH0k;nY*&L^>KOF`+I4x zs}$Zm%b%IiHr8#)RdZD3untv7y983kQ~M^@f72y)g7W+&dWVLbFGnUBRi@p%ydujT z-u1VCOLR`W9>0zW{-lD87WQgR{Pvt`xHf4b3^-K=#$%3!(kq{?s8P$7sT7P|e%}N- zOPBFMC1)j1ZaaN);ExPe0TUe^E9!h zFUsDt%^OQ%rl`YrTE{!v$f@QJv=8@0JW$W49(^mjR*|mQY51@h|A|)v) zk`jWX3JORm-5t{1EDNHvAfj}rAV_z^0xn%ECC$=EE=w)2Ec_3?-}lTg!;CXL=RWs2 zSN!6-uUXwj#cbVnuwVT(s-f1LRA9FdLThFkJaHItJvWcz2isWpSAIs@b?4f+BN>xR zka^_nbvZ|POBJa0lv!FH8O*pwYt7KzB!XoBTBe8^tkx#tY|#kf`6FQD`oU&OB0*`L z+X|*(>OwBqjOIGJ`9U({=~9&!9v5>EYkJ(>=iX`%&7?>yOoR1STcuiQ<54a7y|8nS zrcU_j777+oZGQK~r|H2;zCy>XN&6Xo`lf@pitgO-V!}+?88(}ZJ`dAOoB&ZnCPjwY z=+~N>FYP}#i{(5@Iwr1~6PxX?;Eb9i&itaHXji>{tKjE7#|i%HrQ&>Nf@Eq+KQK{x zX0ddS-hH#_tma${Ax0eZC~4R|f6iGq%Thux=A}B|^K>s;Ln<|?_D`;EI`zsbx^JfH zbfv%SHttpMVgj`h*Xb_?S9E*6ndZmj^v@W$5E;VOyM1bHsofy{A2AsO# z%=ER%P>yre^v3WPFG}h_ZStNe%kk8TH@v!)LD)W`P4NN}x9+GjmokKd+&XJs@}gd^=-7)32bxZ{tM<@Q3T(;-%$xqq z&xuZ(_y0J_rXF}#yB6(l(;~yx%>pwKYXh9(QoQ!miO$Z>*17ra!z?*qDiBQe@>7Rc z@KlZXZ<_0gX;%@GHcmlFP1$DlBJg>Hk>Q0P*uPW%La=|&EeR0|Jx}jsy8WD%KU1pv za6F^-!nNlGL$QXly!^$~W$8+xG9MhiY2=!kp6-LD?Vv7$wUe&&NcA_Mee_ z5gS~6<9BWSZd?=o4$(=~&K*)K7Z?g3Ku|)Tw7&r~mba)d#beTf?14bkj>yjw*RL^1 z4DxbYBnw2!=!1jA%Gp_AwX`&Or|R~`&(z5Zt$7s2SCKtF2Sj$Z5&Ce8;zEL1Z`x=4 z&dTYBLYZZ2atBh#Q+$>E=?Ikm~|GeitAHosyJ4el$R2W>U{`rlVs3Rn+Bpxb_4z}PskYG};w8^gcW)@E6Cv%Ihk z2#A0X+u&j9^qgt;0?<-Uj^YXaDDd>L%H+_imetIMh4%RwCM=Ufl z(kpnEIWu>4eXShKEz{DP_*f06$BQN!^=vE-s62E{^N|bv{5dys$PwWA{{5aowU;)zHmPIck1GFsyr-He!Tft3TIsNXdVdK^D}$LldFtXaQh4dq z|Gly_F05;}{r6Lw;ozTmudY^gp!084=G8`NfzzLJ+!?tG(hIRLMT6JZC+6L05iMtu z;rOs5Tk;dxb*yZ|<0;0#6+c~F9gFSKrWo3*qr{}U$ z{~#bfvB<*4Cj9C?-W|$>6&Y4@pvRg%PTqFJuzM1TT#H z&a(?DkL%~zk1#seD%oGpSATrt_XrXnD$^v8XD@8G8+5Uca=g#O2dEntdM@g5F~<7t z-C}VM>xlKFD~=+&2xN8zjslCPd>@-uGDOhQ@k$(@st3m*2yPK}!tN-cjl-%pE-vjt zYD^sj$OcL5glDFEskqo72Zw_jJKLGqo2^(P`K zvggUSt2g@Tfo$ru7yRZF6f;-wv$S3G6QQKb7C}%S%N(__^Yx zv@?A}4ua%fZ-}49uUC565H(CqDbEFt);jm`KDc^HG69|s$MWx?;6;Y~dy%=qWb75z zd;6Y493nCwUa1(36yn`8%oMB7eP`eb>pa!F5J5NIz$bCZJ_tRmW(8yRZc+D6lm0$X zQX$ne(Sif~J^61Sp>hzabtVt-^;<`35kcDe5(Ak)X^@|Yi>YuQ%w!@6P~-h+%L*(WCRrytV3R31&Cf~eFs76$S2Do z=|zb`hoXnEE3zKO6E;c)Jidc|?^-WWd2e#R-g0Y;Mk)LLdQHXC)BEkm4^I2QKpPty z;pGiGcN2>KN@7*FTdhfkhK8vZ9a?v2R+c$z8(D2w*hWWDCp4zQ$k#qDXzc7#M zwc6+Eh!hJUuivbtuvK!GX5X~8@9+oWGG7`Q>bK!rVZJuj3h+<`0j6ef$aeSbduiNA z5qe05bz0PP#}9i*KQ=D@k%sKqZGtB=wFSk6iz)DK3xh{lr8D@v7cet_xZ3PNj}@5! zFZ|#W!v(-=pX-PeaTgd1f?sFgj`EjJzwD|k7s~s-X`O(bhO^{$TPH_4)ng+@b*Uiux zE@{VY@up_P#N0HRnU9a?RN)=&jGx>uKnX}kJnM6L_@?|fLjIj!NR-jR zZYcwYsvwc-<7vl$Mp5Gnas7GP<$iX$iWxCSg8Q4^3e4%-yT z=KL{;n5#u5^-WJJq>R&NZGj58dkYoZM$w;SRsO(f+jZ$na5nVdCQC4y6CC7vm)pk| zRiMsykZ>!j_~4rkX+zfKe4t?1%jgO|Dul|e%(SrT-Sjk2f~=>- zT-c_LW)(2B8E2DCdQbQJg`$w_+{2A3sp=p@hD9QC5^A=atSjrDw4ggK)9u2nerr(?tS{Q$YY^*7PpqO>x}uSv)d6dY zSDw9m4)*Sx?q8WP_YJ2xdwIU|>=BDh^nUcqZ4PbP5`hazd18vCBzuhK+VkWWECB#c zec6WJe(-(VhMQR|;jAk!SLZU9C`^0ekDF`pjq+BVq^=qJu2F=hmY$-6p`qqm&xxbG zpycKF*v#`S|NEcl@g^*a_lFLGxGom?vNFVC?)~5liC^cwB&6@J)HgNgon-P|YSvQU z-jlw%vwwk>B~q!*zLjMGCvGhN+Co-L%-clo`U*CdPV#d^R&bI#ch*a16Q-mG_#{ep zG34&#j7?GuC3QZBEgG6~qvTa#4egh6mnT$rs8^OH)YnPUugYYq z^tkDdnYGixXt50>DEmaolK9NpO%u5e&bBf1x{rSLKl2=o)lDsx38M2g!<8vy|7iy$ z2U~^RkF+NW3XMnYRHUlWq&Mm@X+?WCk}%Pw26c2;bWDNs&-D)ZL$db3yKja8*_e2m@Ss>^TH#k@6x3tg+J9hqfZ+I75ump={5 z880prrUv0o;t>EnBbDNX$buFYS}-fFcA4#!`!}S^wth);yZ7|>-n*q_(Kog30myL< zuJ}@Q_MLnazPk!n(h8?mNI_wN^2_^RQ~jr=1_HL60bURSGgG@;)`xYtAehIki0pfM zx_`PeDJmxB-ZLL)Iivgifz}zzgo%zjri{ULtytwkU0s)JV`Ia_XQ|3Qtv*g(P3@*0 zZU^C1cWQgGQwjk)X^)xJzFMV5l*aIoWbloA7Ee)?B*Co_w>EDR;n7i^f&OLJOIY{; zkn!9q(HyDlxZq)yR+ZUz)6{%>mDAo47Vz*?SJ%3&%Zr4-T8qVCa!a^)8Fdau5Ldh; z$3#PGYlSv8=rg>uy-v#tE6=zQ7!dM;vJ-)-|HAXYnM{D6O-!st1@4YG&^LYE``#|2 zD_5T455qk+wtZeJ5lYGgW~yvP)8P3jRc7C7a(rgP-Vtwa-NYwM>IATLJ*J|2YW?rB zezRA@G0}E@@g%nKIC3#|&OZKlI#;1@E$9hGA5w1Ax8`1noWt zpy#LCZ_;Yjyq#}GpqgkKrVK(JRGp>!9aY=Y1<62VrI>s;G+OuX!XwD=8;{#KM@0>E zO@~0m2xrM>PCjW2NQsQ>K}bve>xL7jQE=Zm8``RgA*l-MsT+JnTY2uxAt;gR;@HOr z>moiQcT58gc35z-BXVbYK|EU(%M{(7ExFsz*BS+;45kK7eelbgndY=cP&qmw=v#Kv zRvN#5Pd*W%+xBv^q9dl{ersXC=-IJ|XHrY19T2{L8b#sA9DHVQoGSh02k!$qZR6Qh z%&Sq+Q;R9#E>x=^?Ik+)?@>Os7A#UwPVV0#N6D;oe)JGtwj|B@OlJM)?{BKUed~L> zqO!%kaC;$8$9k;Z6fZr4+|fN`Ku5Ql)Xju@|1phOTYL41oDkhR)U%MKm=h7|O)BxUTTGD4afcHgNol6Af>6t77^H7Zti2?2==zc_u06V+Phquic z0!XcKQMIH}B%kb;{F(FYg_hU0rmXUJ3@R<3 zgYR~LhL!XEdywu-7`Eh45c;` z&UK3sHvQ#I692_&uqu)<{o*zov_R#=t$x7Bwh6_Ok4KF}bk4)Wy5elyl&^n#c*(#()_NBEZXuCkjDtwnk+8(~y;ax|3U7T_gPSXNo&^m*{YCQ)#2;NH=pIdswU| z;kU`dcXAOJe)9n#vhAR0SJpm-E6<|bZ%Pv&YZNZ$>xF%CnGb+$Zl7V@@L%1fLy@Pz z`L&n5?mS-pcs3E0EU=Swg95bD{10+@?pQ9dT=bY-dL9)bdoi#1%~^K!Dx!zZn;DNM z{q2ACN|>Vo^CO#SG3(+h%372U4eI_;gvSZ1(RoDamxu`5}v*e7O0z(%QPX+Zd*5l zhS}2%|Hv&Q-mY3g&7l?J;G$~3;zl>JH$c!dFbFyw3^Ik<`G6yk8{ZL@PLl2S37pWk z?VpFtn!=wN88J+y(yL0Jd?nuzfE=Vfw8X%sSb_&q(20J3H|*~7^04vqPp*5j8S+t<2S(;SdQ;qb^mWb~hnGXb<}5u*6v8`E+#x#s z4uMtV5zv8vsLxMAfa-mHroOQ@&ZKrO{99Px9{$XqeI)F@Y1B=(Dep_0S)P2Y*CvA? z=~%LadpWCBThIYvmu@lNIwC*&*AKhw>k46xIu}uqk;U!jFR##zmg9RiX;C)Oz%`{f zBzMG-RAQ_waa(!X)J9I~v=i=avhV59Gt{@VR8(p;!g8Uc1~Fk%(!4c^>5yNwilMqHkDRq=YoKB z7g6%B15Bq6Pq?NfAdS0oflHQqt!1R*>F8Le`k%=J=dEi(mV2!8ei%X@X7NyNQ@_U# zmBBb$H?ytRc-wU|E>}o+US3}AyAYm#IZDWRZ5hw6MVhhJ61tX(kkP2Gxj9oS#bgL@ z1{IaaML2O4rnCvq+%eTQdjz(L0!laQ?F7YxDLu1?K|SVt{o6^{O#3v^M`FWc)4!ZA z8$Tt+XZ@!j?@fKR$6ibHMO?Qi6Xu76Vmt5|wYVAEArmIgjU-f^Au_ddNAbdl12;%^ z<)>$i-HRP^COx?#h;M~?k6uUpgbbbav~`QR$;1!DdL1)V@p|9vy^eR2RgCjJEz*w) zkN0}0p`Mu*Uc5Ax?fq$Q!9|r?VqcnJ9KE>ugaXU5*UvMf-gYgGHQ*EIuH=ulB!PGx zeL|jiYia34*c(bix}6!TC$i)=t3Y{I8NO`(FUk__NofUbn!EtBQfLd)dW- z%4Y_tMOyem(JASqYoGSTdD-PhOM^SqcNPLn>)zF)9bJ3(S7Ybw6-}XjlI#)WQCUxl z>y!Z)=8rJ`x4mM-3um&Y{teQeC?-b#whKN}7$f(Rm&&zk!_j4jhhE`dZZ6?8IF=e$)@=_~NCjVD?VE7Cfu!6tXWHXq z`@7sMiOGPW36o?*z)8ALO}>ZOOo}Rx0t@`c&4O5ZKvzzJRev1!_+U*WXwUrZoc@tr zr}~*mqa{&3i`0Aj2{SdJl;{~3!DpZfR3?`(08p_;<@9^r%cgzJ3$M-I;-AI2kMI1d z-Elc(YSw?Rs{Hz1yZHlJGjINgOs~77w1QniWMu4($c(pb^NwW?rG%}2v!*@!mir%h zyZOhyP06glBk!*m0m9&o!8(JA%8Ww}zDuGv_KrV_%OfE^GhzXd!n3joG=!zqWE`37 zxn70(ynKon6i-Y9Vg6}woemCvvQ|yrGjcOc^6KWhPd&DKjw;&u1tKq{GP8^cSTF*> zX_Vy|&`o94ri%w;@UP8jeF*( zyLg?2q6d|pbX9YY#wNr$lDd4tozv*T5d-Tv{UJN1K6FY!Wp!9)XvTT-3gZQ3xpQIB z79DgU_{n*-uFmBVmnq)~0NeA{Zqc4EUrwS@mQMmM2*N3tRarTI7{MJt$5;D3BcoU~ ztNy?ipuTLwzN$w|;53)gUlszyG*{4(<#0#DRxhgo>+_WbRa6zsp-@<3NCwx5l}5&O#j+_C|45-<6f=MM@&5L=A zxb5GiBUQ$rfz3g6=6kNW{YGuy-Adnbc`& zYDca&N^Z-8t!DTKyj~oS04gD$GB6;c7mXC3 z56p(dKhAR8txv42bz=ixtNBFPa8tkB^f1r$iBkm0?r{W6Z!n`+)`MmN?B7@Se#s{#`=K8$;bBGd?NS8 zicN&58Xq7c8q<_I7F&}|23iHA<%R{-h`KuT$kpLXRm z;E!KuMNl?-K~jC|qiTgW6+%+=i63QoS!*$XKN7P2PV$iv}f~@4vKz!`!n=tFP!? zle-LJ_Ps#Lm8*sA_iZvycOc-wU@`kRZpy zqF^Lh>rXztogDj&S2hq#8%gXYL%mm9))(mUryoRhD&=Q%)^x-r&K96qGy4uz!FVj^ zV+oM_rhQS+Gty;s$q%kHeAXZr8_?6wUBFUoMa@kczh`V0t1>riv>N-J6+AhVPu-PF z0VhR4H}D0pO#p7TN>zlid0WoM*EINVaP6!YJIt){&V+Z9%(Ym(#m_V}pOU|H;zY8o zXTr$Wy8`n#xe$0+VAU|$+gpSYEal>S{OYfdOZSe?2o&olX4eEG#}mw zi;f1KE|m<``AopPmGBQx^d~>`$!GFAS|pkDpDCegtvibZdyW{^x{|iEbbK;L+PzY~ zt}*LQx}GWV<*cjgFaA9lAs%lNS}Ai8>sLHU_MrY17dr0A@kbBV87T&W6*Kc-uT)OTZDE4*zR3c7Zh|cvt$p~2jZ@E4?N6w1)q-Z5>(> zXn2*?f&GQxOJABp77VLiJNZVtPEg9%n05xpol1Nqma0Yc11HPXQP=I#hT%*=$Lqg5 zys;^55>)nmPVBNbLaYx4&9q>x3r*vNV=` z-U5K#-1P#2E5bJ8IR8JRq+YWji4WZ_t?w6Y!t@(0Ibj;{+9e&_=;uU4)^;|+2UF`) zkYCmphw)G?Q=RuyyI*fXf|FP96D$@2mx+zYC$Y_EtWw_5b${5`SqMFbDI7J_j z0#Gk%_h5o>G27XoKC63#n)iR6E@WoZ9>Nh52=b_sU>f27)?YbZgfDo4mGfUfbA$GS zy_KX0Uv0EQl+2Kw^1*{5aAj6Il&K`J@2noizWKQvU>d(|Hfh#bgeP~lL`t3&@ZkBW zKe(m;7}4$?3%K9uH+v@2d@1bl&xe5)Da4^qzIqaN>*JXqC)GeZI3Si=)c*A!bR*~ZK9W5d(@as)?XsH$8;uAmeiTCpCHBF2(ByO)&^C-Fx8$cs{ zC4#h%xWR!jvi}46NW$sO@en<;bG_ZBU5D_bo0h$OU+S|W<_O0_veus`yQXo$iIYPq zF3*tsPBqAHSFD->n>yRMr#59u2JA_-pi@mR7a1@A5Afe8i4kx;sQWxJ8_4YMHXBe5 zDv|2og=Yn?>NqekC@U*(93rauV>YKHYp1=mUUVhpImXuw#bj?gc1%|RbeLhcG1(a- zmok%&VC7~9M$FFPt(J&iK;7%c7{S?}EaEViFwlI|rEs$D&-`;!1Dqhef0~GA)rFkQ z-*;-ZhMFIHO6D^|?u?7oX#W{g;N1`SIX&cV3;<^`dhM5 zf{}wDmTvD!NW_jMWc2mlQRUJtZ;2@k(Bui*o^uE^?GgtC5ho{E=I3&d7j8ra=2)Zw z(BW&tk1ukW0m2B4rgWy-X|~~RZ-Q!Yidg8j9IlsxUlg;}Ik~D?AZX5H6O7qB?ypre zX$&C5k0-;i=-zt!w6Q-EqhqrJYdMOZf3A0zqf#C+1w(h*YiyVL4O&kE1Ok~Ld_X>u zSz0QpmbjKg;~^|^vXIK%m`~B2L@zEX_7JS@**6+t;Stc%nN0ksc-#@8A@}07#nT9z zuKk%)81kM3X#~6U!!1siW~}L&fWCr{I?ZDPgG|}-A5|dWe=CSO3xDB*bPp7Gyw3MX zKX4^}Hxbl0BiM}s08>?-!7EI}7If2{21b47y5ugr1WK37gI4><$0g?m52P8p?}P@?&TLD2jRk{C?nBoDa6nl;$T&`af9cr_>nwyvF2B%II!gXy;neQZ={O>Gj47p$76l`*T zf?c14B*vw6Y{g6W%v<@`O!axBrKME_x*3#jHTuCcT+|+*>Pt%-8)`=ih8I4%wujcpEa{*g(E?Wo zOaJGOmodnA-|URu1d?5rmgEyz;v2yrq@Jxv=&6K&UxFd~>P^Zhu)Pa?3@+CG{*RxZ zp62G|9sAK)Ub(_vPfRL6$?w3t>793lw%&xB&-)^));n@~`+GOM z7Ay>CfGxOK%7fol#?3WiVxthrVt&YsT{x93$dtxS0IV+IntI3LQ7VO|p?>bgAwx;9 zA!ZqYSelkXEp55deoW3(1D=(Lg@*jer02j)+BYrvhv{K#|IjIWVAn1SjQkWZX&VQk z4pfwsr_^ZN;nLFu3jitS3rY_HcwQ0c_<=JlYE&wa&pJ}?KU=$pmObV`QJ#I(pR~lw zCIQI>736Ob+n#tU5^pP>vAxmp1M8g|oU5V>vl)!A6I%hZp-dJCqVZ=Ruc`g)8j-us4y0f4OnO#in_Rxk%&VD^%%ipY(!dBE! z8M=#3lu>^_?;Bts`a3Y1itETJ`Xz_#j&$Y)!ITY>d?idwK;CC2=;A)6y;#&X4OlSs zne-q9)>BR7?~k7ob*0#0LFGbn*(2ZC)}VEfISA_Q&5e)Ly1lWREfyW{5O{jx&qY!lzbK}9<^pyk3V zB5-IyfVJbS1#&psz%P!EhF#?z2VWeC*Pl;c3PXq4`l6$+0e@qIfDD98QS{y3&%y%s zZ3(CHW2GU9V>KV-D@TyowE96eS?&g^?E+OxR|(>u4V^Ay!4n2 zZbXP|`WNMKiks*vwT`u&oloPh0e6#U{P$$DkN6DeQzdb}Vnt^1rCaWZ9FYd^X|JSW zeRYSIH-Hn030Bv=dp$f9ST&#B17fYJsc?pU3@O3}J1BnH8<-C2&O?eDc;M(uwtLSh zc>5CbB*n_B9cI z%_Q-=hNAvB+e6xH(Co?UVCDpMSTeXPqmw=96mmU=@Nl2MazO1SAa}ANaxCTZ08UJ? z>$PAFE{M1HRU(x3=!bd_m;KQQLcn8NA{O1=rRU4E4Xm3jq@R-Z4i0kh$}qu20|z0j zx1-7{3!~r88V||3Kj2oCAQ%-5_L2kVKjGpz%h6Sv?(yvAaADTi=Q~4ErwX<*eiS6A z$4S7d{-DS~NUf@ydmOzA1Kn;cop2;7iEnKL0KHp;-R|r16k4=KYYue8vH+e69S|Zj z?#4IAmehXbRL;kr3B^-4N&!>WsaZEv%9nB5U#6-mRH=BcTa;SR0ZomNOSTLZ#QtlH z8Ow{}w9?AF@T&)SMDihq`BwG!w~Jx@U`Tvh3_t1a2KF;PAZ~^yCp$XA$QOkRK%|ALAY{UB{xMzWMj3#+FaqTPvOP-W zN*4H4I40$lYn*tz&G|PslazQxzTBPsgvoY0OSBV)i}UwDl(VLZ54}2qalRu z{^b-=ZLSev6#3xaV>$kFSS%0QYG^+02?OohlE10uu~{rh6lf$s^_>W6&W%GXbvYks z!Yh__jf9uiN=f+wz2zdA&PQcWjP~G`w$ewU7(~$9!p49b9-ck1M<3>I?R8_dwC*dY zIrAI2R6fktNF8_@2y&W8=v%p~#$DlGI{1Wh`=D01{Io5Bgr#RIUVR<3KVAR0yD7&9 zTha))JLAac2%W5-P`JGZF4GrKoYv}Rqh_aGLlbyWtL<^?4`0bX7S*Tz4De_DE7dn& zPU6lE6O&i?3dv2omAFT3ZIZYN5&&%iEWPGz zK0n)I=@e?Q{VwO~WeD-bEQa+dX#mbR!<6!3D(SfdqwPjCH83W*&v8PRJFzI`cTlue z^uH5D#s`K+fJ9+gx^B_=z~k9B-O~CC;yjsS4j9Gz(}u~~xuRp8D(4u$Q|r`tr-b*? zFvPFLb2D}`OSxp9Fe5PS7%Z;09W5^gWZq&}MhKbwOO+hx@lbV{&1+MgPJAohLKzpQftWixSIu-L!NQm-WWsd2W5wc6VLm5aD}NvyF=u7us4ovP5BNTSw0Q|O5X)$ zcb6sTf(S-I{7>Z)b`CKk{|%^e!6|lZGV`mVPTA_f=>#)KB9~S2aE83nZjiO zD;wO@ww>-uyN_T1x+CBDPEoQOq&I|a=1lw-nrCl$mzc8qTj{sZq*@^`o{v(I#pga1 zxg;wZf`iz*1vM0{H*CvV2&*KOv5HGIjiR)SINn;&1>yQgnN01}I(c8}>FQKsDH9*w zR08$)iib^NSDx*kyONOx6zW@;iJu^cOlu-H;^lgA8q!z9>eB!rB_N`#wOKr6&YF-4 z|BX)UDsuQvLcY^9LkA{G6aa9A?quVM7CtoQ)~UlB3(?%#2$T))VGbjqcOpp1a5@Ab#zAnpD!mdw11*M;_@4ZJx|j{p$>bI1ny^ci9ofxWd!;$r5H~>> zu>^ID*Uh&#We2@96#4=Jcu+uhRJ+Tz?|r_W?gMEg@?}K!le#vym(DoPY~Tqo6U$sqJFZyUEcsR< z>B2*oC2}VpSy^H)!RAeAsK0Z8mMb&Y*!ryCUw9KVh8 z!!rSpj>K&X;P?lozWmD7E{3v3TavwvIdJIqtE>$9@oB&n;weJ)A8qrNdB9CZPk`z= zhdajBR-x#3fB_zGgsZ8kjfsigQc||aFR5MnoWotYbv#pg_5vBd3!Ur^i#+c46rY6% zsjem9Q!j}5qnjqk{e8)&D->V;H|KrD{up@Gs;MNp?t?heMp_}Jl zQv!uNK)|xH)NNmY%e0soFSqui4r$T{yoMc6aXXN`fpegYFXz6dlCmUv<{-lE}Y zQ(j}?8G%dM$1@Psr9fcP5mvhr8nf-kEK31~1Q^*YINnD2xrqc{;`~qr-Sykea+zocmmvyoytWLu4E3 ztgtW|*O~Wnd~0Una|3^{ECbXN$R41TtoZY>9r!>1i$OWDBZeETEdKkHZ*UOsV;MCQ zcZZ-CXLhEkviy`6olw1|InxaAOl)$GZO3i{pekYB=7=iHWMUb7*I^Azd9a)6`(kZp z`zbknh8JG#_j_b^9*%Y z{1%q(w?)H#V0KW~&M3>$syGrT* z5Q(V?7fl%aLq?L(+Ed$h-|ffl!q5F1ZW-yq^7#65zZa$f3Ce00)c6l~>6gC+&A|~i zebhSR&BB3?d=Y-1%hn*ICxF;}fl=JH!D64!$TW7F$!k&7)EqfUJ3xTM{Br?Sm+xOe z$yvazDExVM{4cp)>1f{(prhMH<5Pd}D6$OVKyFaOs9Oy$ae`qiACdhJ2y(F0lK(lS zw|90bFh&6BU|ZC>Sx=-z*pw$gd2P=vVhw#WW!(eZ&b5taYNuRc27$yNQ2DeW^hro< zB)s3XW$+$$`^zNhe%-#6^U?5nHh{14igQzxI7WKqij*N*RM_1L$0f){$v3U;kJ8gL zfHqm*jj-Ea0y8&&>JS*h!9Igo9Q9cfMaP&hzfP91vGLI{M$49(7klxfLx9l2xcbWY zM`3{q2`CUgp#K*!#EVTSuK|Huyc;G~@oK&mC>yM;t?^o14cLo=1Kij{Lk1tEyY`K- zcU6HnEwyd3E+LRK-t?=@@7D1SXo|5NIXpc>aY>Rs&scAnqbqGxB~I{4TMw7SWSy45 zyr{(z3fVlN>-|vpq7VRUH)BbF{N$oH(KGN&QeWo2v%T}`d-3@dpetYMZ#ZzzxaR-( zvGtGq<--vO_wr(}m6k}&kvH&YovCKJ{g>FyH1Z9Rn)IILACqDCuN2*|3U-KZlgdXd zB#|&%ZtSlDS6X6rdKg8E$VsHm>2t=2vo5Z?cNyqv=Fb>mmoV^$=s;%$3f&T&&>3cl zxW=;=00NR6@4CVp%@94`uJA@|NF4SIXDAn0*MHU&*ICJ@Nf4@zYamGKjP7%&oeQF} zo%b1yH_gw-;x_U9yq%e@4EUhMx4ig{0t$WL9Zw8#UhagoP8?n8@9CLnsW?gu^jOGC z?4ZZSkM_CLMPn14$-=S4Ag|h6-{68@4!ji8%W~}C*l|k}Skh5DSEe+g*hxhIJZP&b3dT6Uqt#~j?;R`}&^X4eb~suW=8Wnb=W(Bk9IQEbR&U}U6m zfA*!Wp`?}XT!IyaTLcBvv$A!I^cy(v znsT@PcZ2M7k?gn3k0V&zmmw7UXH6(DyY9We{}nnmUC5)a1EC?0C@64j^Ja6Z=zX!> zvL(PM70mc}Y6@JUs1}0!bF{Q+@Rl=i@)z&3mAUfe1qsSE*s*Y){rM&=5N-1-CRxA^ zb6qhpiKZitDBrQK7Ibvl4;L43U^Y{$*UUV$6a{xsnd;{)st@c^H4Vn{%U;?tw~yTc zVl04?D>oxs60WDzssW@7aN7hvA%vLOFn~w40qED;@3Po5V5#N`?$9tK-~(k4qFPRx z)wH4({>P{S{GjK%vppu@@%#HTRR#t+&tC`2+PAa*#yS{jV39D7Jk!N>>UE*8SB9Hap zbtkQ-hec&Si%V@=5*#TvoKhU=fJ?jr8z;qarmn}2A6J)ZpQay5iu6z0Y%hrH7DW;a!wsWpDVF@89&DWHEq& zM0(9IKD{EI*>E!&Ou6N6(3;Fa`^tHPL2swe0xE??0&(|lls|Z5Pa08BQk3(f=F121 z$q<|m3;bb3d`@-!eRPWn^?zOP1~4e>q0cXCptF|3i2%9r(rW)>i;@2>g4-MF1)0c!$o3#2YMOS7n1quRmL5XATk#o?^!+nw^b(&-)8)M@iVaXvDcRW)?bYHc+thSXzbD5) zdndwBT1Os;YG&8!inp5l+8%}a!18%S_CFIUwA=P9??t=3hK!2A>wD_l(>$<_nwpvq zdd$Hg-)w$JWW_ie%3OC4Vx|Uw_iswu1Pg^I{BcKO4c zJ;|=08*#N!Kr>emk{jp+fx34Y%v2PvF1{oEJ^$r-2Zo?o8Y}Z_(M|K2A<$Y7@@!Wu zALBV{pC(_!S?WzXK}6L@Z0-C!niaR$v3fY2}~a-=a9zTOOZOsZx=J0c?c# z0k3ie;dV>EdPdM;2YJ3`ota1J9$?cH0vP^StL~cj@1|_9o zXWO|m1^|}&{Pk0AiX|anuTSUcL#$_VGoN-&fWqG@{(54;&jKzfk*d)$BNH>kkdbpQ zFbN%`VFU z=)Y72ttLHj-1;zh9&a_Kf&w0=mW?i_*6}1&+3Mxq5;P%SuuGI%P!jz>9e}3z6mH&Py>)GG=lkl<$oDW;vF5R*);HuMrM#|xEa>X*1e)&n4&%9b&qYE8O zQy+c+c(4?ua2FDreFK-oXVlJsg0_Kh(3^3JylqdK_~|yQoM3#2&61=`8O6JMjoPy@ zM8BxV$AMF@0!$7N_WqRs+;V??c3=)rfXPxOz?AU6f~0WHg2wsLRE#L0+}A*Gfk`}7#gujV3M`;Q>yNiIe6 zI$Ev{g$0-<<@LIUKZ|3*Y=u5x{h0Z7V+<`lFn-ny9!kk9_o~WQ2(Dw{r#f1MrN$q$ zEo!oib74W2V-;)c!C!pJf zE*<$IIpxIbMnjE(@EXvdT`Hrfm`Bb|$kt;L&th>~KK#*_FBj^)PCdAo0)+I;4wK2p zp~G_7i0yc}rO@u|r7u&ck;%z-QUAx>S8zoYwc!qJfS}SXDJjw+CEZAeG)RNe9ikve zNOyNj44qQa(j_3>3{peS-Q)M&_1&LvXUSSFWzN}qpMCaQ&-1+EhKB5&BGr{f*L4{8 zLb@g=dGJDOkx(?}-_aq?+alhTy8~4d70~v7wwkdHNt=`OtMuR>_p@G)>%z4dSP41a z^rmvUJ`M3$YsIy)wWS4-0$`vcRT#Y8b?|X(fk*-|XA%0$8OSrNRS_BfS+UHtSi|8p z9y(v(Sm{91u`GWaI`DmLuN)ZxPwmj>WNZPW-&y~a@b4n-R}ujqVz3Pt2;25dbqJ9# z05-PrJahT5`cr8?+vK> zK3pjpo%v=0dPIu89!RXO1ynVE0Fy*UQROxdm$62>YFYo|-NTT0%E!?>gt+oKn(Ba% zUp?riUju$ly2kT=pB$OB93M6V?!~KWE-s+@%#dWdHr8Bo}b*I95wlgqQo! z0oGrbX60Ujg=-Uz?=mAB@p>m?hG}aw?dAD3tkH3EjrGdpW#rno=;+Sxok33&nilF6 zjJ6Y3-X{T$B*(`h% zar7!mdnsdh5u6_7@MT7%YcoX6C`7h=^8Whg6Ez(IR)I(f=jW0JX0&ZE^|VYtw6#$) z1X)Gkv~&FZ6V$Mq^YG~bX(fA_&t_xG@rWH}B0i(Vs4$=le%320EAFkf0{}ufTuiwt zZ-3S6TzDThKzRZG6sWC$S9#7ewVdB?HG048wvM80=JNB?3{VpT>ZJb;xN&+vn-@@I zZVd?^**mLGLfq1TFaRtbo$-Q46%59rIPsR?o;1yc+)d+fHr{2UXUp|EZAVEfraq9Y z1&Amx-2R~w@Mz<=CsIlqsrGgH?CniQ0+3PJO-=c3mwLdv9QTw_*?2VFegC~vWeGC$ zGS8ZzL^{C#XxgBnQ_=ybpjhFH>1e%&BSg+yPH>4Rj=l2wWW+5Tq!gp0Gbr^x?!vEv zB$~_v-YxJ~^a*A9{CMVlkX*!mv%lvE>hAz-Doe-tXFmV-$v#+Zn>|uuk-YG=bD^~2 zr%}cSCS6aK7ux1WrvEnI0Nm*xI)sG1p@#Yh~G1ToTg|!XV z%1|LaE&!OVuHo$OACONQ5mMDjkm?TQxX!hLSoM_5EnOa&Ro7G>y>b^jOZ9*n0SHBe z(lfgS(}iKa4WL0#wZ^Oe=38p&#gYd!Q~4OMM;}}BJ(@vgJRk1>ppaRLi%!Pn#_vW& z?|nIBL4%O>D&uzWPW|{{A2EZFRnmJms0a{71=-z#e+Ytc zmRj5oZ)dPxjR#pP@^3>JK)02L{uhDGR2luYu$I2xpC9&*4A23;$VkiAGebtthI#q! z2yL1Dt)%sv$1uN}`;p)zbZala1Db5}SEL|1kuGniyxy;V*hl$+7;uUg&LZ5rubD1D z!Tj;1(tqb_ri*FpTJ+$p_r-f4xJdrPADaujQH|FtGM82(iY5sJzJ>Y7hi$J<*d+ryfNhCn79ScnsB z#fd%+zw0Rg5*7il8AD*f;=~?c?KcV`e?a+^d&}U?eL!CRYOyUK0~Q;d(F@SJXdOUK z{aI4VgWKAxN&p{AMSKvrKB%)@wOx^=n}2~a!NFmAD;MM8TWxdMO3;jO=@IU573S#V zR;*PwTefu{Me8~``Vtw%p`^Inx1Fd=G)Ild|gwi%TE zyTdqhI?w<;y6u)LX+NC@cr>1XaD)JMm)@EJ^IdAvc~l5n?uJ4Qg;9*_$B zQUBEs=;fHqg~fw>&D!|{WT={zSJ%Jwk&(iEbeEuQQ%vK!<{AEskoY|B0IKWvoz<*% z`thmlvxku(7W7q%fLzBNJAF82bXM3W6S+pG>_PN6+VEz7>=`u>obaq5yG8egcDgAU zP{i{<;}W%1b+v(99}5o7u;lMAq)JVntVzw$gRm($KaK5G4rZ;cK6={7la5z$x6I4S z!)3Yj3i*az6)?~|j+zXR0)V!?3MgT!L&LMq$+&I*1&5d>hPN|OY-#_FGxevoIApz@ z-iLvE4aOxUMM5Btq^hR+Gk7o3Jjiug_bfbIyR&kK%MFUSE4@6qyjs8j9u(dqAse{J zcIy8DfYDWfTT84q8;AP z*m7|t*{3B~ouH)9;e!gvb}GEs)^*6NCu)hwqB9fQOJ;&Nr8Yth+sy z2&UUmfe*1%et>mxUEZWNvc9MUbhZF%(yE!m-)H7}gaUKAd4+j@;A`|&pms4nE$ziI zTgf=p215o=5@zb{!s~f_OTMqDeys31)i{I1v>KVip)4SxNjz4bbQ@1^i6k+89x-sz{-I2 zXeo;MIq>#;{)`k{0HB@@pd4XxGM1}FW}Cgy3F4$Lz|N8IqaDr$2#Vkv)SBN{X}x%W zD}09iHStB)2LseV{A$i|IVHJg^mrYx3$)2E8z-4Yto{ZW|IMi3!jY4eMoG{0=`Z zsBT+~G8v@JT2+fa7jNB$CIW?D8|u$MzhFG5_=32)u=#G<$eY698cqPJkgYs-RWRQxCcuO+1^jDqEon@kScGn; z@6CTF+04hyJN9exXRvK$S2?1wI`-i1exaeqO9kzO*yN0i7B{1VlyFI!+Bzsw3xBO? zHlgR|3N8QcuONP_O5x`$%z8ZMuf@S}SLtyIT*TbWFXKU`;Y{4?|-HatfkQ5B7lzN zE!)<|Z6X{RBT^5&1E%YE9~>V8+#7?kG{KHN>!2y%2_lohfT6a#JiD0t>^D#Sa*xH# zV#j<}uoRs{HX|p*Xf$FXt4s1&#@jdaln2nP zXMTxw)OlE6`C>D%T~9$6@5C2?BR%VWtO54U&jH!K9m|lDqDB9exyM3QB_L5cu&W0k zPy+DoHU7Uvp`u>OAlQOW9G20HBS&!*UY`?F3f;`uX@2qGu{PGGuigZwuZ|w%Z#l* zPgP8Sz7satD`FwSn_`IGRanb!a)I|av{oA+85if3A!Or_YkvJI_$MdKG(1mG* z)317^@7&?OW8z(-*an-cc@P#e(C9hb4Bqb9wkVaeH>QWI!>p1bd zYKmO8H1t_hTDo3W4}19V{V7UEfW7FSiF68LXopzl}fms9(|fX^_`A&yC&Wi5q?F{#j$7&ipd?Al*&P-IgKw!yEd)SdDIX@XKI39*op_dp z1&X&NDT3f14P9ui)Pq82dEi(3?jOjB7V6FlLQl~$u&j%VeO|gd>@S(!nQlxkQ29x| zlP)+0!@&YUS$u{xP?^{=Ja>0!_4is`F0KTrdMXgmjK5g)fN|eB?;T*1aXfn*VeckSKOw80gy8!vH!ELa8w5Ci^d8sDO4F znVy#RHjy0_!pX&TPv&imuC__iw~U1IQnU~ap@2QXl5M;lnO8HkNl&Qhd7xdb@6P%` zqbY_q*xq|A=yhe}4CrIP86>WJy(cxv$77NuAr7>Cf`Dz?xei))3-L?4*=iq~CuE={ zo-|gw8ts|~JyY&i{cYMq9n04cZF*#?&^}EfLO#KL6kCfwC@Bmgb%h2R9y!=&mo!=j!#KVhVFNet!X<)D#3Ri_|rV5Ud_T^rV)3?bMj>!eUIRmrP6 z$?W{{h+)2YJjl$6AO0lqfil*z{q+IB2yLIX${Z{q78Xxl0r-T+`G&UV?uPagqoMEivS%2eX2B<5JUE9iY zUW!)nRa;T7EHX@yZ_ybek^1&>pw~w_ThTu`elK7@VBKfu>Z?yDe0%p5-}s@hv9X1! zf>RW=^50|6Y+mS%$S=Xg72 zONI={3R@}(V@`1V^~-re_d&QDvjt$yxjz;ce|pW9WSfMl2O5+}&;li2py;{1opoi| zHp3AnvG_tzV=1h?yR5ZXt! zrvV;CL_@)WVH@T_8#1CmHcsj{xpV*8uoa!`b+SQpp;L8t*dSu$tKEMBd+{eQvCZ^K z!RYTQ*2CoH20=H201M)aE9%$leWN%=&}y1-8GvL1OqLnG>XQ|jCqOb+MWxG`03yE( zk{7`yM_n-%;iB)29PauE+V|SqEqim*;Bfz!4YfcG@q>R~wZ~vJfGBBc#5vDQAyzu7 zn%BISMi0d?s%(DG{_*)?ZTWY1e-8M(=rbQ`S!ME~?xWiQTlRBsU^AZtuAY>*utJK+ z_wLA{SD14g_y9_Lz?j+J|BiW(k(t_6hE;f5;fC<*S34Kn)p@nNr+(l7uyDiAj-9wX z5ygy?_syYqN~Szr#{<$CK9(pj-_|(U?w&K>8=amaYtp1(Ij@po<{0l~qiookN9_ID z@*i}qnv>22?)#9}trEc4p_?(v-Ki0SH3I#M0OriXf+sQUS_VLPh%e4?=GU&@kOX%I zn!!O=Cy_r$!bNOypoQ)O6sfBp-5uOOvm+j$?ep?aehtrXng0B<>;em2Mmu(Ln)S&Y zdv$m773g5Z#wTBv!YQHNeQy51zk2C&l(oEkm@D)5;$h8|Ml(>smX{C6XBp6SEQjj& zA4KzK)b~#9jc4{=mVRu;GQ0{Sqq_d`dC<0BR_Phr6a#Hi%moV@kC=Q%_nGh}YuWmg zN*klGZW$jpRo9maW7Vi9Z!m!MLc6B)B|m9LfD{PpZwI|QTVmrBEtgC#(WbxOVYXF) zE|FWFk~EJ&|G@VKQBN5t`j>9H z33Zqx4R?L5s{Twzq`qTkIie+|(;~mU*@r=7><+YzOY`W=yj)Ga1eEdE=!8i7z4zaY zY~lKMp7as}^8RpPf6Zq9(NLnd7tQmF5bTML4oFwWNsGg+7!TgP?=F|}=f5o&0mTl1 zKP{Vs>ygoC0dE^le8~L#r(9I9&*2MEGS5t z1q|2XOmx)Q@y;6?6i^Ce0J)=+-0Pnyic7wuYk`azn;8JTbpZeRo?J%d=hEzDuzVY)5+4_S0T_M*1(Y~7Deqm=Kknc$X z8az1))An-bj23N7DTObZq8C!tY3^Iv3Vg>ts!Bx~!>{ChJ#}n{X?Gm{&AWP-1VpaZ zXGSeFfS(vYFi)yxmx?oEkhmg&3B_+^%>A91059w z=*2c}jV1F(Du4`uI)PQe{qk}XKtCk+?lxK9T3>5;>?+@ii?*>yC(0KEa!ns^e*ex} zMAJh2F_p5wfcf8$oGB^U92-s^7Fhq`AH(Hgv9;9&5)@Kj6OYb5Vn9H0lpgi2;+6Su zoqd}@?Uz1>=1^g``Nw@9zPo-K3TWl+_;(0zk}azyWQH~e7fO&7hP|9B@QOj)300TF`QS~UZ01;C5gO5=|Yg3kxN*{dk!d)*Yi z*96EjI~J;d4d3KI)4gQgg)<9&{QPDqQrC6Cf6dq%HsA5S&}c=?!oVgY)8A3tgZ#ADxlV z+Xx!`2{4i`o4lYHJ(+KN6gjy zfqw$*`XVD_W^SWhjE%ghV_EKz|x7e#+ z^3%d%2TK?Shf;_>Mlb46`#C#78#G=DD2l(}8QmSMPAKX8rx`a2Mq{JFabW4zH4^*u zm&l0W4x5uBlMNEpDuO$6a-VJm?QRl3_G(ir!^4>}_MCiihgmz<0aIXfJ-O^29^=pfDt#!; z2feZGivyq#1Vlss3f5Uz|Dhh2Se-Gc?t0es>$@y0=nD|~U##$2IC&*q-u!5E*_{z7 z2mp`{RZY}s^-8e?st-63`9;h6Wv`rMx5=loO8$-@i)jl#-uJ|d;pgevcdzO}S^0+k?cp2=%! z8n8D&lDFH{093m?*Ao!PLS{{MHS^Aj|LM^a(2Ox<`@PDrXjXUgMA(3|B5pX{l>e0o zI%{li0te3-+n8VZ2tC@Fp!!o#K%F9W==so+xAYUKDpHrA#P>TuA8`Vo?dY6&H;F7} z80#j)&z@Yg*&?Ez1<4mX+Wk;8?Qyt~m@fGCIwi2IjXvC(k+0wj%yDjZob>ji8Xig3 zr9dv_zXXg;FaH~Pi20gE5K{J+da}wL%k^igGp#Y~QRGDN?=7NtTXaqqSF2wr4-0#Z#qELGkPUoP&CEC5X);R_Km) zDtr(9sDy=jGC+Gdz=WjKugqk%9%_nDXqIP@#r0YWC@})!Nk7Onj&fDD$?MNP!_$FE z>X;7;5*l}A{V3DB(oksUGv0 z>M_46!HHdm&1+Dfw6$a)Ce88fQ|8_TsoR{_lFv%zgxq7w;*>sy^@j z`Ah=Y_c^rkjP%aNKU8+c(5Y0#oTuvcGntjPa!z<=J5`u$R2U3{-)$ycwhB#>Tqc4> z&Uu@CFE*Yqi*39ScR>+(bSS=Yz{Ij^SKjZ>Ia0wq`VN{P(xCa_0o-AIEmF_Tsk%Bh zC@AB`{Ff110EgDKf_auvjhoA=bqd|t(ftWdAw|1|VVB%x6YKe3YvG!(*hlD(cls4x zdfgJNZ>qi330UKA-Rn}{>AD?Ye8KheQ&nzpiEZa@H$>Kp(&8l&x`o+5tX{BGJbI}X!hJ&m!woA{q!v^-~MW?)Db!E@)^jcyo&Gm*|8x> zga3%BAiu&wlX!A&A;5lIW9pugs)6RzOLP~5mNZmU*JrHyPk&Rk8Z0mj$44}1J`Udu z)=ZTSm5ut@KlIMZnkjQMRfglf=qQI)`Hv%EqYY-XZ!j`q%>CBkc~%{@!9l=m&dO2r z$y{y$30*cu!#5M%(ajO2dpHB8w+cI%*mfYfDQOxsR2F_Zi-0#ds*&K{g=-?nOY94v z?2@+X{G>OZh10&LUQl*T{*l70`?B|Kj+Acl7ilY{U~0&GE` z42G^vE&Yw1wJ^3qXl44%YUw0&ex+ii;bW2Y`qc}+&0Gwg;m&<#r2bq{UEve08(B}D zuuSP2DN|%^56|GyH&Vre=}^1tKQA<9Uay5=>e)y%WIUuyDnLmHv`$4=Q&e2-3@SmG zLsYOK%P+qN@fKJ}^WmuUp2>2*tqwv#wMJpBF~G>OG%lD=O87jz0>8O-oF{bS2na0) zja@S+L`<;kKQa}|388n_X8RZlWRFY#u%>LJ7cgjZ=!5+6t)>VA#4Q426`{1Pc+Ad6@XtGQcLwno=)Bbn4l$E_~0)=slL! zBh!0{Ln~N?Gh3R_;!%2c2!Nz=NZ(*U#Kf?f9Nj=fMru>aX7%#!+lC--m;PJT7x#o(Hk8;tJdq zvOi5@u$pqKv+b-O*bD~(VT*Od;$im1C{kLv0GpGC^=bF@q>r|etr<&!g$dSyCfbh9 zACOU`;lxWui524rAag6aY)k0fP+E`t$=J-T5WyADorvb0p`zvWAmp%`68STQ!*&Cv zl~SOkNG-~k4wZNQ+5Z-r(s$yk$VNf5BZi#6`xoEWhn|$04@<0c<^n9Fu!e%{nNRoIevPxjbas83t8#qP!Khc@0`alPuwiB#~fE} zGRPuY#P|W@h~o{-pe&2^lk&>|Q9`uCukY0vB^a8-?@o_UKO-RmH0?pS@4`Z1ml`9b zdF53RIj&!)*wMb31msIJO8W5~o#-REORtrB4XM*55#H65-rN(xJAk)ehZ zHBXjG9ui5?WcAwu%RXfwwMb8=_#E%?B?j_>G5rCu&tLb{6C^SHcc2yc4^j3Krp8pq z;(&Sj;(~-}(e)2(B?N7mq%`#a)b1A-0knPm)Lje${_@AZ5Eihm+(HD8<$`A!hg}tH ztnIBj6|2s6K)UaXEZ<8-w9&Jow^{ieV7^kwr)_x|fTBE`?e>8!P($G#gHo0+s&8K- zRn_&&=D<5>$d{is$hX-=%Pv`NILGGID4IgO7AW9HJ8T76r%v9e=GWmp){S^q47%L> zsTJVXuudOkA~2AarU zWF#58h3qBFFy84(N^)xwJl1s@b0~gfvQQvm0mzS!cUJx;lW3f_t;vE8B?a$UVJ&{77-o+6Bp;1xSihkc5s5YQXOP!^zkhs1U45cqtz zPu(O<$7H2>Qiy!7V!;c};mY^#KQ*}wUaXF3Ef;_(ArtjKQ$jVbp_BCiTiNJHcwCx2FPt2zoY|bIKLwSEIXfM zpFg>k)OA-!F56NU)&%$8A6I!=lIYwPV5(eIxY4vL_kxR6;{MHmKvZxcLXxK8vE|eZ zVCy~y*#sI}!HQGgmM=sGYB?zR$R`O)*-v3G>{cfLzyRdVnNEU{T^QP3R)P(Oya}J- zi4O&YhUO!31M(2d^m~hqsZOy-_NNTaxDM-T)jk& z{J)>u|A2V^eI?ot8T#oDxC`Oo{^Y^#3<`IZj%_Vr`!{&FO^5F_S0maC=vk% z){9c0lX^K(`(%3`7vCnmD1Vrh-YYntWnoUT)clnB%t*4-XsoS8krMNfda4!)_(Ej&{9{H+` z7|v)9P$9e(Q+_8{u~5}J3a5U-6;UX9_3?Nf6I)i}UYHBP|F%*3`nBKc`m(o?cWSK| zXCcw=ae#(TpNLgY={S^NFDw^}nJwdSNK8EKQmLqi=JleR%nH zCZC!smZ<$E#xb!H9Xa~^|Bc?|Bdqel#i8c`g%j6Ar#`{#A4j#zOe-7y`;VpPyc|~#{Nm6pf;ZB90FjdsMcTJ^^1ob5&!dnKJ&Ld}h z3i5uLczCg&A$Snv#~8I2etf$`a`|hk1I}>8UI6I4K@thI5aWX|Ws#n@s^-;^kZFhp`F8+9@ z_CbDinbK-f2eCz$s!`*4@4$iXL%i6a|9f*Hepo4)$6LQHHd0~|bzU;9Qp9?z{D$mS z#{0OG6VG(tZgEm_viM^3PgQvZKFU$$i&?fXPwLAIXGIL@;l~ivf8*FkhsC;cwL03t`JHsaG=61Uf8cicip;O5V_-2mHG}M5x32#a3&0ba)<)FWObNihnlT z|Kve_*QA!Z$6$19_-SNf8Z%Sze$DjukJzZ04lD7JPaz`$8#PR45s|w$qy7en>(pi2 z236UQV)UB9=z&Q^-_-we>7$#plj`Z8vZQPYr{!dhW1|S4_OSfwdD4?98!;x`g-S~+ zSxfR`nuFFX_3=%Ek47KXpEYfcc%Le&RO+30_AK>#GiAybllL{PZVI{F-s0|58v4W; zB35%t`WBs~QQhWpfa7&S)K;+v^MBrm z_`4XSONG}Q@IVamExN@d+W-OyNMG?C_s^lZ?`qSs>d@i@Bl2%j(O&c_)N(s3DlZm4 z(NEo2FSWgsQ^P}NPLS7ITrB;nA}U8QtaN-_E$$Tl7Y{b;dp^G6%|2ltC6X=WJRetG zN4nqhq3o?-Ir!7IVsg8nIkUYh1RMKYNLfj%&8n^{5Dag-nhhX&4Y>!2NpmMHMtuJW9c<2LJ|KZ%)~Dz1bAp<$~!ixOS( zg=&KEi`>(Kr%~#*5*3`|9)}I4uNrKJw@$NX+7!3aJ<{6l7MAy>WinNb%jZdtV_rIq z^lKiLwmz$zRj7Y;nsj&ZYfbRvJDTfQF=J6pqn!9g-E{Q;SzQzaucK@$O`AROjkdNs zRASJD5Io6)hvAx4I+MEHR+6?Pdfd8^&_sVtf z-)Fkro)$X0Xo?ufo0#Wx4Ns4KDSeWXsu`YM(XjJq@jar;>+&(y-dP`Iu@7&T9fRG| zvusGiAMZ*R!E&X=)~2zLl?U2rZ19Gs@7rI3-HhFrrmn3!3N=byc6$%FYX3gd2< z=)*KdkG>10q{cn?Xn)vX8~$cJZT$XZpvr80az%#T!qJQ{^Rj%)_=Ism78{^L= z&+W}VwkEEx$KOXAws#mGsG#&k6fC$5c11JcU zdW-#U9LY|}WnP$9u6sdnt&-S)Wcyc@-U}p*yU;%JY)8ah)YX(Qd{Ch9yg*tvmX(Zq z#Jf@hugK9{7It?9cNtpp-nB2xEZaB{G>_BRnIlTNYu>0DA|#8v+3AmO+OOx^8FSs6 znx4(FpE}0qEy9=DB_q+2V9$l8`!+3ktiF7JrhkdZPC^-#0xxU)h@G=pu0#7Z1#V+&H#SvoP>H22l8xcK$^7nCbaHS{-|#@m^R`_(qgb2LwTQia zg<fetT!|X`F49 zHhG^ymv6-DMXo-Ln-q;CY;GwEJt}*%pMRKbqHBA$n~OWuQ@^{T5B{a7>Arze{Ic9BaF7O8;75#h-y>$PwcrY4_Ka_EiaX|mw8EF+9?lTDndy)=DND99Gq(gK9prH z`bGKqBXR||8fZ^9V~uWptlcx4#aMj;X1wdMx(|FAzanhO!R>UY}X+l$ZeJNQyp5)+<^QBD8<|tHNW>Xr}s10BCnrlyz{_TB^UHd^)RZ@92(C&};lPicg zF`58|tun<)*Oi+`en}hHn%HY%O0o%XnS5A3fBReY5JE$S1ht?hgj1_Y86YPwZxHS)^9c>#77vFBGJz*Zhp zX;0Npn(I^WY;Ge?J#x`*kiv_8CtilK#IXf#+6v1r?3dSD7A3#u9TQeX4-vv^jtsodTbCUfkOpkRC;?_&yAR z==lIWK!mm;>LcJI4aL zqGni5ir+CoUzJ`;3O5IL(M-z$MbmX47W0fvO@vfM;}NQQWIe?Th#^)-+?Q1yoSihn zk>t|MMYr6g>-?zxpU*S>nTBaYx8+6MOOuWZdD_%V@RGKSWf>%$tTsFS| z?e@sC0>@qg&nWVRTE=^2oVm0%H&A&p3oTMxoEPTL%UtxVpC@%X{?M{PCZ38JLLgPO z86!vFM^RgmVD%T*Tu+K`}_TS0VI|!T>_P6k(;ACs)%1%q)yO-FM?Z>)8jdT zKvCr|2EGkjx_s0M%Xx^e;f`@0Hc&-F)bGWz)`*9u-sAaVt5^HW@w(XAbgwqzbkx%= zovv{Gl5a#If%#ch!Y#{-7oPn(xr#|@mii%HSl4F=U$~m@b^T1y%T#Ul)HnNUDNFV7 zn$MVvp^Z`p!)(CeFqeb8#7SnG!Qz&7UPw8M+G=@QDReIDyU|2;c9a4I&t~1%Y1n3{ z;Ow+O>1ru+ZW;UkL|psmreT^^U;{0V&`U#W3$Z)KfSL zxlap@pfwE^2pQ?5K)t~ppKGx|rgpjZuJcGSwCYX%^YM27!;_}NUb3?p$5vI#Os5#S zTssLpdmJ`qe1$NAlWvGQ-FxL7Md@T}4U4j{CK4UFxenQBW^U=unoMuG?6M!!-*8a- zpWs1wKuS5A(?mX5QF_S}Cn{nai|^)jqR};%aN{9~Yi%w4gdd}c9KKn;QzI|}gacm9 z5hO$%F3pCTyoe&j+eOQjSH6ekj+38_niLmMHqA3aMf_fXk%8&v&0Pd^ykz^TT==)JdjUI-~LlDjojqXp`nL=0>l zuSy6QKk#5m9I-L>P>m|{(<|mMXSPaze{6$|wm8LA#+N|Llb1221PzRnXG*YWBlWmS+|FM+$y^Wbd~pdwWEkEaB?z5O zPbmMI@pq1GNmMh*;#dB0=(LWH9=LQeu1+Tx4Sx{v7!7;!2?})piFJ#*$MMU)?Pk$S z(Vh?7#c(2_!pL)8fvwu&LK(#EM&)ih9b3vw@p*yPMhyvx8Iu$$gL_Ir^6_s6NI1c9fu|AdQ@A%?IlmvNU zR%S|NTgy?h)G2Piy{E;j2)5hI?`gL=`-;G~3kAY%a`6+LEa%b7ru7=e1^4>;7_bgY zB@zy@Wu_f}rS-O~&a#A=LHX9tn%iIHfk5nP5WE8RLz-Rf)Ex7ZLV4O0zDb02P=-F* zi!SpPW#nTvf27*@Jj3s%%4T3ogEb*uUdbVrmy(m4o4cs7QFlauKwheRXD*9BtdznU z6y-JITlnM)Q8zf}QXC+k7Dq{QgEg{bF#GWP2QRin5Cx7py*-?@^k#{TEdfn{1;xIo?P8{#5*R51wG35|Z^^LL!O z>7J{hS97lIQ#T`#OvUId%f0KFw>A0& zUp-)qx3M1}N%p4gt&0X$j)7Nuqf*tq+XQ_XIV(SOhFO|hW0WaDEawkU zbKP6k@fXk5<>S-UjfV(@emlOSk4TVDnVB#7sw|Lw>};5w^s21vfpIVC^5eZcv&gXz zAyfrRcYYW?roiFkFuQUJqU{oNS`KoVY{RmC@6u2pl;M?V$6$Kkf%9_g0mCH^1+gcr z*5#1Ab^RAnvAaiu9?6AWFEI{w)NXkp`HSSd?*Xf#iVVm#PIy@$NC2mB^vac%meJ)V z1$m6%_aoM2Z^u8s@QnDup^C5cqrgF$bDub}m?B>`hF#!*j>nvn*}+V&6{>Y>W;X90 zg&}x-6vS_l^aQy?ZnRpLaTh$6>BVNns35zM^!OvS>gcZkWzl`Bbf=$hcFBmp6}wW6 z$njcOprMK>QkaFewCItZ2yV^NPIB?zq`9)C!%0~ZT*vzRK=P^gUD9b47qG92e1;eo znN)XK^7%3HZ)z9Syde>a13=99v+rS7e(Zz)=~M0UwYzwz)KHtY8Hi4;TV^gA`$dn2Mx40kl-k$D!( zKIzisD6>L-H?O`OMg{p2L;w>BpYsFAq>K#b-)MNNOdpkJ-n6SL6ZYITIaq1I`}Rc< zXp4fkM?`yzm9JD5gKksG(s5hh@>}Ea{_hW8_N>JY>|LdqMNS?!I`h1J&h%YNSb|n? zN9x)NAx!AtDr8&@Qa44Z5BD!L{#5!Nucb^ZA$Q7aF%X#Sa9-4EwRWNDak^)VTy44+ z>##G0t@S70ZPVG79Upiqzj7PBkSuXfy{O|-nSO7g_y(T^6l1p(RH8wXrXd$a6S5&D zh^k7uJgjxob!beb?Mk#-JWJ%?#TVIYv#&z1rs9V8SYQZkHY?cVukE9CEm0Dtg_O!W zidh5Y-~NsiRi-M!btbunzNafG%i}REteys@%zcAtsF1U6Vp>@1xo%sbpUY0-(kwPr9Aj!jl@YPE%;-oInv!wa~|~W_#26w>x(# zVRT1{k&?~Y*_E0@6F9q*Tc4)|DBS*_G+m_{sc)t6mK(MkisOA3xCfr71`cmTJXCtm zo7ehp3&z!Xh)8zV`Miq3ZR-ODsLDHhnW~g6Moq0UM9AW`i0td_TZNI;lyndwOw4r0dp8wXH{Ss5)VL@o_`BKes%DPnOB8T)QKBQ;? zv%<;5-ob7X-gcpTySLnGl<$;>V~|=xp)TTy27wgen1!Q~{q(G?SaSHxJ1Lq0f8@Ke zNTsIG_NG!P3t^1|*TJu!K3BcJTMqg)o3n=u)y zwE_qG{av;Fv>zPiHXLAmDjqSHYZ9Y}<;bRDdQI}ZDpJQ4*3#d*{lCC<91GBi(W|CtTu4Y<`3C*ZA-bh7~q`>739VCa%8FgAZdYomo+Ko z`6CI?10RVVNnM?9i4@CZddZ6-4$iJtc-kj}E0n?v%J|&|-i;5KbIN06m+>r=<6(ak ztE=8YZVyF^@@TjkdEdfKV{D?c;Ro_k9rh9(b{1?jj9x3hzE`c6L)tr&K~dx4Ea%$f zGP@My8myw1>VBmZ!u|2-YL~Toi6blb*(57r^PMs~I8c*YCi%GOV67m**m5%3C{FxIKL0h8kGHh7QOY@G!R1ee_fEqt z?wH}%gyLthn)qOp+nW2ae_kXFWcACjyQS3R(Dpa9y!$Y+LGKvz{RM~D$biw3T=0ft zz+5mgF9f_MaF_z)R2~j;IhULVH9op$yt!r=5#f=@#b8dXKa}+9$JFY1Ek|{^Zh5-Z zej`;5S_Pq^LIOy7^hyI)#3`B)omZ*O?BBlDFDBmq5jQTL)%(_vV%Xls!Ab*PhLkD1 zSd|sX%}6eJV~DE}@aKo)6VO6g9W>k6jBc0qEnZ=$8*z2m;lrBO@vmz3+FaUcS}3e0z=&brN|pIz_hRTC-UTMP{|Zcmx<3 zcUshq3f3M8sx7uIKCnM3Hu-ql&^ ze5&`R>F*x%-KN5^S=X`rRUy5Z`2r!+NpKVk6m(>vGfsF0K@SM)AZAibk%Glm#C%ZZ zlvdVP$#@_07N03yS$k%1rA7nT>!+X$(5Tbex(IfQYC}24C>=uX9P(1${_nHh!*$a_ z4Z&YGXq%(wmLG29#%HGx+2f9FtP6Fj1+IZ57|BchQRlYnERJuwJ{zg+e$lp07>&n# zM*#NIEG9SxT2!hQLCOF4Kv@KD^#Zs#!{9>K{W*|+cX1T6ZqYXK7b1-7g)2~qN3KIqfkTkX<)Z` z6hZ{({ROlcC)jq^INKUaBg*kfb7grQ^9Nd*LT1E8s5PxP+%YTy$#G*J(TJFa@=KO8 zq0Cf@ME?HCb`@+pG7ft@Ph`|2zP_D#%DjB3p0DCxxcwfr1`XUmk!$1mc<_<~!2msp zXq(ML2-E$LmX{#zw{dg;NhfD8-$d>wLTBNG8sWFj!Fjz3b+4G860DO{niAFrUMgyV zQ1QV5Yg&YHUJ)MCP>7z(AJfls-*n6L--Bjt7G!l4cbbm)a&rt)DofGm0l~U#9d=?M zOE!_O?pPj{pEGVEk8rvZg1X$9#)Ba!L=h5irE4=|L$m8;5Z8k&JZjIMC-#3wQ4y{U zjFC1gj8v3I_|7^(3nk)Pm*3vED%T*Mo{j0!OsbEvE2dVt{-QgFS#a7tuX(j>WJv#1 zw$n~Grd!rY&9kg*^Ky81*1N*am=9s6)y~mk9_~|2P1VO)OjHtcUdde)wUSGvRk>18<@&``OGhjlHM+_QU})1N z^{V5`2kjw-H3-vU)#=UnJ^DE@())R6hIwPHD&Hu`maeusSgp|_pk5nQh1(T10CkwX2{5ZEjNXoLc z`~9|5Fx6uf#TXSimn)a8*v`rmrw^bX35>}zHCM>wq5yW;j?%M-|uv72-0UV5T4``nzibT6sJf|HHzY>tn<-(J0l(o4wx z6Yv5iu`5f_u1p-%YAR6exqKmUil?+l8n`Q99&h$03uA}C2ff=CdM zB#Pvmb5280a*m2hlz{=1EICUUkT8JyGDyxt5)jEl7;+BVgYR!^_ruoKe*16jb`{0c zOyBOleY;Pe@I2=dRUJFsqh=>)Wue$dh!n7hv^V7Zu_~tN6Y*JOd9hU8;8S>$!kfdh z`fV~2OSGsp$n*>9MzZ*8&c@MsJ3w@CE-k4-cG*b5TvMkGoocWk*qIYrI(_mW@+#yO zE+#Yh=Ao-~{z)paeR}l^8*+Vi$`_rSv56FL=DN|&7baTGW;*2lGTB-}rAz`_73J*` z*L%PQ)#l95aCng0;{0&KU56(l@iO<_-|GvFp<0<*Jgh4k?R3E{4-z_Zt)k%mPI;HS zv6MLkxs|lJ5gbJE2UGm$j_|xK6BRDFDo0mdLQk#`7GoG-cJCnNR}XtWB>6dRfp~u@HfMY{}o~QAF!;udXW9TPXS9@lA@wRaC!_F$n2; zz0ct~)hYKWNwt3uuj=w?np44RN0i*RYpdQS%R!&qbx1YDyr-fQ6tD;J6r&xM4+T?v zubDYKB%*G?Qt80vgiEzH(O9l^1CG}D zH9{A7VY5)ero>_Jc#{<4fCvX1?u)kDsZ^ZH9@y61qveWk=hSn3H^6Sp65p{&f%oV- z5bvuFBV9DD6`I%e7=m`<>alSz1oE9m&^eW82XAjZMJn#0Z^u}%z)PuCkikT_)=L$q zx@wiwkrMh5@}fsjO6>PlKIZHYjhy&JgoD0fm~4dg-adq{n6mu1F`^l%)nt^Q^nuWC z;m}ZHOigH{F)Z4fiIGw}@PJL8cVh;TGo8+yU20Sec>-{5-Z$pFIw?84H zY~mHo0msjedQ=1R`T^MK(Z_D6*4ommsD9Lx$%W3X!B5$96DX7m7Dtj=)MFNUh7b~5VaEC-3GMB5&})(r zdp+ZX57d__i_VW)x_^V3cFPm-xs6Lf1q>dnd_8okf9aEtrc@Z7zv20nOh9%;_KNQ$ ztj@O`c8!vh^}8gbO4a%@ZS9^kW%+5S<6?TdZ{Vv`rSr)+-r6gjeXC0qv#wiumC9RV zY~a{eFEmp6E{P^2v?0VzPUfcZ_S9LPo5y-*FS^54hf6=SwaJX&Hem?b%cHOgscd?T zjb&$$e6h>;h1okvDK;i&9~Ns7@TYHHv=XTgm5n6ry5hxO3PWgR&~jsbquBx$HYhdb zv=-hI@zE2>7wgxr~xKYc~O8)#3QLg)Wf8>DX>eTBNv}6$&!e7XU=b&J~*{8Fk{$m9$7iY*4{RF zTtTc~r@gOmDg7>$6Oj!un7M-I!arHy!6=%5EoR06jqa@?q*hK$ zi)kJ6l_e#gQc`wiyi7lnH!Y^YulMWbQ}hxxZDnk}?J^_OWTj*yh-Tp`p9F6a(0lW( zikKfB)cpHsr7Br);3bEKCEE}s`<=}50LQeZlb@na4-#SBYy`~EsMLKPrv(1z;aJan zd$T1w5uWNDJ{-11iY(gJyGKMH>d{frwv=EQ>vMK(Ux54^71qqnXg=3?6wbUG+e*jf zN13fR|M+7P^>O#gJ^c8r+erv3by@mLous87H!_F)I4I?McPMtu%7+lIzS2PyU>+5u z+)f4$^#<-iDI$aY{P3A6Q{x%kIxgvyn?5uxpY{u(XlE5n5G^M5+tz;v(h-NI>2EHu*)mKaN5XN0GuO#BpS_aj1g&^&U= zKa~(Wpyv?rAcrH&GfOId%Bw_ht;NvmiS4ah#0pMT0Bl7wF0ac-XN)nsCw;SE#i`m?WZ zrrd4w-H^F-jf*R>#@F;Fp^E*YIxIo-!0`>QsPd*|ZHN1VxKzdT_YBIuUP3pf`l;0i zAc`iglf?-EhnK9!saRv99URSML0mXkUMo%Z>vP)&sdp*4W+%Uqg|Rv<@fHU?&{=KN z2+{6fGxWEyg34lDK#LXNZjmbSGT0vIkUh| zSZ;Il3stQx;tQ+tvG6c;O@{&hVeM(TY?FV}A9zq=H$q|g*A?Bd!;XimDk`nfonoG1 zi*uwu21dVVv^DF0)IA~4l{X8=nR*<{gWXX*{fQYn``6lhEB%yYELBk6xiZD>Uv}LU zh0hcr8~#pAKo#1<4wMKg7#2bw4E$IjHJH>KsEmnP5X^rpt~p|^M2e~Gb~t&PQS3cQ zt=)94yG1Z5rZ#44?a0Ik&*4K7q)G5HzTh{LVh89WN91hc|sZIwV6WEB8`3^ALQ&h@_5LD5m(E5C$}arhxs5U@B8 zSH88Qq;FfIaXDFJ#U%m!%^eHdH>Tn*z0-sb>i?_0_UA(p8 zk*vjJg{z)lZ?~Pfp>Oeo87z5oS3A{;;A739n0r%zTmD=JOcl9tYtG`3DZ$AOK2$#& z+g-;Z#d1Pma~od@63nvvzAQ9-nVYj(XRPn$5gr7RE0aAcPwsNx&P-t7EOP60kml#g z^o)H4g_HEf5;1n7EG?R`I%O$T{@D?Oe*2hWP3@%vj@a!$GeI~@Qh=zHYNNA5{ zn#sym7($D^Tp7vB$F-r-wz~3iHeE9g?KBMo*G6>m)|E`4v~H7@s$1H{Pu?fU zcJK*U1wJ&rISQZh;1y0jx1&K=Wmdo1U9@=b)s>&Q(Zkqn72@FKXvp=dyaxU|zdXbT z%ip^A85nc<4NVB<{CTM_#5dgGwa6k;?hjRQ+Wv&_&bWqLdOh!8*WOMOuSIT9|JXZS zH)WqR)QS|fG@4x2uuL_1{#yn_&oo7^BCuQYqT6$~sxzyqd>bZj@JKc`Wh(!u*x~?+ z3t}dr>lw5opB0O6c&Q}pJX!$%K}43wjIhx#m`Wa8-ZnsFa&Want7%x9+m;Dz3%FTK9m-(vI0%?(R9TOQ09Hb2IelQ-{A`fkR(WuMuicpW^O(O16AZEqYDw?Qt|{SRy_ zMEe8jZkq@4Xq6f2uDhR^n)A~~gqH~Qla9kWcXqJ`LvYNC&Ppqd$gU)GJk4Wogjqbh5 z5bZLN{M4jB_t9asPYUzbO^d0U7ns)E=5F@zrdvK~JRX>z?$2*N5`;77@6}Ktay8m1 zgrTh1_}wpm^!6o>3QTruyp~Qz8VyVj&d;m|WLh?34qx^!zmF!e#>YJtsOcw-5dQ}O z2R-aNrTJ(sr&5Cfj@&4#(o+AHh51z7F~y)I%m`L^Z$8wTLJp9Qh5{P;R1C0A=f@#31j<`p!fgobhT2n`2&vo!1Fo#e>;9$ zcBWz$1w4O+rMb_i58G7{fwOGJyTiOH4kV8Q|9Oj!RWMZYyA=HXC9G0<3$N|D*OSlZ zhLgp)(e`inBLcSE7HgW;iDf?}DHqSBN^JMhIni(}E4Hm>S3lzP?R7UZ3+IF3LwA0L zhsI2BJwK>D7RyZ~fJ{6;C-v~2QRJ*>%qea@xKw)7>5Fg|>L8R2#Gim4j&h~R7ZxI= zgPQitPdD54*%%moMco6rctg3)u!~0n!p+6jiqu^3DqQ3DHYO4u$5=OxMBtX3Tp9+2ieh|H7*( z>_u@%Ax$7bUWaK0#|LbJHH-6UG2PfP2jhz~LQF7{Yh@$))cd0@0Od$&_T=i|e zn@k3epMQ4Z+@r0j&b8mz1_d!u-lTy=M*UKD-?u}_Dr*~9f@I==yYkBk!{cW#S;eyY zbRo|l5ILB=={>k&`@o|KWF4F<=Dyz7X{z3P!M<(xuX`+?Nj}MHJ3EQ`v?#zbV_M2v zfi3_uUVAoeI<%|g;yUJT^w>6gGZX8UWDF9a;Ry-}t-n0bU3=`uOCRpw@N-4e^w3mZ zgYWX)$xmmnhzd=!X{LE*a;Jxfqh(!@^n z0DH6c%$-ZD&Ht=kH`Do@7IUQDKD~aj8y2Au7uq$q{%RHg0yA{>$MMAdS32hWwD5X3 zUs>lIFU6~_ROF}YKsDokT`4)<_t%il90kF##EBZwvu9#+u35473UY0I!PRf7p#gTqExuWUmK%&*+H+}Zh=Y&8GraU8THBc*dn%XE}zk(0{so?rlBmt^0zufUq=aUs52?W`vG;Z_bQ4fq+ zm8gBV-1WLa6~z|09Zlg-6*=WiC2rtKciT_$F*1WLT}eFsQ3gkebDbz-6J3k;;diws_~Ei`r4Lu;b$8*>*e|^IEckuoa{E z@!cUL6z(k7sboGMTp>Hvw7tjrRu1U(%(L`#;hzC4@#0xEzFMstY z4#G=T57^4F%n6BmSG(yPaF3G!_IS#dr^X8wTYE$xY^YC|_Xy)2ms)vLPbjjNJV< z9;eaBv@$~QrG~+9Jjvr}qP}WvzlOVrj1L(vtFSsp z1{o|3AjUkcqgX@z>i((7nbh&*MzW4uO*L%& zo=oYMdKZir+;s#k$DdnrkYpWjL|!_LWSO*Ec1)=FG|mvLt$$v=Iy96%+upLHzU7I+@VZL-@G)*q#}?^RsZIkqwVdG3oAUo^;eikj7Cx!2Yglsh({t zkOLti%_;HNCn>>@7Wb!+clE!yhE){zQ_3x}SfF|9xogq7b+_#|r_z7{ohN2?^zuO? z(C+hK>efDv5+Q`a%ddfMl~sxQIrWxT;Y{Q?G=_!?-qzvpaU!SnxOdk0js4iAOAt`H zoS#t^Tw#;5h^bSYK$x`}QHDoUexrECh$?t&fR2!%=73+GLnfKGff0ei7kwS_+4(?W zczVWmJ^yjU{A|0a7YmQ5HJyg&pRNF(zxStic=8hUZwN~dU+~Rg2;g_z&8${cd z^l!8zUz2o`w5ETw_4x=)3n)sGguw+|O_lUNmlwe{bW?fLui@eQQhE9@+U~21mZGVE z>D%-g)%l*w=NI)`c4R>77Ey8gCLjF`Y@65gd=|CnA{`7q+LreJl#=FlqxV3!wy{j_ z+-wcHxWY{I9^~01E%~u%Qq2k+E1}*a5`B%@s`R6poNY;5NxvGlz+gdWc^E6MzwF3a zC<<(xi|Ym{@R%^;p-9mk6nR>q$aacgpLogrEip;fQ3Yu;(5FDPz25Qdx@YC*Z#9Se zK3PvnUR=kwb_4RcOk{CbfW3Sq=(jt==D_LvXSuM+>mGGqQjnSyvk{ma3E z6j%}l|NU8t0pLsje*CZBWJ~pulCOM7;R)*@Zr|kTXOMw^RqwYQl=H1hlH6{Qtu}T{ z6$&yapst^TIT-@J{oqgAQ`muC2;@=WE&H6&<=}-zeA>Fpcgp7)7jg#1nKR;UkC1|g zI=(jv$wWmxY}k1OY3aJ5mwi9N!{4@Q{1FFb6U25xZ#2n9Zrs#tz$NaKBYse>VfceVI0}Ey7mt0m(O?V@Kx|uoc7T-}haDHd(hpt`D?c(c)3}sVSqWfRYQTXL6#!eY7YZW}5Tgn7NZiwcT3xaUbD;Zm` z0U32^nQ3JP2_PPW3-sA>6|f$o@vL)E_qwBwI3dbT(kS&WX$ulx+ObZzxu7f&9?SiH zD?fdl=r|Gz&w!vwCM>}tF-!R~s_04@n(28dttGPuAhlERq55LiA$hcxQL=3vzMW^0 z)l3<~ZH#(_myTZy(GWXa{ZSg)GRmqM_@Yzgg{J^!n%pEWo2uI0z52l?FYr*?fe*+m zCA3A3G_TcibE=b$+3+$mk~-`eB-yi3R#rjOEmj2h(5nK!78&Z6t`3|M{BZ53N>gQK z80^n+OLE6}C@w054F9xy@5z9}N`b93`ow+0!gi_+U8=i^+%v7-5RpuAK+)`8C0kjJ zo)mR0x8`RnB(eHL15x5d$%R=y7bFbf8HG0S=t-#3zfd#~;m?D)b?6mSMvHXY%PFD? zj3Tt}CwckKUI!0;73Wqmy!s1vW7N92K|g8wWxNG;cj1<4Nps+seFOW+HY{oYL}vrW%{nZ@QYe?!SPV*7NdjfJ zUN5A}b+(l{$v7y!$#2`~(==Km&7>i-R9muP`%b_Nb+fXw7!jq{Y}Qmpx=~?J{h$1f z`~iobc{mzsEdp>{=y#{egH+#W$fJ`B$yo6qVv}Q6R~L9iGr%-8+e)r06Ud0Vk7=y+_v@VA!L!jQl{#mfA4@KC&l)LmmzeLs4y=$Rz|iQmO;ASSbbkCzeq?lFNGVKXTKJXH?xTPE!j`1eQZ%s5WhT6ZM_W-63Uv-2rtK1Ikk!)-K!)W#}6It1TN!9X!7i9XZf*_`wd{X@^CAx) zj|n25;x!-$oASk6=7;edPj(yhp|?^eVss}xYO0q2k>LY;Cp{@$=k)N*@4*muJxGqZ z6^5#M0?nDJ2uKG@odF{V*(NBzFI^_oYsj}O?22BGds^80{UYTpb3sWLPp1@-4dL$3Xt$FJqSq>g=_ciPY(tLj6 z4Nqek?x34be&=_*4xy`gv^HXpz5ea)8uDej#6DV>lY#Jc5Ww^JV22ZwJD*pS`CA|Z zYi#0m$S8+3Rq$KD3KwTs`m!gBe6{SKR#~9zYVspjj)DLj14?)Bfyf%Gyt%Pvn||Li z7w}lEQ{cf|pT4w%c~CI~L<@H2nscivqjRyB6z+u02wbO8qmyhf)k3Z67%7_l1! z^>yzazmq0Xu6*uu;L7dTWnZ9{2Y4(HGZ>C1v`AA};7tAd`a7x~l;SzpANmRv&$z zn9dOwTV#`bB#UC9f0Jw*K!jqE99bX>l{{Q%9#Hqg7Dk_jk(MYEze5-K+36i~r{?#X z`ls`2o#C}q&o>TzP+2|_Oxf9+xTDQUBEWvD!-rMu{3xfJ@jL>lwbw43Bw!<;7UO%th+>L25p4(;C27;k@F>c^25=opPl0+~q zAMaAacHl^?@!_zlv3nWdI=bveM=igbSKKMQ(yM)457!-kErbM@m*TgyJ>k9@m1INBqOa)be1KRRoKuiZgh?As~yRO(1u^5Ddeh zY7+4Z#KE^nmZIc2@k$>am2aDt!&7__j?R9r89nVZRhoF&x?AnxcLhM;Z=S`PpxC0K zgi(C3w8xS2<9Gwt2)_I>Q{TR>^FZ<5s#XVETRtl=Its|}rOXl^Dxeo9^bHfQ@Y*>k z69)+v^-Q=f&TMX|Dxkp;p`9Ffd;}BDTv{IF6JRV z=6vh~2o?2_tnGu&;O20QC%!9>S-*|rL^&qiWUcmPlftV;H_IpThf1;|)8}8#Ha&Qg zCN0LD*HCfo{blE!GNh&2ewx`9wQln)A&4y*nfmp!OCEbSF5LjTA;;9Ru`vmD+oKp5I+M1qIr!2$of}LKSiYf<>&ePp3%(J?WTSZ&3TywYe;fHt zbMe~{IT}J}6ZhED6{aE0wCKfyFQD+f8JrPpVkTT-?9iyE4ci&&dQj`=k304q7ngKV z5CUA=@3i<(DL+ro0yR$PaNZpdA7A_DtX@ZlAUk_JsQum>>6=}{qQtkSwX8DUY`gC= z1c7kRoL8mJLq3pIG29*8ypxC0MSC_}VD(XvaMC-hHn%-B_H8GsUtAtm$Sv`#CVA;^ z+SWpY+$xX(O#Nf|lxzOqVQ>rxf9{X>O}G1VunTOI)wPV_;7wTU%hgeD)c6+nsM5u--KjtV;P} z`}Td{$!{@)NmiWZ*7;*fkbf3e_$GnmsZ#oKC2RCR)K_-k2Nbp_7d0Y~$b`!)b6+(h9y#?f`HX8Vm=2h;8=ac}uiG3A#<0%l&mvBM&fW+99ks7{EnjIqaN4bzQk@?E zT7#w%v~r7Jqrn&D9c!`s26E-T#B~$=354*!7?<6wpKNxGK3k5+;LK3q%8=)ZNlSJ6 zH1aFw?MT_kbl~Q~|8Nq%#&M}xj&Ju`Z;80*_2E-A^ zcvYd3uP(!M0UHgv9Q5HGd4mzPB%46yXV%FF`MSabH`*px zOGGqKX&FEPDW%$M-H74qdDAR=+{j(rSj@ib5nOL^dn}KZBQG&1CJ$PCK}t~U&xX)G z0F+(Vt>F&jrn0PWxNLPrJUsR>jORy_!?OnXQn&#~kpb9> z_cgBNDR}SFkLlA_tS6n0k4~@$jPeBc^s7_ zOUjCz`$Di&?&6JLvCkmd-t9?B{ak*&mxrPF&5dpK<7Ku7%>S~lhn_w@$dwXJfVQS1 zw3;1sC!Y$EOxrKgUGf8@Pj2HzHTB!rjfWcM1-r(RqL@CJoy3vmL~177;4&9x{ULH% zPn#MtOmfKs7ddl7rJ_G}3FS{3SPlvD6;N~Qm++dpHf?>>5=1ua_3i_92tr7xKqN_1 zktct_UxlGNx_;*DEkKX!#JbIJw5`A%sSF&Qg{(Q>yQ#&ASN?V0GvH8n&_%grb9=ik z_N*#KY)h>am`&z19plu_7MkV-%1ESxz4K75(^kNNF9k`Vjn_I0z_NFQ zbIkKEuj!mQ(cK=1+|#?T21=AF&E;6DTxB~PEeRs|zI51DaVB)agf7`qr+<1KOn-E# zW{j^+f%W%EB9*bn1VjDK_)4*4$~7oHon=w%Y=>fVPJE1*L9F;`wd@rlkd+0lz(Ep< z(dC4n(7uRE_qRbT^w^KYp6_=W@YQOj}}zpJ%(695M%NrcC#bmnp-%I;>ntWw;ho zNn2s5k;6kDMy8Fx!aHr?QP-6DQT-7OI7Q%G;>C%7;X9(@)iy|pois*{)5e($?fu_h z_6+(8RgDjHC&C_TSaN3W*`9RhrP$}0;ikuGAYANfkg3_N60 z!hYiP?8f+}-D9V>!R?k67(0hP?b@lrB!*WX7HVtm?={sEY_1DPFpPqnBAi3?CY$`o z8A{%G7Ldth6jdKwu}?~Jj++HY{A1H4|etilL z8gA1l#Od}KJ~-XpyA(@5y6)80VT}-)8&2p{Za{U>XqFO3{n6{G!}uh?zC4QfjHwU7 z8w|VOk8&qsJL(~6SSB5DOc1RlMfly7(~Exc zY*u?YAU3s|ecT{%i2rt-sN3fFNOm%BlfA#~=9q+|V<>5HuR+kL1)=@hj zuk;RQ`SJ7*(l_i3p?KD6?V6h0HxD~9ZI%_kD~4& zxEHqpS1TwcG@8M9j@FG^JQ0@9U!`izD2ILN*7h9Qofysit3Ek0QU*iPf5?#neJm)b z;l`x5ckLD0bU|59{8)Q0+Udg)k=n!aRs$izi++`8@ueW~7Jf5{6*^T};k+@krJ)kg zHBT4nt`@UfxGwqJfFLgr!8R(W=kSqG=r(}_VC{a%`MQA^J$vw^(Kjc^~%oODpS+^Z&~K8Jo?RjTpvx+l=D40 zUbQU|VC$b9uOX7G{^>#CMj9*+wERpP)Q{pv1*_1Bucr6;u@~5W+7(1xu3%`_5rVr{j-}q7&Q?wrKVqFHxgM#AEj<~6pGR_vtYscTv zUNmh0bPGO?z2rwP{JK6eoR^!Vus;f#p`RXjA$d&HjZMvFjilm?xF_Fk5M(IWB%S#t zEsZm=^Jq@DxeN|P1MKoiFNUYo(|8g$l40LvK_ zF?n_|o=-Sb=H-|0%=O5mAj3&;Fge?e0yKnAITH!I+h+IUIZ{c3|M|rN3pT)2HU_RA zwaXaiuk$+dZX#=#edW8LwK5 zD6BKM@s&%XFu{U)*-Lo3a(MG%VI-5_12%;={7ZRpJ{UoOg6+VqqVX!!{fK+w6%NBX zZ5QXG**)OWF$sc_@J_4t#U3Q%uWlDXvh1^U5gfdUzA0{o@Z!8!(g0lE(c zrxcSMyse(0)_tq!MDn#dFbT6UaV)eySj=#>rN~g_;4zN25)T=OEGBd=xc8kM7X+Ef zed8exMjJ#&$Jk5T=9^UaPQh}R%sBaQ*JKjU>Z;&DR_iy7gU%l2c?UAx+3h!@vFT9sYT-u;8hzVy2FG#OdWZt zaWR8}xa3f`1OSD8Iq2{OL%`BEgF4?*kfS6ZWVr=Lw^F0`^Bqd=TsF)&wc7PY)2KYS z7!upXltw)SXdRm6qVhm_Uhy?6@j6$yEDDuyO@;{0_wt16i_S8i7DvR+P|>hK{mZPt z&9%-8Y#)f?gW`Zokmz9cq#F8jeizB>FUxoiT&nR3EB*QDXq56K9o-$YT~_8yzxwXZ z{z?U$OOXFbiDFMscHs7@3$)z2vk3nBqM;#;pBx~f^a{S*fCVXZkjsej0kWV*<>rRv zSl@$o_Mt&Z9LJOkWX%|ikyOcVI(W=&*!cKRe9`1($Hfdo8h~jDaj^4WYr?I_UnOom z5{iqd0ccMbNt4|dz&{2`a&-k~J{UGH3BJf8MeC+e(4Dr5R5yOqmjy=L?`9h6cqEYc ze+(KXRrN!ee*YDfc{ctXz~ggKFw}TVe?R?iqlgt(_#jI67E@E*Dgk1f85^)WjozZY zP+ZKmfC<;avN5GNCCR?@2&HwthAa>KYcsavNMM2sNY$s}mI6=si<+Noy-PPj7)%BP zIQ(3!9!dAZ{65`7r=n}-_Tc9qa2`eABO}0Lf(#`;luhyV-CZsZG#38lnUe193s2n# z$uyqxXi&5nG_~El&|b)~{tY@03^{?te{tz$+@+(#BWF722c{WAc})_C+8T$}N>+Z9 zf&|C*_7v3HN=p*CE_~D)-8>=*hz-8IhCCmtpYJl^u7?PIC*1+Gj=;#~3%S_Jc<`Yy z$2yX_m?J}%q7`UPAn*pb5ufjCNF)v4xk6P?mnD6EQrL@OKHue#FS&FPM<@`-mx2_; zWt?n{94*;4Wwu_Sx}VX>5pl1z$7#E!N94JBjuK}skhMUJnPipw?;odLh_DMcTnnK$ z)|w?ch7w5lKmZQVcsEBpEO;<9A(iFT=etqF{x?IAlgZq#bG2!UY0 zn_|BeEO{Q?i7?l!rK8&tyL}ez*29t1U8KjkT$NaD$p8JJZQQi{*AKw||54&*;QuAa#s7ce|FxfZFl}4AUk^UStPQAH zV5luuZxQOttDuJd*vX>aN!|GGLZ$0^4{Mew6q@qqaiYK`VINJgzXUHfKsn|TBsmc1 zPT*Rz@C}e!EvMD*0Z9Iu`qGH{c^r%V%y(AKBxV&p$Pmt{14^=VhqZk<<#AyyLU~?8 z-G+J*&k(B3Lyd48bM5~4NO#^<9?k!ZFxdCm$~9d5N6)Sk($UckP5EK7sTp3rJ9A^QzZdjb;&HOtHtHh%fOM|4GS{EK;XsvBvjS%Y*sLPz>K zc*nIC0Rggp4%R%l+19KV5D*3;q-u*#f!+&B*MoNAJMDQ4LHk~e+HP*efq~s{kcR|( z;{RBJx`K}shNa5N$_nuF=b+J^0ZTHBBlh`eg=c4R##7G-{~Dv9nU}2$z6wl+n_c`=`wiey3uG$TEoBDisWwEH-MGv<4 z48P?8E=dF^j}jir=4z-Tk*o}!qc=n`1 zs_x-FHGL$KKn(ec1Y)-E7gH8Y>*#;lbaoaFg_Xpaar-K;xQDXRQX7{bRX6aMa6=l3V`^Pv5K1fV;d7s2&qy78a61wAG<}^ElbA74JZjU z3g;->R8Vp-bsB?Qje#Y*oc{hB`ik5nkS;dDU|em!Fpx!cbTmf^g$cQIXDDEQGS_dt zPG$vNs(w2O-Ye`d9YEff^_H>t$2AezE7U#eF4%%Uk74pRpF*V4{^I1oH1(uXl^P&) zrjMs|-B(JRbu0ALWMr~63ad-t#Fvgew!24G>ZgseTO$)O@bV|RU?sD`JL6C&*~@r% zW>moJ1S1Ll_|p%85MDtWx(wS&9;=g)lNXkj8W(E4@FYi$mjbo zx3Zh~^&QieK-=_hlHOkAMW=a9eU1%SC5W&DX^MX=Fo6aA@75=N)x(kDqBerM6R;V1 zp5-o@8y?Q~T%84bdgZLltzx0qw7?IGlu0r@doCzwJxW0c!Q3vrFq^vgqNB6Q>M@3x z^>qzP%g8^ErwXUNdWy3xo5~v29mEfQ|8Q`29$&TuTlE^g6mHPTcT?Ru7U`;ecZnxo zwPA-xM;~Cl0*}h}RSLBfay8_e8)lODbt+2;NFW~n+2tfym)*m6bN9T*~nMKWuaNLt}E0BO*$ zN1HpSFGPSBEQ&KUL3v~iu`NxFC-(J&E9B0fK8v-TLk>+;shdCE1mcrVxttN0$DkyO zG$y5%Plhv~yy2GYi4elzqyMxJ9*@xAgv0j{q-#-Ib*TWxc8>@r0RQdawVTFuxkzem z^+K)GjSoCAmPFD8Z>}T(Kg<6pR_`|MyQ++z2g@Y1TTwo@{%HJwpc-AIMl&2id0b@a z{1(9Y{%5)R`k^dXcjJB;r-)vOW2m>c8GcsU@Y2#dmB%wmL^=_-fd@^k{NLxBclCFP zcAXJ0S_X6M3g!*rslhMn_RRu7jxcj*$N=ej8vUXJ)4l#A=sFEymaJ^J0AF8mEppAp<7Bg~u-s*XD2N=wR|O16FvTrbEu+9< zNG`d&QxO}WUhX|lKQu8>dUj^g`szV@he0vmXu|`*0YfibrYRIZ*nF~LyK^+sEG;hn zqoMIVPMDGW#me$+(^zWVkK&B)UUr$q z(%gE8e0Pg`2SbV6h6f-0BTpEtk2AhOvAJ&<6=9jpnS{^aG1M>m=Uq0U0vdMbpfh6_ z@hXh8HS|-8Az~3Eu?i-*rY$2Qn+wxa?S()=?D+xC>;>gfa)r(m$d0}TQkEhRJ^deT zn~Vyptyo0ZDI+zq`0|>XqRp0U`iPL_tXCZ&^taoZTx2mr@EnIo()k}{||EU0z>CI6IF@Bg7CMOv^n7k zo%6$EBC0PKJVIk6&jdW&s~ujxR8rTn0jb@(ZvGt?pNtPyFhBb_SB61udC*!_{r;I` zdz~JdSRsFqA63*KHgHSzNy&usaahwnvK*uA;+t=BG@x6gMxynAisXNgwX_aBsWzvZ zXv5vs-tz`x;!8v0qA$#oOSTu0EQby)i>ZU7deRxEtIf+ZZ`X(Y&KDTrf@7EjGsu7N z))zu{Z;xuycVg|RSJhw6JbB<(-8MLyfv{W0&Tos%yI%2F^N<|WGgo3f+hEt?dEv^l zkOPzr%VAyI94AYsx;fa{sp;y*Hl5_E-oL8h;OMA9@my@DVaktN@5@`~#!Z9MIreEy zLqn4u5#ZDM4}v?{9Ed$#lS4A6@oMR40Jw$h{tF1V`C!z8 zsd$0a)g2L?udFjJ`vsBDpsFM|B$(|-xb}f8x8gUb zbuRVwtp~x6!C<^hm4ElM5^ak<*J94plrxbuQ@iStH;P8yWOCA&^oIaD4Ft1$^zGkM zoYgaqg-f#HL={Ej!w3ZvCH>)b2qgGO=HG4fp>U>&q37_^9Uv@_e>Gh&tN%-FBG~>- zs~3jx zq&&S-#NNtEF0l#d)t6qiLW1qTi{&e^Wv8D_<%HDeq#ud{Ww{g2=(@rd&>Ks?^RbHb zTn1Ika7RV*oyHs^p8VkzAqOk>>LXAUBJbJ*(rOG1Bh0hq#^Y{sfPOc02iHx}NT>oFY=1l9=Yj}P&{L3{V&Cg`lWpe1F8-DI$5 zZ2$`DxX!M}49yk89%Tc){$V(-;sJ%Qe_dZDTsRw$6 z`~ygOc~s(O2b#XWdA$k?3vZj)17e0wH4-O6TfBgho3en~a2tqs5U& zTeVHh?>&H>5Db#;@zXAUf|d>S^?l+07-du{5t5)Tk(A`NBMQkh!TACSb2T_}A91t_ z8kG0?mB*lUPJ3&ci#_Ote$r)+R%g_>!QhNck_v#YtZXppy6|Zl!{;vOo^QC2L(L?I--uIrdv1qtO^Yd zZbVIwx}svr=lezaro<4w?!P{C!C6FLG?|YF2tALE>N$y>_Sp9~`W$@|99d#Kn{6&) z@W6`GhXIM(mg?r(0~9`OlM0Em_vDzS<8=)`Kfi9ts}GVQ4ZfI>>vy6o!9k3B64W51 zs4Y6vnZ%==rKM3SDX>2UjU~DQ;=`xU7Mroy;SotD%c!V_5wpoLqBgT)s;Je(hJZa& zo5L!;-F@@)Q+8D%oY;SLnV?m+W@}asp4bO*vwqj6VT(&hDH4>Dk_d`w4V9lf3ab&3DBV z>0G=U1hgYXG?P25FAznT6T!wfh>vy%HOv zN+KyEjs=lp+b@4CO5Ot*DVff*6;9vcoQDhduwDN;hyqrxCnI!aTT zlmHS!hoC47gMb+62^pnH=zRb~P)3jzkPspzL zzWwfAo^9rmHx*ke3TNzb;rX4d1lX4G=o6w?`rGRh zHV?M0jY+Ueb52y)NZ(Nn`1~#sNb6_?$h8 zYpYQDKFpnkzb8wkN$PAPCB=Bkw=^Fy8X#1xs(;B@_w#mwD1kl*vCQeM2dG`_l;I9}_q z=d9VtXjcKZ*-&#pUl-Vy6}9+I z#Pi>-vIAm|6E+7tSTCjGZpJRRg{S@c6y^19ves2Cu*qfwxR`%@Y&d_?q5H^O`UjhX zs#tpQO8aHtSAa;xL3(_panQD+Js!PqM~xJ`OBun7dhJ*1E; zM`D&^Ul$b_x#+KHlkfUB%{RThTD(K|Q#RLL4cgxoOjz8r3V-V|ysODwt1qmgwmd3i zO#?nH9JBs>?0R5zmAb|hZ>-4i41yA^J}0q2NeGoaPyv&&Pk)IJM%^$pZR>$y$n=Hd zE!=&7u1jrQIF%6{%~tfo5SA~UNbC1)Y~LJJK7PRQK_8jeaSi;Fp5p7x*+MFC$|gE*nTU*Nb7~`Qh7NgJxfbTua?zA1nTG zRMg@c$nVH5QCRL=_vRLQv%eh@M!CYVy|xINxC5s_tts)Bx8Y$lVN2^;lR zT-N#c@uXEb2v717&;GQBD~|_A%8Yj_Ag}bC9L1mw{i1Q`Di~;a?I4!;i+ax|z49xE zHZQY)!|T^NB_!ENkxynXlZ!0*L%I^@izzA zD`VeaP-VZJ?rS2#{qP(Ub9ZA?kwnm z?7@M1eX9x_Ql^*O5B<~8pRV8SxSwQeAqu83Is!-hs@pqs7C*_mSLt-F{R>>RzlI}Y z<0Tq38P<2DarELoh($`E2#5v(rt2KF4`h`n6V`93dNibHb2e>$26081t2CH~VUz#B zbI8VVt6pJhj%}{!SNuOPW3L(m0^iz0G$f@VWy8AJcA!%l^hPZ0tt{H=7V_Rq7TgchYNi-_H6JZRAYai2%cMXTd>)n}C3#we_Ak$GJu*_*?iEK4Y-O*|MIj zA-MOc{C*3@TuT8TGubnN8XdH3W>?xtBBi!-$MSR?j`F*?`W7gNn=>zsXk|15_><%d01Yj`On5Tkm6Yd_@!c=wN2g%;|@m zkVR@2^vhMWRood$PyYjR6kujT@sh z%N4SEr<<$H(p{7<@4E(u$tXYXJ^ey#3t;g52)pUK3nc6vYYzfFV$cD4=-5Yf#h<}+ zSJT;_?A3C~6iRVMMsy5+N@(JTew4h;mryz(fod20o@M_#n%-K1=z1bM3n;jk5WVuO zrRspnF^O#kScF64_mLY+7D4w$zWr@0TMKD$utmL5Z^8C15LScL4ep$E3R564^E#)@ z1f)!1TeEZXTd^b9&N9w}92Cyx(xt*7RtbtYHsOaY-p`>~Kdb*u-b>!DVZ1Ka zUPb?O-Pv-{YJZ#%;n@IH@2mozU>-i4b#7tyaVKBj*Yb>aHt{&hYz26F>x@f_PW z70E+~`(hOX6^sRyRy!~&X5zExqAQR*`W~a`q2ZA0KOw0cTAbq~C=G?iU5%RH)A&*TU@DFGcC(pLrY4 zHMD`#=e4xvwV+THu<@g2iyO4y++X%Q!)@jhNfe?95dl@q+?r1A)bcxHd`$J31cAC? zBS#p*o+(~xU*snuhub1e;@E_q!8K${&BOYI3X8 zvi$z0veN9FSkmLaU%YslT#yHGyC!mUBQ)xn*xjG%Ccm6>*8cHK?#TX}t%6f#nvpAp z<;cPP6<=b$yfm5I;0a#mUrb+FnqUmhFt~XB(nj%8(KL#Rvh&~GnNO`c5L6jNqYnIS zkD7)0Qycd~db_r|2CF;e<;@$z`$o}mi>QW#9lNl_igG{ZXx5;cf`!FW-`JQp4rip) z$|s(DVHT65VBU^Ub1^QsNbRpCKzc<)&UUFs&eD9ZNSCaH+d7%^%L!g? z@kpElfKiFjQbCx0!+Q#v_7vuLk>nvrTD!BwXvj-oQv~(F|j=GCu6g zq#i~t7~5}8upIS$TSIyjdj<09&Jl%ET4n_Q(F>ZBmwELwn58?cn%4JZ$~Djg^}rx;#)y0qdNK;ak)j3Sh|+Lu>b<%YaF$d&HT zk!I^V;&OwktuW$prXfShA`Yn++0riU+ zi9Et7#=Rt0Ixfr~9rq=*G3ehmbbLR4U(fG^71*B$4y{60f-_;fmJ?oJ$I&Et>y*wS zKJtf6J0>_exq~^5nTtq8>g)f-5l>pmM-NsgV$gnuJ5K~0LJXn^G5gFqDr}lBOjuF& z=#!M&iRz5+NU#07czye){pdNzAR-9w!FV3V|te~==86R$er;GBm~mSxw%UckGZ;mT+*+F z2T}A+deo^4IXI7@Vd3=f>G5CYlxYIrnT^L%jPaqujZfpt{4u?N=R4f{B(40Vtx@eh z7e924a>6VREau};T=by0BwgR1ASd%P;}%J6+iq-PMtv%}&KHq$`CbkVH`-$9dvaYC ztGF&u)I^brDk_3#_3}FjC`#wHL-bt8P6zMjO&i5pyy8cS2OKsdT(kC__%vGOg4d8Y zPbRhGPn=!2GgYTaBJBw1l^)qT0#1n0%Fi)u;f7pIw7F5#TzNxyly{4yxo4JDx%dl6L7C3(;LXTOsBg9Sl`Y;< z?ydrhg2@SXE2n8q&}yyS9GKxyrlmC_#d!OUJ8$4}KN8O==zVkuIhpJczsy=Mt&KM< zH|C9n>ti;>lYSf*gCu@@T~is3gW?m6rHnRh+_y$^=QC-7zZcP!?%eI^xStS*`IHKl zJpxl-pBhB1S7i$>6Hp$=g#pAN31qN)JP4av$zen3LOJ0QV_lB6oq=v!X*wh&>0=WW zI;P<7tJvIJ>BOj{{ctqNQRyqqb&dP2l1=aA7`yQ^;^ytJeRktmb>ZfGQos#T2@VGi z3o7K_6Dne?6o;efnuoWk*oazf0i)F|H#3f|IdO%O++!68x{dRimOBwdClI`c>r)LF z`NL7J2qJrTw_|;_&bK0bB|1ouq^$89vBE&J(=_>1nV$Pa_9Y7s+D5vbc-G#oE*45kFvT=W$tyS zduA0@!h3ppH^?$VQ{vso?Q>+k*5FRV|9q_EsI`SbHRt#55zq;3uorN=YRJiGE$jJn z6*E#x#g>kQy6^WVVM9J0?9SQ!no^a{ok4fROf5;?eXF5mWif3l+uVzN*YWy}!$#Fi zDWPD88NmwI-#Qx5{pscGW(+ABtV4N-r5KMq&ALFrbB8qzv|d@YD(}to(^+UkJN!Eq zfg1V=LF}kOBHIy|6&okNGv~m)C|2FgX3xZ08%1mkL7$3Vgs31i9!`xRFlGMh3$;R+ zV@6G0^hoddl}xg-)4VW&ub+=DC}0=vSeBWsugc%s;I`7T94Z}4PZ`vIYydwPNU0)v zAh!ZHP#e1^z7lt){w|{O#;cLotIAHmA<%6DNy7L=G=Wc?tAK0E$*WV9@;3}&AS zxH87s7aWE4o(B>|tq+)m_2Rko8a54^t!zrtN{jRiDNs;0F@-bYxjq}zNVX<#Ipo2+ z<=9C2V`SW=0aKGv*<=VJ>ft5*o}P_JTAQj_10feJ0U>Oshm`72^}pJJqUbeD;}O91 z#wO+|reS-(H1&lTA7H3ka3FCZL&NN)>6wX~`nA+Uh>o;`7fj+x*4mt$u|X`yn8P$~ zRoQ)v6x>g4r*^j}_6)LG+PII!eGl6qzV`7t#gTc}r+~8pN$jnGCp3lbi57Fb!ggVX zzd|b?PbxNpIR6FGsrHzDRPswLGbkoF!rJQ0k9jQSCq>0rCNVi8rTVmGVMSj>TS)j< zuP>}2Es(?g`gsxEj-ui#ZoGw;jaGN0G!tj9Av{s;wa6C^XJr%ib$zIoK5a?v&!me@ zBp{)Ijx}hxL^;w@K%axMW2uf|ymQKTD>uJ|KaMvN68ZU|el*Ozwg*~>@)iqO2qfw` zv>bc2@oLX?vK}}@9ctR8#qSTNv>hCLwt`eA$KOb282P!?n?}$_jF_)bVf|)`#Hs_X z^8+2_G59LCW+gv#!lVcxB6!q*@heMHODpb6&O<4&q%n-r$q*o1=_1N`6q6)LJt zz#BH#X#7_QGAa0K$G2d>eV3zFd`=ZgBR}xx#t|5pegxg4bF=?~alGxu?jV)J|3g`A zI0rU$AQ6ya=9zf}yJ#@Y{mMPYW?>Qzo^wcw@oYFgA|fNRJm=QwNBX_J8-bUR%sAD9 z5*n^e+9#A9r*=1ATjjd*)(r%oRe4JY(1ec?#^&{p>j*im{vF++W4JWl=JSuq31ud3t4ilYTermC6 z${G*FUFzf7%z*Yd(PmYSTGo&B9l~X|Ex@t7{9jfR5yYBQgN^mv3;vq89^LamAPhE9 zDe%uc#zL)8RQGkto6rl+R`zwcZRQy%e%a+i2dC_;r&v86jr}}CPQA{qM*Vx+W@0+@F{VCGS z*2!V=LZD-9Kh|}l2ORo}`%E>xtVbI{FuSe_a18 zm}Tz-x3H)4fehYqP&`xZ)#MeVVs2`(UQThv-2Bn|VbS&f?46{VVzpagd5FPftUz$G zA$GW^O7=8HF7dWK1p!Fi5=1R9j8)k1qjc&GBZ-Y%Ch7*0Ajum3)TdaKS7;=BcBnw1 zcpz7MJy+5E^P8Ol|{^r zlK13eOxoe99mB$kjt?Oy499XxGmDA&yeN)~AHC$N;(XcVUBu+|!i9m{3iZRi>Nu9b zdmtwqii!K~hI}ERQ=};HnjN+j`TDJX_BkSY#wV99(>hbYrf%#2V`x=wH{BVwvwPO- z=usZ1y)w{^+Vjb*nWB?M+y+HK`$?F=<&#)sLU0=lzS7BlT!L|-av$#KNFQp54^p|; z5NSM8%=({wOc31aNs-C2%)7-NT94x0k{lOuKjlK5eWtY;kU z9Y{20EV&B#Ap;Uvxb!00QU<`{6*#rc)x?g?3!<@GjE`p{t@L^7VmCUV$$*GE5<28N?mb zY+#G$cA3_&LKWb)ND%dP2268|=)-Zk{E(nHgH{^CI)+4IhT}HHVI~5 zKjWKr^-oNKdw=E7TA?m0A9a3DSAoLR75;zl>#n{3zt^FLAo0a;wg|BrU46N)blHvhPGVDtJO?agjk-K_by=ac^h DD9=|a literal 0 HcmV?d00001 diff --git a/static/js/nav.js b/static/js/nav.js new file mode 100644 index 0000000..5a3fe43 --- /dev/null +++ b/static/js/nav.js @@ -0,0 +1,8 @@ +window.onload = () => { + const burger = document.getElementById('navBarBurger'); + const navBarMenu = document.getElementById('navBarMenu'); + burger.addEventListener('click', () => { + burger.classList.toggle('is-active'); + navBarMenu.classList.toggle('is-active'); + }); +}; diff --git a/views/adminSettings.pug b/views/adminSettings.pug new file mode 100644 index 0000000..299bfdd --- /dev/null +++ b/views/adminSettings.pug @@ -0,0 +1,30 @@ +extends layout.pug + +block content + h2 Users + each user in users + span.is-size-6.inline= user.id + if !user.doc.admin + a(href=`/admin-settings/remove/${user.id}`) + span.is-size-7.icon.has-text-danger + i.fas.fa-times + span.is-sr-only + Remove + br + h3 Add user + form(action='/admin-settings/add', method='POST') + .field + label.label Username + .control.has-icons-left + input.input(type='text', name='newUserUsername', placeholder='john') + span.icon.is-small.is-left + i.fas.fa-user + .field + label.label Password + .control.has-icons-left + input.input(type='password', name='newUserPassword', placeholder='pa$$word!') + span.icon.is-small.is-left + i.fas.fa-lock + .field + .control + input.button.is-primary(type='submit' value='Add User') \ No newline at end of file diff --git a/views/includes/messages.pug b/views/includes/messages.pug new file mode 100644 index 0000000..661d8c1 --- /dev/null +++ b/views/includes/messages.pug @@ -0,0 +1,6 @@ +if successes + each success in successes + p.has-text-success= success +if errors + each error in errors + p.has-text-danger= error \ No newline at end of file diff --git a/views/includes/navbar.pug b/views/includes/navbar.pug new file mode 100644 index 0000000..40abbf8 --- /dev/null +++ b/views/includes/navbar.pug @@ -0,0 +1,36 @@ +mixin navBarLink(href, title) + if href === req.path + a.is-active.navbar-item(href=href)= title + else + a.navbar-item(href=href)= title +nav.navbar(role='navigation', aria-label='main navigation') + .navbar-brand + if '/' === req.path + a.is-active.navbar-item(href='/') + img(src='/img/logo.png', alt='') + span #{config.siteTitle} + else + a.navbar-item(href='/') + img(src='/img/logo.png', alt='') + span #{config.siteTitle} + a.navbar-burger#navBarBurger(role='button', aria-label='menu', aria-expanded='false') + span(aria-hidden='true') + span(aria-hidden='true') + span(aria-hidden='true') + .navbar-menu#navBarMenu + .navbar-start + .navbar-end + if req.isAuthenticated() + .navbar-item.has-dropdown.is-hoverable + a.navbar-link= req.user._id + .navbar-dropdown + +navBarLink(`/wishlist/${req.user._id}`, 'My Wishlist') + +navBarLink('/profile', 'Profile') + if req.user.admin + +navBarLink('/admin-settings', 'Admin settings') + hr.navbar-divider + .navbar-item + form#logoutForm(action='/logout', method='POST') + button.linkButton(type='submit') Log Out + //-+navBarLink('javascript:document.getElementById("logoutForm").submit()', 'Log Out') + script(src="/js/nav.js") diff --git a/views/layout.pug b/views/layout.pug new file mode 100644 index 0000000..65dc6ce --- /dev/null +++ b/views/layout.pug @@ -0,0 +1,28 @@ +doctype html +html(lang='en') + head + meta(name='viewport', content='width=device-width, initial-scale=1') + if title + title #{config.siteTitle} - #{title} + else + title #{config.siteTitle} + link(rel='stylesheet', href='/css/main.css') + noscript + link( + rel='stylesheet', + href='https://use.fontawesome.com/releases/v5.0.10/css/all.css', + integrity='sha384-+d0P83n9kaQMCwj8F4RJB66tzIwOKmrdb46+porD/OvrJ+37WqIM7UoBtwHO6Nlg', + crossorigin='anonymous' + ) + script(defer, src='https://use.fontawesome.com/releases/v5.0.7/js/all.js') + body + include includes/navbar.pug + div.content#pageContent + section.section + div.container + if title + h1= config.siteTitle + ' - ' + title + else if title !== false + h1 #{config.siteTitle} + include includes/messages.pug + block content diff --git a/views/login.pug b/views/login.pug new file mode 100644 index 0000000..0f109f1 --- /dev/null +++ b/views/login.pug @@ -0,0 +1,20 @@ +extends layout.pug + +block content + form(method='POST') + .field + label.label Username + .control.has-icons-left + input.input(type='text', name='username', placeholder='john') + span.icon.is-small.is-left + i.fas.fa-user + .field + label.label Password + .control.has-icons-left + input.input(type='password', name='password', placeholder='pa$$word!') + span.icon.is-small.is-left + i.fas.fa-lock + .field + .control + input.button.is-primary(type='submit' value='Log In') + diff --git a/views/logout.pug b/views/logout.pug new file mode 100644 index 0000000..7d94770 --- /dev/null +++ b/views/logout.pug @@ -0,0 +1,7 @@ +extends layout.pug + +block content + form(method='POST') + .field + .control + input.button.is-primary(type='submit' value='Log Out') \ No newline at end of file diff --git a/views/profile.pug b/views/profile.pug new file mode 100644 index 0000000..bc64df4 --- /dev/null +++ b/views/profile.pug @@ -0,0 +1,20 @@ +extends layout.pug + +block content + form(method='POST') + .field + label.label Old Password (Required if changing password) + .control.has-icons-left + input.input(type='password', name='oldPassword', placeholder='pa$$word!') + span.icon.is-small.is-left + i.fas.fa-lock + .field + label.label New Password (Leave blank if not changing password) + .control.has-icons-left + input.input(type='password', name='newPassword', placeholder='pa$$word!') + span.icon.is-small.is-left + i.fas.fa-lock + .field + .control + input.button.is-primary(type='submit' value='Save') + diff --git a/views/remove.pug b/views/remove.pug new file mode 100644 index 0000000..691284e --- /dev/null +++ b/views/remove.pug @@ -0,0 +1,7 @@ +extends layout.pug + +block content + form(method='POST') + .field + .control + input.button.is-danger(type='submit' value=`Remove user ${userToRemove}`) \ No newline at end of file diff --git a/views/setup.pug b/views/setup.pug new file mode 100644 index 0000000..a902949 --- /dev/null +++ b/views/setup.pug @@ -0,0 +1,20 @@ +extends layout.pug + +block content + h2 Admin User + form(action='/setup', method='POST') + .field + label.label Username + .control.has-icons-left + input.input(type='text', name='adminUsername', placeholder='john') + span.icon.is-small.is-left + i.fas.fa-user + .field + label.label Password + .control.has-icons-left + input.input(type='password', name='adminPassword', placeholder='pa$$word!') + span.icon.is-small.is-left + i.fas.fa-lock + .field + .control + input.button.is-primary(type='submit' value='Set up!') \ No newline at end of file diff --git a/views/wishlist.pug b/views/wishlist.pug new file mode 100644 index 0000000..ae86053 --- /dev/null +++ b/views/wishlist.pug @@ -0,0 +1,36 @@ +extends layout.pug + +block content + for item in wishlist + if req.user._id === item.addedBy || req.params.user !== req.user._id + .box + if item.url + span + a(href=item.url, rel='noopener noreferrer', target='_blank')= (item.name ? item.name : item.url) + if req.params.user !== req.user._id && !item.pledgedBy + form(method='POST', action=`/wishlist/${req.params.user}/pledge/${item.id}`) + .field + .control + input.button.is-primary(type='submit' value='Pledge') + if item.pledgedBy === req.user._id + form(method='POST', action=`/wishlist/${req.params.user}/unpledge/${item.id}`) + .field + .control + input.button(type='submit' value='Unpledge') + if req.user._id === req.params.user + form(method='POST', action=`/wishlist/${req.params.user}/remove/${item.id}`) + .field + .control + input.button.is-warning(type='submit' value='Remove') + else + span= item.name + form(method='POST') + .field + label.label Item URL or Name + .control.has-icons-left + input.input(type='text', name='itemUrlOrName', placeholder='https://www.amazon.com/dp/B00ZV9RDKK') + span.icon.is-small.is-left + i.fas.fa-gift + .field + .control + input.button(type='submit' value=(req.user._id === req.params.user ? 'Add item to wishlist' : 'Pledge item')) \ No newline at end of file diff --git a/views/wishlists.pug b/views/wishlists.pug new file mode 100644 index 0000000..5cd40a6 --- /dev/null +++ b/views/wishlists.pug @@ -0,0 +1,12 @@ +extends layout.pug + +block content + ul.noStyle + each user in users + if req.user._id !== user.id + li + a(href=`/wishlist/${user.id}`) + .box + span= user.id + span= `: ${totals(user.doc.wishlist).pledged}/${user.doc.wishlist.length}` + progress.progress.is-info(value=totals(user.doc.wishlist).pledged, max=user.doc.wishlist.length) \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..cbbcb29 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1762 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/babel-types@*", "@types/babel-types@^7.0.0": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.1.tgz#1405e5396968c4302994b0161ce405b72b874257" + +"@types/babylon@^6.16.2": + version "6.16.2" + resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.2.tgz#062ce63b693d9af1c246f5aedf928bc9c30589c8" + dependencies: + "@types/babel-types" "*" + +"@types/node@*": + version "10.12.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.9.tgz#a07bfa74331471e1dc22a47eb72026843f7b95c8" + +abstract-leveldown@^4.0.0, abstract-leveldown@~4.0.0: + version "4.0.3" + resolved "http://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-4.0.3.tgz#cb636f4965fbe117f5c8b76a7d51dd42aaed0580" + dependencies: + xtend "~4.0.0" + +abstract-leveldown@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6" + dependencies: + xtend "~4.0.0" + +accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +acorn-globals@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.4, acorn@~4.0.2: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +ajv@^6.5.5: + version "6.5.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1" + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argsarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +bcrypt-nodejs@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz#c60917f26dc235661566c681061c303c2b28842b" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + dependencies: + tweetnacl "^0.14.3" + +bindings@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" + +bl@^1.0.0: + version "1.2.2" + resolved "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +body-parser@1.18.3, body-parser@^1.18.3: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" + on-finished "~2.3.0" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + +buffer-from@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +character-parser@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" + dependencies: + is-regex "^1.0.3" + +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.2" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash "^4.15.0" + parse5 "^3.0.1" + +chownr@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + +clean-css@^4.1.11: + version "4.1.11" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" + dependencies: + source-map "0.5.x" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +clone-buffer@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + dependencies: + delayed-stream "~1.0.0" + +connect-flash@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/connect-flash/-/connect-flash-0.1.1.tgz#d8630f26d95a7f851f9956b1e8cc6732f3b6aa30" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constantinople@^3.0.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647" + dependencies: + "@types/babel-types" "^7.0.0" + "@types/babylon" "^6.16.2" + babel-types "^6.26.0" + babylon "^6.18.0" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +core-js@^2.4.0: + version "2.5.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.5.tgz#b14dde936c640c0579a6b50cabcc132dd6127e3b" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +crc@3.4.4: + version "3.4.4" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.4.4.tgz#9da1e980e3bd44fc5c93bf5ab3da3378d85e466b" + +css-select@~1.2.0: + version "1.2.0" + resolved "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-what@2.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + dependencies: + mimic-response "^1.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + +deferred-leveldown@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-3.0.0.tgz#bff7241bf156aa3635f520bedf34330c408d3307" + dependencies: + abstract-leveldown "~4.0.0" + +deferred-leveldown@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz#0b0570087827bf480a23494b398f04c128c19a20" + dependencies: + abstract-leveldown "~5.0.0" + inherits "^2.0.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +doctypes@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" + +dom-serializer@0, dom-serializer@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domelementtype@1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.2.1.tgz#578558ef23befac043a1abb0db07635509393479" + +domelementtype@^1.3.0: + version "1.3.0" + resolved "http://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + dependencies: + dom-serializer "0" + domelementtype "1" + +dotenv@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.1.0.tgz#9853b6ca98292acb7dec67a95018fa40bccff42c" + +double-ended-queue@2.1.0-0: + version "2.1.0-0" + resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +encoding-down@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-4.0.1.tgz#15a544eb13d7feeabc9e6f433633d6c966f077c9" + dependencies: + abstract-leveldown "^4.0.0" + level-codec "^8.0.0" + level-errors "^1.0.4" + xtend "^4.0.1" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + dependencies: + once "^1.4.0" + +end-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/end-stream/-/end-stream-0.1.0.tgz#32003f3f438a2b0143168137f8fa6e9866c81ed5" + dependencies: + write-stream "~0.4.3" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + +errno@~0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + +es6-denodeify@^0.1.1: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-denodeify/-/es6-denodeify-0.1.5.tgz#31d4d5fe9c5503e125460439310e16a2a3f39c1f" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +expand-template@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.1.tgz#981f188c0c3a87d2e28f559bc541426ff94f21dd" + +express-session@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.15.6.tgz#47b4160c88f42ab70fe8a508e31cbff76757ab0a" + dependencies: + cookie "0.3.1" + cookie-signature "1.0.6" + crc "3.4.4" + debug "2.6.9" + depd "~1.1.1" + on-headers "~1.0.1" + parseurl "~1.3.2" + uid-safe "~2.1.5" + utils-merge "1.0.1" + +express@^4.16.4: + version "4.16.4" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.3" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + 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.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.4" + qs "6.5.2" + range-parser "~1.2.0" + safe-buffer "5.1.2" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + +fast-future@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fast-future/-/fast-future-1.0.2.tgz#8435a9aaa02d79248d17d704e76259301d99280a" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fetch-cookie@0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.7.0.tgz#a6fc137ad8363aa89125864c6451b86ecb7de802" + dependencies: + es6-denodeify "^0.1.1" + tough-cookie "^2.3.1" + +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + +function-bind@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + 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" + +get-product-name@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/get-product-name/-/get-product-name-0.0.2.tgz#52ae5c1a211f213ec07435671b1d5bd0d9fda3fd" + dependencies: + cheerio "^1.0.0-rc.2" + request "^2.88.0" + snekfetch "^4.0.4" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +htmlparser2@^3.9.1: + version "3.10.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.0.6" + +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +immediate@3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + +inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-expression@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f" + dependencies: + acorn "~4.0.2" + object-assign "^4.0.1" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + +is-regex@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +js-stringify@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jstransformer@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +level-codec@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" + +level-codec@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-8.0.0.tgz#3a4a0de06dae20c2f5a57b3372c7651e67083e03" + +level-errors@^1.0.4, level-errors@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" + dependencies: + errno "~0.1.1" + +level-errors@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.0.tgz#2de5b566b62eef92f99e19be74397fbc512563fa" + dependencies: + errno "~0.1.1" + +level-iterator-stream@~2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz#ccfff7c046dcf47955ae9a86f46dfa06a31688b4" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.5" + xtend "^4.0.0" + +level-packager@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-2.1.1.tgz#10b653decb67b0a09c4e961ae84f196edaad205a" + dependencies: + encoding-down "~4.0.0" + levelup "^2.0.0" + +level-write-stream@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/level-write-stream/-/level-write-stream-1.0.0.tgz#3f7fbb679a55137c0feb303dee766e12ee13c1dc" + dependencies: + end-stream "~0.1.0" + +level@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/level/-/level-3.0.2.tgz#83c3d6e48c9e89abc4b6f5ca1c591f177ea2bd59" + dependencies: + level-packager "^2.0.2" + leveldown "^3.0.0" + opencollective-postinstall "^2.0.0" + +leveldown@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-3.0.0.tgz#a42ef5d4029f88ba538ed8da3e6c34c5b008ddd7" + dependencies: + abstract-leveldown "~4.0.0" + bindings "~1.3.0" + fast-future "~1.0.2" + nan "~2.8.0" + prebuild-install "^2.1.0" + +leveldown@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-3.0.2.tgz#d1fb708991c54c874ca1b0688644a25d926e6302" + dependencies: + abstract-leveldown "~4.0.0" + bindings "~1.3.0" + fast-future "~1.0.2" + nan "~2.10.0" + prebuild-install "^4.0.0" + +levelup@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.0.1.tgz#07794639fd0af185089130aaea09d03023637b8d" + dependencies: + deferred-leveldown "~4.0.0" + level-errors "~2.0.0" + level-iterator-stream "~2.0.0" + xtend "~4.0.0" + +levelup@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-2.0.2.tgz#83dd22ffd5ee14482143c37cddfb8457854d3727" + dependencies: + deferred-leveldown "~3.0.0" + level-errors "~1.1.0" + level-iterator-stream "~2.0.0" + xtend "~4.0.0" + +lodash@^4.15.0: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + +lodash@^4.17.4: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +ltgt@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-db@~1.37.0: + version "1.37.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.21" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" + dependencies: + mime-db "~1.37.0" + +mime-types@~2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + +minimist@0.0.8: + version "0.0.8" + resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mkdirp@^0.5.1: + version "0.5.1" + resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +nan@~2.10.0: + version "2.10.0" + resolved "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + +nan@~2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +node-abi@^2.2.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.5.0.tgz#942e1a78bce764bc0c1672d5821e492b9d032052" + dependencies: + semver "^5.4.1" + +node-fetch@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" + +noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + +npmlog@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + dependencies: + boolbase "~1.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +opencollective-postinstall@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.1.tgz#798e83e168f7b91949061c2683f762af747f17cc" + +os-homedir@^1.0.1: + version "1.0.2" + resolved "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +parse5@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + dependencies: + "@types/node" "*" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +passport-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" + dependencies: + passport-strategy "1.x.x" + +passport-strategy@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" + +passport@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/passport/-/passport-0.4.0.tgz#c5095691347bd5ad3b5e180238c3914d16f05811" + dependencies: + passport-strategy "1.x.x" + pause "0.0.1" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +pause@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pouchdb@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.0.0.tgz#e95df9ef87127d0ea90222d073794bcb47c38648" + dependencies: + argsarray "0.0.1" + buffer-from "1.1.0" + clone-buffer "1.0.0" + double-ended-queue "2.1.0-0" + fetch-cookie "0.7.0" + immediate "3.0.6" + inherits "2.0.3" + level "3.0.2" + level-codec "7.0.1" + level-write-stream "1.0.0" + leveldown "3.0.0" + levelup "3.0.1" + ltgt "2.2.1" + node-fetch "^2.0.0" + readable-stream "1.0.33" + spark-md5 "3.0.0" + through2 "2.0.3" + uuid "3.2.1" + vuvuzela "1.0.3" + +prebuild-install@^2.1.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.3.tgz#9f65f242782d370296353710e9bc843490c19f69" + dependencies: + detect-libc "^1.0.3" + expand-template "^1.0.2" + github-from-package "0.0.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + node-abi "^2.2.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + os-homedir "^1.0.1" + pump "^2.0.1" + rc "^1.1.6" + simple-get "^2.7.0" + tar-fs "^1.13.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + +prebuild-install@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-4.0.0.tgz#206ce8106ce5efa4b6cf062fc8a0a7d93c17f3a8" + dependencies: + detect-libc "^1.0.3" + expand-template "^1.0.2" + github-from-package "0.0.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + node-abi "^2.2.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + os-homedir "^1.0.1" + pump "^2.0.1" + rc "^1.1.6" + simple-get "^2.7.0" + tar-fs "^1.13.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +promise@^7.0.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +proxy-addr@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.8.0" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + +psl@^1.1.24: + version "1.1.29" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + +pug-attrs@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.3.tgz#a3095f970e64151f7bdad957eef55fb5d7905d15" + dependencies: + constantinople "^3.0.1" + js-stringify "^1.0.1" + pug-runtime "^2.0.4" + +pug-code-gen@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.1.tgz#0951ec83225d74d8cfc476a7f99a259b5f7d050c" + dependencies: + constantinople "^3.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.1" + pug-attrs "^2.0.3" + pug-error "^1.3.2" + pug-runtime "^2.0.4" + void-elements "^2.0.1" + with "^5.0.0" + +pug-error@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-1.3.2.tgz#53ae7d9d29bb03cf564493a026109f54c47f5f26" + +pug-filters@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-3.1.0.tgz#27165555bc04c236e4aa2b0366246dfa021b626e" + dependencies: + clean-css "^4.1.11" + constantinople "^3.0.1" + jstransformer "1.0.0" + pug-error "^1.3.2" + pug-walk "^1.1.7" + resolve "^1.1.6" + uglify-js "^2.6.1" + +pug-lexer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-4.0.0.tgz#210c18457ef2e1760242740c5e647bd794cec278" + dependencies: + character-parser "^2.1.1" + is-expression "^3.0.0" + pug-error "^1.3.2" + +pug-linker@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.5.tgz#9e9a7ae4005682d027deeb96b000f88eeb83a02f" + dependencies: + pug-error "^1.3.2" + pug-walk "^1.1.7" + +pug-load@^2.0.11: + version "2.0.11" + resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.11.tgz#e648e57ed113fe2c1f45d57858ea2bad6bc01527" + dependencies: + object-assign "^4.1.0" + pug-walk "^1.1.7" + +pug-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-5.0.0.tgz#e394ad9b3fca93123940aff885c06e44ab7e68e4" + dependencies: + pug-error "^1.3.2" + token-stream "0.0.1" + +pug-runtime@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.4.tgz#e178e1bda68ab2e8c0acfc9bced2c54fd88ceb58" + +pug-strip-comments@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz#f1559592206edc6f85310dacf4afb48a025af59f" + dependencies: + pug-error "^1.3.2" + +pug-walk@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.7.tgz#c00d5c5128bac5806bec15d2b7e7cdabe42531f3" + +pug@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pug/-/pug-2.0.3.tgz#71cba82537c95a5eab7ed04696e4221f53aa878e" + dependencies: + pug-code-gen "^2.0.1" + pug-filters "^3.1.0" + pug-lexer "^4.0.0" + pug-linker "^3.0.5" + pug-load "^2.0.11" + pug-parser "^5.0.0" + pug-runtime "^2.0.4" + pug-strip-comments "^1.0.3" + +pump@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + +qs@6.5.2, qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" + +rc@^1.1.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@1.0.33: + version "1.0.33" + resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz#3a360dd66c1b1d7fd4705389860eda1d0f61126c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.6" + resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + 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" + +readable-stream@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.0.6.tgz#351302e4c68b5abd6a2ed55376a7f9a25be3057a" + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~0.0.2: + version "0.0.4" + resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz#f32d76e3fb863344a548d79923007173665b3b8d" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +request@^2.88.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + dependencies: + 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" + +resolve@^1.1.6: + version "1.7.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + dependencies: + path-parse "^1.0.5" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +semver@^5.4.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + 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.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +snekfetch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/snekfetch/-/snekfetch-4.0.4.tgz#e76a03b8476699a1f0c036d6567e386ce5fbde8e" + +source-map@0.5.x, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +spark-md5@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.0.tgz#3722227c54e2faf24b1dc6d933cc144e6f71bfef" + +sshpk@^1.7.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629" + dependencies: + 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" + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" + dependencies: + has-flag "^3.0.0" + +tar-fs@^1.13.0: + version "1.16.3" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" + dependencies: + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" + +tar-stream@^1.1.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +through2@2.0.3: + version "2.0.3" + resolved "http://registry.npmjs.org/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +token-stream@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" + +tough-cookie@^2.3.1, tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +uglify-js@^2.6.1: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-safe@~2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" + dependencies: + random-bytes "~1.0.0" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +void-elements@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + +vuvuzela@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/vuvuzela/-/vuvuzela-1.0.3.tgz#3be145e58271c73ca55279dd851f12a682114b0b" + +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + dependencies: + string-width "^1.0.2 || 2" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +with@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe" + dependencies: + acorn "^3.1.0" + acorn-globals "^3.0.0" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-stream@~0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/write-stream/-/write-stream-0.4.3.tgz#83cc8c0347d0af6057a93862b4e3ae01de5c81c1" + dependencies: + readable-stream "~0.0.2" + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0"