aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorDan Finlay <dan@danfinlay.com>2017-07-04 07:09:17 +0800
committerDan Finlay <dan@danfinlay.com>2017-07-04 07:16:53 +0800
commite285f2cae958437160f86171f1fccfec66799883 (patch)
tree49cf0e2d1805d0c36d53ae6920d63f614da1e9ad /ui
parent5eb3d5d485b17b98b19443d8def2f03dec9b38ef (diff)
downloadtangerine-wallet-browser-e285f2cae958437160f86171f1fccfec66799883.tar
tangerine-wallet-browser-e285f2cae958437160f86171f1fccfec66799883.tar.gz
tangerine-wallet-browser-e285f2cae958437160f86171f1fccfec66799883.tar.bz2
tangerine-wallet-browser-e285f2cae958437160f86171f1fccfec66799883.tar.lz
tangerine-wallet-browser-e285f2cae958437160f86171f1fccfec66799883.tar.xz
tangerine-wallet-browser-e285f2cae958437160f86171f1fccfec66799883.tar.zst
tangerine-wallet-browser-e285f2cae958437160f86171f1fccfec66799883.zip
Get duplicate UI template working
Diffstat (limited to 'ui')
-rw-r--r--ui/classic/app/actions.js2
-rw-r--r--ui/classic/app/components/pending-tx.js2
-rw-r--r--ui/classic/app/conf-tx.js2
-rw-r--r--ui/classic/css.js4
-rw-r--r--ui/responsive/.gitignore66
-rw-r--r--ui/responsive/app/account-detail.js311
-rw-r--r--ui/responsive/app/accounts/account-list-item.js91
-rw-r--r--ui/responsive/app/accounts/import/index.js100
-rw-r--r--ui/responsive/app/accounts/import/json.js100
-rw-r--r--ui/responsive/app/accounts/import/private-key.js67
-rw-r--r--ui/responsive/app/accounts/import/seed.js30
-rw-r--r--ui/responsive/app/accounts/index.js164
-rw-r--r--ui/responsive/app/actions.js1031
-rw-r--r--ui/responsive/app/add-token.js219
-rw-r--r--ui/responsive/app/app.js591
-rw-r--r--ui/responsive/app/components/account-export.js122
-rw-r--r--ui/responsive/app/components/account-info-link.js41
-rw-r--r--ui/responsive/app/components/account-panel.js86
-rw-r--r--ui/responsive/app/components/balance.js89
-rw-r--r--ui/responsive/app/components/binary-renderer.js46
-rw-r--r--ui/responsive/app/components/bn-as-decimal-input.js174
-rw-r--r--ui/responsive/app/components/buy-button-subview.js197
-rw-r--r--ui/responsive/app/components/coinbase-form.js63
-rw-r--r--ui/responsive/app/components/copyButton.js59
-rw-r--r--ui/responsive/app/components/copyable.js46
-rw-r--r--ui/responsive/app/components/custom-radio-list.js60
-rw-r--r--ui/responsive/app/components/drop-menu-item.js59
-rw-r--r--ui/responsive/app/components/editable-label.js51
-rw-r--r--ui/responsive/app/components/ens-input.js170
-rw-r--r--ui/responsive/app/components/eth-balance.js89
-rw-r--r--ui/responsive/app/components/fiat-value.js63
-rw-r--r--ui/responsive/app/components/hex-as-decimal-input.js154
-rw-r--r--ui/responsive/app/components/identicon.js72
-rw-r--r--ui/responsive/app/components/loading.js53
-rw-r--r--ui/responsive/app/components/mascot.js59
-rw-r--r--ui/responsive/app/components/mini-account-panel.js74
-rw-r--r--ui/responsive/app/components/network.js125
-rw-r--r--ui/responsive/app/components/notice.js126
-rw-r--r--ui/responsive/app/components/pending-msg-details.js50
-rw-r--r--ui/responsive/app/components/pending-msg.js56
-rw-r--r--ui/responsive/app/components/pending-personal-msg-details.js60
-rw-r--r--ui/responsive/app/components/pending-personal-msg.js47
-rw-r--r--ui/responsive/app/components/pending-tx.js480
-rw-r--r--ui/responsive/app/components/qr-code.js79
-rw-r--r--ui/responsive/app/components/range-slider.js58
-rw-r--r--ui/responsive/app/components/shapeshift-form.js306
-rw-r--r--ui/responsive/app/components/shift-list-item.js204
-rw-r--r--ui/responsive/app/components/tab-bar.js36
-rw-r--r--ui/responsive/app/components/template.js18
-rw-r--r--ui/responsive/app/components/token-cell.js72
-rw-r--r--ui/responsive/app/components/token-list.js194
-rw-r--r--ui/responsive/app/components/tooltip.js22
-rw-r--r--ui/responsive/app/components/transaction-list-item-icon.js68
-rw-r--r--ui/responsive/app/components/transaction-list-item.js165
-rw-r--r--ui/responsive/app/components/transaction-list.js79
-rw-r--r--ui/responsive/app/conf-tx.js213
-rw-r--r--ui/responsive/app/config.js211
-rw-r--r--ui/responsive/app/conversion.json207
-rw-r--r--ui/responsive/app/css/debug.css21
-rw-r--r--ui/responsive/app/css/fonts.css36
-rw-r--r--ui/responsive/app/css/index.css667
-rw-r--r--ui/responsive/app/css/lib.css268
-rw-r--r--ui/responsive/app/css/reset.css48
-rw-r--r--ui/responsive/app/css/transitions.css42
-rw-r--r--ui/responsive/app/first-time/init-menu.js179
-rw-r--r--ui/responsive/app/img/identicon-tardigrade.pngbin0 -> 141119 bytes
-rw-r--r--ui/responsive/app/img/identicon-walrus.pngbin0 -> 388973 bytes
-rw-r--r--ui/responsive/app/info.js154
-rw-r--r--ui/responsive/app/keychains/hd/create-vault-complete.js78
-rw-r--r--ui/responsive/app/keychains/hd/recover-seed/confirmation.js118
-rw-r--r--ui/responsive/app/keychains/hd/restore-vault.js152
-rw-r--r--ui/responsive/app/new-keychain.js29
-rw-r--r--ui/responsive/app/reducers.js52
-rw-r--r--ui/responsive/app/reducers/app.js585
-rw-r--r--ui/responsive/app/reducers/identities.js15
-rw-r--r--ui/responsive/app/reducers/metamask.js137
-rw-r--r--ui/responsive/app/root.js22
-rw-r--r--ui/responsive/app/send.js288
-rw-r--r--ui/responsive/app/settings.js59
-rw-r--r--ui/responsive/app/store.js21
-rw-r--r--ui/responsive/app/template.js30
-rw-r--r--ui/responsive/app/unlock.js118
-rw-r--r--ui/responsive/app/util.js217
-rw-r--r--ui/responsive/css.js29
-rw-r--r--ui/responsive/design/00-metamask-SignIn.jpgbin0 -> 57848 bytes
-rw-r--r--ui/responsive/design/01-metamask-SelectAcc.jpgbin0 -> 76063 bytes
-rw-r--r--ui/responsive/design/02-metamask-AccDetails.jpgbin0 -> 75780 bytes
-rw-r--r--ui/responsive/design/02a-metamask-AccDetails-OverToken.jpgbin0 -> 121847 bytes
-rw-r--r--ui/responsive/design/02a-metamask-AccDetails-OverTransaction.jpgbin0 -> 122075 bytes
-rw-r--r--ui/responsive/design/02a-metamask-AccDetails.jpgbin0 -> 117570 bytes
-rw-r--r--ui/responsive/design/02b-metamask-AccDetails-Send.jpgbin0 -> 110143 bytes
-rw-r--r--ui/responsive/design/03-metamask-Qr.jpgbin0 -> 66052 bytes
-rw-r--r--ui/responsive/design/05-metamask-Menu.jpgbin0 -> 130264 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/final_screen_dao_accounts.pngbin0 -> 249708 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/final_screen_dao_locked.pngbin0 -> 220295 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/final_screen_dao_notification.pngbin0 -> 214405 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/final_screen_wei_account.pngbin0 -> 253382 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/final_screen_wei_notification.pngbin0 -> 193865 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/icon-128.pngbin0 -> 5770 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/icon-64.pngbin0 -> 3573 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/metamask_icon.ai2383
-rw-r--r--ui/responsive/design/chromeStorePics/promo1400560.pngbin0 -> 261644 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/promo440280.pngbin0 -> 57471 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/promo920680.pngbin0 -> 206713 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/screen_dao_accounts.pngbin0 -> 517598 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/screen_dao_locked.pngbin0 -> 287108 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/screen_dao_notification.pngbin0 -> 296498 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/screen_wei_account.pngbin0 -> 653633 bytes
-rw-r--r--ui/responsive/design/chromeStorePics/screen_wei_notification.pngbin0 -> 402486 bytes
-rw-r--r--ui/responsive/design/metamask-logo-eyes.pngbin0 -> 146076 bytes
-rw-r--r--ui/responsive/design/wireframes/1st_time_use.pngbin0 -> 937556 bytes
-rw-r--r--ui/responsive/design/wireframes/metamask_wfs_jan_13.pdfbin0 -> 452413 bytes
-rw-r--r--ui/responsive/design/wireframes/metamask_wfs_jan_13.pngbin0 -> 419066 bytes
-rw-r--r--ui/responsive/design/wireframes/metamask_wfs_jan_18.pdfbin0 -> 612778 bytes
-rw-r--r--ui/responsive/example.js123
-rw-r--r--ui/responsive/index.html20
-rw-r--r--ui/responsive/index.js58
-rw-r--r--ui/responsive/lib/account-link.js26
-rw-r--r--ui/responsive/lib/contract-namer.js33
-rw-r--r--ui/responsive/lib/etherscan-prefix-for-network.js21
-rw-r--r--ui/responsive/lib/explorer-link.js6
-rw-r--r--ui/responsive/lib/icon-factory.js65
-rw-r--r--ui/responsive/lib/lost-accounts-notice.js23
-rw-r--r--ui/responsive/lib/persistent-form.js61
-rw-r--r--ui/responsive/lib/tx-helper.js17
125 files changed, 13679 insertions, 5 deletions
diff --git a/ui/classic/app/actions.js b/ui/classic/app/actions.js
index d99291e46..2c60448dd 100644
--- a/ui/classic/app/actions.js
+++ b/ui/classic/app/actions.js
@@ -1,4 +1,4 @@
-const getBuyEthUrl = require('../../app/scripts/lib/buy-eth-url')
+const getBuyEthUrl = require('../../../app/scripts/lib/buy-eth-url')
var actions = {
_setBackgroundConnection: _setBackgroundConnection,
diff --git a/ui/classic/app/components/pending-tx.js b/ui/classic/app/components/pending-tx.js
index d7d602f31..962680d30 100644
--- a/ui/classic/app/components/pending-tx.js
+++ b/ui/classic/app/components/pending-tx.js
@@ -6,7 +6,7 @@ const clone = require('clone')
const ethUtil = require('ethereumjs-util')
const BN = ethUtil.BN
-const hexToBn = require('../../../app/scripts/lib/hex-to-bn')
+const hexToBn = require('../../../../app/scripts/lib/hex-to-bn')
const util = require('../util')
const MiniAccountPanel = require('./mini-account-panel')
const Copyable = require('./copyable')
diff --git a/ui/classic/app/conf-tx.js b/ui/classic/app/conf-tx.js
index 747d3ce2b..63b77ef7f 100644
--- a/ui/classic/app/conf-tx.js
+++ b/ui/classic/app/conf-tx.js
@@ -6,7 +6,7 @@ const connect = require('react-redux').connect
const actions = require('./actions')
const NetworkIndicator = require('./components/network')
const txHelper = require('../lib/tx-helper')
-const isPopupOrNotification = require('../../app/scripts/lib/is-popup-or-notification')
+const isPopupOrNotification = require('../../../app/scripts/lib/is-popup-or-notification')
const PendingTx = require('./components/pending-tx')
const PendingMsg = require('./components/pending-msg')
diff --git a/ui/classic/css.js b/ui/classic/css.js
index 043363cd7..7c394a87b 100644
--- a/ui/classic/css.js
+++ b/ui/classic/css.js
@@ -9,8 +9,8 @@ var cssFiles = {
'lib.css': fs.readFileSync(path.join(__dirname, '/app/css/lib.css'), 'utf8'),
'index.css': fs.readFileSync(path.join(__dirname, '/app/css/index.css'), 'utf8'),
'transitions.css': fs.readFileSync(path.join(__dirname, '/app/css/transitions.css'), 'utf8'),
- 'react-tooltip-component.css': fs.readFileSync(path.join(__dirname, '..', 'node_modules', 'react-tooltip-component', 'dist', 'react-tooltip-component.css'), 'utf8'),
- 'react-css': fs.readFileSync(path.join(__dirname, '..', 'node_modules', 'react-select', 'dist', 'react-select.css'), 'utf8'),
+ 'react-tooltip-component.css': fs.readFileSync(path.join(__dirname, '..', '..', 'node_modules', 'react-tooltip-component', 'dist', 'react-tooltip-component.css'), 'utf8'),
+ 'react-css': fs.readFileSync(path.join(__dirname, '..', '..', 'node_modules', 'react-select', 'dist', 'react-select.css'), 'utf8'),
}
function bundleCss () {
diff --git a/ui/responsive/.gitignore b/ui/responsive/.gitignore
new file mode 100644
index 000000000..c6b1254b5
--- /dev/null
+++ b/ui/responsive/.gitignore
@@ -0,0 +1,66 @@
+
+# Created by https://www.gitignore.io/api/osx,node
+
+### OSX ###
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+
+### Node ###
+# Logs
+logs
+*.log
+npm-debug.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directory
+# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
+node_modules
+
+# Optional npm cache directory
+.npm
+
+# Optional REPL history
+.node_repl_history
+
diff --git a/ui/responsive/app/account-detail.js b/ui/responsive/app/account-detail.js
new file mode 100644
index 000000000..bed05a7fb
--- /dev/null
+++ b/ui/responsive/app/account-detail.js
@@ -0,0 +1,311 @@
+const inherits = require('util').inherits
+const extend = require('xtend')
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const CopyButton = require('./components/copyButton')
+const AccountInfoLink = require('./components/account-info-link')
+const actions = require('./actions')
+const ReactCSSTransitionGroup = require('react-addons-css-transition-group')
+const valuesFor = require('./util').valuesFor
+
+const Identicon = require('./components/identicon')
+const EthBalance = require('./components/eth-balance')
+const TransactionList = require('./components/transaction-list')
+const ExportAccountView = require('./components/account-export')
+const ethUtil = require('ethereumjs-util')
+const EditableLabel = require('./components/editable-label')
+const Tooltip = require('./components/tooltip')
+const TabBar = require('./components/tab-bar')
+const TokenList = require('./components/token-list')
+
+module.exports = connect(mapStateToProps)(AccountDetailScreen)
+
+function mapStateToProps (state) {
+ return {
+ metamask: state.metamask,
+ identities: state.metamask.identities,
+ accounts: state.metamask.accounts,
+ address: state.metamask.selectedAddress,
+ accountDetail: state.appState.accountDetail,
+ network: state.metamask.network,
+ unapprovedMsgs: valuesFor(state.metamask.unapprovedMsgs),
+ shapeShiftTxList: state.metamask.shapeShiftTxList,
+ transactions: state.metamask.selectedAddressTxList || [],
+ conversionRate: state.metamask.conversionRate,
+ currentCurrency: state.metamask.currentCurrency,
+ currentAccountTab: state.metamask.currentAccountTab,
+ tokens: state.metamask.tokens,
+ }
+}
+
+inherits(AccountDetailScreen, Component)
+function AccountDetailScreen () {
+ Component.call(this)
+}
+
+AccountDetailScreen.prototype.render = function () {
+ var props = this.props
+ var selected = props.address || Object.keys(props.accounts)[0]
+ var checksumAddress = selected && ethUtil.toChecksumAddress(selected)
+ var identity = props.identities[selected]
+ var account = props.accounts[selected]
+ const { network, conversionRate, currentCurrency } = props
+
+ return (
+
+ h('.account-detail-section', [
+
+ // identicon, label, balance, etc
+ h('.account-data-subsection', {
+ style: {
+ margin: '0 20px',
+ },
+ }, [
+
+ // header - identicon + nav
+ h('div', {
+ style: {
+ paddingTop: '20px',
+ display: 'flex',
+ justifyContent: 'flex-start',
+ alignItems: 'flex-start',
+ },
+ }, [
+
+ // large identicon and addresses
+ h('.identicon-wrapper.select-none', [
+ h(Identicon, {
+ diameter: 62,
+ address: selected,
+ }),
+ ]),
+ h('flex-column', {
+ style: {
+ lineHeight: '10px',
+ marginLeft: '15px',
+ },
+ }, [
+ h(EditableLabel, {
+ textValue: identity ? identity.name : '',
+ state: {
+ isEditingLabel: false,
+ },
+ saveText: (text) => {
+ props.dispatch(actions.saveAccountLabel(selected, text))
+ },
+ }, [
+
+ // What is shown when not editing + edit text:
+ h('label.editing-label', [h('.edit-text', 'edit')]),
+ h('h2.font-medium.color-forest', {name: 'edit'}, identity && identity.name),
+ ]),
+ h('.flex-row', {
+ style: {
+ width: '15em',
+ justifyContent: 'space-between',
+ alignItems: 'baseline',
+ },
+ }, [
+
+ // address
+
+ h('div', {
+ style: {
+ overflow: 'hidden',
+ textOverflow: 'ellipsis',
+ paddingTop: '3px',
+ width: '5em',
+ fontSize: '13px',
+ fontFamily: 'Montserrat Light',
+ textRendering: 'geometricPrecision',
+ marginTop: '10px',
+ marginBottom: '15px',
+ color: '#AEAEAE',
+ },
+ }, checksumAddress),
+
+ // copy and export
+
+ h('.flex-row', {
+ style: {
+ justifyContent: 'flex-end',
+ },
+ }, [
+
+ h(AccountInfoLink, { selected, network }),
+
+ h(CopyButton, {
+ value: checksumAddress,
+ }),
+
+ h(Tooltip, {
+ title: 'QR Code',
+ }, [
+ h('i.fa.fa-qrcode.pointer.pop-hover', {
+ onClick: () => props.dispatch(actions.showQrView(selected, identity ? identity.name : '')),
+ style: {
+ fontSize: '18px',
+ position: 'relative',
+ color: 'rgb(247, 134, 28)',
+ top: '5px',
+ marginLeft: '3px',
+ marginRight: '3px',
+ },
+ }),
+ ]),
+
+ h(Tooltip, {
+ title: 'Export Private Key',
+ }, [
+ h('div', {
+ style: {
+ display: 'flex',
+ alignItems: 'center',
+ },
+ }, [
+ h('img.cursor-pointer.color-orange', {
+ src: 'images/key-32.png',
+ onClick: () => this.requestAccountExport(selected),
+ style: {
+ height: '19px',
+ },
+ }),
+ ]),
+ ]),
+ ]),
+ ]),
+
+ // account ballence
+
+ ]),
+ ]),
+ h('.flex-row', {
+ style: {
+ justifyContent: 'space-between',
+ alignItems: 'flex-start',
+ },
+ }, [
+
+ h(EthBalance, {
+ value: account && account.balance,
+ conversionRate,
+ currentCurrency,
+ style: {
+ lineHeight: '7px',
+ marginTop: '10px',
+ },
+ }),
+
+ h('button', {
+ onClick: () => props.dispatch(actions.buyEthView(selected)),
+ style: {
+ marginBottom: '20px',
+ marginRight: '8px',
+ position: 'absolute',
+ left: '219px',
+ },
+ }, 'BUY'),
+
+ h('button', {
+ onClick: () => props.dispatch(actions.showSendPage()),
+ style: {
+ marginBottom: '20px',
+ marginRight: '8px',
+ },
+ }, 'SEND'),
+
+ ]),
+ ]),
+
+ // subview (tx history, pk export confirm, buy eth warning)
+ h(ReactCSSTransitionGroup, {
+ className: 'css-transition-group',
+ transitionName: 'main',
+ transitionEnterTimeout: 300,
+ transitionLeaveTimeout: 300,
+ }, [
+ this.subview(),
+ ]),
+
+ ])
+ )
+}
+
+AccountDetailScreen.prototype.subview = function () {
+ var subview
+ try {
+ subview = this.props.accountDetail.subview
+ } catch (e) {
+ subview = null
+ }
+
+ switch (subview) {
+ case 'transactions':
+ return this.tabSections()
+ case 'export':
+ var state = extend({key: 'export'}, this.props)
+ return h(ExportAccountView, state)
+ default:
+ return this.tabSections()
+ }
+}
+
+AccountDetailScreen.prototype.tabSections = function () {
+ const { currentAccountTab } = this.props
+
+ return h('section.tabSection', [
+
+ h(TabBar, {
+ tabs: [
+ { content: 'Sent', key: 'history' },
+ { content: 'Tokens', key: 'tokens' },
+ ],
+ defaultTab: currentAccountTab || 'history',
+ tabSelected: (key) => {
+ this.props.dispatch(actions.setCurrentAccountTab(key))
+ },
+ }),
+
+ this.tabSwitchView(),
+ ])
+}
+
+AccountDetailScreen.prototype.tabSwitchView = function () {
+ const props = this.props
+ const { address, network } = props
+ const { currentAccountTab, tokens } = this.props
+
+ switch (currentAccountTab) {
+ case 'tokens':
+ return h(TokenList, {
+ userAddress: address,
+ network,
+ tokens,
+ addToken: () => this.props.dispatch(actions.showAddTokenPage()),
+ })
+ default:
+ return this.transactionList()
+ }
+}
+
+AccountDetailScreen.prototype.transactionList = function () {
+ const {transactions, unapprovedMsgs, address,
+ network, shapeShiftTxList, conversionRate } = this.props
+
+ return h(TransactionList, {
+ transactions: transactions.sort((a, b) => b.time - a.time),
+ network,
+ unapprovedMsgs,
+ conversionRate,
+ address,
+ shapeShiftTxList,
+ viewPendingTx: (txId) => {
+ this.props.dispatch(actions.viewPendingTx(txId))
+ },
+ })
+}
+
+AccountDetailScreen.prototype.requestAccountExport = function () {
+ this.props.dispatch(actions.requestExportAccount())
+}
diff --git a/ui/responsive/app/accounts/account-list-item.js b/ui/responsive/app/accounts/account-list-item.js
new file mode 100644
index 000000000..10a0b6cc7
--- /dev/null
+++ b/ui/responsive/app/accounts/account-list-item.js
@@ -0,0 +1,91 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const ethUtil = require('ethereumjs-util')
+
+const EthBalance = require('../components/eth-balance')
+const CopyButton = require('../components/copyButton')
+const Identicon = require('../components/identicon')
+
+module.exports = AccountListItem
+
+inherits(AccountListItem, Component)
+function AccountListItem () {
+ Component.call(this)
+}
+
+AccountListItem.prototype.render = function () {
+ const { identity, selectedAddress, accounts, onShowDetail,
+ conversionRate, currentCurrency } = this.props
+
+ const checksumAddress = identity && identity.address && ethUtil.toChecksumAddress(identity.address)
+ const isSelected = selectedAddress === identity.address
+ const account = accounts[identity.address]
+ const selectedClass = isSelected ? '.selected' : ''
+
+ return (
+ h(`.accounts-list-option.flex-row.flex-space-between.pointer.hover-white${selectedClass}`, {
+ key: `account-panel-${identity.address}`,
+ onClick: (event) => onShowDetail(identity.address, event),
+ }, [
+
+ h('.identicon-wrapper.flex-column.flex-center.select-none', [
+ this.pendingOrNot(),
+ this.indicateIfLoose(),
+ h(Identicon, {
+ address: identity.address,
+ imageify: true,
+ }),
+ ]),
+
+ // account address, balance
+ h('.identity-data.flex-column.flex-justify-center.flex-grow.select-none', {
+ style: {
+ width: '200px',
+ },
+ }, [
+ h('span', identity.name),
+ h('span.font-small', {
+ style: {
+ overflow: 'hidden',
+ textOverflow: 'ellipsis',
+ },
+ }, checksumAddress),
+ h(EthBalance, {
+ value: account && account.balance,
+ currentCurrency,
+ conversionRate,
+ style: {
+ lineHeight: '7px',
+ marginTop: '10px',
+ },
+ }),
+ ]),
+
+ // copy button
+ h('.identity-copy.flex-column', {
+ style: {
+ margin: '0 20px',
+ },
+ }, [
+ h(CopyButton, {
+ value: checksumAddress,
+ }),
+ ]),
+ ])
+ )
+}
+
+AccountListItem.prototype.indicateIfLoose = function () {
+ try { // Sometimes keyrings aren't loaded yet:
+ const type = this.props.keyring.type
+ const isLoose = type !== 'HD Key Tree'
+ return isLoose ? h('.keyring-label', 'LOOSE') : null
+ } catch (e) { return }
+}
+
+AccountListItem.prototype.pendingOrNot = function () {
+ const pending = this.props.pending
+ if (pending.length === 0) return null
+ return h('.pending-dot', pending.length)
+}
diff --git a/ui/responsive/app/accounts/import/index.js b/ui/responsive/app/accounts/import/index.js
new file mode 100644
index 000000000..97b387229
--- /dev/null
+++ b/ui/responsive/app/accounts/import/index.js
@@ -0,0 +1,100 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const actions = require('../../actions')
+import Select from 'react-select'
+
+// Subviews
+const JsonImportView = require('./json.js')
+const PrivateKeyImportView = require('./private-key.js')
+
+const menuItems = [
+ 'Private Key',
+ 'JSON File',
+]
+
+module.exports = connect(mapStateToProps)(AccountImportSubview)
+
+function mapStateToProps (state) {
+ return {
+ menuItems,
+ }
+}
+
+inherits(AccountImportSubview, Component)
+function AccountImportSubview () {
+ Component.call(this)
+}
+
+AccountImportSubview.prototype.render = function () {
+ const props = this.props
+ const state = this.state || {}
+ const { menuItems } = props
+ const { type } = state
+
+ return (
+ h('div', {
+ style: {
+ },
+ }, [
+ h('.section-title.flex-row.flex-center', [
+ h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
+ onClick: (event) => {
+ props.dispatch(actions.goHome())
+ },
+ }),
+ h('h2.page-subtitle', 'Import Accounts'),
+ ]),
+ h('div', {
+ style: {
+ padding: '10px',
+ color: 'rgb(174, 174, 174)',
+ },
+ }, [
+
+ h('h3', { style: { padding: '3px' } }, 'SELECT TYPE'),
+
+ h('style', `
+ .has-value.Select--single > .Select-control .Select-value .Select-value-label, .Select-value-label {
+ color: rgb(174,174,174);
+ }
+ `),
+
+ h(Select, {
+ name: 'import-type-select',
+ clearable: false,
+ value: type || menuItems[0],
+ options: menuItems.map((type) => {
+ return {
+ value: type,
+ label: type,
+ }
+ }),
+ onChange: (opt) => {
+ this.setState({ type: opt.value })
+ },
+ }),
+ ]),
+
+ this.renderImportView(),
+ ])
+ )
+}
+
+AccountImportSubview.prototype.renderImportView = function () {
+ const props = this.props
+ const state = this.state || {}
+ const { type } = state
+ const { menuItems } = props
+ const current = type || menuItems[0]
+
+ switch (current) {
+ case 'Private Key':
+ return h(PrivateKeyImportView)
+ case 'JSON File':
+ return h(JsonImportView)
+ default:
+ return h(JsonImportView)
+ }
+}
diff --git a/ui/responsive/app/accounts/import/json.js b/ui/responsive/app/accounts/import/json.js
new file mode 100644
index 000000000..158a3c923
--- /dev/null
+++ b/ui/responsive/app/accounts/import/json.js
@@ -0,0 +1,100 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const actions = require('../../actions')
+const FileInput = require('react-simple-file-input').default
+
+const HELP_LINK = 'https://github.com/MetaMask/faq/blob/master/README.md#q-i-cant-use-the-import-feature-for-uploading-a-json-file-the-window-keeps-closing-when-i-try-to-select-a-file'
+
+module.exports = connect(mapStateToProps)(JsonImportSubview)
+
+function mapStateToProps (state) {
+ return {
+ error: state.appState.warning,
+ }
+}
+
+inherits(JsonImportSubview, Component)
+function JsonImportSubview () {
+ Component.call(this)
+}
+
+JsonImportSubview.prototype.render = function () {
+ const { error } = this.props
+
+ return (
+ h('div', {
+ style: {
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ padding: '5px 15px 0px 15px',
+ },
+ }, [
+
+ h('p', 'Used by a variety of different clients'),
+ h('a.warning', { href: HELP_LINK, target: '_blank' }, 'File import not working? Click here!'),
+
+ h(FileInput, {
+ readAs: 'text',
+ onLoad: this.onLoad.bind(this),
+ style: {
+ margin: '20px 0px 12px 20px',
+ fontSize: '15px',
+ },
+ }),
+
+ h('input.large-input.letter-spacey', {
+ type: 'password',
+ placeholder: 'Enter password',
+ id: 'json-password-box',
+ onKeyPress: this.createKeyringOnEnter.bind(this),
+ style: {
+ width: 260,
+ marginTop: 12,
+ },
+ }),
+
+ h('button.primary', {
+ onClick: this.createNewKeychain.bind(this),
+ style: {
+ margin: 12,
+ },
+ }, 'Import'),
+
+ error ? h('span.error', error) : null,
+ ])
+ )
+}
+
+JsonImportSubview.prototype.onLoad = function (event, file) {
+ this.setState({file: file, fileContents: event.target.result})
+}
+
+JsonImportSubview.prototype.createKeyringOnEnter = function (event) {
+ if (event.key === 'Enter') {
+ event.preventDefault()
+ this.createNewKeychain()
+ }
+}
+
+JsonImportSubview.prototype.createNewKeychain = function () {
+ const state = this.state
+ const { fileContents } = state
+
+ if (!fileContents) {
+ const message = 'You must select a file to import.'
+ return this.props.dispatch(actions.displayWarning(message))
+ }
+
+ const passwordInput = document.getElementById('json-password-box')
+ const password = passwordInput.value
+
+ if (!password) {
+ const message = 'You must enter a password for the selected file.'
+ return this.props.dispatch(actions.displayWarning(message))
+ }
+
+ this.props.dispatch(actions.importNewAccount('JSON File', [ fileContents, password ]))
+}
diff --git a/ui/responsive/app/accounts/import/private-key.js b/ui/responsive/app/accounts/import/private-key.js
new file mode 100644
index 000000000..68ccee58e
--- /dev/null
+++ b/ui/responsive/app/accounts/import/private-key.js
@@ -0,0 +1,67 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const actions = require('../../actions')
+
+module.exports = connect(mapStateToProps)(PrivateKeyImportView)
+
+function mapStateToProps (state) {
+ return {
+ error: state.appState.warning,
+ }
+}
+
+inherits(PrivateKeyImportView, Component)
+function PrivateKeyImportView () {
+ Component.call(this)
+}
+
+PrivateKeyImportView.prototype.render = function () {
+ const { error } = this.props
+
+ return (
+ h('div', {
+ style: {
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ padding: '5px 15px 0px 15px',
+ },
+ }, [
+ h('span', 'Paste your private key string here'),
+
+ h('input.large-input.letter-spacey', {
+ type: 'password',
+ id: 'private-key-box',
+ onKeyPress: this.createKeyringOnEnter.bind(this),
+ style: {
+ width: 260,
+ marginTop: 12,
+ },
+ }),
+
+ h('button.primary', {
+ onClick: this.createNewKeychain.bind(this),
+ style: {
+ margin: 12,
+ },
+ }, 'Import'),
+
+ error ? h('span.error', error) : null,
+ ])
+ )
+}
+
+PrivateKeyImportView.prototype.createKeyringOnEnter = function (event) {
+ if (event.key === 'Enter') {
+ event.preventDefault()
+ this.createNewKeychain()
+ }
+}
+
+PrivateKeyImportView.prototype.createNewKeychain = function () {
+ const input = document.getElementById('private-key-box')
+ const privateKey = input.value
+ this.props.dispatch(actions.importNewAccount('Private Key', [ privateKey ]))
+}
diff --git a/ui/responsive/app/accounts/import/seed.js b/ui/responsive/app/accounts/import/seed.js
new file mode 100644
index 000000000..b4a7c0afa
--- /dev/null
+++ b/ui/responsive/app/accounts/import/seed.js
@@ -0,0 +1,30 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+
+module.exports = connect(mapStateToProps)(SeedImportSubview)
+
+function mapStateToProps (state) {
+ return {}
+}
+
+inherits(SeedImportSubview, Component)
+function SeedImportSubview () {
+ Component.call(this)
+}
+
+SeedImportSubview.prototype.render = function () {
+ return (
+ h('div', {
+ style: {
+ },
+ }, [
+ `Paste your seed phrase here!`,
+ h('textarea'),
+ h('br'),
+ h('button', 'Submit'),
+ ])
+ )
+}
+
diff --git a/ui/responsive/app/accounts/index.js b/ui/responsive/app/accounts/index.js
new file mode 100644
index 000000000..ac2615cd7
--- /dev/null
+++ b/ui/responsive/app/accounts/index.js
@@ -0,0 +1,164 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const actions = require('../actions')
+const valuesFor = require('../util').valuesFor
+const findDOMNode = require('react-dom').findDOMNode
+const AccountListItem = require('./account-list-item')
+
+module.exports = connect(mapStateToProps)(AccountsScreen)
+
+function mapStateToProps (state) {
+ const pendingTxs = valuesFor(state.metamask.unapprovedTxs)
+ .filter(txMeta => txMeta.metamaskNetworkId === state.metamask.network)
+ const pendingMsgs = valuesFor(state.metamask.unapprovedMsgs)
+ const pending = pendingTxs.concat(pendingMsgs)
+
+ return {
+ accounts: state.metamask.accounts,
+ identities: state.metamask.identities,
+ unapprovedTxs: state.metamask.unapprovedTxs,
+ selectedAddress: state.metamask.selectedAddress,
+ scrollToBottom: state.appState.scrollToBottom,
+ pending,
+ keyrings: state.metamask.keyrings,
+ conversionRate: state.metamask.conversionRate,
+ currentCurrency: state.metamask.currentCurrency,
+ }
+}
+
+inherits(AccountsScreen, Component)
+function AccountsScreen () {
+ Component.call(this)
+}
+
+AccountsScreen.prototype.render = function () {
+ const props = this.props
+ const { keyrings, conversionRate, currentCurrency } = props
+ const identityList = valuesFor(props.identities)
+ const unapprovedTxList = valuesFor(props.unapprovedTxs)
+
+ return (
+
+ h('.accounts-section.flex-grow', [
+
+ // subtitle and nav
+ h('.section-title.flex-center', [
+ h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
+ onClick: this.goHome.bind(this),
+ }),
+ h('h2.page-subtitle', 'Select Account'),
+ ]),
+
+ h('hr.horizontal-line'),
+
+ // identity selection
+ h('section.identity-section', {
+ style: {
+ height: '418px',
+ overflowY: 'auto',
+ overflowX: 'hidden',
+ },
+ },
+ [
+ identityList.map((identity) => {
+ const pending = this.props.pending.filter((txOrMsg) => {
+ if ('txParams' in txOrMsg) {
+ return txOrMsg.txParams.from === identity.address
+ } else if ('msgParams' in txOrMsg) {
+ return txOrMsg.msgParams.from === identity.address
+ } else {
+ return false
+ }
+ })
+
+ const simpleAddress = identity.address.substring(2).toLowerCase()
+ const keyring = keyrings.find((kr) => {
+ return kr.accounts.includes(simpleAddress) ||
+ kr.accounts.includes(identity.address)
+ })
+
+ return h(AccountListItem, {
+ key: `acct-panel-${identity.address}`,
+ identity,
+ selectedAddress: this.props.selectedAddress,
+ conversionRate,
+ currentCurrency,
+ accounts: this.props.accounts,
+ onShowDetail: this.onShowDetail.bind(this),
+ pending,
+ keyring,
+ })
+ }),
+
+ h('hr.horizontal-line'),
+ h('div.footer.hover-white.pointer', {
+ key: 'reveal-account-bar',
+ onClick: () => {
+ this.addNewAccount()
+ },
+ style: {
+ display: 'flex',
+ height: '40px',
+ padding: '10px',
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ }, [
+ h('i.fa.fa-plus.fa-lg', {key: ''}),
+ ]),
+ h('hr.horizontal-line'),
+ ]),
+
+ unapprovedTxList.length ? (
+
+ h('.unconftx-link.flex-row.flex-center', {
+ onClick: this.navigateToConfTx.bind(this),
+ }, [
+ h('span', 'Unconfirmed Txs'),
+ h('i.fa.fa-arrow-right.fa-lg'),
+ ])
+
+ ) : (
+ null
+ ),
+ ])
+ )
+}
+
+// If a new account was revealed, scroll to the bottom
+AccountsScreen.prototype.componentDidUpdate = function () {
+ const scrollToBottom = this.props.scrollToBottom
+
+ if (scrollToBottom) {
+ var container = findDOMNode(this)
+ var scrollable = container.querySelector('.identity-section')
+ scrollable.scrollTop = scrollable.scrollHeight
+ }
+}
+
+AccountsScreen.prototype.navigateToConfTx = function () {
+ event.stopPropagation()
+ this.props.dispatch(actions.showConfTxPage())
+}
+
+AccountsScreen.prototype.onShowDetail = function (address, event) {
+ event.stopPropagation()
+ this.props.dispatch(actions.showAccountDetail(address))
+}
+
+AccountsScreen.prototype.addNewAccount = function () {
+ this.props.dispatch(actions.addNewAccount(0))
+}
+
+/* An optional view proposed in this design:
+ * https://consensys.quip.com/zZVrAysM5znY
+AccountsScreen.prototype.addNewAccount = function () {
+ this.props.dispatch(actions.navigateToNewAccountScreen())
+}
+*/
+
+AccountsScreen.prototype.goHome = function () {
+ this.props.dispatch(actions.goHome())
+}
diff --git a/ui/responsive/app/actions.js b/ui/responsive/app/actions.js
new file mode 100644
index 000000000..2c60448dd
--- /dev/null
+++ b/ui/responsive/app/actions.js
@@ -0,0 +1,1031 @@
+const getBuyEthUrl = require('../../../app/scripts/lib/buy-eth-url')
+
+var actions = {
+ _setBackgroundConnection: _setBackgroundConnection,
+
+ GO_HOME: 'GO_HOME',
+ goHome: goHome,
+ // menu state
+ getNetworkStatus: 'getNetworkStatus',
+ // transition state
+ TRANSITION_FORWARD: 'TRANSITION_FORWARD',
+ TRANSITION_BACKWARD: 'TRANSITION_BACKWARD',
+ transitionForward,
+ transitionBackward,
+ // remote state
+ UPDATE_METAMASK_STATE: 'UPDATE_METAMASK_STATE',
+ updateMetamaskState: updateMetamaskState,
+ // notices
+ MARK_NOTICE_READ: 'MARK_NOTICE_READ',
+ markNoticeRead: markNoticeRead,
+ SHOW_NOTICE: 'SHOW_NOTICE',
+ showNotice: showNotice,
+ CLEAR_NOTICES: 'CLEAR_NOTICES',
+ clearNotices: clearNotices,
+ markAccountsFound,
+ // intialize screen
+ CREATE_NEW_VAULT_IN_PROGRESS: 'CREATE_NEW_VAULT_IN_PROGRESS',
+ SHOW_CREATE_VAULT: 'SHOW_CREATE_VAULT',
+ SHOW_RESTORE_VAULT: 'SHOW_RESTORE_VAULT',
+ FORGOT_PASSWORD: 'FORGOT_PASSWORD',
+ forgotPassword: forgotPassword,
+ SHOW_INIT_MENU: 'SHOW_INIT_MENU',
+ SHOW_NEW_VAULT_SEED: 'SHOW_NEW_VAULT_SEED',
+ SHOW_INFO_PAGE: 'SHOW_INFO_PAGE',
+ SHOW_IMPORT_PAGE: 'SHOW_IMPORT_PAGE',
+ unlockMetamask: unlockMetamask,
+ unlockFailed: unlockFailed,
+ showCreateVault: showCreateVault,
+ showRestoreVault: showRestoreVault,
+ showInitializeMenu: showInitializeMenu,
+ showImportPage,
+ createNewVaultAndKeychain: createNewVaultAndKeychain,
+ createNewVaultAndRestore: createNewVaultAndRestore,
+ createNewVaultInProgress: createNewVaultInProgress,
+ addNewKeyring,
+ importNewAccount,
+ addNewAccount,
+ NEW_ACCOUNT_SCREEN: 'NEW_ACCOUNT_SCREEN',
+ navigateToNewAccountScreen,
+ showNewVaultSeed: showNewVaultSeed,
+ showInfoPage: showInfoPage,
+ // seed recovery actions
+ REVEAL_SEED_CONFIRMATION: 'REVEAL_SEED_CONFIRMATION',
+ revealSeedConfirmation: revealSeedConfirmation,
+ requestRevealSeed: requestRevealSeed,
+ // unlock screen
+ UNLOCK_IN_PROGRESS: 'UNLOCK_IN_PROGRESS',
+ UNLOCK_FAILED: 'UNLOCK_FAILED',
+ UNLOCK_METAMASK: 'UNLOCK_METAMASK',
+ LOCK_METAMASK: 'LOCK_METAMASK',
+ tryUnlockMetamask: tryUnlockMetamask,
+ lockMetamask: lockMetamask,
+ unlockInProgress: unlockInProgress,
+ // error handling
+ displayWarning: displayWarning,
+ DISPLAY_WARNING: 'DISPLAY_WARNING',
+ HIDE_WARNING: 'HIDE_WARNING',
+ hideWarning: hideWarning,
+ // accounts screen
+ SET_SELECTED_ACCOUNT: 'SET_SELECTED_ACCOUNT',
+ SHOW_ACCOUNT_DETAIL: 'SHOW_ACCOUNT_DETAIL',
+ SHOW_ACCOUNTS_PAGE: 'SHOW_ACCOUNTS_PAGE',
+ SHOW_CONF_TX_PAGE: 'SHOW_CONF_TX_PAGE',
+ SHOW_CONF_MSG_PAGE: 'SHOW_CONF_MSG_PAGE',
+ SET_CURRENT_FIAT: 'SET_CURRENT_FIAT',
+ setCurrentCurrency: setCurrentCurrency,
+ setCurrentAccountTab,
+ // account detail screen
+ SHOW_SEND_PAGE: 'SHOW_SEND_PAGE',
+ showSendPage: showSendPage,
+ ADD_TO_ADDRESS_BOOK: 'ADD_TO_ADDRESS_BOOK',
+ addToAddressBook: addToAddressBook,
+ REQUEST_ACCOUNT_EXPORT: 'REQUEST_ACCOUNT_EXPORT',
+ requestExportAccount: requestExportAccount,
+ EXPORT_ACCOUNT: 'EXPORT_ACCOUNT',
+ exportAccount: exportAccount,
+ SHOW_PRIVATE_KEY: 'SHOW_PRIVATE_KEY',
+ showPrivateKey: showPrivateKey,
+ SAVE_ACCOUNT_LABEL: 'SAVE_ACCOUNT_LABEL',
+ saveAccountLabel: saveAccountLabel,
+ // tx conf screen
+ COMPLETED_TX: 'COMPLETED_TX',
+ TRANSACTION_ERROR: 'TRANSACTION_ERROR',
+ NEXT_TX: 'NEXT_TX',
+ PREVIOUS_TX: 'PREV_TX',
+ signMsg: signMsg,
+ cancelMsg: cancelMsg,
+ signPersonalMsg,
+ cancelPersonalMsg,
+ sendTx: sendTx,
+ signTx: signTx,
+ updateAndApproveTx,
+ cancelTx: cancelTx,
+ completedTx: completedTx,
+ txError: txError,
+ nextTx: nextTx,
+ previousTx: previousTx,
+ viewPendingTx: viewPendingTx,
+ VIEW_PENDING_TX: 'VIEW_PENDING_TX',
+ // app messages
+ confirmSeedWords: confirmSeedWords,
+ showAccountDetail: showAccountDetail,
+ BACK_TO_ACCOUNT_DETAIL: 'BACK_TO_ACCOUNT_DETAIL',
+ backToAccountDetail: backToAccountDetail,
+ showAccountsPage: showAccountsPage,
+ showConfTxPage: showConfTxPage,
+ // config screen
+ SHOW_CONFIG_PAGE: 'SHOW_CONFIG_PAGE',
+ SET_RPC_TARGET: 'SET_RPC_TARGET',
+ SET_DEFAULT_RPC_TARGET: 'SET_DEFAULT_RPC_TARGET',
+ SET_PROVIDER_TYPE: 'SET_PROVIDER_TYPE',
+ USE_ETHERSCAN_PROVIDER: 'USE_ETHERSCAN_PROVIDER',
+ useEtherscanProvider: useEtherscanProvider,
+ showConfigPage,
+ SHOW_ADD_TOKEN_PAGE: 'SHOW_ADD_TOKEN_PAGE',
+ showAddTokenPage,
+ addToken,
+ setRpcTarget: setRpcTarget,
+ setDefaultRpcTarget: setDefaultRpcTarget,
+ setProviderType: setProviderType,
+ // loading overlay
+ SHOW_LOADING: 'SHOW_LOADING_INDICATION',
+ HIDE_LOADING: 'HIDE_LOADING_INDICATION',
+ showLoadingIndication: showLoadingIndication,
+ hideLoadingIndication: hideLoadingIndication,
+ // buy Eth with coinbase
+ BUY_ETH: 'BUY_ETH',
+ buyEth: buyEth,
+ buyEthView: buyEthView,
+ BUY_ETH_VIEW: 'BUY_ETH_VIEW',
+ COINBASE_SUBVIEW: 'COINBASE_SUBVIEW',
+ coinBaseSubview: coinBaseSubview,
+ SHAPESHIFT_SUBVIEW: 'SHAPESHIFT_SUBVIEW',
+ shapeShiftSubview: shapeShiftSubview,
+ PAIR_UPDATE: 'PAIR_UPDATE',
+ pairUpdate: pairUpdate,
+ coinShiftRquest: coinShiftRquest,
+ SHOW_SUB_LOADING_INDICATION: 'SHOW_SUB_LOADING_INDICATION',
+ showSubLoadingIndication: showSubLoadingIndication,
+ HIDE_SUB_LOADING_INDICATION: 'HIDE_SUB_LOADING_INDICATION',
+ hideSubLoadingIndication: hideSubLoadingIndication,
+// QR STUFF:
+ SHOW_QR: 'SHOW_QR',
+ showQrView: showQrView,
+ reshowQrCode: reshowQrCode,
+ SHOW_QR_VIEW: 'SHOW_QR_VIEW',
+// FORGOT PASSWORD:
+ BACK_TO_INIT_MENU: 'BACK_TO_INIT_MENU',
+ goBackToInitView: goBackToInitView,
+ RECOVERY_IN_PROGRESS: 'RECOVERY_IN_PROGRESS',
+ BACK_TO_UNLOCK_VIEW: 'BACK_TO_UNLOCK_VIEW',
+ backToUnlockView: backToUnlockView,
+ // SHOWING KEYCHAIN
+ SHOW_NEW_KEYCHAIN: 'SHOW_NEW_KEYCHAIN',
+ showNewKeychain: showNewKeychain,
+
+ callBackgroundThenUpdate,
+ forceUpdateMetamaskState,
+}
+
+module.exports = actions
+
+var background = null
+function _setBackgroundConnection (backgroundConnection) {
+ background = backgroundConnection
+}
+
+function goHome () {
+ return {
+ type: actions.GO_HOME,
+ }
+}
+
+// async actions
+
+function tryUnlockMetamask (password) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ dispatch(actions.unlockInProgress())
+ log.debug(`background.submitPassword`)
+ background.submitPassword(password, (err) => {
+ dispatch(actions.hideLoadingIndication())
+ if (err) {
+ dispatch(actions.unlockFailed(err.message))
+ } else {
+ dispatch(actions.transitionForward())
+ forceUpdateMetamaskState(dispatch)
+ }
+ })
+ }
+}
+
+function transitionForward () {
+ return {
+ type: this.TRANSITION_FORWARD,
+ }
+}
+
+function transitionBackward () {
+ return {
+ type: this.TRANSITION_BACKWARD,
+ }
+}
+
+function confirmSeedWords () {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ log.debug(`background.clearSeedWordCache`)
+ background.clearSeedWordCache((err, account) => {
+ dispatch(actions.hideLoadingIndication())
+ if (err) {
+ return dispatch(actions.displayWarning(err.message))
+ }
+
+ log.info('Seed word cache cleared. ' + account)
+ dispatch(actions.showAccountDetail(account))
+ })
+ }
+}
+
+function createNewVaultAndRestore (password, seed) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ log.debug(`background.createNewVaultAndRestore`)
+ background.createNewVaultAndRestore(password, seed, (err) => {
+ dispatch(actions.hideLoadingIndication())
+ if (err) return dispatch(actions.displayWarning(err.message))
+ dispatch(actions.showAccountsPage())
+ })
+ }
+}
+
+function createNewVaultAndKeychain (password) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ log.debug(`background.createNewVaultAndKeychain`)
+ background.createNewVaultAndKeychain(password, (err) => {
+ if (err) {
+ return dispatch(actions.displayWarning(err.message))
+ }
+ log.debug(`background.placeSeedWords`)
+ background.placeSeedWords((err) => {
+ if (err) {
+ return dispatch(actions.displayWarning(err.message))
+ }
+ dispatch(actions.hideLoadingIndication())
+ forceUpdateMetamaskState(dispatch)
+ })
+ })
+ }
+}
+
+function revealSeedConfirmation () {
+ return {
+ type: this.REVEAL_SEED_CONFIRMATION,
+ }
+}
+
+function requestRevealSeed (password) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ log.debug(`background.submitPassword`)
+ background.submitPassword(password, (err) => {
+ if (err) {
+ return dispatch(actions.displayWarning(err.message))
+ }
+ log.debug(`background.placeSeedWords`)
+ background.placeSeedWords((err, result) => {
+ if (err) return dispatch(actions.displayWarning(err.message))
+ dispatch(actions.hideLoadingIndication())
+ dispatch(actions.showNewVaultSeed(result))
+ })
+ })
+ }
+}
+
+function addNewKeyring (type, opts) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ log.debug(`background.addNewKeyring`)
+ background.addNewKeyring(type, opts, (err) => {
+ dispatch(actions.hideLoadingIndication())
+ if (err) return dispatch(actions.displayWarning(err.message))
+ dispatch(actions.showAccountsPage())
+ })
+ }
+}
+
+function importNewAccount (strategy, args) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication('This may take a while, be patient.'))
+ log.debug(`background.importAccountWithStrategy`)
+ background.importAccountWithStrategy(strategy, args, (err) => {
+ if (err) return dispatch(actions.displayWarning(err.message))
+ log.debug(`background.getState`)
+ background.getState((err, newState) => {
+ dispatch(actions.hideLoadingIndication())
+ if (err) {
+ return dispatch(actions.displayWarning(err.message))
+ }
+ dispatch(actions.updateMetamaskState(newState))
+ dispatch({
+ type: actions.SHOW_ACCOUNT_DETAIL,
+ value: newState.selectedAddress,
+ })
+ })
+ })
+ }
+}
+
+function navigateToNewAccountScreen () {
+ return {
+ type: this.NEW_ACCOUNT_SCREEN,
+ }
+}
+
+function addNewAccount () {
+ log.debug(`background.addNewAccount`)
+ return callBackgroundThenUpdate(background.addNewAccount)
+}
+
+function showInfoPage () {
+ return {
+ type: actions.SHOW_INFO_PAGE,
+ }
+}
+
+function setCurrentCurrency (currencyCode) {
+ return (dispatch) => {
+ dispatch(this.showLoadingIndication())
+ log.debug(`background.setCurrentCurrency`)
+ background.setCurrentCurrency(currencyCode, (err, data) => {
+ dispatch(this.hideLoadingIndication())
+ if (err) {
+ log.error(err.stack)
+ return dispatch(actions.displayWarning(err.message))
+ }
+ dispatch({
+ type: this.SET_CURRENT_FIAT,
+ value: {
+ currentCurrency: data.currentCurrency,
+ conversionRate: data.conversionRate,
+ conversionDate: data.conversionDate,
+ },
+ })
+ })
+ }
+}
+
+function signMsg (msgData) {
+ log.debug('action - signMsg')
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+
+ log.debug(`actions calling background.signMessage`)
+ background.signMessage(msgData, (err, newState) => {
+ log.debug('signMessage called back')
+ dispatch(actions.updateMetamaskState(newState))
+ dispatch(actions.hideLoadingIndication())
+
+ if (err) log.error(err)
+ if (err) return dispatch(actions.displayWarning(err.message))
+
+ dispatch(actions.completedTx(msgData.metamaskId))
+ })
+ }
+}
+
+function signPersonalMsg (msgData) {
+ log.debug('action - signPersonalMsg')
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+
+ log.debug(`actions calling background.signPersonalMessage`)
+ background.signPersonalMessage(msgData, (err, newState) => {
+ log.debug('signPersonalMessage called back')
+ dispatch(actions.updateMetamaskState(newState))
+ dispatch(actions.hideLoadingIndication())
+
+ if (err) log.error(err)
+ if (err) return dispatch(actions.displayWarning(err.message))
+
+ dispatch(actions.completedTx(msgData.metamaskId))
+ })
+ }
+}
+
+function signTx (txData) {
+ return (dispatch) => {
+ global.ethQuery.sendTransaction(txData, (err, data) => {
+ dispatch(actions.hideLoadingIndication())
+ if (err) return dispatch(actions.displayWarning(err.message))
+ dispatch(actions.hideWarning())
+ })
+ dispatch(this.showConfTxPage())
+ }
+}
+
+function sendTx (txData) {
+ log.info(`actions - sendTx: ${JSON.stringify(txData.txParams)}`)
+ return (dispatch) => {
+ log.debug(`actions calling background.approveTransaction`)
+ background.approveTransaction(txData.id, (err) => {
+ if (err) {
+ dispatch(actions.txError(err))
+ return log.error(err.message)
+ }
+ dispatch(actions.completedTx(txData.id))
+ })
+ }
+}
+
+function updateAndApproveTx (txData) {
+ log.info('actions: updateAndApproveTx: ' + JSON.stringify(txData))
+ return (dispatch) => {
+ log.debug(`actions calling background.updateAndApproveTx`)
+ background.updateAndApproveTransaction(txData, (err) => {
+ dispatch(actions.hideLoadingIndication())
+ if (err) {
+ dispatch(actions.txError(err))
+ return log.error(err.message)
+ }
+ dispatch(actions.completedTx(txData.id))
+ })
+ }
+}
+
+function completedTx (id) {
+ return {
+ type: actions.COMPLETED_TX,
+ value: id,
+ }
+}
+
+function txError (err) {
+ return {
+ type: actions.TRANSACTION_ERROR,
+ message: err.message,
+ }
+}
+
+function cancelMsg (msgData) {
+ log.debug(`background.cancelMessage`)
+ background.cancelMessage(msgData.id)
+ return actions.completedTx(msgData.id)
+}
+
+function cancelPersonalMsg (msgData) {
+ const id = msgData.id
+ background.cancelPersonalMessage(id)
+ return actions.completedTx(id)
+}
+
+function cancelTx (txData) {
+ log.debug(`background.cancelTransaction`)
+ background.cancelTransaction(txData.id)
+ return actions.completedTx(txData.id)
+}
+
+//
+// initialize screen
+//
+
+function showCreateVault () {
+ return {
+ type: actions.SHOW_CREATE_VAULT,
+ }
+}
+
+function showRestoreVault () {
+ return {
+ type: actions.SHOW_RESTORE_VAULT,
+ }
+}
+
+function forgotPassword () {
+ return {
+ type: actions.FORGOT_PASSWORD,
+ }
+}
+
+function showInitializeMenu () {
+ return {
+ type: actions.SHOW_INIT_MENU,
+ }
+}
+
+function showImportPage () {
+ return {
+ type: actions.SHOW_IMPORT_PAGE,
+ }
+}
+
+function createNewVaultInProgress () {
+ return {
+ type: actions.CREATE_NEW_VAULT_IN_PROGRESS,
+ }
+}
+
+function showNewVaultSeed (seed) {
+ return {
+ type: actions.SHOW_NEW_VAULT_SEED,
+ value: seed,
+ }
+}
+
+function backToUnlockView () {
+ return {
+ type: actions.BACK_TO_UNLOCK_VIEW,
+ }
+}
+
+function showNewKeychain () {
+ return {
+ type: actions.SHOW_NEW_KEYCHAIN,
+ }
+}
+
+//
+// unlock screen
+//
+
+function unlockInProgress () {
+ return {
+ type: actions.UNLOCK_IN_PROGRESS,
+ }
+}
+
+function unlockFailed (message) {
+ return {
+ type: actions.UNLOCK_FAILED,
+ value: message,
+ }
+}
+
+function unlockMetamask (account) {
+ return {
+ type: actions.UNLOCK_METAMASK,
+ value: account,
+ }
+}
+
+function updateMetamaskState (newState) {
+ return {
+ type: actions.UPDATE_METAMASK_STATE,
+ value: newState,
+ }
+}
+
+function lockMetamask () {
+ log.debug(`background.setLocked`)
+ return callBackgroundThenUpdate(background.setLocked)
+}
+
+function setCurrentAccountTab (newTabName) {
+ log.debug(`background.setCurrentAccountTab: ${newTabName}`)
+ return callBackgroundThenUpdateNoSpinner(background.setCurrentAccountTab, newTabName)
+}
+
+function showAccountDetail (address) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ log.debug(`background.setSelectedAddress`)
+ background.setSelectedAddress(address, (err) => {
+ dispatch(actions.hideLoadingIndication())
+ if (err) {
+ return dispatch(actions.displayWarning(err.message))
+ }
+ dispatch({
+ type: actions.SHOW_ACCOUNT_DETAIL,
+ value: address,
+ })
+ })
+ }
+}
+
+function backToAccountDetail (address) {
+ return {
+ type: actions.BACK_TO_ACCOUNT_DETAIL,
+ value: address,
+ }
+}
+
+function showAccountsPage () {
+ return {
+ type: actions.SHOW_ACCOUNTS_PAGE,
+ }
+}
+
+function showConfTxPage (transForward = true) {
+ return {
+ type: actions.SHOW_CONF_TX_PAGE,
+ transForward: transForward,
+ }
+}
+
+function nextTx () {
+ return {
+ type: actions.NEXT_TX,
+ }
+}
+
+function viewPendingTx (txId) {
+ return {
+ type: actions.VIEW_PENDING_TX,
+ value: txId,
+ }
+}
+
+function previousTx () {
+ return {
+ type: actions.PREVIOUS_TX,
+ }
+}
+
+function showConfigPage (transitionForward = true) {
+ return {
+ type: actions.SHOW_CONFIG_PAGE,
+ value: transitionForward,
+ }
+}
+
+function showAddTokenPage (transitionForward = true) {
+ return {
+ type: actions.SHOW_ADD_TOKEN_PAGE,
+ value: transitionForward,
+ }
+}
+
+function addToken (address, symbol, decimals) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ background.addToken(address, symbol, decimals, (err) => {
+ dispatch(actions.hideLoadingIndication())
+ if (err) {
+ return dispatch(actions.displayWarning(err.message))
+ }
+ setTimeout(() => {
+ dispatch(actions.goHome())
+ }, 250)
+ })
+ }
+}
+
+function goBackToInitView () {
+ return {
+ type: actions.BACK_TO_INIT_MENU,
+ }
+}
+
+//
+// notice
+//
+
+function markNoticeRead (notice) {
+ return (dispatch) => {
+ dispatch(this.showLoadingIndication())
+ log.debug(`background.markNoticeRead`)
+ background.markNoticeRead(notice, (err, notice) => {
+ dispatch(this.hideLoadingIndication())
+ if (err) {
+ return dispatch(actions.displayWarning(err))
+ }
+ if (notice) {
+ return dispatch(actions.showNotice(notice))
+ } else {
+ dispatch(this.clearNotices())
+ return {
+ type: actions.SHOW_ACCOUNTS_PAGE,
+ }
+ }
+ })
+ }
+}
+
+function showNotice (notice) {
+ return {
+ type: actions.SHOW_NOTICE,
+ value: notice,
+ }
+}
+
+function clearNotices () {
+ return {
+ type: actions.CLEAR_NOTICES,
+ }
+}
+
+function markAccountsFound () {
+ log.debug(`background.markAccountsFound`)
+ return callBackgroundThenUpdate(background.markAccountsFound)
+}
+
+//
+// config
+//
+
+// default rpc target refers to localhost:8545 in this instance.
+function setDefaultRpcTarget (rpcList) {
+ log.debug(`background.setDefaultRpcTarget`)
+ return (dispatch) => {
+ background.setDefaultRpc((err, result) => {
+ if (err) {
+ log.error(err)
+ return dispatch(self.displayWarning('Had a problem changing networks.'))
+ }
+ })
+ }
+}
+
+function setRpcTarget (newRpc) {
+ log.debug(`background.setRpcTarget`)
+ return (dispatch) => {
+ background.setCustomRpc(newRpc, (err, result) => {
+ if (err) {
+ log.error(err)
+ return dispatch(self.displayWarning('Had a problem changing networks!'))
+ }
+ })
+ }
+}
+
+// Calls the addressBookController to add a new address.
+function addToAddressBook (recipient, nickname) {
+ log.debug(`background.addToAddressBook`)
+ return (dispatch) => {
+ background.setAddressBook(recipient, nickname, (err, result) => {
+ if (err) {
+ log.error(err)
+ return dispatch(self.displayWarning('Address book failed to update'))
+ }
+ })
+ }
+}
+
+function setProviderType (type) {
+ log.debug(`background.setProviderType`)
+ background.setProviderType(type)
+ return {
+ type: actions.SET_PROVIDER_TYPE,
+ value: type,
+ }
+}
+
+function useEtherscanProvider () {
+ log.debug(`background.useEtherscanProvider`)
+ background.useEtherscanProvider()
+ return {
+ type: actions.USE_ETHERSCAN_PROVIDER,
+ }
+}
+
+function showLoadingIndication (message) {
+ return {
+ type: actions.SHOW_LOADING,
+ value: message,
+ }
+}
+
+function hideLoadingIndication () {
+ return {
+ type: actions.HIDE_LOADING,
+ }
+}
+
+function showSubLoadingIndication () {
+ return {
+ type: actions.SHOW_SUB_LOADING_INDICATION,
+ }
+}
+
+function hideSubLoadingIndication () {
+ return {
+ type: actions.HIDE_SUB_LOADING_INDICATION,
+ }
+}
+
+function displayWarning (text) {
+ return {
+ type: actions.DISPLAY_WARNING,
+ value: text,
+ }
+}
+
+function hideWarning () {
+ return {
+ type: actions.HIDE_WARNING,
+ }
+}
+
+function requestExportAccount () {
+ return {
+ type: actions.REQUEST_ACCOUNT_EXPORT,
+ }
+}
+
+function exportAccount (password, address) {
+ var self = this
+
+ return function (dispatch) {
+ dispatch(self.showLoadingIndication())
+
+ log.debug(`background.submitPassword`)
+ background.submitPassword(password, function (err) {
+ if (err) {
+ log.error('Error in submiting password.')
+ dispatch(self.hideLoadingIndication())
+ return dispatch(self.displayWarning('Incorrect Password.'))
+ }
+ log.debug(`background.exportAccount`)
+ background.exportAccount(address, function (err, result) {
+ dispatch(self.hideLoadingIndication())
+
+ if (err) {
+ log.error(err)
+ return dispatch(self.displayWarning('Had a problem exporting the account.'))
+ }
+
+ dispatch(self.showPrivateKey(result))
+ })
+ })
+ }
+}
+
+function showPrivateKey (key) {
+ return {
+ type: actions.SHOW_PRIVATE_KEY,
+ value: key,
+ }
+}
+
+function saveAccountLabel (account, label) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ log.debug(`background.saveAccountLabel`)
+ background.saveAccountLabel(account, label, (err) => {
+ dispatch(actions.hideLoadingIndication())
+ if (err) {
+ return dispatch(actions.displayWarning(err.message))
+ }
+ dispatch({
+ type: actions.SAVE_ACCOUNT_LABEL,
+ value: { account, label },
+ })
+ })
+ }
+}
+
+function showSendPage () {
+ return {
+ type: actions.SHOW_SEND_PAGE,
+ }
+}
+
+function buyEth (opts) {
+ return (dispatch) => {
+ const url = getBuyEthUrl(opts)
+ global.platform.openWindow({ url })
+ dispatch({
+ type: actions.BUY_ETH,
+ })
+ }
+}
+
+function buyEthView (address) {
+ return {
+ type: actions.BUY_ETH_VIEW,
+ value: address,
+ }
+}
+
+function coinBaseSubview () {
+ return {
+ type: actions.COINBASE_SUBVIEW,
+ }
+}
+
+function pairUpdate (coin) {
+ return (dispatch) => {
+ dispatch(actions.showSubLoadingIndication())
+ dispatch(actions.hideWarning())
+ shapeShiftRequest('marketinfo', {pair: `${coin.toLowerCase()}_eth`}, (mktResponse) => {
+ dispatch(actions.hideSubLoadingIndication())
+ dispatch({
+ type: actions.PAIR_UPDATE,
+ value: {
+ marketinfo: mktResponse,
+ },
+ })
+ })
+ }
+}
+
+function shapeShiftSubview (network) {
+ var pair = 'btc_eth'
+
+ return (dispatch) => {
+ dispatch(actions.showSubLoadingIndication())
+ shapeShiftRequest('marketinfo', {pair}, (mktResponse) => {
+ shapeShiftRequest('getcoins', {}, (response) => {
+ dispatch(actions.hideSubLoadingIndication())
+ if (mktResponse.error) return dispatch(actions.displayWarning(mktResponse.error))
+ dispatch({
+ type: actions.SHAPESHIFT_SUBVIEW,
+ value: {
+ marketinfo: mktResponse,
+ coinOptions: response,
+ },
+ })
+ })
+ })
+ }
+}
+
+function coinShiftRquest (data, marketData) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ shapeShiftRequest('shift', { method: 'POST', data}, (response) => {
+ dispatch(actions.hideLoadingIndication())
+ if (response.error) return dispatch(actions.displayWarning(response.error))
+ var message = `
+ Deposit your ${response.depositType} to the address bellow:`
+ log.debug(`background.createShapeShiftTx`)
+ background.createShapeShiftTx(response.deposit, response.depositType)
+ dispatch(actions.showQrView(response.deposit, [message].concat(marketData)))
+ })
+ }
+}
+
+function showQrView (data, message) {
+ return {
+ type: actions.SHOW_QR_VIEW,
+ value: {
+ message: message,
+ data: data,
+ },
+ }
+}
+function reshowQrCode (data, coin) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ shapeShiftRequest('marketinfo', {pair: `${coin.toLowerCase()}_eth`}, (mktResponse) => {
+ if (mktResponse.error) return dispatch(actions.displayWarning(mktResponse.error))
+
+ var message = [
+ `Deposit your ${coin} to the address bellow:`,
+ `Deposit Limit: ${mktResponse.limit}`,
+ `Deposit Minimum:${mktResponse.minimum}`,
+ ]
+
+ dispatch(actions.hideLoadingIndication())
+ return dispatch(actions.showQrView(data, message))
+ })
+ }
+}
+
+function shapeShiftRequest (query, options, cb) {
+ var queryResponse, method
+ !options ? options = {} : null
+ options.method ? method = options.method : method = 'GET'
+
+ var requestListner = function (request) {
+ queryResponse = JSON.parse(this.responseText)
+ cb ? cb(queryResponse) : null
+ return queryResponse
+ }
+
+ var shapShiftReq = new XMLHttpRequest()
+ shapShiftReq.addEventListener('load', requestListner)
+ shapShiftReq.open(method, `https://shapeshift.io/${query}/${options.pair ? options.pair : ''}`, true)
+
+ if (options.method === 'POST') {
+ var jsonObj = JSON.stringify(options.data)
+ shapShiftReq.setRequestHeader('Content-Type', 'application/json')
+ return shapShiftReq.send(jsonObj)
+ } else {
+ return shapShiftReq.send()
+ }
+}
+
+// Call Background Then Update
+//
+// A function generator for a common pattern wherein:
+// We show loading indication.
+// We call a background method.
+// We hide loading indication.
+// If it errored, we show a warning.
+// If it didn't, we update the state.
+function callBackgroundThenUpdateNoSpinner (method, ...args) {
+ return (dispatch) => {
+ method.call(background, ...args, (err) => {
+ if (err) {
+ return dispatch(actions.displayWarning(err.message))
+ }
+ forceUpdateMetamaskState(dispatch)
+ })
+ }
+}
+
+function callBackgroundThenUpdate (method, ...args) {
+ return (dispatch) => {
+ dispatch(actions.showLoadingIndication())
+ method.call(background, ...args, (err) => {
+ dispatch(actions.hideLoadingIndication())
+ if (err) {
+ return dispatch(actions.displayWarning(err.message))
+ }
+ forceUpdateMetamaskState(dispatch)
+ })
+ }
+}
+
+function forceUpdateMetamaskState (dispatch) {
+ log.debug(`background.getState`)
+ background.getState((err, newState) => {
+ if (err) {
+ return dispatch(actions.displayWarning(err.message))
+ }
+ dispatch(actions.updateMetamaskState(newState))
+ })
+}
diff --git a/ui/responsive/app/add-token.js b/ui/responsive/app/add-token.js
new file mode 100644
index 000000000..b303b5c0d
--- /dev/null
+++ b/ui/responsive/app/add-token.js
@@ -0,0 +1,219 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const actions = require('./actions')
+
+const ethUtil = require('ethereumjs-util')
+const abi = require('human-standard-token-abi')
+const Eth = require('ethjs-query')
+const EthContract = require('ethjs-contract')
+
+const emptyAddr = '0x0000000000000000000000000000000000000000'
+
+module.exports = connect(mapStateToProps)(AddTokenScreen)
+
+function mapStateToProps (state) {
+ return {
+ }
+}
+
+inherits(AddTokenScreen, Component)
+function AddTokenScreen () {
+ this.state = {
+ warning: null,
+ address: null,
+ symbol: 'TOKEN',
+ decimals: 18,
+ }
+ Component.call(this)
+}
+
+AddTokenScreen.prototype.render = function () {
+ const state = this.state
+ const props = this.props
+ const { warning, symbol, decimals } = state
+
+ return (
+ h('.flex-column.flex-grow', [
+
+ // subtitle and nav
+ h('.section-title.flex-row.flex-center', [
+ h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
+ onClick: (event) => {
+ props.dispatch(actions.goHome())
+ },
+ }),
+ h('h2.page-subtitle', 'Add Token'),
+ ]),
+
+ h('.error', {
+ style: {
+ display: warning ? 'block' : 'none',
+ padding: '0 20px',
+ textAlign: 'center',
+ },
+ }, warning),
+
+ // conf view
+ h('.flex-column.flex-justify-center.flex-grow.select-none', [
+ h('.flex-space-around', {
+ style: {
+ padding: '20px',
+ },
+ }, [
+
+ h('div', [
+ h('span', {
+ style: { fontWeight: 'bold', paddingRight: '10px'},
+ }, 'Token Address'),
+ ]),
+
+ h('section.flex-row.flex-center', [
+ h('input#token-address', {
+ name: 'address',
+ placeholder: 'Token Address',
+ onChange: this.tokenAddressDidChange.bind(this),
+ style: {
+ width: 'inherit',
+ flex: '1 0 auto',
+ height: '30px',
+ margin: '8px',
+ },
+ }),
+ ]),
+
+ h('div', [
+ h('span', {
+ style: { fontWeight: 'bold', paddingRight: '10px'},
+ }, 'Token Sybmol'),
+ ]),
+
+ h('div', { style: {display: 'flex'} }, [
+ h('input#token_symbol', {
+ placeholder: `Like "ETH"`,
+ value: symbol,
+ style: {
+ width: 'inherit',
+ flex: '1 0 auto',
+ height: '30px',
+ margin: '8px',
+ },
+ onChange: (event) => {
+ var element = event.target
+ var symbol = element.value
+ this.setState({ symbol })
+ },
+ }),
+ ]),
+
+ h('div', [
+ h('span', {
+ style: { fontWeight: 'bold', paddingRight: '10px'},
+ }, 'Decimals of Precision'),
+ ]),
+
+ h('div', { style: {display: 'flex'} }, [
+ h('input#token_decimals', {
+ value: decimals,
+ type: 'number',
+ min: 0,
+ max: 36,
+ style: {
+ width: 'inherit',
+ flex: '1 0 auto',
+ height: '30px',
+ margin: '8px',
+ },
+ onChange: (event) => {
+ var element = event.target
+ var decimals = element.value.trim()
+ this.setState({ decimals })
+ },
+ }),
+ ]),
+
+ h('button', {
+ style: {
+ alignSelf: 'center',
+ },
+ onClick: (event) => {
+ const valid = this.validateInputs()
+ if (!valid) return
+
+ const { address, symbol, decimals } = this.state
+ this.props.dispatch(actions.addToken(address.trim(), symbol.trim(), decimals))
+ },
+ }, 'Add'),
+ ]),
+ ]),
+ ])
+ )
+}
+
+AddTokenScreen.prototype.componentWillMount = function () {
+ if (typeof global.ethereumProvider === 'undefined') return
+
+ this.eth = new Eth(global.ethereumProvider)
+ this.contract = new EthContract(this.eth)
+ this.TokenContract = this.contract(abi)
+}
+
+AddTokenScreen.prototype.tokenAddressDidChange = function (event) {
+ const el = event.target
+ const address = el.value.trim()
+ if (ethUtil.isValidAddress(address) && address !== emptyAddr) {
+ this.setState({ address })
+ this.attemptToAutoFillTokenParams(address)
+ }
+}
+
+AddTokenScreen.prototype.validateInputs = function () {
+ let msg = ''
+ const state = this.state
+ const { address, symbol, decimals } = state
+
+ const validAddress = ethUtil.isValidAddress(address)
+ if (!validAddress) {
+ msg += 'Address is invalid. '
+ }
+
+ const validDecimals = decimals >= 0 && decimals < 36
+ if (!validDecimals) {
+ msg += 'Decimals must be at least 0, and not over 36. '
+ }
+
+ const symbolLen = symbol.trim().length
+ const validSymbol = symbolLen > 0 && symbolLen < 10
+ if (!validSymbol) {
+ msg += 'Symbol must be between 0 and 10 characters.'
+ }
+
+ const isValid = validAddress && validDecimals
+
+ if (!isValid) {
+ this.setState({
+ warning: msg,
+ })
+ } else {
+ this.setState({ warning: null })
+ }
+
+ return isValid
+}
+
+AddTokenScreen.prototype.attemptToAutoFillTokenParams = async function (address) {
+ const contract = this.TokenContract.at(address)
+
+ const results = await Promise.all([
+ contract.symbol(),
+ contract.decimals(),
+ ])
+
+ const [ symbol, decimals ] = results
+ if (symbol && decimals) {
+ console.log('SETTING SYMBOL AND DECIMALS', { symbol, decimals })
+ this.setState({ symbol: symbol[0], decimals: decimals[0].toString() })
+ }
+}
+
diff --git a/ui/responsive/app/app.js b/ui/responsive/app/app.js
new file mode 100644
index 000000000..1a63002e1
--- /dev/null
+++ b/ui/responsive/app/app.js
@@ -0,0 +1,591 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const connect = require('react-redux').connect
+const h = require('react-hyperscript')
+const actions = require('./actions')
+const ReactCSSTransitionGroup = require('react-addons-css-transition-group')
+// init
+const InitializeMenuScreen = require('./first-time/init-menu')
+const NewKeyChainScreen = require('./new-keychain')
+// unlock
+const UnlockScreen = require('./unlock')
+// accounts
+const AccountsScreen = require('./accounts')
+const AccountDetailScreen = require('./account-detail')
+const SendTransactionScreen = require('./send')
+const ConfirmTxScreen = require('./conf-tx')
+// notice
+const NoticeScreen = require('./components/notice')
+const generateLostAccountsNotice = require('../lib/lost-accounts-notice')
+// other views
+const ConfigScreen = require('./config')
+const AddTokenScreen = require('./add-token')
+const Import = require('./accounts/import')
+const InfoScreen = require('./info')
+const Loading = require('./components/loading')
+const SandwichExpando = require('sandwich-expando')
+const MenuDroppo = require('menu-droppo')
+const DropMenuItem = require('./components/drop-menu-item')
+const NetworkIndicator = require('./components/network')
+const Tooltip = require('./components/tooltip')
+const BuyView = require('./components/buy-button-subview')
+const QrView = require('./components/qr-code')
+const HDCreateVaultComplete = require('./keychains/hd/create-vault-complete')
+const HDRestoreVaultScreen = require('./keychains/hd/restore-vault')
+const RevealSeedConfirmation = require('./keychains/hd/recover-seed/confirmation')
+
+module.exports = connect(mapStateToProps)(App)
+
+inherits(App, Component)
+function App () { Component.call(this) }
+
+function mapStateToProps (state) {
+ return {
+ // state from plugin
+ isLoading: state.appState.isLoading,
+ loadingMessage: state.appState.loadingMessage,
+ noActiveNotices: state.metamask.noActiveNotices,
+ isInitialized: state.metamask.isInitialized,
+ isUnlocked: state.metamask.isUnlocked,
+ currentView: state.appState.currentView,
+ activeAddress: state.appState.activeAddress,
+ transForward: state.appState.transForward,
+ seedWords: state.metamask.seedWords,
+ unapprovedTxs: state.metamask.unapprovedTxs,
+ unapprovedMsgs: state.metamask.unapprovedMsgs,
+ menuOpen: state.appState.menuOpen,
+ network: state.metamask.network,
+ provider: state.metamask.provider,
+ forgottenPassword: state.appState.forgottenPassword,
+ lastUnreadNotice: state.metamask.lastUnreadNotice,
+ lostAccounts: state.metamask.lostAccounts,
+ frequentRpcList: state.metamask.frequentRpcList || [],
+ }
+}
+
+App.prototype.render = function () {
+ var props = this.props
+ const { isLoading, loadingMessage, transForward, network } = props
+ const isLoadingNetwork = network === 'loading' && props.currentView.name !== 'config'
+ const loadMessage = loadingMessage || isLoadingNetwork ?
+ `Connecting to ${this.getNetworkName()}` : null
+
+ log.debug('Main ui render function')
+
+ return (
+
+ h('.flex-column.flex-grow.full-height', {
+ style: {
+ // Windows was showing a vertical scroll bar:
+ overflow: 'hidden',
+ position: 'relative',
+ },
+ }, [
+
+ // app bar
+ this.renderAppBar(),
+ this.renderNetworkDropdown(),
+ this.renderDropdown(),
+
+ h(Loading, {
+ isLoading: isLoading || isLoadingNetwork,
+ loadingMessage: loadMessage,
+ }),
+
+ // panel content
+ h('.app-primary.flex-grow' + (transForward ? '.from-right' : '.from-left'), {
+ style: {
+ height: '380px',
+ width: '360px',
+ },
+ }, [
+ h(ReactCSSTransitionGroup, {
+ className: 'css-transition-group',
+ transitionName: 'main',
+ transitionEnterTimeout: 300,
+ transitionLeaveTimeout: 300,
+ }, [
+ this.renderPrimary(),
+ ]),
+ ]),
+ ])
+ )
+}
+
+App.prototype.renderAppBar = function () {
+ if (window.METAMASK_UI_TYPE === 'notification') {
+ return null
+ }
+
+ const props = this.props
+ const state = this.state || {}
+ const isNetworkMenuOpen = state.isNetworkMenuOpen || false
+
+ return (
+
+ h('div', [
+
+ h('.app-header.flex-row.flex-space-between', {
+ style: {
+ alignItems: 'center',
+ visibility: props.isUnlocked ? 'visible' : 'none',
+ background: props.isUnlocked ? 'white' : 'none',
+ height: '36px',
+ position: 'relative',
+ zIndex: 12,
+ },
+ }, [
+
+ h('div.left-menu-section', {
+ style: {
+ display: 'flex',
+ flexDirection: 'row',
+ alignItems: 'center',
+ },
+ }, [
+
+ // mini logo
+ h('img', {
+ height: 24,
+ width: 24,
+ src: '/images/icon-128.png',
+ }),
+
+ h(NetworkIndicator, {
+ network: this.props.network,
+ provider: this.props.provider,
+ onClick: (event) => {
+ event.preventDefault()
+ event.stopPropagation()
+ this.setState({ isNetworkMenuOpen: !isNetworkMenuOpen })
+ },
+ }),
+ ]),
+
+ // metamask name
+ props.isUnlocked && h('h1', {
+ style: {
+ position: 'relative',
+ left: '9px',
+ },
+ }, 'MetaMask'),
+
+ props.isUnlocked && h('div', {
+ style: {
+ display: 'flex',
+ flexDirection: 'row',
+ alignItems: 'center',
+ },
+ }, [
+
+ // small accounts nav
+ props.isUnlocked && h(Tooltip, { title: 'Switch Accounts' }, [
+ h('img.cursor-pointer.color-orange', {
+ src: 'images/switch_acc.svg',
+ style: {
+ width: '23.5px',
+ marginRight: '8px',
+ },
+ onClick: (event) => {
+ event.stopPropagation()
+ this.props.dispatch(actions.showAccountsPage())
+ },
+ }),
+ ]),
+
+ // hamburger
+ props.isUnlocked && h(SandwichExpando, {
+ width: 16,
+ barHeight: 2,
+ padding: 0,
+ isOpen: state.isMainMenuOpen,
+ color: 'rgb(247,146,30)',
+ onClick: (event) => {
+ event.preventDefault()
+ event.stopPropagation()
+ this.setState({ isMainMenuOpen: !state.isMainMenuOpen })
+ },
+ }),
+ ]),
+ ]),
+ ])
+ )
+}
+
+App.prototype.renderNetworkDropdown = function () {
+ const props = this.props
+ const rpcList = props.frequentRpcList
+ const state = this.state || {}
+ const isOpen = state.isNetworkMenuOpen
+
+ return h(MenuDroppo, {
+ isOpen,
+ onClickOutside: (event) => {
+ this.setState({ isNetworkMenuOpen: !isOpen })
+ },
+ zIndex: 11,
+ style: {
+ position: 'absolute',
+ left: 0,
+ top: '36px',
+ },
+ innerStyle: {
+ background: 'white',
+ boxShadow: '1px 1px 2px rgba(0,0,0,0.1)',
+ },
+ }, [ // DROP MENU ITEMS
+ h('style', `
+ .drop-menu-item:hover { background:rgb(235, 235, 235); }
+ .drop-menu-item i { margin: 11px; }
+ `),
+
+ h(DropMenuItem, {
+ label: 'Main Ethereum Network',
+ closeMenu: () => this.setState({ isNetworkMenuOpen: false }),
+ action: () => props.dispatch(actions.setProviderType('mainnet')),
+ icon: h('.menu-icon.diamond'),
+ activeNetworkRender: props.network,
+ provider: props.provider,
+ }),
+
+ h(DropMenuItem, {
+ label: 'Ropsten Test Network',
+ closeMenu: () => this.setState({ isNetworkMenuOpen: false }),
+ action: () => props.dispatch(actions.setProviderType('ropsten')),
+ icon: h('.menu-icon.red-dot'),
+ activeNetworkRender: props.network,
+ provider: props.provider,
+ }),
+
+ h(DropMenuItem, {
+ label: 'Kovan Test Network',
+ closeMenu: () => this.setState({ isNetworkMenuOpen: false}),
+ action: () => props.dispatch(actions.setProviderType('kovan')),
+ icon: h('.menu-icon.hollow-diamond'),
+ activeNetworkRender: props.network,
+ provider: props.provider,
+ }),
+
+ h(DropMenuItem, {
+ label: 'Rinkeby Test Network',
+ closeMenu: () => this.setState({ isNetworkMenuOpen: false}),
+ action: () => props.dispatch(actions.setProviderType('rinkeby')),
+ icon: h('.menu-icon.golden-square'),
+ activeNetworkRender: props.network,
+ provider: props.provider,
+ }),
+
+ h(DropMenuItem, {
+ label: 'Localhost 8545',
+ closeMenu: () => this.setState({ isNetworkMenuOpen: false }),
+ action: () => props.dispatch(actions.setDefaultRpcTarget(rpcList)),
+ icon: h('i.fa.fa-question-circle.fa-lg'),
+ activeNetworkRender: props.provider.rpcTarget,
+ }),
+
+ this.renderCustomOption(props.provider),
+ this.renderCommonRpc(rpcList, props.provider),
+
+ h(DropMenuItem, {
+ label: 'Custom RPC',
+ closeMenu: () => this.setState({ isNetworkMenuOpen: false }),
+ action: () => this.props.dispatch(actions.showConfigPage()),
+ icon: h('i.fa.fa-question-circle.fa-lg'),
+ }),
+
+ ])
+}
+
+App.prototype.renderDropdown = function () {
+ const state = this.state || {}
+ const isOpen = state.isMainMenuOpen
+
+ return h(MenuDroppo, {
+ isOpen: isOpen,
+ zIndex: 11,
+ onClickOutside: (event) => {
+ this.setState({ isMainMenuOpen: !isOpen })
+ },
+ style: {
+ position: 'absolute',
+ right: 0,
+ top: '36px',
+ },
+ innerStyle: {
+ background: 'white',
+ boxShadow: '1px 1px 2px rgba(0,0,0,0.1)',
+ },
+ }, [ // DROP MENU ITEMS
+ h('style', `
+ .drop-menu-item:hover { background:rgb(235, 235, 235); }
+ .drop-menu-item i { margin: 11px; }
+ `),
+
+ h(DropMenuItem, {
+ label: 'Settings',
+ closeMenu: () => this.setState({ isMainMenuOpen: !isOpen }),
+ action: () => this.props.dispatch(actions.showConfigPage()),
+ icon: h('i.fa.fa-gear.fa-lg'),
+ }),
+
+ h(DropMenuItem, {
+ label: 'Import Account',
+ closeMenu: () => this.setState({ isMainMenuOpen: !isOpen }),
+ action: () => this.props.dispatch(actions.showImportPage()),
+ icon: h('i.fa.fa-arrow-circle-o-up.fa-lg'),
+ }),
+
+ h(DropMenuItem, {
+ label: 'Lock',
+ closeMenu: () => this.setState({ isMainMenuOpen: !isOpen }),
+ action: () => this.props.dispatch(actions.lockMetamask()),
+ icon: h('i.fa.fa-lock.fa-lg'),
+ }),
+
+ h(DropMenuItem, {
+ label: 'Info/Help',
+ closeMenu: () => this.setState({ isMainMenuOpen: !isOpen }),
+ action: () => this.props.dispatch(actions.showInfoPage()),
+ icon: h('i.fa.fa-question.fa-lg'),
+ }),
+ ])
+}
+
+App.prototype.renderBackButton = function (style, justArrow = false) {
+ var props = this.props
+ return (
+ h('.flex-row', {
+ key: 'leftArrow',
+ style: style,
+ onClick: () => props.dispatch(actions.goBackToInitView()),
+ }, [
+ h('i.fa.fa-arrow-left.cursor-pointer'),
+ justArrow ? null : h('div.cursor-pointer', {
+ style: {
+ marginLeft: '3px',
+ },
+ onClick: () => props.dispatch(actions.goBackToInitView()),
+ }, 'BACK'),
+ ])
+ )
+}
+
+App.prototype.renderPrimary = function () {
+ log.debug('rendering primary')
+ var props = this.props
+
+ // notices
+ if (!props.noActiveNotices) {
+ log.debug('rendering notice screen for unread notices.')
+ return h(NoticeScreen, {
+ notice: props.lastUnreadNotice,
+ key: 'NoticeScreen',
+ onConfirm: () => props.dispatch(actions.markNoticeRead(props.lastUnreadNotice)),
+ })
+ } else if (props.lostAccounts && props.lostAccounts.length > 0) {
+ log.debug('rendering notice screen for lost accounts view.')
+ return h(NoticeScreen, {
+ notice: generateLostAccountsNotice(props.lostAccounts),
+ key: 'LostAccountsNotice',
+ onConfirm: () => props.dispatch(actions.markAccountsFound()),
+ })
+ }
+
+ if (props.seedWords) {
+ log.debug('rendering seed words')
+ return h(HDCreateVaultComplete, {key: 'HDCreateVaultComplete'})
+ }
+
+ // show initialize screen
+ if (!props.isInitialized || props.forgottenPassword) {
+ // show current view
+ log.debug('rendering an initialize screen')
+ switch (props.currentView.name) {
+
+ case 'restoreVault':
+ log.debug('rendering restore vault screen')
+ return h(HDRestoreVaultScreen, {key: 'HDRestoreVaultScreen'})
+
+ default:
+ log.debug('rendering menu screen')
+ return h(InitializeMenuScreen, {key: 'menuScreenInit'})
+ }
+ }
+
+ // show unlock screen
+ if (!props.isUnlocked) {
+ switch (props.currentView.name) {
+
+ case 'restoreVault':
+ log.debug('rendering restore vault screen')
+ return h(HDRestoreVaultScreen, {key: 'HDRestoreVaultScreen'})
+
+ case 'config':
+ log.debug('rendering config screen from unlock screen.')
+ return h(ConfigScreen, {key: 'config'})
+
+ default:
+ log.debug('rendering locked screen')
+ return h(UnlockScreen, {key: 'locked'})
+ }
+ }
+
+ // show current view
+ switch (props.currentView.name) {
+
+ case 'accounts':
+ log.debug('rendering accounts screen')
+ return h(AccountsScreen, {key: 'accounts'})
+
+ case 'accountDetail':
+ log.debug('rendering account detail screen')
+ return h(AccountDetailScreen, {key: 'account-detail'})
+
+ case 'sendTransaction':
+ log.debug('rendering send tx screen')
+ return h(SendTransactionScreen, {key: 'send-transaction'})
+
+ case 'newKeychain':
+ log.debug('rendering new keychain screen')
+ return h(NewKeyChainScreen, {key: 'new-keychain'})
+
+ case 'confTx':
+ log.debug('rendering confirm tx screen')
+ return h(ConfirmTxScreen, {key: 'confirm-tx'})
+
+ case 'add-token':
+ log.debug('rendering add-token screen from unlock screen.')
+ return h(AddTokenScreen, {key: 'add-token'})
+
+ case 'config':
+ log.debug('rendering config screen')
+ return h(ConfigScreen, {key: 'config'})
+
+ case 'import-menu':
+ log.debug('rendering import screen')
+ return h(Import, {key: 'import-menu'})
+
+ case 'reveal-seed-conf':
+ log.debug('rendering reveal seed confirmation screen')
+ return h(RevealSeedConfirmation, {key: 'reveal-seed-conf'})
+
+ case 'info':
+ log.debug('rendering info screen')
+ return h(InfoScreen, {key: 'info'})
+
+ case 'buyEth':
+ log.debug('rendering buy ether screen')
+ return h(BuyView, {key: 'buyEthView'})
+
+ case 'qr':
+ log.debug('rendering show qr screen')
+ return h('div', {
+ style: {
+ position: 'absolute',
+ height: '100%',
+ top: '0px',
+ left: '0px',
+ },
+ }, [
+ h('i.fa.fa-arrow-left.fa-lg.cursor-pointer.color-orange', {
+ onClick: () => props.dispatch(actions.backToAccountDetail(props.activeAddress)),
+ style: {
+ marginLeft: '10px',
+ marginTop: '50px',
+ },
+ }),
+ h('div', {
+ style: {
+ position: 'absolute',
+ left: '44px',
+ width: '285px',
+ },
+ }, [
+ h(QrView, {key: 'qr'}),
+ ]),
+ ])
+
+ default:
+ log.debug('rendering default, account detail screen')
+ return h(AccountDetailScreen, {key: 'account-detail'})
+ }
+}
+
+App.prototype.toggleMetamaskActive = function () {
+ if (!this.props.isUnlocked) {
+ // currently inactive: redirect to password box
+ var passwordBox = document.querySelector('input[type=password]')
+ if (!passwordBox) return
+ passwordBox.focus()
+ } else {
+ // currently active: deactivate
+ this.props.dispatch(actions.lockMetamask(false))
+ }
+}
+
+App.prototype.renderCustomOption = function (provider) {
+ const { rpcTarget, type } = provider
+ if (type !== 'rpc') return null
+
+ // Concatenate long URLs
+ let label = rpcTarget
+ if (rpcTarget.length > 31) {
+ label = label.substr(0, 34) + '...'
+ }
+
+ switch (rpcTarget) {
+
+ case 'http://localhost:8545':
+ return null
+
+ default:
+ return h(DropMenuItem, {
+ label,
+ key: rpcTarget,
+ closeMenu: () => this.setState({ isNetworkMenuOpen: false }),
+ icon: h('i.fa.fa-question-circle.fa-lg'),
+ activeNetworkRender: 'custom',
+ })
+ }
+}
+
+App.prototype.getNetworkName = function () {
+ const { provider } = this.props
+ const providerName = provider.type
+
+ let name
+
+ if (providerName === 'mainnet') {
+ name = 'Main Ethereum Network'
+ } else if (providerName === 'ropsten') {
+ name = 'Ropsten Test Network'
+ } else if (providerName === 'kovan') {
+ name = 'Kovan Test Network'
+ } else if (providerName === 'rinkeby') {
+ name = 'Rinkeby Test Network'
+ } else {
+ name = 'Unknown Private Network'
+ }
+
+ return name
+}
+
+App.prototype.renderCommonRpc = function (rpcList, provider) {
+ const { rpcTarget } = provider
+ const props = this.props
+
+ return rpcList.map((rpc) => {
+ if ((rpc === 'http://localhost:8545') || (rpc === rpcTarget)) {
+ return null
+ } else {
+ return h(DropMenuItem, {
+ label: rpc,
+ key: rpc,
+ closeMenu: () => this.setState({ isNetworkMenuOpen: false }),
+ action: () => props.dispatch(actions.setRpcTarget(rpc)),
+ icon: h('i.fa.fa-question-circle.fa-lg'),
+ activeNetworkRender: rpc,
+ })
+ }
+ })
+}
diff --git a/ui/responsive/app/components/account-export.js b/ui/responsive/app/components/account-export.js
new file mode 100644
index 000000000..394d878f7
--- /dev/null
+++ b/ui/responsive/app/components/account-export.js
@@ -0,0 +1,122 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const copyToClipboard = require('copy-to-clipboard')
+const actions = require('../actions')
+const ethUtil = require('ethereumjs-util')
+const connect = require('react-redux').connect
+
+module.exports = connect(mapStateToProps)(ExportAccountView)
+
+inherits(ExportAccountView, Component)
+function ExportAccountView () {
+ Component.call(this)
+}
+
+function mapStateToProps (state) {
+ return {
+ warning: state.appState.warning,
+ }
+}
+
+ExportAccountView.prototype.render = function () {
+ var state = this.props
+ var accountDetail = state.accountDetail
+
+ if (!accountDetail) return h('div')
+ var accountExport = accountDetail.accountExport
+
+ var notExporting = accountExport === 'none'
+ var exportRequested = accountExport === 'requested'
+ var accountExported = accountExport === 'completed'
+
+ if (notExporting) return h('div')
+
+ if (exportRequested) {
+ var warning = `Export private keys at your own risk.`
+ return (
+ h('div', {
+ style: {
+ display: 'inline-block',
+ textAlign: 'center',
+ },
+ },
+ [
+ h('div', {
+ key: 'exporting',
+ style: {
+ margin: '0 20px',
+ },
+ }, [
+ h('p.error', warning),
+ h('input#exportAccount.sizing-input', {
+ type: 'password',
+ placeholder: 'confirm password',
+ onKeyPress: this.onExportKeyPress.bind(this),
+ style: {
+ position: 'relative',
+ top: '1.5px',
+ marginBottom: '7px',
+ },
+ }),
+ ]),
+ h('div', {
+ key: 'buttons',
+ style: {
+ margin: '0 20px',
+ },
+ },
+ [
+ h('button', {
+ onClick: () => this.onExportKeyPress({ key: 'Enter', preventDefault: () => {} }),
+ style: {
+ marginRight: '10px',
+ },
+ }, 'Submit'),
+ h('button', {
+ onClick: () => this.props.dispatch(actions.backToAccountDetail(this.props.address)),
+ }, 'Cancel'),
+ ]),
+ (this.props.warning) && (
+ h('span.error', {
+ style: {
+ margin: '20px',
+ },
+ }, this.props.warning.split('-'))
+ ),
+ ])
+ )
+ }
+
+ if (accountExported) {
+ return h('div.privateKey', {
+ style: {
+ margin: '0 20px',
+ },
+ }, [
+ h('label', 'Your private key (click to copy):'),
+ h('p.error.cursor-pointer', {
+ style: {
+ textOverflow: 'ellipsis',
+ overflow: 'hidden',
+ webkitUserSelect: 'text',
+ width: '100%',
+ },
+ onClick: function (event) {
+ copyToClipboard(ethUtil.stripHexPrefix(accountDetail.privateKey))
+ },
+ }, ethUtil.stripHexPrefix(accountDetail.privateKey)),
+ h('button', {
+ onClick: () => this.props.dispatch(actions.backToAccountDetail(this.props.address)),
+ }, 'Done'),
+ ])
+ }
+}
+
+ExportAccountView.prototype.onExportKeyPress = function (event) {
+ if (event.key !== 'Enter') return
+ event.preventDefault()
+
+ var input = document.getElementById('exportAccount').value
+ this.props.dispatch(actions.exportAccount(input, this.props.address))
+}
diff --git a/ui/responsive/app/components/account-info-link.js b/ui/responsive/app/components/account-info-link.js
new file mode 100644
index 000000000..6526ab502
--- /dev/null
+++ b/ui/responsive/app/components/account-info-link.js
@@ -0,0 +1,41 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const Tooltip = require('./tooltip')
+const genAccountLink = require('../../lib/account-link')
+
+module.exports = AccountInfoLink
+
+inherits(AccountInfoLink, Component)
+function AccountInfoLink () {
+ Component.call(this)
+}
+
+AccountInfoLink.prototype.render = function () {
+ const { selected, network } = this.props
+ const title = 'View account on Etherscan'
+ const url = genAccountLink(selected, network)
+
+ if (!url) {
+ return null
+ }
+
+ return h('.account-info-link', {
+ style: {
+ display: 'flex',
+ alignItems: 'center',
+ },
+ }, [
+
+ h(Tooltip, {
+ title,
+ }, [
+ h('i.fa.fa-info-circle.cursor-pointer.color-orange', {
+ style: {
+ margin: '5px',
+ },
+ onClick () { global.platform.openWindow({ url }) },
+ }),
+ ]),
+ ])
+}
diff --git a/ui/responsive/app/components/account-panel.js b/ui/responsive/app/components/account-panel.js
new file mode 100644
index 000000000..abaaf8163
--- /dev/null
+++ b/ui/responsive/app/components/account-panel.js
@@ -0,0 +1,86 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const Identicon = require('./identicon')
+const formatBalance = require('../util').formatBalance
+const addressSummary = require('../util').addressSummary
+
+module.exports = AccountPanel
+
+
+inherits(AccountPanel, Component)
+function AccountPanel () {
+ Component.call(this)
+}
+
+AccountPanel.prototype.render = function () {
+ var state = this.props
+ var identity = state.identity || {}
+ var account = state.account || {}
+ var isFauceting = state.isFauceting
+
+ var panelState = {
+ key: `accountPanel${identity.address}`,
+ identiconKey: identity.address,
+ identiconLabel: identity.name || '',
+ attributes: [
+ {
+ key: 'ADDRESS',
+ value: addressSummary(identity.address),
+ },
+ balanceOrFaucetingIndication(account, isFauceting),
+ ],
+ }
+
+ return (
+
+ h('.identity-panel.flex-row.flex-space-between', {
+ style: {
+ flex: '1 0 auto',
+ cursor: panelState.onClick ? 'pointer' : undefined,
+ },
+ onClick: panelState.onClick,
+ }, [
+
+ // account identicon
+ h('.identicon-wrapper.flex-column.select-none', [
+ h(Identicon, {
+ address: panelState.identiconKey,
+ imageify: state.imageifyIdenticons,
+ }),
+ h('span.font-small', panelState.identiconLabel.substring(0, 7) + '...'),
+ ]),
+
+ // account address, balance
+ h('.identity-data.flex-column.flex-justify-center.flex-grow.select-none', [
+
+ panelState.attributes.map((attr) => {
+ return h('.flex-row.flex-space-between', {
+ key: '' + Math.round(Math.random() * 1000000),
+ }, [
+ h('label.font-small.no-select', attr.key),
+ h('span.font-small', attr.value),
+ ])
+ }),
+ ]),
+
+ ])
+
+ )
+}
+
+function balanceOrFaucetingIndication (account, isFauceting) {
+ // Temporarily deactivating isFauceting indication
+ // because it shows fauceting for empty restored accounts.
+ if (/* isFauceting*/ false) {
+ return {
+ key: 'Account is auto-funding.',
+ value: 'Please wait.',
+ }
+ } else {
+ return {
+ key: 'BALANCE',
+ value: formatBalance(account.balance),
+ }
+ }
+}
diff --git a/ui/responsive/app/components/balance.js b/ui/responsive/app/components/balance.js
new file mode 100644
index 000000000..57ca84564
--- /dev/null
+++ b/ui/responsive/app/components/balance.js
@@ -0,0 +1,89 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const formatBalance = require('../util').formatBalance
+const generateBalanceObject = require('../util').generateBalanceObject
+const Tooltip = require('./tooltip.js')
+const FiatValue = require('./fiat-value.js')
+
+module.exports = EthBalanceComponent
+
+inherits(EthBalanceComponent, Component)
+function EthBalanceComponent () {
+ Component.call(this)
+}
+
+EthBalanceComponent.prototype.render = function () {
+ var props = this.props
+ let { value } = props
+ var style = props.style
+ var needsParse = this.props.needsParse !== undefined ? this.props.needsParse : true
+ value = value ? formatBalance(value, 6, needsParse) : '...'
+ var width = props.width
+
+ return (
+
+ h('.ether-balance.ether-balance-amount', {
+ style: style,
+ }, [
+ h('div', {
+ style: {
+ display: 'inline',
+ width: width,
+ },
+ }, this.renderBalance(value)),
+ ])
+
+ )
+}
+EthBalanceComponent.prototype.renderBalance = function (value) {
+ var props = this.props
+ if (value === 'None') return value
+ if (value === '...') return value
+ var balanceObj = generateBalanceObject(value, props.shorten ? 1 : 3)
+ var balance
+ var splitBalance = value.split(' ')
+ var ethNumber = splitBalance[0]
+ var ethSuffix = splitBalance[1]
+ const showFiat = 'showFiat' in props ? props.showFiat : true
+
+ if (props.shorten) {
+ balance = balanceObj.shortBalance
+ } else {
+ balance = balanceObj.balance
+ }
+
+ var label = balanceObj.label
+
+ return (
+ h(Tooltip, {
+ position: 'bottom',
+ title: `${ethNumber} ${ethSuffix}`,
+ }, h('div.flex-column', [
+ h('.flex-row', {
+ style: {
+ alignItems: 'flex-end',
+ lineHeight: '13px',
+ fontFamily: 'Montserrat Light',
+ textRendering: 'geometricPrecision',
+ },
+ }, [
+ h('div', {
+ style: {
+ width: '100%',
+ textAlign: 'right',
+ },
+ }, this.props.incoming ? `+${balance}` : balance),
+ h('div', {
+ style: {
+ color: ' #AEAEAE',
+ fontSize: '12px',
+ marginLeft: '5px',
+ },
+ }, label),
+ ]),
+
+ showFiat ? h(FiatValue, { value: props.value }) : null,
+ ]))
+ )
+}
diff --git a/ui/responsive/app/components/binary-renderer.js b/ui/responsive/app/components/binary-renderer.js
new file mode 100644
index 000000000..0b6a1f5c2
--- /dev/null
+++ b/ui/responsive/app/components/binary-renderer.js
@@ -0,0 +1,46 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const ethUtil = require('ethereumjs-util')
+const extend = require('xtend')
+
+module.exports = BinaryRenderer
+
+inherits(BinaryRenderer, Component)
+function BinaryRenderer () {
+ Component.call(this)
+}
+
+BinaryRenderer.prototype.render = function () {
+ const props = this.props
+ const { value, style } = props
+ const text = this.hexToText(value)
+
+ const defaultStyle = extend({
+ width: '315px',
+ maxHeight: '210px',
+ resize: 'none',
+ border: 'none',
+ background: 'white',
+ padding: '3px',
+ }, style)
+
+ return (
+ h('textarea.font-small', {
+ readOnly: true,
+ style: defaultStyle,
+ defaultValue: text,
+ })
+ )
+}
+
+BinaryRenderer.prototype.hexToText = function (hex) {
+ try {
+ const stripped = ethUtil.stripHexPrefix(hex)
+ const buff = Buffer.from(stripped, 'hex')
+ return buff.toString('utf8')
+ } catch (e) {
+ return hex
+ }
+}
+
diff --git a/ui/responsive/app/components/bn-as-decimal-input.js b/ui/responsive/app/components/bn-as-decimal-input.js
new file mode 100644
index 000000000..f3ace4720
--- /dev/null
+++ b/ui/responsive/app/components/bn-as-decimal-input.js
@@ -0,0 +1,174 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const ethUtil = require('ethereumjs-util')
+const BN = ethUtil.BN
+const extend = require('xtend')
+
+module.exports = BnAsDecimalInput
+
+inherits(BnAsDecimalInput, Component)
+function BnAsDecimalInput () {
+ this.state = { invalid: null }
+ Component.call(this)
+}
+
+/* Bn as Decimal Input
+ *
+ * A component for allowing easy, decimal editing
+ * of a passed in bn string value.
+ *
+ * On change, calls back its `onChange` function parameter
+ * and passes it an updated bn string.
+ */
+
+BnAsDecimalInput.prototype.render = function () {
+ const props = this.props
+ const state = this.state
+
+ const { value, scale, precision, onChange, min, max } = props
+
+ const suffix = props.suffix
+ const style = props.style
+ const valueString = value.toString(10)
+ const newValue = this.downsize(valueString, scale, precision)
+
+ return (
+ h('.flex-column', [
+ h('.flex-row', {
+ style: {
+ alignItems: 'flex-end',
+ lineHeight: '13px',
+ fontFamily: 'Montserrat Light',
+ textRendering: 'geometricPrecision',
+ },
+ }, [
+ h('input.hex-input', {
+ type: 'number',
+ step: 'any',
+ required: true,
+ min,
+ max,
+ style: extend({
+ display: 'block',
+ textAlign: 'right',
+ backgroundColor: 'transparent',
+ border: '1px solid #bdbdbd',
+
+ }, style),
+ value: newValue,
+ onBlur: (event) => {
+ this.updateValidity(event)
+ },
+ onChange: (event) => {
+ this.updateValidity(event)
+ const value = (event.target.value === '') ? '' : event.target.value
+
+
+ const scaledNumber = this.upsize(value, scale, precision)
+ const precisionBN = new BN(scaledNumber, 10)
+ onChange(precisionBN, event.target.checkValidity())
+ },
+ onInvalid: (event) => {
+ const msg = this.constructWarning()
+ if (msg === state.invalid) {
+ return
+ }
+ this.setState({ invalid: msg })
+ event.preventDefault()
+ return false
+ },
+ }),
+ h('div', {
+ style: {
+ color: ' #AEAEAE',
+ fontSize: '12px',
+ marginLeft: '5px',
+ marginRight: '6px',
+ width: '20px',
+ },
+ }, suffix),
+ ]),
+
+ state.invalid ? h('span.error', {
+ style: {
+ position: 'absolute',
+ right: '0px',
+ textAlign: 'right',
+ transform: 'translateY(26px)',
+ padding: '3px',
+ background: 'rgba(255,255,255,0.85)',
+ zIndex: '1',
+ textTransform: 'capitalize',
+ border: '2px solid #E20202',
+ },
+ }, state.invalid) : null,
+ ])
+ )
+}
+
+BnAsDecimalInput.prototype.setValid = function (message) {
+ this.setState({ invalid: null })
+}
+
+BnAsDecimalInput.prototype.updateValidity = function (event) {
+ const target = event.target
+ const value = this.props.value
+ const newValue = target.value
+
+ if (value === newValue) {
+ return
+ }
+
+ const valid = target.checkValidity()
+
+ if (valid) {
+ this.setState({ invalid: null })
+ }
+}
+
+BnAsDecimalInput.prototype.constructWarning = function () {
+ const { name, min, max } = this.props
+ let message = name ? name + ' ' : ''
+
+ if (min && max) {
+ message += `must be greater than or equal to ${min} and less than or equal to ${max}.`
+ } else if (min) {
+ message += `must be greater than or equal to ${min}.`
+ } else if (max) {
+ message += `must be less than or equal to ${max}.`
+ } else {
+ message += 'Invalid input.'
+ }
+
+ return message
+}
+
+
+BnAsDecimalInput.prototype.downsize = function (number, scale, precision) {
+ // if there is no scaling, simply return the number
+ if (scale === 0) {
+ return Number(number)
+ } else {
+ // if the scale is the same as the precision, account for this edge case.
+ var decimals = (scale === precision) ? -1 : scale - precision
+ return Number(number.slice(0, -scale) + '.' + number.slice(-scale, decimals))
+ }
+}
+
+BnAsDecimalInput.prototype.upsize = function (number, scale, precision) {
+ var stringArray = number.toString().split('.')
+ var decimalLength = stringArray[1] ? stringArray[1].length : 0
+ var newString = stringArray[0]
+
+ // If there is scaling and decimal parts exist, integrate them in.
+ if ((scale !== 0) && (decimalLength !== 0)) {
+ newString += stringArray[1].slice(0, precision)
+ }
+
+ // Add 0s to account for the upscaling.
+ for (var i = decimalLength; i < scale; i++) {
+ newString += '0'
+ }
+ return newString
+}
diff --git a/ui/responsive/app/components/buy-button-subview.js b/ui/responsive/app/components/buy-button-subview.js
new file mode 100644
index 000000000..87084f92d
--- /dev/null
+++ b/ui/responsive/app/components/buy-button-subview.js
@@ -0,0 +1,197 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const connect = require('react-redux').connect
+const actions = require('../actions')
+const CoinbaseForm = require('./coinbase-form')
+const ShapeshiftForm = require('./shapeshift-form')
+const Loading = require('./loading')
+const AccountPanel = require('./account-panel')
+const RadioList = require('./custom-radio-list')
+
+module.exports = connect(mapStateToProps)(BuyButtonSubview)
+
+function mapStateToProps (state) {
+ return {
+ identity: state.appState.identity,
+ account: state.metamask.accounts[state.appState.buyView.buyAddress],
+ warning: state.appState.warning,
+ buyView: state.appState.buyView,
+ network: state.metamask.network,
+ provider: state.metamask.provider,
+ context: state.appState.currentView.context,
+ isSubLoading: state.appState.isSubLoading,
+ }
+}
+
+inherits(BuyButtonSubview, Component)
+function BuyButtonSubview () {
+ Component.call(this)
+}
+
+BuyButtonSubview.prototype.render = function () {
+ const props = this.props
+ const isLoading = props.isSubLoading
+
+ return (
+ h('.buy-eth-section.flex-column', {
+ style: {
+ alignItems: 'center',
+ },
+ }, [
+ // back button
+ h('.flex-row', {
+ style: {
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ }, [
+ h('i.fa.fa-arrow-left.fa-lg.cursor-pointer.color-orange', {
+ onClick: this.backButtonContext.bind(this),
+ style: {
+ position: 'absolute',
+ left: '10px',
+ },
+ }),
+ h('h2.text-transform-uppercase.flex-center', {
+ style: {
+ width: '100vw',
+ background: 'rgb(235, 235, 235)',
+ color: 'rgb(174, 174, 174)',
+ paddingTop: '4px',
+ paddingBottom: '4px',
+ },
+ }, 'Buy Eth'),
+ ]),
+ h('div', {
+ style: {
+ position: 'absolute',
+ top: '57vh',
+ left: '49vw',
+ },
+ }, [
+ h(Loading, {isLoading}),
+ ]),
+ h('div', {
+ style: {
+ width: '80%',
+ },
+ }, [
+ h(AccountPanel, {
+ showFullAddress: true,
+ identity: props.identity,
+ account: props.account,
+ }),
+ ]),
+ h('h3.text-transform-uppercase', {
+ style: {
+ paddingLeft: '15px',
+ fontFamily: 'Montserrat Light',
+ width: '100vw',
+ background: 'rgb(235, 235, 235)',
+ color: 'rgb(174, 174, 174)',
+ paddingTop: '4px',
+ paddingBottom: '4px',
+ },
+ }, 'Select Service'),
+ h('.flex-row.selected-exchange', {
+ style: {
+ position: 'relative',
+ right: '35px',
+ marginTop: '20px',
+ marginBottom: '20px',
+ },
+ }, [
+ h(RadioList, {
+ defaultFocus: props.buyView.subview,
+ labels: [
+ 'Coinbase',
+ 'ShapeShift',
+ ],
+ subtext: {
+ 'Coinbase': 'Crypto/FIAT (USA only)',
+ 'ShapeShift': 'Crypto',
+ },
+ onClick: this.radioHandler.bind(this),
+ }),
+ ]),
+ h('h3.text-transform-uppercase', {
+ style: {
+ paddingLeft: '15px',
+ fontFamily: 'Montserrat Light',
+ width: '100vw',
+ background: 'rgb(235, 235, 235)',
+ color: 'rgb(174, 174, 174)',
+ paddingTop: '4px',
+ paddingBottom: '4px',
+ },
+ }, props.buyView.subview),
+ this.formVersionSubview(),
+ ])
+ )
+}
+
+BuyButtonSubview.prototype.formVersionSubview = function () {
+ const network = this.props.network
+ if (network === '1') {
+ if (this.props.buyView.formView.coinbase) {
+ return h(CoinbaseForm, this.props)
+ } else if (this.props.buyView.formView.shapeshift) {
+ return h(ShapeshiftForm, this.props)
+ }
+ } else {
+ return h('div.flex-column', {
+ style: {
+ alignItems: 'center',
+ margin: '50px',
+ },
+ }, [
+ h('h3.text-transform-uppercase', {
+ style: {
+ width: '225px',
+ marginBottom: '15px',
+ },
+ }, 'In order to access this feature, please switch to the Main Network'),
+ ((network === '3') || (network === '4') || (network === '42')) ? h('h3.text-transform-uppercase', 'or go to the') : null,
+ (network === '3') ? h('button.text-transform-uppercase', {
+ onClick: () => this.props.dispatch(actions.buyEth({ network })),
+ style: {
+ marginTop: '15px',
+ },
+ }, 'Ropsten Test Faucet') : null,
+ (network === '4') ? h('button.text-transform-uppercase', {
+ onClick: () => this.props.dispatch(actions.buyEth({ network })),
+ style: {
+ marginTop: '15px',
+ },
+ }, 'Rinkeby Test Faucet') : null,
+ (network === '42') ? h('button.text-transform-uppercase', {
+ onClick: () => this.props.dispatch(actions.buyEth({ network })),
+ style: {
+ marginTop: '15px',
+ },
+ }, 'Kovan Test Faucet') : null,
+ ])
+ }
+}
+
+BuyButtonSubview.prototype.navigateTo = function (url) {
+ global.platform.openWindow({ url })
+}
+
+BuyButtonSubview.prototype.backButtonContext = function () {
+ if (this.props.context === 'confTx') {
+ this.props.dispatch(actions.showConfTxPage(false))
+ } else {
+ this.props.dispatch(actions.goHome())
+ }
+}
+
+BuyButtonSubview.prototype.radioHandler = function (event) {
+ switch (event.target.title) {
+ case 'Coinbase':
+ return this.props.dispatch(actions.coinBaseSubview())
+ case 'ShapeShift':
+ return this.props.dispatch(actions.shapeShiftSubview(this.props.provider.type))
+ }
+}
diff --git a/ui/responsive/app/components/coinbase-form.js b/ui/responsive/app/components/coinbase-form.js
new file mode 100644
index 000000000..f44d86045
--- /dev/null
+++ b/ui/responsive/app/components/coinbase-form.js
@@ -0,0 +1,63 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const connect = require('react-redux').connect
+const actions = require('../actions')
+
+module.exports = connect(mapStateToProps)(CoinbaseForm)
+
+function mapStateToProps (state) {
+ return {
+ warning: state.appState.warning,
+ }
+}
+
+inherits(CoinbaseForm, Component)
+
+function CoinbaseForm () {
+ Component.call(this)
+}
+
+CoinbaseForm.prototype.render = function () {
+ var props = this.props
+
+ return h('.flex-column', {
+ style: {
+ marginTop: '35px',
+ padding: '25px',
+ width: '100%',
+ },
+ }, [
+ h('.flex-row', {
+ style: {
+ justifyContent: 'space-around',
+ margin: '33px',
+ marginTop: '0px',
+ },
+ }, [
+ h('button.btn-green', {
+ onClick: this.toCoinbase.bind(this),
+ }, 'Continue to Coinbase'),
+
+ h('button.btn-red', {
+ onClick: () => props.dispatch(actions.backTobuyView(props.accounts.address)),
+ }, 'Cancel'),
+ ]),
+ ])
+}
+
+CoinbaseForm.prototype.toCoinbase = function () {
+ const props = this.props
+ const address = props.buyView.buyAddress
+ props.dispatch(actions.buyEth({ network: '1', address, amount: 0 }))
+}
+
+CoinbaseForm.prototype.renderLoading = function () {
+ return h('img', {
+ style: {
+ width: '27px',
+ marginRight: '-27px',
+ },
+ src: 'images/loading.svg',
+ })
+}
diff --git a/ui/responsive/app/components/copyButton.js b/ui/responsive/app/components/copyButton.js
new file mode 100644
index 000000000..a25d0719c
--- /dev/null
+++ b/ui/responsive/app/components/copyButton.js
@@ -0,0 +1,59 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const copyToClipboard = require('copy-to-clipboard')
+
+const Tooltip = require('./tooltip')
+
+module.exports = CopyButton
+
+inherits(CopyButton, Component)
+function CopyButton () {
+ Component.call(this)
+}
+
+// As parameters, accepts:
+// "value", which is the value to copy (mandatory)
+// "title", which is the text to show on hover (optional, defaults to 'Copy')
+CopyButton.prototype.render = function () {
+ const props = this.props
+ const state = this.state || {}
+
+ const value = props.value
+ const copied = state.copied
+
+ const message = copied ? 'Copied' : props.title || ' Copy '
+
+ return h('.copy-button', {
+ style: {
+ display: 'flex',
+ alignItems: 'center',
+ },
+ }, [
+
+ h(Tooltip, {
+ title: message,
+ }, [
+ h('i.fa.fa-clipboard.cursor-pointer.color-orange', {
+ style: {
+ margin: '5px',
+ },
+ onClick: (event) => {
+ event.preventDefault()
+ event.stopPropagation()
+ copyToClipboard(value)
+ this.debounceRestore()
+ },
+ }),
+ ]),
+
+ ])
+}
+
+CopyButton.prototype.debounceRestore = function () {
+ this.setState({ copied: true })
+ clearTimeout(this.timeout)
+ this.timeout = setTimeout(() => {
+ this.setState({ copied: false })
+ }, 850)
+}
diff --git a/ui/responsive/app/components/copyable.js b/ui/responsive/app/components/copyable.js
new file mode 100644
index 000000000..a4f6f4bc6
--- /dev/null
+++ b/ui/responsive/app/components/copyable.js
@@ -0,0 +1,46 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+
+const Tooltip = require('./tooltip')
+const copyToClipboard = require('copy-to-clipboard')
+
+module.exports = Copyable
+
+inherits(Copyable, Component)
+function Copyable () {
+ Component.call(this)
+ this.state = {
+ copied: false,
+ }
+}
+
+Copyable.prototype.render = function () {
+ const props = this.props
+ const state = this.state
+ const { value, children } = props
+ const { copied } = state
+
+ return h(Tooltip, {
+ title: copied ? 'Copied!' : 'Copy',
+ position: 'bottom',
+ }, h('span', {
+ style: {
+ cursor: 'pointer',
+ },
+ onClick: (event) => {
+ event.preventDefault()
+ event.stopPropagation()
+ copyToClipboard(value)
+ this.debounceRestore()
+ },
+ }, children))
+}
+
+Copyable.prototype.debounceRestore = function () {
+ this.setState({ copied: true })
+ clearTimeout(this.timeout)
+ this.timeout = setTimeout(() => {
+ this.setState({ copied: false })
+ }, 850)
+}
diff --git a/ui/responsive/app/components/custom-radio-list.js b/ui/responsive/app/components/custom-radio-list.js
new file mode 100644
index 000000000..a4c525396
--- /dev/null
+++ b/ui/responsive/app/components/custom-radio-list.js
@@ -0,0 +1,60 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+
+module.exports = RadioList
+
+inherits(RadioList, Component)
+function RadioList () {
+ Component.call(this)
+}
+
+RadioList.prototype.render = function () {
+ const props = this.props
+ const activeClass = '.custom-radio-selected'
+ const inactiveClass = '.custom-radio-inactive'
+ const {
+ labels,
+ defaultFocus,
+ } = props
+
+
+ return (
+ h('.flex-row', {
+ style: {
+ fontSize: '12px',
+ },
+ }, [
+ h('.flex-column.custom-radios', {
+ style: {
+ marginRight: '5px',
+ },
+ },
+ labels.map((lable, i) => {
+ let isSelcted = (this.state !== null)
+ isSelcted = isSelcted ? (this.state.selected === lable) : (defaultFocus === lable)
+ return h(isSelcted ? activeClass : inactiveClass, {
+ title: lable,
+ onClick: (event) => {
+ this.setState({selected: event.target.title})
+ props.onClick(event)
+ },
+ })
+ })
+ ),
+ h('.text', {},
+ labels.map((lable) => {
+ if (props.subtext) {
+ return h('.flex-row', {}, [
+ h('.radio-titles', lable),
+ h('.radio-titles-subtext', `- ${props.subtext[lable]}`),
+ ])
+ } else {
+ return h('.radio-titles', lable)
+ }
+ })
+ ),
+ ])
+ )
+}
+
diff --git a/ui/responsive/app/components/drop-menu-item.js b/ui/responsive/app/components/drop-menu-item.js
new file mode 100644
index 000000000..e42948209
--- /dev/null
+++ b/ui/responsive/app/components/drop-menu-item.js
@@ -0,0 +1,59 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+
+module.exports = DropMenuItem
+
+inherits(DropMenuItem, Component)
+function DropMenuItem () {
+ Component.call(this)
+}
+
+DropMenuItem.prototype.render = function () {
+ return h('li.drop-menu-item', {
+ onClick: () => {
+ this.props.closeMenu()
+ this.props.action()
+ },
+ style: {
+ listStyle: 'none',
+ padding: '6px 16px 6px 5px',
+ fontFamily: 'Montserrat Regular',
+ color: 'rgb(125, 128, 130)',
+ cursor: 'pointer',
+ display: 'flex',
+ justifyContent: 'flex-start',
+ },
+ }, [
+ this.props.icon,
+ this.props.label,
+ this.activeNetworkRender(),
+ ])
+}
+
+DropMenuItem.prototype.activeNetworkRender = function () {
+ const activeNetwork = this.props.activeNetworkRender
+ const { provider } = this.props
+ const providerType = provider ? provider.type : null
+ if (activeNetwork === undefined) return
+
+ switch (this.props.label) {
+ case 'Main Ethereum Network':
+ if (providerType === 'mainnet') return h('.check', '✓')
+ break
+ case 'Ropsten Test Network':
+ if (providerType === 'ropsten') return h('.check', '✓')
+ break
+ case 'Kovan Test Network':
+ if (providerType === 'kovan') return h('.check', '✓')
+ break
+ case 'Rinkeby Test Network':
+ if (providerType === 'rinkeby') return h('.check', '✓')
+ break
+ case 'Localhost 8545':
+ if (activeNetwork === 'http://localhost:8545') return h('.check', '✓')
+ break
+ default:
+ if (activeNetwork === 'custom') return h('.check', '✓')
+ }
+}
diff --git a/ui/responsive/app/components/editable-label.js b/ui/responsive/app/components/editable-label.js
new file mode 100644
index 000000000..41936f5e0
--- /dev/null
+++ b/ui/responsive/app/components/editable-label.js
@@ -0,0 +1,51 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const findDOMNode = require('react-dom').findDOMNode
+
+module.exports = EditableLabel
+
+inherits(EditableLabel, Component)
+function EditableLabel () {
+ Component.call(this)
+}
+
+EditableLabel.prototype.render = function () {
+ const props = this.props
+ const state = this.state
+
+ if (state && state.isEditingLabel) {
+ return h('div.editable-label', [
+ h('input.sizing-input', {
+ defaultValue: props.textValue,
+ maxLength: '20',
+ onKeyPress: (event) => {
+ this.saveIfEnter(event)
+ },
+ }),
+ h('button.editable-button', {
+ onClick: () => this.saveText(),
+ }, 'Save'),
+ ])
+ } else {
+ return h('div.name-label', {
+ onClick: (event) => {
+ this.setState({ isEditingLabel: true })
+ },
+ }, this.props.children)
+ }
+}
+
+EditableLabel.prototype.saveIfEnter = function (event) {
+ if (event.key === 'Enter') {
+ this.saveText()
+ }
+}
+
+EditableLabel.prototype.saveText = function () {
+ var container = findDOMNode(this)
+ var text = container.querySelector('.editable-label input').value
+ var truncatedText = text.substring(0, 20)
+ this.props.saveText(truncatedText)
+ this.setState({ isEditingLabel: false, textLabel: truncatedText })
+}
diff --git a/ui/responsive/app/components/ens-input.js b/ui/responsive/app/components/ens-input.js
new file mode 100644
index 000000000..3a33ebf74
--- /dev/null
+++ b/ui/responsive/app/components/ens-input.js
@@ -0,0 +1,170 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const extend = require('xtend')
+const debounce = require('debounce')
+const copyToClipboard = require('copy-to-clipboard')
+const ENS = require('ethjs-ens')
+const networkMap = require('ethjs-ens/lib/network-map.json')
+const ensRE = /.+\.eth$/
+const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'
+
+
+module.exports = EnsInput
+
+inherits(EnsInput, Component)
+function EnsInput () {
+ Component.call(this)
+}
+
+EnsInput.prototype.render = function () {
+ const props = this.props
+ const opts = extend(props, {
+ list: 'addresses',
+ onChange: () => {
+ const network = this.props.network
+ const networkHasEnsSupport = getNetworkEnsSupport(network)
+ if (!networkHasEnsSupport) return
+
+ const recipient = document.querySelector('input[name="address"]').value
+ if (recipient.match(ensRE) === null) {
+ return this.setState({
+ loadingEns: false,
+ ensResolution: null,
+ ensFailure: null,
+ })
+ }
+
+ this.setState({
+ loadingEns: true,
+ })
+ this.checkName()
+ },
+ })
+ return h('div', {
+ style: { width: '100%' },
+ }, [
+ h('input.large-input', opts),
+ // The address book functionality.
+ h('datalist#addresses',
+ [
+ // Corresponds to the addresses owned.
+ Object.keys(props.identities).map((key) => {
+ const identity = props.identities[key]
+ return h('option', {
+ value: identity.address,
+ label: identity.name,
+ key: identity.address,
+ })
+ }),
+ // Corresponds to previously sent-to addresses.
+ props.addressBook.map((identity) => {
+ return h('option', {
+ value: identity.address,
+ label: identity.name,
+ key: identity.address,
+ })
+ }),
+ ]),
+ this.ensIcon(),
+ ])
+}
+
+EnsInput.prototype.componentDidMount = function () {
+ const network = this.props.network
+ const networkHasEnsSupport = getNetworkEnsSupport(network)
+ this.setState({ ensResolution: ZERO_ADDRESS })
+
+ if (networkHasEnsSupport) {
+ const provider = global.ethereumProvider
+ this.ens = new ENS({ provider, network })
+ this.checkName = debounce(this.lookupEnsName.bind(this), 200)
+ }
+}
+
+EnsInput.prototype.lookupEnsName = function () {
+ const recipient = document.querySelector('input[name="address"]').value
+ const { ensResolution } = this.state
+
+ log.info(`ENS attempting to resolve name: ${recipient}`)
+ this.ens.lookup(recipient.trim())
+ .then((address) => {
+ if (address === ZERO_ADDRESS) throw new Error('No address has been set for this name.')
+ if (address !== ensResolution) {
+ this.setState({
+ loadingEns: false,
+ ensResolution: address,
+ nickname: recipient.trim(),
+ hoverText: address + '\nClick to Copy',
+ ensFailure: false,
+ })
+ }
+ })
+ .catch((reason) => {
+ log.error(reason)
+ return this.setState({
+ loadingEns: false,
+ ensResolution: ZERO_ADDRESS,
+ ensFailure: true,
+ hoverText: reason.message,
+ })
+ })
+}
+
+EnsInput.prototype.componentDidUpdate = function (prevProps, prevState) {
+ const state = this.state || {}
+ const ensResolution = state.ensResolution
+ // If an address is sent without a nickname, meaning not from ENS or from
+ // the user's own accounts, a default of a one-space string is used.
+ const nickname = state.nickname || ' '
+ if (prevState && ensResolution && this.props.onChange &&
+ ensResolution !== prevState.ensResolution) {
+ this.props.onChange(ensResolution, nickname)
+ }
+}
+
+EnsInput.prototype.ensIcon = function (recipient) {
+ const { hoverText } = this.state || {}
+ return h('span', {
+ title: hoverText,
+ style: {
+ position: 'absolute',
+ padding: '9px',
+ transform: 'translatex(-40px)',
+ },
+ }, this.ensIconContents(recipient))
+}
+
+EnsInput.prototype.ensIconContents = function (recipient) {
+ const { loadingEns, ensFailure, ensResolution } = this.state || { ensResolution: ZERO_ADDRESS}
+
+ if (loadingEns) {
+ return h('img', {
+ src: 'images/loading.svg',
+ style: {
+ width: '30px',
+ height: '30px',
+ transform: 'translateY(-6px)',
+ },
+ })
+ }
+
+ if (ensFailure) {
+ return h('i.fa.fa-warning.fa-lg.warning')
+ }
+
+ if (ensResolution && (ensResolution !== ZERO_ADDRESS)) {
+ return h('i.fa.fa-check-circle.fa-lg.cursor-pointer', {
+ style: { color: 'green' },
+ onClick: (event) => {
+ event.preventDefault()
+ event.stopPropagation()
+ copyToClipboard(ensResolution)
+ },
+ })
+ }
+}
+
+function getNetworkEnsSupport (network) {
+ return Boolean(networkMap[network])
+}
diff --git a/ui/responsive/app/components/eth-balance.js b/ui/responsive/app/components/eth-balance.js
new file mode 100644
index 000000000..4f538fd31
--- /dev/null
+++ b/ui/responsive/app/components/eth-balance.js
@@ -0,0 +1,89 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const formatBalance = require('../util').formatBalance
+const generateBalanceObject = require('../util').generateBalanceObject
+const Tooltip = require('./tooltip.js')
+const FiatValue = require('./fiat-value.js')
+
+module.exports = EthBalanceComponent
+
+inherits(EthBalanceComponent, Component)
+function EthBalanceComponent () {
+ Component.call(this)
+}
+
+EthBalanceComponent.prototype.render = function () {
+ var props = this.props
+ let { value } = props
+ const { style, width } = props
+ var needsParse = this.props.needsParse !== undefined ? this.props.needsParse : true
+ value = value ? formatBalance(value, 6, needsParse) : '...'
+
+ return (
+
+ h('.ether-balance.ether-balance-amount', {
+ style,
+ }, [
+ h('div', {
+ style: {
+ display: 'inline',
+ width,
+ },
+ }, this.renderBalance(value)),
+ ])
+
+ )
+}
+EthBalanceComponent.prototype.renderBalance = function (value) {
+ var props = this.props
+ const { conversionRate, shorten, incoming, currentCurrency } = props
+ if (value === 'None') return value
+ if (value === '...') return value
+ var balanceObj = generateBalanceObject(value, shorten ? 1 : 3)
+ var balance
+ var splitBalance = value.split(' ')
+ var ethNumber = splitBalance[0]
+ var ethSuffix = splitBalance[1]
+ const showFiat = 'showFiat' in props ? props.showFiat : true
+
+ if (shorten) {
+ balance = balanceObj.shortBalance
+ } else {
+ balance = balanceObj.balance
+ }
+
+ var label = balanceObj.label
+
+ return (
+ h(Tooltip, {
+ position: 'bottom',
+ title: `${ethNumber} ${ethSuffix}`,
+ }, h('div.flex-column', [
+ h('.flex-row', {
+ style: {
+ alignItems: 'flex-end',
+ lineHeight: '13px',
+ fontFamily: 'Montserrat Light',
+ textRendering: 'geometricPrecision',
+ },
+ }, [
+ h('div', {
+ style: {
+ width: '100%',
+ textAlign: 'right',
+ },
+ }, incoming ? `+${balance}` : balance),
+ h('div', {
+ style: {
+ color: ' #AEAEAE',
+ fontSize: '12px',
+ marginLeft: '5px',
+ },
+ }, label),
+ ]),
+
+ showFiat ? h(FiatValue, { value: props.value, conversionRate, currentCurrency }) : null,
+ ]))
+ )
+}
diff --git a/ui/responsive/app/components/fiat-value.js b/ui/responsive/app/components/fiat-value.js
new file mode 100644
index 000000000..8a64a1cfc
--- /dev/null
+++ b/ui/responsive/app/components/fiat-value.js
@@ -0,0 +1,63 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const formatBalance = require('../util').formatBalance
+
+module.exports = FiatValue
+
+inherits(FiatValue, Component)
+function FiatValue () {
+ Component.call(this)
+}
+
+FiatValue.prototype.render = function () {
+ const props = this.props
+ const { conversionRate, currentCurrency } = props
+
+ const value = formatBalance(props.value, 6)
+
+ if (value === 'None') return value
+ var fiatDisplayNumber, fiatTooltipNumber
+ var splitBalance = value.split(' ')
+
+ if (conversionRate !== 0) {
+ fiatTooltipNumber = Number(splitBalance[0]) * conversionRate
+ fiatDisplayNumber = fiatTooltipNumber.toFixed(2)
+ } else {
+ fiatDisplayNumber = 'N/A'
+ fiatTooltipNumber = 'Unknown'
+ }
+
+ return fiatDisplay(fiatDisplayNumber, currentCurrency)
+}
+
+function fiatDisplay (fiatDisplayNumber, fiatSuffix) {
+ if (fiatDisplayNumber !== 'N/A') {
+ return h('.flex-row', {
+ style: {
+ alignItems: 'flex-end',
+ lineHeight: '13px',
+ fontFamily: 'Montserrat Light',
+ textRendering: 'geometricPrecision',
+ },
+ }, [
+ h('div', {
+ style: {
+ width: '100%',
+ textAlign: 'right',
+ fontSize: '12px',
+ color: '#333333',
+ },
+ }, fiatDisplayNumber),
+ h('div', {
+ style: {
+ color: '#AEAEAE',
+ marginLeft: '5px',
+ fontSize: '12px',
+ },
+ }, fiatSuffix),
+ ])
+ } else {
+ return h('div')
+ }
+}
diff --git a/ui/responsive/app/components/hex-as-decimal-input.js b/ui/responsive/app/components/hex-as-decimal-input.js
new file mode 100644
index 000000000..4a71e9585
--- /dev/null
+++ b/ui/responsive/app/components/hex-as-decimal-input.js
@@ -0,0 +1,154 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const ethUtil = require('ethereumjs-util')
+const BN = ethUtil.BN
+const extend = require('xtend')
+
+module.exports = HexAsDecimalInput
+
+inherits(HexAsDecimalInput, Component)
+function HexAsDecimalInput () {
+ this.state = { invalid: null }
+ Component.call(this)
+}
+
+/* Hex as Decimal Input
+ *
+ * A component for allowing easy, decimal editing
+ * of a passed in hex string value.
+ *
+ * On change, calls back its `onChange` function parameter
+ * and passes it an updated hex string.
+ */
+
+HexAsDecimalInput.prototype.render = function () {
+ const props = this.props
+ const state = this.state
+
+ const { value, onChange, min, max } = props
+
+ const toEth = props.toEth
+ const suffix = props.suffix
+ const decimalValue = decimalize(value, toEth)
+ const style = props.style
+
+ return (
+ h('.flex-column', [
+ h('.flex-row', {
+ style: {
+ alignItems: 'flex-end',
+ lineHeight: '13px',
+ fontFamily: 'Montserrat Light',
+ textRendering: 'geometricPrecision',
+ },
+ }, [
+ h('input.hex-input', {
+ type: 'number',
+ required: true,
+ min: min,
+ max: max,
+ style: extend({
+ display: 'block',
+ textAlign: 'right',
+ backgroundColor: 'transparent',
+ border: '1px solid #bdbdbd',
+
+ }, style),
+ value: parseInt(decimalValue),
+ onBlur: (event) => {
+ this.updateValidity(event)
+ },
+ onChange: (event) => {
+ this.updateValidity(event)
+ const hexString = (event.target.value === '') ? '' : hexify(event.target.value)
+ onChange(hexString)
+ },
+ onInvalid: (event) => {
+ const msg = this.constructWarning()
+ if (msg === state.invalid) {
+ return
+ }
+ this.setState({ invalid: msg })
+ event.preventDefault()
+ return false
+ },
+ }),
+ h('div', {
+ style: {
+ color: ' #AEAEAE',
+ fontSize: '12px',
+ marginLeft: '5px',
+ marginRight: '6px',
+ width: '20px',
+ },
+ }, suffix),
+ ]),
+
+ state.invalid ? h('span.error', {
+ style: {
+ position: 'absolute',
+ right: '0px',
+ textAlign: 'right',
+ transform: 'translateY(26px)',
+ padding: '3px',
+ background: 'rgba(255,255,255,0.85)',
+ zIndex: '1',
+ textTransform: 'capitalize',
+ border: '2px solid #E20202',
+ },
+ }, state.invalid) : null,
+ ])
+ )
+}
+
+HexAsDecimalInput.prototype.setValid = function (message) {
+ this.setState({ invalid: null })
+}
+
+HexAsDecimalInput.prototype.updateValidity = function (event) {
+ const target = event.target
+ const value = this.props.value
+ const newValue = target.value
+
+ if (value === newValue) {
+ return
+ }
+
+ const valid = target.checkValidity()
+ if (valid) {
+ this.setState({ invalid: null })
+ }
+}
+
+HexAsDecimalInput.prototype.constructWarning = function () {
+ const { name, min, max } = this.props
+ let message = name ? name + ' ' : ''
+
+ if (min && max) {
+ message += `must be greater than or equal to ${min} and less than or equal to ${max}.`
+ } else if (min) {
+ message += `must be greater than or equal to ${min}.`
+ } else if (max) {
+ message += `must be less than or equal to ${max}.`
+ } else {
+ message += 'Invalid input.'
+ }
+
+ return message
+}
+
+function hexify (decimalString) {
+ const hexBN = new BN(parseInt(decimalString), 10)
+ return '0x' + hexBN.toString('hex')
+}
+
+function decimalize (input, toEth) {
+ if (input === '') {
+ return ''
+ } else {
+ const strippedInput = ethUtil.stripHexPrefix(input)
+ const inputBN = new BN(strippedInput, 'hex')
+ return inputBN.toString(10)
+ }
+}
diff --git a/ui/responsive/app/components/identicon.js b/ui/responsive/app/components/identicon.js
new file mode 100644
index 000000000..c754bc6ba
--- /dev/null
+++ b/ui/responsive/app/components/identicon.js
@@ -0,0 +1,72 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const isNode = require('detect-node')
+const findDOMNode = require('react-dom').findDOMNode
+const jazzicon = require('jazzicon')
+const iconFactoryGen = require('../../lib/icon-factory')
+const iconFactory = iconFactoryGen(jazzicon)
+
+module.exports = IdenticonComponent
+
+inherits(IdenticonComponent, Component)
+function IdenticonComponent () {
+ Component.call(this)
+
+ this.defaultDiameter = 46
+}
+
+IdenticonComponent.prototype.render = function () {
+ var props = this.props
+ var diameter = props.diameter || this.defaultDiameter
+ return (
+ h('div', {
+ key: 'identicon-' + this.props.address,
+ style: {
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ height: diameter,
+ width: diameter,
+ borderRadius: diameter / 2,
+ overflow: 'hidden',
+ },
+ })
+ )
+}
+
+IdenticonComponent.prototype.componentDidMount = function () {
+ var props = this.props
+ const { address } = props
+
+ if (!address) return
+
+ var container = findDOMNode(this)
+
+ var diameter = props.diameter || this.defaultDiameter
+ if (!isNode) {
+ var img = iconFactory.iconForAddress(address, diameter)
+ container.appendChild(img)
+ }
+}
+
+IdenticonComponent.prototype.componentDidUpdate = function () {
+ var props = this.props
+ const { address } = props
+
+ if (!address) return
+
+ var container = findDOMNode(this)
+
+ var children = container.children
+ for (var i = 0; i < children.length; i++) {
+ container.removeChild(children[i])
+ }
+
+ var diameter = props.diameter || this.defaultDiameter
+ if (!isNode) {
+ var img = iconFactory.iconForAddress(address, diameter)
+ container.appendChild(img)
+ }
+}
+
diff --git a/ui/responsive/app/components/loading.js b/ui/responsive/app/components/loading.js
new file mode 100644
index 000000000..87d6f5d20
--- /dev/null
+++ b/ui/responsive/app/components/loading.js
@@ -0,0 +1,53 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const ReactCSSTransitionGroup = require('react-addons-css-transition-group')
+
+
+inherits(LoadingIndicator, Component)
+module.exports = LoadingIndicator
+
+function LoadingIndicator () {
+ Component.call(this)
+}
+
+LoadingIndicator.prototype.render = function () {
+ const { isLoading, loadingMessage } = this.props
+
+ return (
+ h(ReactCSSTransitionGroup, {
+ className: 'css-transition-group',
+ transitionName: 'loader',
+ transitionEnterTimeout: 150,
+ transitionLeaveTimeout: 150,
+ }, [
+
+ isLoading ? h('div', {
+ style: {
+ zIndex: 10,
+ position: 'absolute',
+ flexDirection: 'column',
+ display: 'flex',
+ justifyContent: 'center',
+ alignItems: 'center',
+ height: '100%',
+ width: '100%',
+ background: 'rgba(255, 255, 255, 0.8)',
+ },
+ }, [
+ h('img', {
+ src: 'images/loading.svg',
+ }),
+
+ h('br'),
+
+ showMessageIfAny(loadingMessage),
+ ]) : null,
+ ])
+ )
+}
+
+function showMessageIfAny (loadingMessage) {
+ if (!loadingMessage) return null
+ return h('span', loadingMessage)
+}
diff --git a/ui/responsive/app/components/mascot.js b/ui/responsive/app/components/mascot.js
new file mode 100644
index 000000000..973ec2cad
--- /dev/null
+++ b/ui/responsive/app/components/mascot.js
@@ -0,0 +1,59 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const metamaskLogo = require('metamask-logo')
+const debounce = require('debounce')
+
+module.exports = Mascot
+
+inherits(Mascot, Component)
+function Mascot () {
+ Component.call(this)
+ this.logo = metamaskLogo({
+ followMouse: true,
+ pxNotRatio: true,
+ width: 200,
+ height: 200,
+ })
+
+ this.refollowMouse = debounce(this.logo.setFollowMouse.bind(this.logo, true), 1000)
+ this.unfollowMouse = this.logo.setFollowMouse.bind(this.logo, false)
+}
+
+Mascot.prototype.render = function () {
+ // this is a bit hacky
+ // the event emitter is on `this.props`
+ // and we dont get that until render
+ this.handleAnimationEvents()
+
+ return h('#metamask-mascot-container', {
+ style: { zIndex: 0 },
+ })
+}
+
+Mascot.prototype.componentDidMount = function () {
+ var targetDivId = 'metamask-mascot-container'
+ var container = document.getElementById(targetDivId)
+ container.appendChild(this.logo.container)
+}
+
+Mascot.prototype.componentWillUnmount = function () {
+ this.animations = this.props.animationEventEmitter
+ this.animations.removeAllListeners()
+ this.logo.container.remove()
+ this.logo.stopAnimation()
+}
+
+Mascot.prototype.handleAnimationEvents = function () {
+ // only setup listeners once
+ if (this.animations) return
+ this.animations = this.props.animationEventEmitter
+ this.animations.on('point', this.lookAt.bind(this))
+ this.animations.on('setFollowMouse', this.logo.setFollowMouse.bind(this.logo))
+}
+
+Mascot.prototype.lookAt = function (target) {
+ this.unfollowMouse()
+ this.logo.lookAt(target)
+ this.refollowMouse()
+}
diff --git a/ui/responsive/app/components/mini-account-panel.js b/ui/responsive/app/components/mini-account-panel.js
new file mode 100644
index 000000000..c09cf5b7a
--- /dev/null
+++ b/ui/responsive/app/components/mini-account-panel.js
@@ -0,0 +1,74 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const Identicon = require('./identicon')
+
+module.exports = AccountPanel
+
+
+inherits(AccountPanel, Component)
+function AccountPanel () {
+ Component.call(this)
+}
+
+AccountPanel.prototype.render = function () {
+ var props = this.props
+ var picOrder = props.picOrder || 'left'
+ const { imageSeed } = props
+
+ return (
+
+ h('.identity-panel.flex-row.flex-left', {
+ style: {
+ cursor: props.onClick ? 'pointer' : undefined,
+ },
+ onClick: props.onClick,
+ }, [
+
+ this.genIcon(imageSeed, picOrder),
+
+ h('div.flex-column.flex-justify-center', {
+ style: {
+ lineHeight: '15px',
+ order: 2,
+ display: 'flex',
+ alignItems: picOrder === 'left' ? 'flex-begin' : 'flex-end',
+ },
+ }, this.props.children),
+ ])
+ )
+}
+
+AccountPanel.prototype.genIcon = function (seed, picOrder) {
+ const props = this.props
+
+ // When there is no seed value, this is a contract creation.
+ // We then show the contract icon.
+ if (!seed) {
+ return h('.identicon-wrapper.flex-column.select-none', {
+ style: {
+ order: picOrder === 'left' ? 1 : 3,
+ },
+ }, [
+ h('i.fa.fa-file-text-o.fa-lg', {
+ style: {
+ fontSize: '42px',
+ transform: 'translate(0px, -16px)',
+ },
+ }),
+ ])
+ }
+
+ // If there was a seed, we return an identicon for that address.
+ return h('.identicon-wrapper.flex-column.select-none', {
+ style: {
+ order: picOrder === 'left' ? 1 : 3,
+ },
+ }, [
+ h(Identicon, {
+ address: seed,
+ imageify: props.imageifyIdenticons,
+ }),
+ ])
+}
+
diff --git a/ui/responsive/app/components/network.js b/ui/responsive/app/components/network.js
new file mode 100644
index 000000000..d5d3e18cd
--- /dev/null
+++ b/ui/responsive/app/components/network.js
@@ -0,0 +1,125 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+
+module.exports = Network
+
+inherits(Network, Component)
+
+function Network () {
+ Component.call(this)
+}
+
+Network.prototype.render = function () {
+ const props = this.props
+ const networkNumber = props.network
+ let providerName
+ try {
+ providerName = props.provider.type
+ } catch (e) {
+ providerName = null
+ }
+ let iconName, hoverText
+
+ if (networkNumber === 'loading') {
+ return h('span', {
+ style: {
+ display: 'flex',
+ alignItems: 'center',
+ flexDirection: 'row',
+ },
+ onClick: (event) => this.props.onClick(event),
+ }, [
+ h('img', {
+ title: 'Attempting to connect to blockchain.',
+ style: {
+ width: '27px',
+ },
+ src: 'images/loading.svg',
+ }),
+ h('i.fa.fa-sort-desc'),
+ ])
+
+ } else if (providerName === 'mainnet') {
+ hoverText = 'Main Ethereum Network'
+ iconName = 'ethereum-network'
+ } else if (providerName === 'ropsten') {
+ hoverText = 'Ropsten Test Network'
+ iconName = 'ropsten-test-network'
+ } else if (parseInt(networkNumber) === 3) {
+ hoverText = 'Ropsten Test Network'
+ iconName = 'ropsten-test-network'
+ } else if (providerName === 'kovan') {
+ hoverText = 'Kovan Test Network'
+ iconName = 'kovan-test-network'
+ } else if (providerName === 'rinkeby') {
+ hoverText = 'Rinkeby Test Network'
+ iconName = 'rinkeby-test-network'
+ } else {
+ hoverText = 'Unknown Private Network'
+ iconName = 'unknown-private-network'
+ }
+
+ return (
+ h('#network_component.pointer', {
+ title: hoverText,
+ onClick: (event) => this.props.onClick(event),
+ }, [
+ (function () {
+ switch (iconName) {
+ case 'ethereum-network':
+ return h('.network-indicator', [
+ h('.menu-icon.diamond'),
+ h('.network-name', {
+ style: {
+ color: '#039396',
+ }},
+ 'Ethereum Main Net'),
+ ])
+ case 'ropsten-test-network':
+ return h('.network-indicator', [
+ h('.menu-icon.red-dot'),
+ h('.network-name', {
+ style: {
+ color: '#ff6666',
+ }},
+ 'Ropsten Test Net'),
+ ])
+ case 'kovan-test-network':
+ return h('.network-indicator', [
+ h('.menu-icon.hollow-diamond'),
+ h('.network-name', {
+ style: {
+ color: '#690496',
+ }},
+ 'Kovan Test Net'),
+ ])
+ case 'rinkeby-test-network':
+ return h('.network-indicator', [
+ h('.menu-icon.golden-square'),
+ h('.network-name', {
+ style: {
+ color: '#e7a218',
+ }},
+ 'Rinkeby Test Net'),
+ ])
+ default:
+ return h('.network-indicator', [
+ h('i.fa.fa-question-circle.fa-lg', {
+ style: {
+ margin: '10px',
+ color: 'rgb(125, 128, 130)',
+ },
+ }),
+
+ h('.network-name', {
+ style: {
+ color: '#AEAEAE',
+ }},
+ 'Private Network'),
+ ])
+ }
+ })(),
+ ])
+ )
+}
diff --git a/ui/responsive/app/components/notice.js b/ui/responsive/app/components/notice.js
new file mode 100644
index 000000000..d9f0067cd
--- /dev/null
+++ b/ui/responsive/app/components/notice.js
@@ -0,0 +1,126 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const ReactMarkdown = require('react-markdown')
+const linker = require('extension-link-enabler')
+const findDOMNode = require('react-dom').findDOMNode
+
+module.exports = Notice
+
+inherits(Notice, Component)
+function Notice () {
+ Component.call(this)
+}
+
+Notice.prototype.render = function () {
+ const { notice, onConfirm } = this.props
+ const { title, date, body } = notice
+ const state = this.state || { disclaimerDisabled: true }
+ const disabled = state.disclaimerDisabled
+
+ return (
+ h('.flex-column.flex-center.flex-grow', [
+ h('h3.flex-center.text-transform-uppercase.terms-header', {
+ style: {
+ background: '#EBEBEB',
+ color: '#AEAEAE',
+ width: '100%',
+ fontSize: '20px',
+ textAlign: 'center',
+ padding: 6,
+ },
+ }, [
+ title,
+ ]),
+
+ h('h5.flex-center.text-transform-uppercase.terms-header', {
+ style: {
+ background: '#EBEBEB',
+ color: '#AEAEAE',
+ marginBottom: 24,
+ width: '100%',
+ fontSize: '20px',
+ textAlign: 'center',
+ padding: 6,
+ },
+ }, [
+ date,
+ ]),
+
+ h('style', `
+
+ .markdown {
+ overflow-x: hidden;
+ }
+
+ .markdown h1, .markdown h2, .markdown h3 {
+ margin: 10px 0;
+ font-weight: bold;
+ }
+
+ .markdown strong {
+ font-weight: bold;
+ }
+ .markdown em {
+ font-style: italic;
+ }
+
+ .markdown p {
+ margin: 10px 0;
+ }
+
+ .markdown a {
+ color: #df6b0e;
+ }
+
+ `),
+
+ h('div.markdown', {
+ onScroll: (e) => {
+ var object = e.currentTarget
+ if (object.offsetHeight + object.scrollTop + 100 >= object.scrollHeight) {
+ this.setState({disclaimerDisabled: false})
+ }
+ },
+ style: {
+ background: 'rgb(235, 235, 235)',
+ height: '310px',
+ padding: '6px',
+ width: '90%',
+ overflowY: 'scroll',
+ scroll: 'auto',
+ },
+ }, [
+ h(ReactMarkdown, {
+ className: 'notice-box',
+ source: body,
+ skipHtml: true,
+ }),
+ ]),
+
+ h('button', {
+ disabled,
+ onClick: () => {
+ this.setState({disclaimerDisabled: true})
+ onConfirm()
+ },
+ style: {
+ marginTop: '18px',
+ },
+ }, 'Accept'),
+ ])
+ )
+}
+
+Notice.prototype.componentDidMount = function () {
+ var node = findDOMNode(this)
+ linker.setupListener(node)
+ if (document.getElementsByClassName('notice-box')[0].clientHeight < 310) {
+ this.setState({disclaimerDisabled: false})
+ }
+}
+
+Notice.prototype.componentWillUnmount = function () {
+ var node = findDOMNode(this)
+ linker.teardownListener(node)
+}
diff --git a/ui/responsive/app/components/pending-msg-details.js b/ui/responsive/app/components/pending-msg-details.js
new file mode 100644
index 000000000..16308d121
--- /dev/null
+++ b/ui/responsive/app/components/pending-msg-details.js
@@ -0,0 +1,50 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+
+const AccountPanel = require('./account-panel')
+
+module.exports = PendingMsgDetails
+
+inherits(PendingMsgDetails, Component)
+function PendingMsgDetails () {
+ Component.call(this)
+}
+
+PendingMsgDetails.prototype.render = function () {
+ var state = this.props
+ var msgData = state.txData
+
+ var msgParams = msgData.msgParams || {}
+ var address = msgParams.from || state.selectedAddress
+ var identity = state.identities[address] || { address: address }
+ var account = state.accounts[address] || { address: address }
+
+ return (
+ h('div', {
+ key: msgData.id,
+ style: {
+ margin: '10px 20px',
+ },
+ }, [
+
+ // account that will sign
+ h(AccountPanel, {
+ showFullAddress: true,
+ identity: identity,
+ account: account,
+ imageifyIdenticons: state.imageifyIdenticons,
+ }),
+
+ // message data
+ h('.tx-data.flex-column.flex-justify-center.flex-grow.select-none', [
+ h('.flex-row.flex-space-between', [
+ h('label.font-small', 'MESSAGE'),
+ h('span.font-small', msgParams.data),
+ ]),
+ ]),
+
+ ])
+ )
+}
+
diff --git a/ui/responsive/app/components/pending-msg.js b/ui/responsive/app/components/pending-msg.js
new file mode 100644
index 000000000..b2cac164a
--- /dev/null
+++ b/ui/responsive/app/components/pending-msg.js
@@ -0,0 +1,56 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const PendingTxDetails = require('./pending-msg-details')
+
+module.exports = PendingMsg
+
+inherits(PendingMsg, Component)
+function PendingMsg () {
+ Component.call(this)
+}
+
+PendingMsg.prototype.render = function () {
+ var state = this.props
+ var msgData = state.txData
+
+ return (
+
+ h('div', {
+ key: msgData.id,
+ }, [
+
+ // header
+ h('h3', {
+ style: {
+ fontWeight: 'bold',
+ textAlign: 'center',
+ },
+ }, 'Sign Message'),
+
+ h('.error', {
+ style: {
+ margin: '10px',
+ },
+ }, `Signing this message can have
+ dangerous side effects. Only sign messages from
+ sites you fully trust with your entire account.
+ This will be fixed in a future version.`),
+
+ // message details
+ h(PendingTxDetails, state),
+
+ // sign + cancel
+ h('.flex-row.flex-space-around', [
+ h('button', {
+ onClick: state.cancelMessage,
+ }, 'Cancel'),
+ h('button', {
+ onClick: state.signMessage,
+ }, 'Sign'),
+ ]),
+ ])
+
+ )
+}
+
diff --git a/ui/responsive/app/components/pending-personal-msg-details.js b/ui/responsive/app/components/pending-personal-msg-details.js
new file mode 100644
index 000000000..1050513f2
--- /dev/null
+++ b/ui/responsive/app/components/pending-personal-msg-details.js
@@ -0,0 +1,60 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+
+const AccountPanel = require('./account-panel')
+const BinaryRenderer = require('./binary-renderer')
+
+module.exports = PendingMsgDetails
+
+inherits(PendingMsgDetails, Component)
+function PendingMsgDetails () {
+ Component.call(this)
+}
+
+PendingMsgDetails.prototype.render = function () {
+ var state = this.props
+ var msgData = state.txData
+
+ var msgParams = msgData.msgParams || {}
+ var address = msgParams.from || state.selectedAddress
+ var identity = state.identities[address] || { address: address }
+ var account = state.accounts[address] || { address: address }
+
+ var { data } = msgParams
+
+ return (
+ h('div', {
+ key: msgData.id,
+ style: {
+ margin: '10px 20px',
+ },
+ }, [
+
+ // account that will sign
+ h(AccountPanel, {
+ showFullAddress: true,
+ identity: identity,
+ account: account,
+ imageifyIdenticons: state.imageifyIdenticons,
+ }),
+
+ // message data
+ h('div', {
+ style: {
+ height: '260px',
+ },
+ }, [
+ h('label.font-small', { style: { display: 'block' } }, 'MESSAGE'),
+ h(BinaryRenderer, {
+ value: data,
+ style: {
+ height: '215px',
+ },
+ }),
+ ]),
+
+ ])
+ )
+}
+
diff --git a/ui/responsive/app/components/pending-personal-msg.js b/ui/responsive/app/components/pending-personal-msg.js
new file mode 100644
index 000000000..4542adb28
--- /dev/null
+++ b/ui/responsive/app/components/pending-personal-msg.js
@@ -0,0 +1,47 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const PendingTxDetails = require('./pending-personal-msg-details')
+
+module.exports = PendingMsg
+
+inherits(PendingMsg, Component)
+function PendingMsg () {
+ Component.call(this)
+}
+
+PendingMsg.prototype.render = function () {
+ var state = this.props
+ var msgData = state.txData
+
+ return (
+
+ h('div', {
+ key: msgData.id,
+ }, [
+
+ // header
+ h('h3', {
+ style: {
+ fontWeight: 'bold',
+ textAlign: 'center',
+ },
+ }, 'Sign Message'),
+
+ // message details
+ h(PendingTxDetails, state),
+
+ // sign + cancel
+ h('.flex-row.flex-space-around', [
+ h('button', {
+ onClick: state.cancelPersonalMessage,
+ }, 'Cancel'),
+ h('button', {
+ onClick: state.signPersonalMessage,
+ }, 'Sign'),
+ ]),
+ ])
+
+ )
+}
+
diff --git a/ui/responsive/app/components/pending-tx.js b/ui/responsive/app/components/pending-tx.js
new file mode 100644
index 000000000..962680d30
--- /dev/null
+++ b/ui/responsive/app/components/pending-tx.js
@@ -0,0 +1,480 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const actions = require('../actions')
+const clone = require('clone')
+
+const ethUtil = require('ethereumjs-util')
+const BN = ethUtil.BN
+const hexToBn = require('../../../../app/scripts/lib/hex-to-bn')
+const util = require('../util')
+const MiniAccountPanel = require('./mini-account-panel')
+const Copyable = require('./copyable')
+const EthBalance = require('./eth-balance')
+const addressSummary = util.addressSummary
+const nameForAddress = require('../../lib/contract-namer')
+const BNInput = require('./bn-as-decimal-input')
+
+const MIN_GAS_PRICE_GWEI_BN = new BN(2)
+const GWEI_FACTOR = new BN(1e9)
+const MIN_GAS_PRICE_BN = MIN_GAS_PRICE_GWEI_BN.mul(GWEI_FACTOR)
+const MIN_GAS_LIMIT_BN = new BN(21000)
+
+module.exports = PendingTx
+inherits(PendingTx, Component)
+function PendingTx () {
+ Component.call(this)
+ this.state = {
+ valid: true,
+ txData: null,
+ submitting: false,
+ }
+}
+
+PendingTx.prototype.render = function () {
+ const props = this.props
+ const { currentCurrency, blockGasLimit } = props
+
+ const conversionRate = props.conversionRate
+ const txMeta = this.gatherTxMeta()
+ const txParams = txMeta.txParams || {}
+
+ // Account Details
+ const address = txParams.from || props.selectedAddress
+ const identity = props.identities[address] || { address: address }
+ const account = props.accounts[address]
+ const balance = account ? account.balance : '0x0'
+
+ // recipient check
+ const isValidAddress = !txParams.to || util.isValidAddress(txParams.to)
+
+ // Gas
+ const gas = txParams.gas
+ const gasBn = hexToBn(gas)
+ const gasLimit = new BN(parseInt(blockGasLimit))
+ const safeGasLimit = this.bnMultiplyByFraction(gasLimit, 19, 20).toString(10)
+
+ // Gas Price
+ const gasPrice = txParams.gasPrice || MIN_GAS_PRICE_BN.toString(16)
+ const gasPriceBn = hexToBn(gasPrice)
+
+ const txFeeBn = gasBn.mul(gasPriceBn)
+ const valueBn = hexToBn(txParams.value)
+ const maxCost = txFeeBn.add(valueBn)
+
+ const dataLength = txParams.data ? (txParams.data.length - 2) / 2 : 0
+
+ const balanceBn = hexToBn(balance)
+ const insufficientBalance = balanceBn.lt(maxCost)
+
+ this.inputs = []
+
+ return (
+
+ h('div', {
+ key: txMeta.id,
+ }, [
+
+ h('form#pending-tx-form', {
+ onSubmit: this.onSubmit.bind(this),
+
+ }, [
+
+ // tx info
+ h('div', [
+
+ h('.flex-row.flex-center', {
+ style: {
+ maxWidth: '100%',
+ },
+ }, [
+
+ h(MiniAccountPanel, {
+ imageSeed: address,
+ picOrder: 'right',
+ }, [
+ h('span.font-small', {
+ style: {
+ fontFamily: 'Montserrat Bold, Montserrat, sans-serif',
+ },
+ }, identity.name),
+
+ h(Copyable, {
+ value: ethUtil.toChecksumAddress(address),
+ }, [
+ h('span.font-small', {
+ style: {
+ fontFamily: 'Montserrat Light, Montserrat, sans-serif',
+ },
+ }, addressSummary(address, 6, 4, false)),
+ ]),
+
+ h('span.font-small', {
+ style: {
+ fontFamily: 'Montserrat Light, Montserrat, sans-serif',
+ },
+ }, [
+ h(EthBalance, {
+ value: balance,
+ conversionRate,
+ currentCurrency,
+ inline: true,
+ labelColor: '#F7861C',
+ }),
+ ]),
+ ]),
+
+ forwardCarrat(),
+
+ this.miniAccountPanelForRecipient(),
+ ]),
+
+ h('style', `
+ .table-box {
+ margin: 7px 0px 0px 0px;
+ width: 100%;
+ }
+ .table-box .row {
+ margin: 0px;
+ background: rgb(236,236,236);
+ display: flex;
+ justify-content: space-between;
+ font-family: Montserrat Light, sans-serif;
+ font-size: 13px;
+ padding: 5px 25px;
+ }
+ .table-box .row .value {
+ font-family: Montserrat Regular;
+ }
+ `),
+
+ h('.table-box', [
+
+ // Ether Value
+ // Currently not customizable, but easily modified
+ // in the way that gas and gasLimit currently are.
+ h('.row', [
+ h('.cell.label', 'Amount'),
+ h(EthBalance, { value: txParams.value, currentCurrency, conversionRate }),
+ ]),
+
+ // Gas Limit (customizable)
+ h('.cell.row', [
+ h('.cell.label', 'Gas Limit'),
+ h('.cell.value', {
+ }, [
+ h(BNInput, {
+ name: 'Gas Limit',
+ value: gasBn,
+ precision: 0,
+ scale: 0,
+ // The hard lower limit for gas.
+ min: MIN_GAS_LIMIT_BN.toString(10),
+ max: safeGasLimit,
+ suffix: 'UNITS',
+ style: {
+ position: 'relative',
+ top: '5px',
+ },
+ onChange: this.gasLimitChanged.bind(this),
+
+ ref: (hexInput) => { this.inputs.push(hexInput) },
+ }),
+ ]),
+ ]),
+
+ // Gas Price (customizable)
+ h('.cell.row', [
+ h('.cell.label', 'Gas Price'),
+ h('.cell.value', {
+ }, [
+ h(BNInput, {
+ name: 'Gas Price',
+ value: gasPriceBn,
+ precision: 9,
+ scale: 9,
+ suffix: 'GWEI',
+ min: MIN_GAS_PRICE_GWEI_BN.toString(10),
+ style: {
+ position: 'relative',
+ top: '5px',
+ },
+ onChange: this.gasPriceChanged.bind(this),
+ ref: (hexInput) => { this.inputs.push(hexInput) },
+ }),
+ ]),
+ ]),
+
+ // Max Transaction Fee (calculated)
+ h('.cell.row', [
+ h('.cell.label', 'Max Transaction Fee'),
+ h(EthBalance, { value: txFeeBn.toString(16), currentCurrency, conversionRate }),
+ ]),
+
+ h('.cell.row', {
+ style: {
+ fontFamily: 'Montserrat Regular',
+ background: 'white',
+ padding: '10px 25px',
+ },
+ }, [
+ h('.cell.label', 'Max Total'),
+ h('.cell.value', {
+ style: {
+ display: 'flex',
+ alignItems: 'center',
+ },
+ }, [
+ h(EthBalance, {
+ value: maxCost.toString(16),
+ currentCurrency,
+ conversionRate,
+ inline: true,
+ labelColor: 'black',
+ fontSize: '16px',
+ }),
+ ]),
+ ]),
+
+ // Data size row:
+ h('.cell.row', {
+ style: {
+ background: '#f7f7f7',
+ paddingBottom: '0px',
+ },
+ }, [
+ h('.cell.label'),
+ h('.cell.value', {
+ style: {
+ fontFamily: 'Montserrat Light',
+ fontSize: '11px',
+ },
+ }, `Data included: ${dataLength} bytes`),
+ ]),
+ ]), // End of Table
+
+ ]),
+
+ h('style', `
+ .conf-buttons button {
+ margin-left: 10px;
+ text-transform: uppercase;
+ }
+ `),
+
+ txMeta.simulationFails ?
+ h('.error', {
+ style: {
+ marginLeft: 50,
+ fontSize: '0.9em',
+ },
+ }, 'Transaction Error. Exception thrown in contract code.')
+ : null,
+
+ !isValidAddress ?
+ h('.error', {
+ style: {
+ marginLeft: 50,
+ fontSize: '0.9em',
+ },
+ }, 'Recipient address is invalid. Sending this transaction will result in a loss of ETH.')
+ : null,
+
+ insufficientBalance ?
+ h('span.error', {
+ style: {
+ marginLeft: 50,
+ fontSize: '0.9em',
+ },
+ }, 'Insufficient balance for transaction')
+ : null,
+
+ // send + cancel
+ h('.flex-row.flex-space-around.conf-buttons', {
+ style: {
+ display: 'flex',
+ justifyContent: 'flex-end',
+ margin: '14px 25px',
+ },
+ }, [
+
+
+ insufficientBalance ?
+ h('button.btn-green', {
+ onClick: props.buyEth,
+ }, 'Buy Ether')
+ : null,
+
+ h('button', {
+ onClick: (event) => {
+ this.resetGasFields()
+ event.preventDefault()
+ },
+ }, 'Reset'),
+
+ // Accept Button
+ h('input.confirm.btn-green', {
+ type: 'submit',
+ value: 'SUBMIT',
+ style: { marginLeft: '10px' },
+ disabled: insufficientBalance || !this.state.valid || !isValidAddress || this.state.submitting,
+ }),
+
+ h('button.cancel.btn-red', {
+ onClick: props.cancelTransaction,
+ }, 'Reject'),
+ ]),
+ ]),
+ ])
+ )
+}
+
+PendingTx.prototype.miniAccountPanelForRecipient = function () {
+ const props = this.props
+ const txData = props.txData
+ const txParams = txData.txParams || {}
+ const isContractDeploy = !('to' in txParams)
+
+ // If it's not a contract deploy, send to the account
+ if (!isContractDeploy) {
+ return h(MiniAccountPanel, {
+ imageSeed: txParams.to,
+ picOrder: 'left',
+ }, [
+
+ h('span.font-small', {
+ style: {
+ fontFamily: 'Montserrat Bold, Montserrat, sans-serif',
+ },
+ }, nameForAddress(txParams.to, props.identities)),
+
+ h(Copyable, {
+ value: ethUtil.toChecksumAddress(txParams.to),
+ }, [
+ h('span.font-small', {
+ style: {
+ fontFamily: 'Montserrat Light, Montserrat, sans-serif',
+ },
+ }, addressSummary(txParams.to, 6, 4, false)),
+ ]),
+
+ ])
+ } else {
+ return h(MiniAccountPanel, {
+ picOrder: 'left',
+ }, [
+
+ h('span.font-small', {
+ style: {
+ fontFamily: 'Montserrat Bold, Montserrat, sans-serif',
+ },
+ }, 'New Contract'),
+
+ ])
+ }
+}
+
+PendingTx.prototype.gasPriceChanged = function (newBN, valid) {
+ log.info(`Gas price changed to: ${newBN.toString(10)}`)
+ const txMeta = this.gatherTxMeta()
+ txMeta.txParams.gasPrice = '0x' + newBN.toString('hex')
+ this.setState({
+ txData: clone(txMeta),
+ valid,
+ })
+}
+
+PendingTx.prototype.gasLimitChanged = function (newBN, valid) {
+ log.info(`Gas limit changed to ${newBN.toString(10)}`)
+ const txMeta = this.gatherTxMeta()
+ txMeta.txParams.gas = '0x' + newBN.toString('hex')
+ this.setState({
+ txData: clone(txMeta),
+ valid,
+ })
+}
+
+PendingTx.prototype.resetGasFields = function () {
+ log.debug(`pending-tx resetGasFields`)
+
+ this.inputs.forEach((hexInput) => {
+ if (hexInput) {
+ hexInput.setValid()
+ }
+ })
+
+ this.setState({
+ txData: null,
+ valid: true,
+ })
+}
+
+PendingTx.prototype.onSubmit = function (event) {
+ event.preventDefault()
+ const txMeta = this.gatherTxMeta()
+ const valid = this.checkValidity()
+ this.setState({ valid, submitting: true })
+ if (valid && this.verifyGasParams()) {
+ this.props.sendTransaction(txMeta, event)
+ } else {
+ this.props.dispatch(actions.displayWarning('Invalid Gas Parameters'))
+ this.setState({ submitting: false })
+ }
+}
+
+PendingTx.prototype.checkValidity = function () {
+ const form = this.getFormEl()
+ const valid = form.checkValidity()
+ return valid
+}
+
+PendingTx.prototype.getFormEl = function () {
+ const form = document.querySelector('form#pending-tx-form')
+ // Stub out form for unit tests:
+ if (!form) {
+ return { checkValidity () { return true } }
+ }
+ return form
+}
+
+// After a customizable state value has been updated,
+PendingTx.prototype.gatherTxMeta = function () {
+ log.debug(`pending-tx gatherTxMeta`)
+ const props = this.props
+ const state = this.state
+ const txData = clone(state.txData) || clone(props.txData)
+
+ log.debug(`UI has defaulted to tx meta ${JSON.stringify(txData)}`)
+ return txData
+}
+
+PendingTx.prototype.verifyGasParams = function () {
+ // We call this in case the gas has not been modified at all
+ if (!this.state) { return true }
+ return (
+ this._notZeroOrEmptyString(this.state.gas) &&
+ this._notZeroOrEmptyString(this.state.gasPrice)
+ )
+}
+
+PendingTx.prototype._notZeroOrEmptyString = function (obj) {
+ return obj !== '' && obj !== '0x0'
+}
+
+PendingTx.prototype.bnMultiplyByFraction = function (targetBN, numerator, denominator) {
+ const numBN = new BN(numerator)
+ const denomBN = new BN(denominator)
+ return targetBN.mul(numBN).div(denomBN)
+}
+
+function forwardCarrat () {
+ return (
+ h('img', {
+ src: 'images/forward-carrat.svg',
+ style: {
+ padding: '5px 6px 0px 10px',
+ height: '37px',
+ },
+ })
+ )
+}
diff --git a/ui/responsive/app/components/qr-code.js b/ui/responsive/app/components/qr-code.js
new file mode 100644
index 000000000..06b9aed9b
--- /dev/null
+++ b/ui/responsive/app/components/qr-code.js
@@ -0,0 +1,79 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const qrCode = require('qrcode-npm').qrcode
+const inherits = require('util').inherits
+const connect = require('react-redux').connect
+const isHexPrefixed = require('ethereumjs-util').isHexPrefixed
+const CopyButton = require('./copyButton')
+
+module.exports = connect(mapStateToProps)(QrCodeView)
+
+function mapStateToProps (state) {
+ return {
+ Qr: state.appState.Qr,
+ buyView: state.appState.buyView,
+ warning: state.appState.warning,
+ }
+}
+
+inherits(QrCodeView, Component)
+
+function QrCodeView () {
+ Component.call(this)
+}
+
+QrCodeView.prototype.render = function () {
+ const props = this.props
+ const Qr = props.Qr
+ const address = `${isHexPrefixed(Qr.data) ? 'ethereum:' : ''}${Qr.data}`
+ const qrImage = qrCode(4, 'M')
+ qrImage.addData(address)
+ qrImage.make()
+ return h('.main-container.flex-column', {
+ key: 'qr',
+ style: {
+ justifyContent: 'center',
+ paddingBottom: '45px',
+ paddingLeft: '45px',
+ paddingRight: '45px',
+ alignItems: 'center',
+ },
+ }, [
+ Array.isArray(Qr.message) ? h('.message-container', this.renderMultiMessage()) : h('.qr-header', Qr.message),
+
+ this.props.warning ? this.props.warning && h('span.error.flex-center', {
+ style: {
+ textAlign: 'center',
+ width: '229px',
+ height: '82px',
+ },
+ },
+ this.props.warning) : null,
+
+ h('#qr-container.flex-column', {
+ style: {
+ marginTop: '25px',
+ marginBottom: '15px',
+ },
+ dangerouslySetInnerHTML: {
+ __html: qrImage.createTableTag(4),
+ },
+ }),
+ h('.flex-row', [
+ h('h3.ellip-address', {
+ style: {
+ width: '247px',
+ },
+ }, Qr.data),
+ h(CopyButton, {
+ value: Qr.data,
+ }),
+ ]),
+ ])
+}
+
+QrCodeView.prototype.renderMultiMessage = function () {
+ var Qr = this.props.Qr
+ var multiMessage = Qr.message.map((message) => h('.qr-message', message))
+ return multiMessage
+}
diff --git a/ui/responsive/app/components/range-slider.js b/ui/responsive/app/components/range-slider.js
new file mode 100644
index 000000000..823f5eb01
--- /dev/null
+++ b/ui/responsive/app/components/range-slider.js
@@ -0,0 +1,58 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+
+module.exports = RangeSlider
+
+inherits(RangeSlider, Component)
+function RangeSlider () {
+ Component.call(this)
+}
+
+RangeSlider.prototype.render = function () {
+ const state = this.state || {}
+ const props = this.props
+ const onInput = props.onInput || function () {}
+ const name = props.name
+ const {
+ min = 0,
+ max = 100,
+ increment = 1,
+ defaultValue = 50,
+ mirrorInput = false,
+ } = this.props.options
+ const {container, input, range} = props.style
+
+ return (
+ h('.flex-row', {
+ style: container,
+ }, [
+ h('input', {
+ type: 'range',
+ name: name,
+ min: min,
+ max: max,
+ step: increment,
+ style: range,
+ value: state.value || defaultValue,
+ onChange: mirrorInput ? this.mirrorInputs.bind(this, event) : onInput,
+ }),
+
+ // Mirrored input for range
+ mirrorInput ? h('input.large-input', {
+ type: 'number',
+ name: `${name}Mirror`,
+ min: min,
+ max: max,
+ value: state.value || defaultValue,
+ step: increment,
+ style: input,
+ onChange: this.mirrorInputs.bind(this, event),
+ }) : null,
+ ])
+ )
+}
+
+RangeSlider.prototype.mirrorInputs = function (event) {
+ this.setState({value: event.target.value})
+}
diff --git a/ui/responsive/app/components/shapeshift-form.js b/ui/responsive/app/components/shapeshift-form.js
new file mode 100644
index 000000000..e0a720426
--- /dev/null
+++ b/ui/responsive/app/components/shapeshift-form.js
@@ -0,0 +1,306 @@
+const PersistentForm = require('../../lib/persistent-form')
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const connect = require('react-redux').connect
+const ReactCSSTransitionGroup = require('react-addons-css-transition-group')
+const actions = require('../actions')
+const Qr = require('./qr-code')
+const isValidAddress = require('../util').isValidAddress
+module.exports = connect(mapStateToProps)(ShapeshiftForm)
+
+function mapStateToProps (state) {
+ return {
+ warning: state.appState.warning,
+ isSubLoading: state.appState.isSubLoading,
+ qrRequested: state.appState.qrRequested,
+ }
+}
+
+inherits(ShapeshiftForm, PersistentForm)
+
+function ShapeshiftForm () {
+ PersistentForm.call(this)
+ this.persistentFormParentId = 'shapeshift-buy-form'
+}
+
+ShapeshiftForm.prototype.render = function () {
+ return h(ReactCSSTransitionGroup, {
+ className: 'css-transition-group',
+ transitionName: 'main',
+ transitionEnterTimeout: 300,
+ transitionLeaveTimeout: 300,
+ }, [
+ this.props.qrRequested ? h(Qr, {key: 'qr'}) : this.renderMain(),
+ ])
+}
+
+ShapeshiftForm.prototype.renderMain = function () {
+ const marketinfo = this.props.buyView.formView.marketinfo
+ const coinOptions = this.props.buyView.formView.coinOptions
+ var coin = marketinfo.pair.split('_')[0].toUpperCase()
+
+ return h('.flex-column', {
+ style: {
+ // marginTop: '10px',
+ padding: '25px',
+ paddingTop: '5px',
+ width: '100%',
+ minHeight: '215px',
+ alignItems: 'center',
+ overflowY: 'auto',
+ },
+ }, [
+ h('.flex-row', {
+ style: {
+ justifyContent: 'center',
+ alignItems: 'baseline',
+ height: '42px',
+ },
+ }, [
+ h('img', {
+ src: coinOptions[coin].image,
+ width: '25px',
+ height: '25px',
+ style: {
+ marginRight: '5px',
+ },
+ }),
+
+ h('.input-container', [
+ h('input#fromCoin.buy-inputs.ex-coins', {
+ type: 'text',
+ list: 'coinList',
+ autoFocus: true,
+ dataset: {
+ persistentFormId: 'input-coin',
+ },
+ style: {
+ boxSizing: 'border-box',
+ },
+ onChange: this.handleLiveInput.bind(this),
+ defaultValue: 'BTC',
+ }),
+
+ this.renderCoinList(),
+
+ h('i.fa.fa-pencil-square-o.edit-text', {
+ style: {
+ fontSize: '12px',
+ color: '#F7861C',
+ position: 'relative',
+ bottom: '48px',
+ left: '106px',
+ },
+ }),
+ ]),
+
+ h('.icon-control', [
+ h('i.fa.fa-refresh.fa-4.orange', {
+ style: {
+ bottom: '5px',
+ left: '5px',
+ color: '#F7861C',
+ },
+ onClick: this.updateCoin.bind(this),
+ }),
+ h('i.fa.fa-chevron-right.fa-4.orange', {
+ style: {
+ position: 'relative',
+ bottom: '26px',
+ left: '10px',
+ color: '#F7861C',
+ },
+ onClick: this.updateCoin.bind(this),
+ }),
+ ]),
+
+ h('#toCoin.ex-coins', marketinfo.pair.split('_')[1].toUpperCase()),
+
+ h('img', {
+ src: coinOptions[marketinfo.pair.split('_')[1].toUpperCase()].image,
+ width: '25px',
+ height: '25px',
+ style: {
+ marginLeft: '5px',
+ },
+ }),
+ ]),
+ h('.flex-column', {
+ style: {
+ alignItems: 'flex-start',
+ },
+ }, [
+ this.props.warning ? this.props.warning && h('span.error.flex-center', {
+ style: {
+ textAlign: 'center',
+ width: '229px',
+ height: '82px',
+ },
+ },
+ this.props.warning) : this.renderInfo(),
+ ]),
+
+ h(this.activeToggle('.input-container'), {
+ style: {
+ padding: '10px',
+ paddingTop: '0px',
+ width: '100%',
+ },
+ }, [
+
+ h('div', `${coin} Address:`),
+
+ h('input#fromCoinAddress.buy-inputs', {
+ type: 'text',
+ placeholder: `Your ${coin} Refund Address`,
+ dataset: {
+ persistentFormId: 'refund-address',
+ },
+ style: {
+ boxSizing: 'border-box',
+ width: '227px',
+ height: '30px',
+ padding: ' 5px ',
+ },
+ }),
+
+ h('i.fa.fa-pencil-square-o.edit-text', {
+ style: {
+ fontSize: '12px',
+ color: '#F7861C',
+ position: 'relative',
+ bottom: '10px',
+ right: '11px',
+ },
+ }),
+ h('.flex-row', {
+ style: {
+ justifyContent: 'flex-end',
+ },
+ }, [
+ h('button', {
+ onClick: this.shift.bind(this),
+ style: {
+ marginTop: '10px',
+ position: 'relative',
+ bottom: '40px',
+ },
+ },
+ 'Submit'),
+ ]),
+ ]),
+ ])
+}
+
+ShapeshiftForm.prototype.shift = function () {
+ var props = this.props
+ var withdrawal = this.props.buyView.buyAddress
+ var returnAddress = document.getElementById('fromCoinAddress').value
+ var pair = this.props.buyView.formView.marketinfo.pair
+ var data = {
+ 'withdrawal': withdrawal,
+ 'pair': pair,
+ 'returnAddress': returnAddress,
+ // Public api key
+ 'apiKey': '803d1f5df2ed1b1476e4b9e6bcd089e34d8874595dda6a23b67d93c56ea9cc2445e98a6748b219b2b6ad654d9f075f1f1db139abfa93158c04e825db122c14b6',
+ }
+ var message = [
+ `Deposit Limit: ${props.buyView.formView.marketinfo.limit}`,
+ `Deposit Minimum:${props.buyView.formView.marketinfo.minimum}`,
+ ]
+ if (isValidAddress(withdrawal)) {
+ this.props.dispatch(actions.coinShiftRquest(data, message))
+ }
+}
+
+ShapeshiftForm.prototype.renderCoinList = function () {
+ var list = Object.keys(this.props.buyView.formView.coinOptions).map((item) => {
+ return h('option', {
+ value: item,
+ }, item)
+ })
+
+ return h('datalist#coinList', {
+ onClick: (event) => {
+ event.preventDefault()
+ },
+ }, list)
+}
+
+ShapeshiftForm.prototype.updateCoin = function (event) {
+ event.preventDefault()
+ const props = this.props
+ var coinOptions = this.props.buyView.formView.coinOptions
+ var coin = document.getElementById('fromCoin').value
+
+ if (!coinOptions[coin.toUpperCase()] || coin.toUpperCase() === 'ETH') {
+ var message = 'Not a valid coin'
+ return props.dispatch(actions.displayWarning(message))
+ } else {
+ return props.dispatch(actions.pairUpdate(coin))
+ }
+}
+
+ShapeshiftForm.prototype.handleLiveInput = function () {
+ const props = this.props
+ var coinOptions = this.props.buyView.formView.coinOptions
+ var coin = document.getElementById('fromCoin').value
+
+ if (!coinOptions[coin.toUpperCase()] || coin.toUpperCase() === 'ETH') {
+ return null
+ } else {
+ return props.dispatch(actions.pairUpdate(coin))
+ }
+}
+
+ShapeshiftForm.prototype.renderInfo = function () {
+ const marketinfo = this.props.buyView.formView.marketinfo
+ const coinOptions = this.props.buyView.formView.coinOptions
+ var coin = marketinfo.pair.split('_')[0].toUpperCase()
+
+ return h('span', {
+ style: {
+ },
+ }, [
+ h('h3.flex-row.text-transform-uppercase', {
+ style: {
+ color: '#868686',
+ paddingTop: '4px',
+ justifyContent: 'space-around',
+ textAlign: 'center',
+ fontSize: '17px',
+ },
+ }, `Market Info for ${marketinfo.pair.replace('_', ' to ').toUpperCase()}:`),
+ h('.marketinfo', ['Status : ', `${coinOptions[coin].status}`]),
+ h('.marketinfo', ['Exchange Rate: ', `${marketinfo.rate}`]),
+ h('.marketinfo', ['Limit: ', `${marketinfo.limit}`]),
+ h('.marketinfo', ['Minimum : ', `${marketinfo.minimum}`]),
+ ])
+}
+
+ShapeshiftForm.prototype.activeToggle = function (elementType) {
+ if (!this.props.buyView.formView.response || this.props.warning) return elementType
+ return `${elementType}.inactive`
+}
+
+ShapeshiftForm.prototype.renderLoading = function () {
+ return h('span', {
+ style: {
+ position: 'absolute',
+ left: '70px',
+ bottom: '194px',
+ background: 'transparent',
+ width: '229px',
+ height: '82px',
+ display: 'flex',
+ justifyContent: 'center',
+ },
+ }, [
+ h('img', {
+ style: {
+ width: '60px',
+ },
+ src: 'images/loading.svg',
+ }),
+ ])
+}
diff --git a/ui/responsive/app/components/shift-list-item.js b/ui/responsive/app/components/shift-list-item.js
new file mode 100644
index 000000000..32bfbeda4
--- /dev/null
+++ b/ui/responsive/app/components/shift-list-item.js
@@ -0,0 +1,204 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const vreme = new (require('vreme'))
+const explorerLink = require('../../lib/explorer-link')
+const actions = require('../actions')
+const addressSummary = require('../util').addressSummary
+
+const CopyButton = require('./copyButton')
+const EthBalance = require('./eth-balance')
+const Tooltip = require('./tooltip')
+
+
+module.exports = connect(mapStateToProps)(ShiftListItem)
+
+function mapStateToProps (state) {
+ return {
+ conversionRate: state.metamask.conversionRate,
+ currentCurrency: state.metamask.currentCurrency,
+ }
+}
+
+inherits(ShiftListItem, Component)
+
+function ShiftListItem () {
+ Component.call(this)
+}
+
+ShiftListItem.prototype.render = function () {
+ return (
+ h('.transaction-list-item.flex-row', {
+ style: {
+ paddingTop: '20px',
+ paddingBottom: '20px',
+ justifyContent: 'space-around',
+ alignItems: 'center',
+ },
+ }, [
+ h('div', {
+ style: {
+ width: '0px',
+ position: 'relative',
+ bottom: '19px',
+ },
+ }, [
+ h('img', {
+ src: 'https://info.shapeshift.io/sites/default/files/logo.png',
+ style: {
+ height: '35px',
+ width: '132px',
+ position: 'absolute',
+ clip: 'rect(0px,23px,34px,0px)',
+ },
+ }),
+ ]),
+
+ this.renderInfo(),
+ this.renderUtilComponents(),
+ ])
+ )
+}
+
+function formatDate (date) {
+ return vreme.format(new Date(date), 'March 16 2014 14:30')
+}
+
+ShiftListItem.prototype.renderUtilComponents = function () {
+ var props = this.props
+ const { conversionRate, currentCurrency } = props
+
+ switch (props.response.status) {
+ case 'no_deposits':
+ return h('.flex-row', [
+ h(CopyButton, {
+ value: this.props.depositAddress,
+ }),
+ h(Tooltip, {
+ title: 'QR Code',
+ }, [
+ h('i.fa.fa-qrcode.pointer.pop-hover', {
+ onClick: () => props.dispatch(actions.reshowQrCode(props.depositAddress, props.depositType)),
+ style: {
+ margin: '5px',
+ marginLeft: '23px',
+ marginRight: '12px',
+ fontSize: '20px',
+ color: '#F7861C',
+ },
+ }),
+ ]),
+ ])
+ case 'received':
+ return h('.flex-row')
+
+ case 'complete':
+ return h('.flex-row', [
+ h(CopyButton, {
+ value: this.props.response.transaction,
+ }),
+ h(EthBalance, {
+ value: `${props.response.outgoingCoin}`,
+ conversionRate,
+ currentCurrency,
+ width: '55px',
+ shorten: true,
+ needsParse: false,
+ incoming: true,
+ style: {
+ fontSize: '15px',
+ color: '#01888C',
+ },
+ }),
+ ])
+
+ case 'failed':
+ return ''
+ default:
+ return ''
+ }
+}
+
+ShiftListItem.prototype.renderInfo = function () {
+ var props = this.props
+ switch (props.response.status) {
+ case 'no_deposits':
+ return h('.flex-column', {
+ style: {
+ width: '200px',
+ overflow: 'hidden',
+ },
+ }, [
+ h('div', {
+ style: {
+ fontSize: 'x-small',
+ color: '#ABA9AA',
+ width: '100%',
+ },
+ }, `${props.depositType} to ETH via ShapeShift`),
+ h('div', 'No deposits received'),
+ h('div', {
+ style: {
+ fontSize: 'x-small',
+ color: '#ABA9AA',
+ width: '100%',
+ },
+ }, formatDate(props.time)),
+ ])
+ case 'received':
+ return h('.flex-column', {
+ style: {
+ width: '200px',
+ overflow: 'hidden',
+ },
+ }, [
+ h('div', {
+ style: {
+ fontSize: 'x-small',
+ color: '#ABA9AA',
+ width: '100%',
+ },
+ }, `${props.depositType} to ETH via ShapeShift`),
+ h('div', 'Conversion in progress'),
+ h('div', {
+ style: {
+ fontSize: 'x-small',
+ color: '#ABA9AA',
+ width: '100%',
+ },
+ }, formatDate(props.time)),
+ ])
+ case 'complete':
+ var url = explorerLink(props.response.transaction, parseInt('1'))
+
+ return h('.flex-column.pointer', {
+ style: {
+ width: '200px',
+ overflow: 'hidden',
+ },
+ onClick: () => global.platform.openWindow({ url }),
+ }, [
+ h('div', {
+ style: {
+ fontSize: 'x-small',
+ color: '#ABA9AA',
+ width: '100%',
+ },
+ }, 'From ShapeShift'),
+ h('div', formatDate(props.time)),
+ h('div', {
+ style: {
+ fontSize: 'x-small',
+ color: '#ABA9AA',
+ width: '100%',
+ },
+ }, addressSummary(props.response.transaction)),
+ ])
+
+ case 'failed':
+ return h('span.error', '(Failed)')
+ default:
+ return ''
+ }
+}
diff --git a/ui/responsive/app/components/tab-bar.js b/ui/responsive/app/components/tab-bar.js
new file mode 100644
index 000000000..6295e7dd9
--- /dev/null
+++ b/ui/responsive/app/components/tab-bar.js
@@ -0,0 +1,36 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+
+module.exports = TabBar
+
+inherits(TabBar, Component)
+function TabBar () {
+ Component.call(this)
+}
+
+TabBar.prototype.render = function () {
+ const props = this.props
+ const state = this.state || {}
+ const { tabs = [], defaultTab, tabSelected } = props
+ const { subview = defaultTab } = state
+
+ return (
+ h('.flex-row.space-around.text-transform-uppercase', {
+ style: {
+ background: '#EBEBEB',
+ color: '#AEAEAE',
+ paddingTop: '4px',
+ },
+ }, tabs.map((tab) => {
+ const { key, content } = tab
+ return h(subview === key ? '.activeForm' : '.inactiveForm.pointer', {
+ onClick: () => {
+ this.setState({ subview: key })
+ tabSelected(key)
+ },
+ }, content)
+ }))
+ )
+}
+
diff --git a/ui/responsive/app/components/template.js b/ui/responsive/app/components/template.js
new file mode 100644
index 000000000..b6ed8eaa0
--- /dev/null
+++ b/ui/responsive/app/components/template.js
@@ -0,0 +1,18 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+
+module.exports = NewComponent
+
+inherits(NewComponent, Component)
+function NewComponent () {
+ Component.call(this)
+}
+
+NewComponent.prototype.render = function () {
+ const props = this.props
+
+ return (
+ h('span', props.message)
+ )
+}
diff --git a/ui/responsive/app/components/token-cell.js b/ui/responsive/app/components/token-cell.js
new file mode 100644
index 000000000..19d7139bb
--- /dev/null
+++ b/ui/responsive/app/components/token-cell.js
@@ -0,0 +1,72 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const Identicon = require('./identicon')
+const prefixForNetwork = require('../../lib/etherscan-prefix-for-network')
+
+module.exports = TokenCell
+
+inherits(TokenCell, Component)
+function TokenCell () {
+ Component.call(this)
+}
+
+TokenCell.prototype.render = function () {
+ const props = this.props
+ const { address, symbol, string, network, userAddress } = props
+
+ return (
+ h('li.token-cell', {
+ style: { cursor: network === '1' ? 'pointer' : 'default' },
+ onClick: this.view.bind(this, address, userAddress, network),
+ }, [
+
+ h(Identicon, {
+ diameter: 50,
+ address,
+ network,
+ }),
+
+ h('h3', `${string || 0} ${symbol}`),
+
+ h('span', { style: { flex: '1 0 auto' } }),
+
+ /*
+ h('button', {
+ onClick: this.send.bind(this, address),
+ }, 'SEND'),
+ */
+
+ ])
+ )
+}
+
+TokenCell.prototype.send = function (address, event) {
+ event.preventDefault()
+ event.stopPropagation()
+ const url = tokenFactoryFor(address)
+ if (url) {
+ navigateTo(url)
+ }
+}
+
+TokenCell.prototype.view = function (address, userAddress, network, event) {
+ const url = etherscanLinkFor(address, userAddress, network)
+ if (url) {
+ navigateTo(url)
+ }
+}
+
+function navigateTo (url) {
+ global.platform.openWindow({ url })
+}
+
+function etherscanLinkFor (tokenAddress, address, network) {
+ const prefix = prefixForNetwork(network)
+ return `https://${prefix}etherscan.io/token/${tokenAddress}?a=${address}`
+}
+
+function tokenFactoryFor (tokenAddress) {
+ return `https://tokenfactory.surge.sh/#/token/${tokenAddress}`
+}
+
diff --git a/ui/responsive/app/components/token-list.js b/ui/responsive/app/components/token-list.js
new file mode 100644
index 000000000..fed7e9f7a
--- /dev/null
+++ b/ui/responsive/app/components/token-list.js
@@ -0,0 +1,194 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const TokenTracker = require('eth-token-tracker')
+const TokenCell = require('./token-cell.js')
+const normalizeAddress = require('eth-sig-util').normalize
+
+const defaultTokens = []
+/*
+const contracts = require('eth-contract-metadata')
+for (const address in contracts) {
+ const contract = contracts[address]
+ if (contract.erc20) {
+ contract.address = address
+ defaultTokens.push(contract)
+ }
+}
+*/
+
+module.exports = TokenList
+
+inherits(TokenList, Component)
+function TokenList () {
+ this.state = {
+ tokens: [],
+ isLoading: true,
+ network: null,
+ }
+ Component.call(this)
+}
+
+TokenList.prototype.render = function () {
+ const state = this.state
+ const { tokens, isLoading, error } = state
+ const { userAddress, network } = this.props
+
+ if (isLoading) {
+ return this.message('Loading')
+ }
+
+ if (error) {
+ log.error(error)
+ return this.message('There was a problem loading your token balances.')
+ }
+
+ const tokenViews = tokens.map((tokenData) => {
+ tokenData.network = network
+ tokenData.userAddress = userAddress
+ return h(TokenCell, tokenData)
+ })
+
+ return h('div', [
+ h('ol', {
+ style: {
+ height: '260px',
+ overflowY: 'auto',
+ display: 'flex',
+ flexDirection: 'column',
+ },
+ }, [
+ h('style', `
+
+ li.token-cell {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ padding: 10px;
+ }
+
+ li.token-cell > h3 {
+ margin-left: 12px;
+ }
+
+ li.token-cell:hover {
+ background: white;
+ cursor: pointer;
+ }
+
+ `),
+ ...tokenViews,
+ tokenViews.length ? null : this.message('No Tokens Found.'),
+ ]),
+ this.addTokenButtonElement(),
+ ])
+}
+
+TokenList.prototype.addTokenButtonElement = function () {
+ return h('div', [
+ h('div.footer.hover-white.pointer', {
+ key: 'reveal-account-bar',
+ onClick: () => {
+ this.props.addToken()
+ },
+ style: {
+ display: 'flex',
+ height: '40px',
+ padding: '10px',
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ }, [
+ h('i.fa.fa-plus.fa-lg'),
+ ]),
+ ])
+}
+
+TokenList.prototype.message = function (body) {
+ return h('div', {
+ style: {
+ display: 'flex',
+ height: '250px',
+ alignItems: 'center',
+ justifyContent: 'center',
+ padding: '30px',
+ },
+ }, body)
+}
+
+TokenList.prototype.componentDidMount = function () {
+ this.createFreshTokenTracker()
+}
+
+TokenList.prototype.createFreshTokenTracker = function () {
+ if (this.tracker) {
+ // Clean up old trackers when refreshing:
+ this.tracker.stop()
+ this.tracker.removeListener('update', this.balanceUpdater)
+ this.tracker.removeListener('error', this.showError)
+ }
+
+ if (!global.ethereumProvider) return
+ const { userAddress } = this.props
+ this.tracker = new TokenTracker({
+ userAddress,
+ provider: global.ethereumProvider,
+ tokens: uniqueMergeTokens(defaultTokens, this.props.tokens),
+ pollingInterval: 8000,
+ })
+
+
+ // Set up listener instances for cleaning up
+ this.balanceUpdater = this.updateBalances.bind(this)
+ this.showError = (error) => {
+ this.setState({ error, isLoading: false })
+ }
+ this.tracker.on('update', this.balanceUpdater)
+ this.tracker.on('error', this.showError)
+
+ this.tracker.updateBalances()
+ .then(() => {
+ this.updateBalances(this.tracker.serialize())
+ })
+ .catch((reason) => {
+ log.error(`Problem updating balances`, reason)
+ this.setState({ isLoading: false })
+ })
+}
+
+TokenList.prototype.componentWillUpdate = function (nextProps) {
+ if (nextProps.network === 'loading') return
+ const oldNet = this.props.network
+ const newNet = nextProps.network
+
+ if (oldNet && newNet && newNet !== oldNet) {
+ this.setState({ isLoading: true })
+ this.createFreshTokenTracker()
+ }
+}
+
+TokenList.prototype.updateBalances = function (tokens) {
+ const heldTokens = tokens.filter(token => {
+ return token.balance !== '0' && token.string !== '0.000'
+ })
+ this.setState({ tokens: heldTokens, isLoading: false })
+}
+
+TokenList.prototype.componentWillUnmount = function () {
+ if (!this.tracker) return
+ this.tracker.stop()
+}
+
+function uniqueMergeTokens (tokensA, tokensB) {
+ const uniqueAddresses = []
+ const result = []
+ tokensA.concat(tokensB).forEach((token) => {
+ const normal = normalizeAddress(token.address)
+ if (!uniqueAddresses.includes(normal)) {
+ uniqueAddresses.push(normal)
+ result.push(token)
+ }
+ })
+ return result
+}
+
diff --git a/ui/responsive/app/components/tooltip.js b/ui/responsive/app/components/tooltip.js
new file mode 100644
index 000000000..edbc074bb
--- /dev/null
+++ b/ui/responsive/app/components/tooltip.js
@@ -0,0 +1,22 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const ReactTooltip = require('react-tooltip-component')
+
+module.exports = Tooltip
+
+inherits(Tooltip, Component)
+function Tooltip () {
+ Component.call(this)
+}
+
+Tooltip.prototype.render = function () {
+ const props = this.props
+ const { position, title, children } = props
+
+ return h(ReactTooltip, {
+ position: position || 'left',
+ title,
+ fixed: false,
+ }, children)
+}
diff --git a/ui/responsive/app/components/transaction-list-item-icon.js b/ui/responsive/app/components/transaction-list-item-icon.js
new file mode 100644
index 000000000..431054340
--- /dev/null
+++ b/ui/responsive/app/components/transaction-list-item-icon.js
@@ -0,0 +1,68 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const Tooltip = require('./tooltip')
+
+const Identicon = require('./identicon')
+
+module.exports = TransactionIcon
+
+inherits(TransactionIcon, Component)
+function TransactionIcon () {
+ Component.call(this)
+}
+
+TransactionIcon.prototype.render = function () {
+ const { transaction, txParams, isMsg } = this.props
+ switch (transaction.status) {
+ case 'unapproved':
+ return h(!isMsg ? '.unapproved-tx-icon' : 'i.fa.fa-certificate.fa-lg')
+
+ case 'rejected':
+ return h('i.fa.fa-exclamation-triangle.fa-lg.warning', {
+ style: {
+ width: '24px',
+ },
+ })
+
+ case 'failed':
+ return h('i.fa.fa-exclamation-triangle.fa-lg.error', {
+ style: {
+ width: '24px',
+ },
+ })
+
+ case 'submitted':
+ return h(Tooltip, {
+ title: 'Pending',
+ position: 'bottom',
+ }, [
+ h('i.fa.fa-ellipsis-h', {
+ style: {
+ fontSize: '27px',
+ },
+ }),
+ ])
+ }
+
+ if (isMsg) {
+ return h('i.fa.fa-certificate.fa-lg', {
+ style: {
+ width: '24px',
+ },
+ })
+ }
+
+ if (txParams.to) {
+ return h(Identicon, {
+ diameter: 24,
+ address: txParams.to || transaction.hash,
+ })
+ } else {
+ return h('i.fa.fa-file-text-o.fa-lg', {
+ style: {
+ width: '24px',
+ },
+ })
+ }
+}
diff --git a/ui/responsive/app/components/transaction-list-item.js b/ui/responsive/app/components/transaction-list-item.js
new file mode 100644
index 000000000..dbda66a31
--- /dev/null
+++ b/ui/responsive/app/components/transaction-list-item.js
@@ -0,0 +1,165 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+
+const EthBalance = require('./eth-balance')
+const addressSummary = require('../util').addressSummary
+const explorerLink = require('../../lib/explorer-link')
+const CopyButton = require('./copyButton')
+const vreme = new (require('vreme'))
+const Tooltip = require('./tooltip')
+const numberToBN = require('number-to-bn')
+
+const TransactionIcon = require('./transaction-list-item-icon')
+const ShiftListItem = require('./shift-list-item')
+module.exports = TransactionListItem
+
+inherits(TransactionListItem, Component)
+function TransactionListItem () {
+ Component.call(this)
+}
+
+TransactionListItem.prototype.render = function () {
+ const { transaction, network, conversionRate, currentCurrency } = this.props
+ if (transaction.key === 'shapeshift') {
+ if (network === '1') return h(ShiftListItem, transaction)
+ }
+ var date = formatDate(transaction.time)
+
+ let isLinkable = false
+ const numericNet = parseInt(network)
+ isLinkable = numericNet === 1 || numericNet === 3 || numericNet === 4 || numericNet === 42
+
+ var isMsg = ('msgParams' in transaction)
+ var isTx = ('txParams' in transaction)
+ var isPending = transaction.status === 'unapproved'
+ let txParams
+ if (isTx) {
+ txParams = transaction.txParams
+ } else if (isMsg) {
+ txParams = transaction.msgParams
+ }
+
+ const nonce = txParams.nonce ? numberToBN(txParams.nonce).toString(10) : ''
+
+ const isClickable = ('hash' in transaction && isLinkable) || isPending
+ return (
+ h(`.transaction-list-item.flex-row.flex-space-between${isClickable ? '.pointer' : ''}`, {
+ onClick: (event) => {
+ if (isPending) {
+ this.props.showTx(transaction.id)
+ }
+ event.stopPropagation()
+ if (!transaction.hash || !isLinkable) return
+ var url = explorerLink(transaction.hash, parseInt(network))
+ global.platform.openWindow({ url })
+ },
+ style: {
+ padding: '20px 0',
+ },
+ }, [
+
+ h('.identicon-wrapper.flex-column.flex-center.select-none', [
+ h('.pop-hover', {
+ onClick: (event) => {
+ event.stopPropagation()
+ if (!isTx || isPending) return
+ var url = `https://metamask.github.io/eth-tx-viz/?tx=${transaction.hash}`
+ global.platform.openWindow({ url })
+ },
+ }, [
+ h(TransactionIcon, { txParams, transaction, isTx, isMsg }),
+ ]),
+ ]),
+
+ h(Tooltip, {
+ title: 'Transaction Number',
+ position: 'bottom',
+ }, [
+ h('span', {
+ style: {
+ display: 'flex',
+ cursor: 'normal',
+ flexDirection: 'column',
+ alignItems: 'center',
+ justifyContent: 'center',
+ padding: '10px',
+ },
+ }, nonce),
+ ]),
+
+ h('.flex-column', {style: {width: '200px', overflow: 'hidden'}}, [
+ domainField(txParams),
+ h('div', date),
+ recipientField(txParams, transaction, isTx, isMsg),
+ ]),
+
+ // Places a copy button if tx is successful, else places a placeholder empty div.
+ transaction.hash ? h(CopyButton, { value: transaction.hash }) : h('div', {style: { display: 'flex', alignItems: 'center', width: '26px' }}),
+
+ isTx ? h(EthBalance, {
+ value: txParams.value,
+ conversionRate,
+ currentCurrency,
+ width: '55px',
+ shorten: true,
+ showFiat: false,
+ style: {fontSize: '15px'},
+ }) : h('.flex-column'),
+ ])
+ )
+}
+
+function domainField (txParams) {
+ return h('div', {
+ style: {
+ fontSize: 'x-small',
+ color: '#ABA9AA',
+ overflow: 'hidden',
+ textOverflow: 'ellipsis',
+ width: '100%',
+ },
+ }, [
+ txParams.origin,
+ ])
+}
+
+function recipientField (txParams, transaction, isTx, isMsg) {
+ let message
+
+ if (isMsg) {
+ message = 'Signature Requested'
+ } else if (txParams.to) {
+ message = addressSummary(txParams.to)
+ } else {
+ message = 'Contract Published'
+ }
+
+ return h('div', {
+ style: {
+ fontSize: 'x-small',
+ color: '#ABA9AA',
+ },
+ }, [
+ message,
+ failIfFailed(transaction),
+ ])
+}
+
+function formatDate (date) {
+ return vreme.format(new Date(date), 'March 16 2014 14:30')
+}
+
+function failIfFailed (transaction) {
+ if (transaction.status === 'rejected') {
+ return h('span.error', ' (Rejected)')
+ }
+ if (transaction.err) {
+ return h(Tooltip, {
+ title: transaction.err.message,
+ position: 'bottom',
+ }, [
+ h('span.error', ' (Failed)'),
+ ])
+ }
+}
diff --git a/ui/responsive/app/components/transaction-list.js b/ui/responsive/app/components/transaction-list.js
new file mode 100644
index 000000000..3b4ba741e
--- /dev/null
+++ b/ui/responsive/app/components/transaction-list.js
@@ -0,0 +1,79 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+
+const TransactionListItem = require('./transaction-list-item')
+
+module.exports = TransactionList
+
+
+inherits(TransactionList, Component)
+function TransactionList () {
+ Component.call(this)
+}
+
+TransactionList.prototype.render = function () {
+ const { transactions, network, unapprovedMsgs, conversionRate } = this.props
+
+ var shapeShiftTxList
+ if (network === '1') {
+ shapeShiftTxList = this.props.shapeShiftTxList
+ }
+ const txsToRender = !shapeShiftTxList ? transactions.concat(unapprovedMsgs) : transactions.concat(unapprovedMsgs, shapeShiftTxList)
+ .sort((a, b) => b.time - a.time)
+
+ return (
+
+ h('section.transaction-list', [
+
+ h('style', `
+ .transaction-list .transaction-list-item:not(:last-of-type) {
+ border-bottom: 1px solid #D4D4D4;
+ }
+ .transaction-list .transaction-list-item .ether-balance-label {
+ display: block !important;
+ font-size: small;
+ }
+ `),
+
+ h('.tx-list', {
+ style: {
+ overflowY: 'auto',
+ height: '300px',
+ padding: '0 20px',
+ textAlign: 'center',
+ },
+ }, [
+
+ txsToRender.length
+ ? txsToRender.map((transaction, i) => {
+ let key
+ switch (transaction.key) {
+ case 'shapeshift':
+ const { depositAddress, time } = transaction
+ key = `shift-tx-${depositAddress}-${time}-${i}`
+ break
+ default:
+ key = `tx-${transaction.id}-${i}`
+ }
+ return h(TransactionListItem, {
+ transaction, i, network, key,
+ conversionRate,
+ showTx: (txId) => {
+ this.props.viewPendingTx(txId)
+ },
+ })
+ })
+ : h('.flex-center', {
+ style: {
+ flexDirection: 'column',
+ height: '100%',
+ },
+ }, [
+ 'No transaction history.',
+ ]),
+ ]),
+ ])
+ )
+}
+
diff --git a/ui/responsive/app/conf-tx.js b/ui/responsive/app/conf-tx.js
new file mode 100644
index 000000000..63b77ef7f
--- /dev/null
+++ b/ui/responsive/app/conf-tx.js
@@ -0,0 +1,213 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const ReactCSSTransitionGroup = require('react-addons-css-transition-group')
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const actions = require('./actions')
+const NetworkIndicator = require('./components/network')
+const txHelper = require('../lib/tx-helper')
+const isPopupOrNotification = require('../../../app/scripts/lib/is-popup-or-notification')
+
+const PendingTx = require('./components/pending-tx')
+const PendingMsg = require('./components/pending-msg')
+const PendingPersonalMsg = require('./components/pending-personal-msg')
+const Loading = require('./components/loading')
+
+module.exports = connect(mapStateToProps)(ConfirmTxScreen)
+
+function mapStateToProps (state) {
+ return {
+ identities: state.metamask.identities,
+ accounts: state.metamask.accounts,
+ selectedAddress: state.metamask.selectedAddress,
+ unapprovedTxs: state.metamask.unapprovedTxs,
+ unapprovedMsgs: state.metamask.unapprovedMsgs,
+ unapprovedPersonalMsgs: state.metamask.unapprovedPersonalMsgs,
+ index: state.appState.currentView.context,
+ warning: state.appState.warning,
+ network: state.metamask.network,
+ provider: state.metamask.provider,
+ conversionRate: state.metamask.conversionRate,
+ currentCurrency: state.metamask.currentCurrency,
+ blockGasLimit: state.metamask.currentBlockGasLimit,
+ }
+}
+
+inherits(ConfirmTxScreen, Component)
+function ConfirmTxScreen () {
+ Component.call(this)
+}
+
+ConfirmTxScreen.prototype.render = function () {
+ const props = this.props
+ const { network, provider, unapprovedTxs, currentCurrency,
+ unapprovedMsgs, unapprovedPersonalMsgs, conversionRate, blockGasLimit } = props
+
+ var unconfTxList = txHelper(unapprovedTxs, unapprovedMsgs, unapprovedPersonalMsgs, network)
+
+ var txData = unconfTxList[props.index] || {}
+ var txParams = txData.params || {}
+ var isNotification = isPopupOrNotification() === 'notification'
+
+
+ log.info(`rendering a combined ${unconfTxList.length} unconf msg & txs`)
+ if (unconfTxList.length === 0) return h(Loading, { isLoading: true })
+
+ return (
+
+ h('.flex-column.flex-grow', [
+
+ // subtitle and nav
+ h('.section-title.flex-row.flex-center', [
+ !isNotification ? h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
+ onClick: this.goHome.bind(this),
+ }) : null,
+ h('h2.page-subtitle', 'Confirm Transaction'),
+ isNotification ? h(NetworkIndicator, {
+ network: network,
+ provider: provider,
+ }) : null,
+ ]),
+
+ h('h3', {
+ style: {
+ alignSelf: 'center',
+ display: unconfTxList.length > 1 ? 'block' : 'none',
+ },
+ }, [
+ h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
+ style: {
+ display: props.index === 0 ? 'none' : 'inline-block',
+ },
+ onClick: () => props.dispatch(actions.previousTx()),
+ }),
+ ` ${props.index + 1} of ${unconfTxList.length} `,
+ h('i.fa.fa-arrow-right.fa-lg.cursor-pointer', {
+ style: {
+ display: props.index + 1 === unconfTxList.length ? 'none' : 'inline-block',
+ },
+ onClick: () => props.dispatch(actions.nextTx()),
+ }),
+ ]),
+
+ warningIfExists(props.warning),
+
+ h(ReactCSSTransitionGroup, {
+ className: 'css-transition-group',
+ transitionName: 'main',
+ transitionEnterTimeout: 300,
+ transitionLeaveTimeout: 300,
+ }, [
+
+ currentTxView({
+ // Properties
+ txData: txData,
+ key: txData.id,
+ selectedAddress: props.selectedAddress,
+ accounts: props.accounts,
+ identities: props.identities,
+ conversionRate,
+ currentCurrency,
+ blockGasLimit,
+ // Actions
+ buyEth: this.buyEth.bind(this, txParams.from || props.selectedAddress),
+ sendTransaction: this.sendTransaction.bind(this),
+ cancelTransaction: this.cancelTransaction.bind(this, txData),
+ signMessage: this.signMessage.bind(this, txData),
+ signPersonalMessage: this.signPersonalMessage.bind(this, txData),
+ cancelMessage: this.cancelMessage.bind(this, txData),
+ cancelPersonalMessage: this.cancelPersonalMessage.bind(this, txData),
+ }),
+
+ ]),
+ ])
+ )
+}
+
+function currentTxView (opts) {
+ log.info('rendering current tx view')
+ const { txData } = opts
+ const { txParams, msgParams, type } = txData
+
+ if (txParams) {
+ log.debug('txParams detected, rendering pending tx')
+ return h(PendingTx, opts)
+ } else if (msgParams) {
+ log.debug('msgParams detected, rendering pending msg')
+
+ if (type === 'eth_sign') {
+ log.debug('rendering eth_sign message')
+ return h(PendingMsg, opts)
+ } else if (type === 'personal_sign') {
+ log.debug('rendering personal_sign message')
+ return h(PendingPersonalMsg, opts)
+ }
+ }
+}
+
+ConfirmTxScreen.prototype.buyEth = function (address, event) {
+ event.preventDefault()
+ this.props.dispatch(actions.buyEthView(address))
+}
+
+ConfirmTxScreen.prototype.sendTransaction = function (txData, event) {
+ this.stopPropagation(event)
+ this.props.dispatch(actions.updateAndApproveTx(txData))
+}
+
+ConfirmTxScreen.prototype.cancelTransaction = function (txData, event) {
+ this.stopPropagation(event)
+ event.preventDefault()
+ this.props.dispatch(actions.cancelTx(txData))
+}
+
+ConfirmTxScreen.prototype.signMessage = function (msgData, event) {
+ log.info('conf-tx.js: signing message')
+ var params = msgData.msgParams
+ params.metamaskId = msgData.id
+ this.stopPropagation(event)
+ this.props.dispatch(actions.signMsg(params))
+}
+
+ConfirmTxScreen.prototype.stopPropagation = function (event) {
+ if (event.stopPropagation) {
+ event.stopPropagation()
+ }
+}
+
+ConfirmTxScreen.prototype.signPersonalMessage = function (msgData, event) {
+ log.info('conf-tx.js: signing personal message')
+ var params = msgData.msgParams
+ params.metamaskId = msgData.id
+ this.stopPropagation(event)
+ this.props.dispatch(actions.signPersonalMsg(params))
+}
+
+ConfirmTxScreen.prototype.cancelMessage = function (msgData, event) {
+ log.info('canceling message')
+ this.stopPropagation(event)
+ this.props.dispatch(actions.cancelMsg(msgData))
+}
+
+ConfirmTxScreen.prototype.cancelPersonalMessage = function (msgData, event) {
+ log.info('canceling personal message')
+ this.stopPropagation(event)
+ this.props.dispatch(actions.cancelPersonalMsg(msgData))
+}
+
+ConfirmTxScreen.prototype.goHome = function (event) {
+ this.stopPropagation(event)
+ this.props.dispatch(actions.goHome())
+}
+
+function warningIfExists (warning) {
+ if (warning &&
+ // Do not display user rejections on this screen:
+ warning.indexOf('User denied transaction signature') === -1) {
+ return h('.error', {
+ style: {
+ margin: 'auto',
+ },
+ }, warning)
+ }
+}
diff --git a/ui/responsive/app/config.js b/ui/responsive/app/config.js
new file mode 100644
index 000000000..62785c49b
--- /dev/null
+++ b/ui/responsive/app/config.js
@@ -0,0 +1,211 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const actions = require('./actions')
+const currencies = require('./conversion.json').rows
+const validUrl = require('valid-url')
+const copyToClipboard = require('copy-to-clipboard')
+
+module.exports = connect(mapStateToProps)(ConfigScreen)
+
+function mapStateToProps (state) {
+ return {
+ metamask: state.metamask,
+ warning: state.appState.warning,
+ }
+}
+
+inherits(ConfigScreen, Component)
+function ConfigScreen () {
+ Component.call(this)
+}
+
+ConfigScreen.prototype.render = function () {
+ var state = this.props
+ var metamaskState = state.metamask
+ var warning = state.warning
+
+ return (
+ h('.flex-column.flex-grow', [
+
+ // subtitle and nav
+ h('.section-title.flex-row.flex-center', [
+ h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
+ onClick: (event) => {
+ state.dispatch(actions.goHome())
+ },
+ }),
+ h('h2.page-subtitle', 'Settings'),
+ ]),
+
+ h('.error', {
+ style: {
+ display: warning ? 'block' : 'none',
+ padding: '0 20px',
+ textAlign: 'center',
+ },
+ }, warning),
+
+ // conf view
+ h('.flex-column.flex-justify-center.flex-grow.select-none', [
+ h('.flex-space-around', {
+ style: {
+ padding: '20px',
+ },
+ }, [
+
+ currentProviderDisplay(metamaskState),
+
+ h('div', { style: {display: 'flex'} }, [
+ h('input#new_rpc', {
+ placeholder: 'New RPC URL',
+ style: {
+ width: 'inherit',
+ flex: '1 0 auto',
+ height: '30px',
+ margin: '8px',
+ },
+ onKeyPress (event) {
+ if (event.key === 'Enter') {
+ var element = event.target
+ var newRpc = element.value
+ rpcValidation(newRpc, state)
+ }
+ },
+ }),
+ h('button', {
+ style: {
+ alignSelf: 'center',
+ },
+ onClick (event) {
+ event.preventDefault()
+ var element = document.querySelector('input#new_rpc')
+ var newRpc = element.value
+ rpcValidation(newRpc, state)
+ },
+ }, 'Save'),
+ ]),
+
+ h('hr.horizontal-line'),
+
+ currentConversionInformation(metamaskState, state),
+
+ h('hr.horizontal-line'),
+
+ h('div', {
+ style: {
+ marginTop: '20px',
+ },
+ }, [
+ h('p', {
+ style: {
+ fontFamily: 'Montserrat Light',
+ fontSize: '13px',
+ },
+ }, `State logs contain your public account addresses and sent transactions.`),
+ h('br'),
+ h('button', {
+ style: {
+ alignSelf: 'center',
+ },
+ onClick (event) {
+ copyToClipboard(window.logState())
+ },
+ }, 'Copy State Logs'),
+ ]),
+
+ h('hr.horizontal-line'),
+
+ h('div', {
+ style: {
+ marginTop: '20px',
+ },
+ }, [
+ h('button', {
+ style: {
+ alignSelf: 'center',
+ },
+ onClick (event) {
+ event.preventDefault()
+ state.dispatch(actions.revealSeedConfirmation())
+ },
+ }, 'Reveal Seed Words'),
+ ]),
+
+ ]),
+ ]),
+ ])
+ )
+}
+
+function rpcValidation (newRpc, state) {
+ if (validUrl.isWebUri(newRpc)) {
+ state.dispatch(actions.setRpcTarget(newRpc))
+ } else {
+ var appendedRpc = `http://${newRpc}`
+ if (validUrl.isWebUri(appendedRpc)) {
+ state.dispatch(actions.displayWarning('URIs require the appropriate HTTP/HTTPS prefix.'))
+ } else {
+ state.dispatch(actions.displayWarning('Invalid RPC URI'))
+ }
+ }
+}
+
+function currentConversionInformation (metamaskState, state) {
+ var currentCurrency = metamaskState.currentCurrency
+ var conversionDate = metamaskState.conversionDate
+ return h('div', [
+ h('span', {style: { fontWeight: 'bold', paddingRight: '10px'}}, 'Current Conversion'),
+ h('span', {style: { fontWeight: 'bold', paddingRight: '10px', fontSize: '13px'}}, `Updated ${Date(conversionDate)}`),
+ h('select#currentCurrency', {
+ onChange (event) {
+ event.preventDefault()
+ var element = document.getElementById('currentCurrency')
+ var newCurrency = element.value
+ state.dispatch(actions.setCurrentCurrency(newCurrency))
+ },
+ defaultValue: currentCurrency,
+ }, currencies.map((currency) => {
+ return h('option', {key: currency.code, value: currency.code}, `${currency.code} - ${currency.name}`)
+ })
+ ),
+ ])
+}
+
+function currentProviderDisplay (metamaskState) {
+ var provider = metamaskState.provider
+ var title, value
+
+ switch (provider.type) {
+
+ case 'mainnet':
+ title = 'Current Network'
+ value = 'Main Ethereum Network'
+ break
+
+ case 'ropsten':
+ title = 'Current Network'
+ value = 'Ropsten Test Network'
+ break
+
+ case 'kovan':
+ title = 'Current Network'
+ value = 'Kovan Test Network'
+ break
+
+ case 'rinkeby':
+ title = 'Current Network'
+ value = 'Rinkeby Test Network'
+ break
+
+ default:
+ title = 'Current RPC'
+ value = metamaskState.provider.rpcTarget
+ }
+
+ return h('div', [
+ h('span', {style: { fontWeight: 'bold', paddingRight: '10px'}}, title),
+ h('span', value),
+ ])
+}
diff --git a/ui/responsive/app/conversion.json b/ui/responsive/app/conversion.json
new file mode 100644
index 000000000..155ffc4fc
--- /dev/null
+++ b/ui/responsive/app/conversion.json
@@ -0,0 +1,207 @@
+{
+ "rows": [
+ {
+ "code": "REP",
+ "name": "Augur",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "BCN",
+ "name": "Bytecoin",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "BTC",
+ "name": "Bitcoin",
+ "statuses": [
+ "primary",
+ "secondary"
+ ]
+ },
+ {
+ "code": "BTS",
+ "name": "BitShares",
+ "statuses": [
+ "primary",
+ "secondary"
+ ]
+ },
+ {
+ "code": "BLK",
+ "name": "Blackcoin",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "GBP",
+ "name": "British Pound Sterling",
+ "statuses": [
+ "secondary"
+ ]
+ },
+ {
+ "code": "CAD",
+ "name": "Canadian Dollar",
+ "statuses": [
+ "secondary"
+ ]
+ },
+ {
+ "code": "CNY",
+ "name": "Chinese Yuan",
+ "statuses": [
+ "secondary"
+ ]
+ },
+ {
+ "code": "DSH",
+ "name": "Dashcoin",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "DOGE",
+ "name": "Dogecoin",
+ "statuses": [
+ "primary",
+ "secondary"
+ ]
+ },
+ {
+ "code": "ETC",
+ "name": "Ethereum Classic",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "EUR",
+ "name": "Euro",
+ "statuses": [
+ "primary",
+ "secondary"
+ ]
+ },
+ {
+ "code": "GNO",
+ "name": "GNO",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "GNT",
+ "name": "GNT",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "JPY",
+ "name": "Japanese Yen",
+ "statuses": [
+ "secondary"
+ ]
+ },
+ {
+ "code": "LTC",
+ "name": "Litecoin",
+ "statuses": [
+ "primary",
+ "secondary"
+ ]
+ },
+ {
+ "code": "MAID",
+ "name": "MaidSafeCoin",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "XEM",
+ "name": "NEM",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "XLM",
+ "name": "Stellar",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "XMR",
+ "name": "Monero",
+ "statuses": [
+ "primary",
+ "secondary"
+ ]
+ },
+ {
+ "code": "XRP",
+ "name": "Ripple",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "RUR",
+ "name": "Ruble",
+ "statuses": [
+ "secondary"
+ ]
+ },
+ {
+ "code": "STEEM",
+ "name": "Steem",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "STRAT",
+ "name": "STRAT",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "UAH",
+ "name": "Ukrainian Hryvnia",
+ "statuses": [
+ "secondary"
+ ]
+ },
+ {
+ "code": "USD",
+ "name": "US Dollar",
+ "statuses": [
+ "primary",
+ "secondary"
+ ]
+ },
+ {
+ "code": "WAVES",
+ "name": "WAVES",
+ "statuses": [
+ "primary"
+ ]
+ },
+ {
+ "code": "ZEC",
+ "name": "Zcash",
+ "statuses": [
+ "primary"
+ ]
+ }
+ ]
+}
diff --git a/ui/responsive/app/css/debug.css b/ui/responsive/app/css/debug.css
new file mode 100644
index 000000000..3e125bcd4
--- /dev/null
+++ b/ui/responsive/app/css/debug.css
@@ -0,0 +1,21 @@
+/*
+debug / dev
+*/
+
+#app-content {
+ border: 2px solid green;
+}
+
+#design-container {
+ position: absolute;
+ left: 360px;
+ top: -42px;
+ width: calc(100vw - 360px);
+ height: 100vh;
+ overflow: scroll;
+}
+
+#design-container img {
+ width: 2000px;
+ margin-right: 600px;
+} \ No newline at end of file
diff --git a/ui/responsive/app/css/fonts.css b/ui/responsive/app/css/fonts.css
new file mode 100644
index 000000000..3b9f581b9
--- /dev/null
+++ b/ui/responsive/app/css/fonts.css
@@ -0,0 +1,36 @@
+@import url(https://fonts.googleapis.com/css?family=Roboto:300,500);
+@import url(https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css);
+
+@font-face {
+ font-family: 'Montserrat Regular';
+ src: url('/fonts/Montserrat/Montserrat-Regular.woff') format('woff');
+ src: url('/fonts/Montserrat/Montserrat-Regular.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+ font-size: 'small';
+
+}
+
+@font-face {
+ font-family: 'Montserrat Bold';
+ src: url('/fonts/Montserrat/Montserrat-Bold.woff') format('woff');
+ src: url('/fonts/Montserrat/Montserrat-Bold.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Montserrat Light';
+ src: url('/fonts/Montserrat/Montserrat-Light.woff') format('woff');
+ src: url('/fonts/Montserrat/Montserrat-Light.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Montserrat UltraLight';
+ src: url('/fonts/Montserrat/Montserrat-UltraLight.woff') format('woff');
+ src: url('/fonts/Montserrat/Montserrat-UltraLight.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+}
diff --git a/ui/responsive/app/css/index.css b/ui/responsive/app/css/index.css
new file mode 100644
index 000000000..808aafb4c
--- /dev/null
+++ b/ui/responsive/app/css/index.css
@@ -0,0 +1,667 @@
+/*
+faint orange (textfield shades) #FAF6F0
+light orange (button shades): #F5C26D
+dark orange (text): #F5A623
+borders/font/any gray: #4A4A4A
+*/
+
+/*
+application specific styles
+*/
+
+* {
+ box-sizing: border-box;
+}
+
+html, body {
+ font-family: 'Montserrat Regular', Arial;
+ color: #4D4D4D;
+ font-weight: 300;
+ line-height: 1.4em;
+ background: #F7F7F7;
+}
+
+input:focus, textarea:focus {
+ outline: none;
+}
+
+#app-content {
+ overflow-x: hidden;
+ min-width: 357px;
+ width: 360px;
+ height: 500px;
+}
+
+button, input[type="submit"] {
+ font-family: 'Montserrat Bold';
+ outline: none;
+ cursor: pointer;
+ padding: 8px 12px;
+ border: none;
+ color: white;
+ transform-origin: center center;
+ transition: transform 50ms ease-in;
+ /* default orange */
+ background: rgba(247, 134, 28, 1);
+ box-shadow: 0px 3px 6px rgba(247, 134, 28, 0.36);
+}
+
+.btn-green, input[type="submit"].btn-green {
+ background: rgba(106, 195, 96, 1);
+ box-shadow: 0px 3px 6px rgba(106, 195, 96, 0.36);
+}
+
+.btn-red {
+ background: rgba(254, 35, 17, 1);
+ box-shadow: 0px 3px 6px rgba(254, 35, 17, 0.36);
+}
+
+button[disabled], input[type="submit"][disabled] {
+ cursor: not-allowed;
+ background: rgba(197, 197, 197, 1);
+ box-shadow: 0px 3px 6px rgba(197, 197, 197, 0.36);
+}
+
+button.spaced {
+ margin: 2px;
+}
+
+button:not([disabled]):hover, input[type="submit"]:not([disabled]):hover {
+ transform: scale(1.1);
+}
+button:not([disabled]):active, input[type="submit"]:not([disabled]):active {
+ transform: scale(0.95);
+}
+
+a {
+ text-decoration: none;
+ color: inherit;
+}
+
+a:hover{
+ color: #df6b0e;
+}
+
+/*
+app
+*/
+
+.active {
+ color: #909090;
+}
+
+button.primary {
+ padding: 8px 12px;
+ background: #F7861C;
+ box-shadow: 0px 3px 6px rgba(247, 134, 28, 0.36);
+ color: white;
+ font-size: 1.1em;
+ font-family: 'Montserrat Regular';
+ text-transform: uppercase;
+}
+
+button.btn-thin {
+ border: 1px solid;
+ border-color: #4D4D4D;
+ color: #4D4D4D;
+ background: rgb(255, 174, 41);
+ border-radius: 4px;
+ min-width: 200px;
+ margin: 12px 0;
+ padding: 6px;
+ font-size: 13px;
+}
+
+.app-header {
+ padding: 6px 8px;
+}
+
+.app-header h1 {
+ font-family: 'Montserrat Regular';
+ text-transform: uppercase;
+ color: #AEAEAE;
+}
+
+h2.page-subtitle {
+ font-family: 'Montserrat Regular';
+ text-transform: uppercase;
+ color: #AEAEAE;
+ font-size: 1em;
+ margin: 12px;
+}
+
+.app-primary {
+
+}
+
+.app-footer {
+ padding-bottom: 10px;
+ align-items: center;
+}
+
+.identicon {
+ height: 46px;
+ width: 46px;
+ background-size: cover;
+ border-radius: 100%;
+ border: 3px solid gray;
+}
+
+textarea.twelve-word-phrase {
+ padding: 12px;
+ width: 300px;
+ height: 140px;
+ font-size: 16px;
+ background: white;
+ resize: none;
+}
+
+.network-indicator {
+ display: flex;
+ align-items: center;
+ font-size: 0.6em;
+
+}
+
+.network-name {
+ width: 5.2em;
+ line-height: 9px;
+ text-rendering: geometricPrecision;
+}
+
+.check {
+ margin-left: 7px;
+ color: #F7861C;
+ flex: 1 0 auto;
+ display: flex;
+ justify-content: flex-end;
+}
+/*
+app sections
+*/
+
+/* initialize */
+
+.initialize-screen hr {
+ width: 60px;
+ margin: 12px;
+ border-color: #F7861C;
+ border-style: solid;
+}
+
+.initialize-screen label {
+ margin-top: 20px;
+}
+
+.initialize-screen button.create-vault {
+ margin-top: 40px;
+}
+
+.initialize-screen .warning {
+ font-size: 14px;
+ margin: 0 16px;
+}
+
+/* unlock */
+.error {
+ color: #E20202;
+}
+
+.warning {
+ color: #FFAE00;
+}
+
+.lock {
+ width: 50px;
+ height: 50px;
+}
+
+.lock.locked {
+ transform: scale(1.5);
+ opacity: 0.0;
+ transition: opacity 400ms ease-in, transform 400ms ease-in;
+}
+.lock.unlocked {
+ transform: scale(1);
+ opacity: 1;
+ transition: opacity 500ms ease-out, transform 500ms ease-out, background 200ms ease-in;
+}
+
+.lock.locked .lock-top {
+ transform: scaleX(1) translateX(0);
+ transition: transform 250ms ease-in;
+}
+.lock.unlocked .lock-top {
+ transform: scaleX(-1) translateX(-12px);
+ transition: transform 250ms ease-in;
+}
+.lock.unlocked:hover {
+ border-radius: 4px;
+ background: #e5e5e5;
+ border: 1px solid #b1b1b1;
+}
+.lock.unlocked:active {
+ background: #c3c3c3;
+}
+
+.section-title .fa-arrow-left {
+ margin: -2px 8px 0px -8px;
+}
+
+.unlock-screen #metamask-mascot-container {
+ margin-top: 24px;
+}
+
+.unlock-screen h1 {
+ margin-top: -28px;
+ margin-bottom: 42px;
+}
+
+.unlock-screen input[type=password] {
+ width: 260px;
+ /*height: 36px;
+ margin-bottom: 24px;
+ padding: 8px;*/
+}
+
+.sizing-input{
+ font-size: 14px;
+ height: 30px;
+ padding-left: 5px;
+}
+.editable-label{
+ display: flex;
+}
+/* Webkit */
+.unlock-screen input::-webkit-input-placeholder {
+ text-align: center;
+ font-size: 1.2em;
+}
+/* Firefox 18- */
+.unlock-screen input:-moz-placeholder {
+ text-align: center;
+ font-size: 1.2em;
+}
+/* Firefox 19+ */
+.unlock-screen input::-moz-placeholder {
+ text-align: center;
+ font-size: 1.2em;
+}
+/* IE */
+.unlock-screen input:-ms-input-placeholder {
+ text-align: center;
+ font-size: 1.2em;
+}
+
+input.large-input, textarea.large-input {
+ /*margin-bottom: 24px;*/
+ padding: 8px;
+}
+
+input.large-input {
+ height: 36px;
+}
+
+.letter-spacey {
+ letter-spacing: 0.1em;
+}
+
+
+
+/* accounts */
+
+.accounts-section {
+ margin: 0 0px;
+}
+
+.accounts-section .horizontal-line {
+ margin: 0px 18px;
+}
+
+.accounts-list-option {
+ height: 120px;
+}
+
+.accounts-list-option .identicon-wrapper {
+ width: 100px;
+}
+
+.unconftx-link {
+ margin-top: 24px;
+ cursor: pointer;
+}
+
+.unconftx-link .fa-arrow-right {
+ margin: 0px -8px 0px 8px;
+}
+
+/* identity panel */
+
+.identity-panel {
+ font-weight: 500;
+}
+
+.identity-panel .identicon-wrapper {
+ margin: 4px;
+ margin-top: 8px;
+ display: flex;
+ align-items: center;
+}
+
+.identity-panel .identicon-wrapper span {
+ margin: 0 auto;
+}
+
+.identity-panel .identity-data {
+ margin: 8px 8px 8px 18px;
+}
+
+.identity-panel i {
+ margin-top: 32px;
+ margin-right: 6px;
+ color: #B9B9B9;
+}
+
+.identity-panel .arrow-right {
+ padding-left: 18px;
+ width: 42px;
+ min-width: 18px;
+ height: 100%;
+}
+
+.identity-copy.flex-column {
+ flex: 0.25 0 auto;
+ justify-content: center;
+}
+
+/* accounts screen */
+
+.identity-section {
+
+}
+
+.identity-section .identity-panel {
+ background: #E9E9E9;
+ border-bottom: 1px solid #B1B1B1;
+ cursor: pointer;
+}
+
+.identity-section .identity-panel.selected {
+ background: white;
+ color: #F3C83E;
+}
+
+.identity-section .identity-panel.selected .identicon {
+ border-color: orange;
+}
+
+.identity-section .accounts-list-option:hover,
+.identity-section .accounts-list-option.selected {
+ background:white;
+}
+
+/* account detail screen */
+
+.account-detail-section {
+
+}
+.name-label{
+
+}
+
+.unapproved-tx-icon {
+ height: 16px;
+ width: 16px;
+ background: rgb(47, 174, 244);
+ border-color: #AEAEAE;
+ border-radius: 13px;
+}
+
+.edit-text {
+ height: 100%;
+ visibility: hidden;
+}
+.editing-label {
+ display: flex;
+ justify-content: flex-start;
+ margin-left: 50px;
+ margin-bottom: 2px;
+ font-size: 11px;
+ text-rendering: geometricPrecision;
+ color: #F7861C;
+}
+.name-label:hover .edit-text {
+ visibility: visible;
+}
+/* tx confirm */
+
+.unconftx-section input[type=password] {
+ height: 22px;
+ padding: 2px;
+ margin: 12px;
+ margin-bottom: 24px;
+ border-radius: 4px;
+ border: 2px solid #F3C83E;
+ background: #FAF6F0;
+}
+
+/* Send Screen */
+
+.send-screen {
+
+}
+
+.send-screen section {
+ margin: 8px 16px;
+}
+
+.send-screen input {
+ width: 100%;
+ font-size: 12px;
+}
+
+/* Ether Balance Widget */
+
+.ether-balance-amount {
+ color: #F7861C;
+}
+
+.ether-balance-label {
+ color: #ABA9AA;
+}
+
+/* Info screen */
+.info-gray{
+ font-family: 'Montserrat Regular';
+ text-transform: uppercase;
+ color: #AEAEAE;
+}
+
+.icon-size{
+ width: 20px;
+}
+
+.info{
+ font-family: 'Montserrat Regular', Arial;
+ padding-bottom: 10px;
+ display: inline-block;
+ padding-left: 5px;
+}
+
+/* buy eth warning screen */
+.custom-radios {
+ justify-content: space-around;
+ align-items: center;
+}
+
+
+.custom-radio-selected {
+ width: 17px;
+ height: 17px;
+ border: solid;
+ border-style: double;
+ border-radius: 15px;
+ border-width: 5px;
+ background: rgba(247, 134, 28, 1);
+ border-color: #F7F7F7;
+}
+
+.custom-radio-inactive {
+ width: 14px;
+ height: 14px;
+ border: solid;
+ border-width: 1px;
+ border-radius: 24px;
+ border-color: #AEAEAE;
+}
+
+.radio-titles {
+ color: rgba(247, 134, 28, 1);
+}
+
+.radio-titles-subtext {
+
+}
+
+.selected-exchange {
+
+}
+
+.buy-radio {
+
+}
+
+.eth-warning{
+ transition: opacity 400ms ease-in, transform 400ms ease-in;
+}
+
+.buy-subview{
+ transition: opacity 400ms ease-in, transform 400ms ease-in;
+}
+
+.input-container:hover .edit-text{
+ visibility: visible;
+}
+
+.buy-inputs{
+ font-family: 'Montserrat Light';
+ font-size: 13px;
+ height: 20px;
+ background: transparent;
+ box-sizing: border-box;
+ border: solid;
+ border-color: transparent;
+ border-width: 0.5px;
+ border-radius: 2px;
+
+}
+.input-container:hover .buy-inputs{
+ box-sizing: inherit;
+ border: solid;
+ border-color: #F7861C;
+ border-width: 0.5px;
+ border-radius: 2px;
+}
+
+.buy-inputs:focus{
+ border: solid;
+ border-color: #F7861C;
+ border-width: 0.5px;
+ border-radius: 2px;
+}
+
+.activeForm {
+ background: #F7F7F7;
+ border: none;
+ border-radius: 8px 8px 0px 0px;
+ width: 50%;
+ text-align: center;
+ padding-bottom: 4px;
+
+}
+
+.inactiveForm {
+ border: none;
+ border-radius: 8px 8px 0px 0px;
+ width: 50%;
+ text-align: center;
+ padding-bottom: 4px;
+}
+
+.ex-coins {
+ font-family: 'Montserrat Regular';
+ text-transform: uppercase;
+ text-align: center;
+ font-size: 33px;
+ width: 118px;
+ height: 42px;
+ padding: 1px;
+ color: #4D4D4D;
+}
+
+.marketinfo{
+ font-family: 'Montserrat light';
+ color: #AEAEAE;
+ font-size: 15px;
+ line-height: 17px;
+}
+
+#fromCoin::-webkit-calendar-picker-indicator {
+ display: none;
+}
+
+#coinList {
+ width: 400px;
+ height: 500px;
+ overflow: scroll;
+}
+
+.icon-control .fa-refresh{
+ visibility: hidden;
+}
+
+.icon-control:hover .fa-refresh{
+ visibility: visible;
+}
+
+.icon-control:hover .fa-chevron-right{
+ visibility: hidden;
+}
+
+.inactive {
+ color: #AEAEAE;
+}
+
+.inactive button{
+ background: #AEAEAE;
+ color: white;
+}
+
+.ellip-address {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ width: 5em;
+ font-size: 14px;
+ font-family: "Montserrat Light";
+ margin-left: 5px;
+}
+
+.qr-header {
+ font-size: 25px;
+ margin-top: 40px;
+}
+
+.qr-message {
+ font-size: 12px;
+ color: #F7861C;
+}
+
+div.message-container > div:first-child {
+ margin-top: 18px;
+ font-size: 15px;
+ color: #4D4D4D;
+}
+
+.pop-hover:hover {
+ transform: scale(1.1);
+}
diff --git a/ui/responsive/app/css/lib.css b/ui/responsive/app/css/lib.css
new file mode 100644
index 000000000..910a24ee2
--- /dev/null
+++ b/ui/responsive/app/css/lib.css
@@ -0,0 +1,268 @@
+/* color */
+
+.color-orange {
+ color: #F7861C;
+}
+
+.color-forest {
+ color: #0A5448;
+}
+
+/* lib */
+
+.full-width {
+ width: 100%;
+}
+
+.full-height {
+ height: 100%;
+}
+
+.flex-column {
+ display: flex;
+ flex-direction: column;
+}
+
+.space-between {
+ justify-content: space-between;
+}
+
+.space-around {
+ justify-content: space-around;
+}
+
+.flex-column-bottom {
+ display: flex;
+ flex-direction: column-reverse;
+}
+
+.flex-row {
+ display: flex;
+ flex-direction: row;
+}
+
+.flex-space-between {
+ justify-content: space-between;
+}
+
+.flex-space-around {
+ justify-content: space-around;
+}
+
+.flex-right {
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-end;
+}
+
+.flex-left {
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-start;
+}
+
+.flex-fixed {
+ flex: none;
+}
+
+.flex-basis-auto {
+ flex-basis: auto;
+}
+
+.flex-grow {
+ flex: 1 1 auto;
+}
+
+.flex-wrap {
+ flex-wrap: wrap;
+}
+
+.flex-center {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.flex-justify-center {
+ justify-content: center;
+}
+
+.flex-align-center {
+ align-items: center;
+}
+
+.flex-self-end {
+ align-self: flex-end;
+}
+
+.flex-self-stretch {
+ align-self: stretch;
+}
+
+.flex-vertical {
+ flex-direction: column;
+}
+
+.z-bump {
+ z-index: 1;
+}
+
+.select-none {
+ cursor: inherit;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.pointer {
+ cursor: pointer;
+}
+.cursor-pointer {
+ cursor: pointer;
+ transform-origin: center center;
+ transition: transform 50ms ease-in-out;
+}
+.cursor-pointer:hover {
+ transform: scale(1.1);
+}
+.cursor-pointer:active {
+ transform: scale(0.95);
+}
+
+.cursor-disabled {
+ cursor: not-allowed;
+}
+
+.margin-bottom-sml {
+ margin-bottom: 20px;
+}
+
+.margin-bottom-med {
+ margin-bottom: 40px;
+}
+
+.margin-right-left {
+ margin: 0 20px;
+}
+
+.bold {
+ font-weight: bold;
+}
+
+.text-transform-uppercase {
+ text-transform: uppercase;
+}
+
+.font-small {
+ font-size: 12px;
+}
+
+.font-medium {
+ font-size: 1.2em;
+}
+
+hr.horizontal-line {
+ display: block;
+ height: 1px;
+ border: 0;
+ border-top: 1px solid #ccc;
+ margin: 1em 0;
+ padding: 0;
+}
+
+.hover-white:hover {
+ background: white;
+}
+
+.red-dot {
+ background: #E91550;
+ color: white;
+ border-radius: 10px;
+}
+
+.diamond {
+ transform: rotate(45deg);
+ background: #038789;
+}
+
+.hollow-diamond {
+ transform: rotate(45deg);
+ border: 3px solid #690496;
+}
+
+.golden-square {
+ background: #EBB33F;
+}
+
+.pending-dot {
+ background: red;
+ left: 14px;
+ top: 14px;
+ color: white;
+ border-radius: 10px;
+ height: 20px;
+ min-width: 20px;
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 4px;
+ z-index: 1;
+}
+
+.keyring-label {
+ z-index: 1;
+ font-size: 11px;
+ background: rgba(255,0,0,0.8);
+ bottom: -47px;
+ color: white;
+ border-radius: 10px;
+ height: 20px;
+ min-width: 20px;
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 4px;
+}
+
+.ether-balance {
+ display: flex;
+ align-items: center;
+}
+
+.menu-icon {
+ display: inline-block;
+ height: 9px;
+ min-width: 9px;
+ margin: 13px;
+}
+.ether-icon {
+ background: rgb(0, 163, 68);
+ border-radius: 20px;
+}
+.testnet-icon {
+ background: #2465E1;
+}
+
+.drop-menu-item {
+ display: flex;
+ align-items: center;
+}
+
+.invisible {
+ visibility: hidden;
+}
+
+.one-line-concat {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.critical-error {
+ text-align: center;
+ margin-top: 20px;
+ color: red;
+}
diff --git a/ui/responsive/app/css/reset.css b/ui/responsive/app/css/reset.css
new file mode 100644
index 000000000..9ce89e8bc
--- /dev/null
+++ b/ui/responsive/app/css/reset.css
@@ -0,0 +1,48 @@
+/* http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+*/
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+} \ No newline at end of file
diff --git a/ui/responsive/app/css/transitions.css b/ui/responsive/app/css/transitions.css
new file mode 100644
index 000000000..393a944f9
--- /dev/null
+++ b/ui/responsive/app/css/transitions.css
@@ -0,0 +1,42 @@
+/* universal */
+.app-primary .main-enter {
+ position: absolute;
+ width: 100%;
+}
+
+/* center position */
+.app-primary.from-right .main-enter-active,
+.app-primary.from-left .main-enter-active {
+ overflow-x: hidden;
+ transform: translateX(0px);
+ transition: transform 300ms ease-in;
+}
+
+/* exited positions */
+.app-primary.from-left .main-leave-active {
+ transform: translateX(360px);
+ transition: transform 300ms ease-in;
+}
+.app-primary.from-right .main-leave-active {
+ transform: translateX(-360px);
+ transition: transform 300ms ease-in;
+}
+
+/* loader transitions */
+.loader-enter, .loader-leave-active {
+ opacity: 0.0;
+ transition: opacity 150 ease-in;
+}
+.loader-enter-active, .loader-leave {
+ opacity: 1.0;
+ transition: opacity 150 ease-in;
+}
+
+/* entering positions */
+.app-primary.from-right .main-enter:not(.main-enter-active) {
+ transform: translateX(360px);
+}
+.app-primary.from-left .main-enter:not(.main-enter-active) {
+ transform: translateX(-360px);
+}
+
diff --git a/ui/responsive/app/first-time/init-menu.js b/ui/responsive/app/first-time/init-menu.js
new file mode 100644
index 000000000..cc7c51bd3
--- /dev/null
+++ b/ui/responsive/app/first-time/init-menu.js
@@ -0,0 +1,179 @@
+const inherits = require('util').inherits
+const EventEmitter = require('events').EventEmitter
+const Component = require('react').Component
+const connect = require('react-redux').connect
+const h = require('react-hyperscript')
+const Mascot = require('../components/mascot')
+const actions = require('../actions')
+const Tooltip = require('../components/tooltip')
+const getCaretCoordinates = require('textarea-caret')
+
+module.exports = connect(mapStateToProps)(InitializeMenuScreen)
+
+inherits(InitializeMenuScreen, Component)
+function InitializeMenuScreen () {
+ Component.call(this)
+ this.animationEventEmitter = new EventEmitter()
+}
+
+function mapStateToProps (state) {
+ return {
+ // state from plugin
+ currentView: state.appState.currentView,
+ warning: state.appState.warning,
+ }
+}
+
+InitializeMenuScreen.prototype.render = function () {
+ var state = this.props
+
+ switch (state.currentView.name) {
+
+ default:
+ return this.renderMenu(state)
+
+ }
+}
+
+// InitializeMenuScreen.prototype.componentDidMount = function(){
+// document.getElementById('password-box').focus()
+// }
+
+InitializeMenuScreen.prototype.renderMenu = function (state) {
+ return (
+
+ h('.initialize-screen.flex-column.flex-center.flex-grow', [
+
+ h(Mascot, {
+ animationEventEmitter: this.animationEventEmitter,
+ }),
+
+ h('h1', {
+ style: {
+ fontSize: '1.3em',
+ textTransform: 'uppercase',
+ color: '#7F8082',
+ marginBottom: 10,
+ },
+ }, 'MetaMask'),
+
+
+ h('div', [
+ h('h3', {
+ style: {
+ fontSize: '0.8em',
+ color: '#7F8082',
+ display: 'inline',
+ },
+ }, 'Encrypt your new DEN'),
+
+ h(Tooltip, {
+ title: 'Your DEN is your password-encrypted storage within MetaMask.',
+ }, [
+ h('i.fa.fa-question-circle.pointer', {
+ style: {
+ fontSize: '18px',
+ position: 'relative',
+ color: 'rgb(247, 134, 28)',
+ top: '2px',
+ marginLeft: '4px',
+ },
+ }),
+ ]),
+ ]),
+
+ h('span.in-progress-notification', state.warning),
+
+ // password
+ h('input.large-input.letter-spacey', {
+ type: 'password',
+ id: 'password-box',
+ placeholder: 'New Password (min 8 chars)',
+ onInput: this.inputChanged.bind(this),
+ style: {
+ width: 260,
+ marginTop: 12,
+ },
+ }),
+
+ // confirm password
+ h('input.large-input.letter-spacey', {
+ type: 'password',
+ id: 'password-box-confirm',
+ placeholder: 'Confirm Password',
+ onKeyPress: this.createVaultOnEnter.bind(this),
+ onInput: this.inputChanged.bind(this),
+ style: {
+ width: 260,
+ marginTop: 16,
+ },
+ }),
+
+
+ h('button.primary', {
+ onClick: this.createNewVaultAndKeychain.bind(this),
+ style: {
+ margin: 12,
+ },
+ }, 'Create'),
+
+ h('.flex-row.flex-center.flex-grow', [
+ h('p.pointer', {
+ onClick: this.showRestoreVault.bind(this),
+ style: {
+ fontSize: '0.8em',
+ color: 'rgb(247, 134, 28)',
+ textDecoration: 'underline',
+ },
+ }, 'Import Existing DEN'),
+ ]),
+
+ ])
+ )
+}
+
+InitializeMenuScreen.prototype.createVaultOnEnter = function (event) {
+ if (event.key === 'Enter') {
+ event.preventDefault()
+ this.createNewVaultAndKeychain()
+ }
+}
+
+InitializeMenuScreen.prototype.componentDidMount = function () {
+ document.getElementById('password-box').focus()
+}
+
+InitializeMenuScreen.prototype.showRestoreVault = function () {
+ this.props.dispatch(actions.showRestoreVault())
+}
+
+InitializeMenuScreen.prototype.createNewVaultAndKeychain = function () {
+ var passwordBox = document.getElementById('password-box')
+ var password = passwordBox.value
+ var passwordConfirmBox = document.getElementById('password-box-confirm')
+ var passwordConfirm = passwordConfirmBox.value
+
+ if (password.length < 8) {
+ this.warning = 'password not long enough'
+ this.props.dispatch(actions.displayWarning(this.warning))
+ return
+ }
+ if (password !== passwordConfirm) {
+ this.warning = 'passwords don\'t match'
+ this.props.dispatch(actions.displayWarning(this.warning))
+ return
+ }
+
+ this.props.dispatch(actions.createNewVaultAndKeychain(password))
+}
+
+InitializeMenuScreen.prototype.inputChanged = function (event) {
+ // tell mascot to look at page action
+ var element = event.target
+ var boundingRect = element.getBoundingClientRect()
+ var coordinates = getCaretCoordinates(element, element.selectionEnd)
+ this.animationEventEmitter.emit('point', {
+ x: boundingRect.left + coordinates.left - element.scrollLeft,
+ y: boundingRect.top + coordinates.top - element.scrollTop,
+ })
+}
diff --git a/ui/responsive/app/img/identicon-tardigrade.png b/ui/responsive/app/img/identicon-tardigrade.png
new file mode 100644
index 000000000..1742a32b8
--- /dev/null
+++ b/ui/responsive/app/img/identicon-tardigrade.png
Binary files differ
diff --git a/ui/responsive/app/img/identicon-walrus.png b/ui/responsive/app/img/identicon-walrus.png
new file mode 100644
index 000000000..d58fae912
--- /dev/null
+++ b/ui/responsive/app/img/identicon-walrus.png
Binary files differ
diff --git a/ui/responsive/app/info.js b/ui/responsive/app/info.js
new file mode 100644
index 000000000..e8470de97
--- /dev/null
+++ b/ui/responsive/app/info.js
@@ -0,0 +1,154 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const actions = require('./actions')
+
+module.exports = connect(mapStateToProps)(InfoScreen)
+
+function mapStateToProps (state) {
+ return {}
+}
+
+inherits(InfoScreen, Component)
+function InfoScreen () {
+ Component.call(this)
+}
+
+InfoScreen.prototype.render = function () {
+ const state = this.props
+ const version = global.platform.getVersion()
+
+ return (
+ h('.flex-column.flex-grow', [
+
+ // subtitle and nav
+ h('.section-title.flex-row.flex-center', [
+ h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
+ onClick: (event) => {
+ state.dispatch(actions.goHome())
+ },
+ }),
+ h('h2.page-subtitle', 'Info'),
+ ]),
+
+ // main view
+ h('.flex-column.flex-justify-center.flex-grow.select-none', [
+ h('.flex-space-around', {
+ style: {
+ padding: '20px',
+ },
+ }, [
+ // current version number
+
+ h('.info.info-gray', [
+ h('div', 'Metamask'),
+ h('div', {
+ style: {
+ marginBottom: '10px',
+ },
+ }, `Version: ${version}`),
+ ]),
+
+ h('div', {
+ style: {
+ marginBottom: '5px',
+ }},
+ [
+ h('div', [
+ h('a', {
+ href: 'https://metamask.io/privacy.html',
+ target: '_blank',
+ onClick (event) { this.navigateTo(event.target.href) },
+ }, [
+ h('div.info', 'Privacy Policy'),
+ ]),
+ ]),
+ h('div', [
+ h('a', {
+ href: 'https://metamask.io/terms.html',
+ target: '_blank',
+ onClick (event) { this.navigateTo(event.target.href) },
+ }, [
+ h('div.info', 'Terms of Use'),
+ ]),
+ ]),
+ h('div', [
+ h('a', {
+ href: 'https://metamask.io/attributions.html',
+ target: '_blank',
+ onClick (event) { this.navigateTo(event.target.href) },
+ }, [
+ h('div.info', 'Attributions'),
+ ]),
+ ]),
+ ]
+ ),
+
+ h('hr', {
+ style: {
+ margin: '10px 0 ',
+ width: '7em',
+ },
+ }),
+
+ h('div', {
+ style: {
+ paddingLeft: '30px',
+ }},
+ [
+ h('div.fa.fa-github', [
+ h('a.info', {
+ href: 'https://github.com/MetaMask/faq',
+ target: '_blank',
+ }, 'Need Help? Read our FAQ!'),
+ ]),
+ h('div', [
+ h('a', {
+ href: 'https://metamask.io/',
+ target: '_blank',
+ }, [
+ h('img.icon-size', {
+ src: 'images/icon-128.png',
+ style: {
+ // IE6-9
+ filter: 'grayscale(100%)',
+ // Microsoft Edge and Firefox 35+
+ WebkitFilter: 'grayscale(100%)',
+ },
+ }),
+ h('div.info', 'Visit our web site'),
+ ]),
+ ]),
+ h('div.fa.fa-slack', [
+ h('a.info', {
+ href: 'http://slack.metamask.io',
+ target: '_blank',
+ }, 'Join the conversation on Slack'),
+ ]),
+
+ h('div.fa.fa-twitter', [
+ h('a.info', {
+ href: 'https://twitter.com/metamask_io',
+ target: '_blank',
+ }, 'Follow us on Twitter'),
+ ]),
+
+ h('div.fa.fa-envelope', [
+ h('a.info', {
+ target: '_blank',
+ style: { width: '85vw' },
+ href: 'mailto:help@metamask.io?subject=Feedback',
+ }, 'Email us!'),
+ ]),
+ ]),
+ ]),
+ ]),
+ ])
+ )
+}
+
+InfoScreen.prototype.navigateTo = function (url) {
+ global.platform.openWindow({ url })
+}
+
diff --git a/ui/responsive/app/keychains/hd/create-vault-complete.js b/ui/responsive/app/keychains/hd/create-vault-complete.js
new file mode 100644
index 000000000..a318a9b50
--- /dev/null
+++ b/ui/responsive/app/keychains/hd/create-vault-complete.js
@@ -0,0 +1,78 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const connect = require('react-redux').connect
+const h = require('react-hyperscript')
+const actions = require('../../actions')
+
+module.exports = connect(mapStateToProps)(CreateVaultCompleteScreen)
+
+inherits(CreateVaultCompleteScreen, Component)
+function CreateVaultCompleteScreen () {
+ Component.call(this)
+}
+
+function mapStateToProps (state) {
+ return {
+ seed: state.appState.currentView.seedWords,
+ cachedSeed: state.metamask.seedWords,
+ }
+}
+
+CreateVaultCompleteScreen.prototype.render = function () {
+ var state = this.props
+ var seed = state.seed || state.cachedSeed || ''
+
+ return (
+
+ h('.initialize-screen.flex-column.flex-center.flex-grow', [
+
+ // // subtitle and nav
+ // h('.section-title.flex-row.flex-center', [
+ // h('h2.page-subtitle', 'Vault Created'),
+ // ]),
+
+ h('h3.flex-center.text-transform-uppercase', {
+ style: {
+ background: '#EBEBEB',
+ color: '#AEAEAE',
+ marginTop: 36,
+ marginBottom: 8,
+ width: '100%',
+ fontSize: '20px',
+ padding: 6,
+ },
+ }, [
+ 'Vault Created',
+ ]),
+
+ h('div', {
+ style: {
+ width: '360px',
+ height: '78px',
+ fontSize: '1em',
+ marginTop: '10px',
+ textAlign: 'center',
+ },
+ }, [
+ h('span.error', 'These 12 words are the only way to restore your MetaMask accounts.\nSave them somewhere safe and secret.'),
+ ]),
+
+ h('textarea.twelve-word-phrase', {
+ readOnly: true,
+ value: seed,
+ }),
+
+ h('button.primary', {
+ onClick: () => this.confirmSeedWords(),
+ style: {
+ margin: '24px',
+ fontSize: '0.9em',
+ },
+ }, 'I\'ve copied it somewhere safe'),
+ ])
+ )
+}
+
+CreateVaultCompleteScreen.prototype.confirmSeedWords = function () {
+ this.props.dispatch(actions.confirmSeedWords())
+}
diff --git a/ui/responsive/app/keychains/hd/recover-seed/confirmation.js b/ui/responsive/app/keychains/hd/recover-seed/confirmation.js
new file mode 100644
index 000000000..4ccbec9fc
--- /dev/null
+++ b/ui/responsive/app/keychains/hd/recover-seed/confirmation.js
@@ -0,0 +1,118 @@
+const inherits = require('util').inherits
+
+const Component = require('react').Component
+const connect = require('react-redux').connect
+const h = require('react-hyperscript')
+const actions = require('../../../actions')
+
+module.exports = connect(mapStateToProps)(RevealSeedConfirmation)
+
+inherits(RevealSeedConfirmation, Component)
+function RevealSeedConfirmation () {
+ Component.call(this)
+}
+
+function mapStateToProps (state) {
+ return {
+ warning: state.appState.warning,
+ }
+}
+
+RevealSeedConfirmation.prototype.render = function () {
+ const props = this.props
+
+ return (
+
+ h('.initialize-screen.flex-column.flex-center.flex-grow', [
+
+ h('h3.flex-center.text-transform-uppercase', {
+ style: {
+ background: '#EBEBEB',
+ color: '#AEAEAE',
+ marginBottom: 24,
+ width: '100%',
+ fontSize: '20px',
+ padding: 6,
+ },
+ }, [
+ 'Reveal Seed Words',
+ ]),
+
+ h('.div', {
+ style: {
+ display: 'flex',
+ flexDirection: 'column',
+ padding: '20px',
+ justifyContent: 'center',
+ },
+ }, [
+
+ h('h4', 'Do not recover your seed words in a public place! These words can be used to steal all your accounts.'),
+
+ // confirmation
+ h('input.large-input.letter-spacey', {
+ type: 'password',
+ id: 'password-box',
+ placeholder: 'Enter your password to confirm',
+ onKeyPress: this.checkConfirmation.bind(this),
+ style: {
+ width: 260,
+ marginTop: '12px',
+ },
+ }),
+
+ h('.flex-row.flex-space-between', {
+ style: {
+ marginTop: 30,
+ width: '50%',
+ },
+ }, [
+ // cancel
+ h('button.primary', {
+ onClick: this.goHome.bind(this),
+ }, 'CANCEL'),
+
+ // submit
+ h('button.primary', {
+ onClick: this.revealSeedWords.bind(this),
+ }, 'OK'),
+
+ ]),
+
+ (props.warning) && (
+ h('span.error', {
+ style: {
+ margin: '20px',
+ },
+ }, props.warning.split('-'))
+ ),
+
+ props.inProgress && (
+ h('span.in-progress-notification', 'Generating Seed...')
+ ),
+ ]),
+ ])
+ )
+}
+
+RevealSeedConfirmation.prototype.componentDidMount = function () {
+ document.getElementById('password-box').focus()
+}
+
+RevealSeedConfirmation.prototype.goHome = function () {
+ this.props.dispatch(actions.showConfigPage(false))
+}
+
+// create vault
+
+RevealSeedConfirmation.prototype.checkConfirmation = function (event) {
+ if (event.key === 'Enter') {
+ event.preventDefault()
+ this.revealSeedWords()
+ }
+}
+
+RevealSeedConfirmation.prototype.revealSeedWords = function () {
+ var password = document.getElementById('password-box').value
+ this.props.dispatch(actions.requestRevealSeed(password))
+}
diff --git a/ui/responsive/app/keychains/hd/restore-vault.js b/ui/responsive/app/keychains/hd/restore-vault.js
new file mode 100644
index 000000000..06e51d9b3
--- /dev/null
+++ b/ui/responsive/app/keychains/hd/restore-vault.js
@@ -0,0 +1,152 @@
+const inherits = require('util').inherits
+const PersistentForm = require('../../../lib/persistent-form')
+const connect = require('react-redux').connect
+const h = require('react-hyperscript')
+const actions = require('../../actions')
+
+module.exports = connect(mapStateToProps)(RestoreVaultScreen)
+
+inherits(RestoreVaultScreen, PersistentForm)
+function RestoreVaultScreen () {
+ PersistentForm.call(this)
+}
+
+function mapStateToProps (state) {
+ return {
+ warning: state.appState.warning,
+ forgottenPassword: state.appState.forgottenPassword,
+ }
+}
+
+RestoreVaultScreen.prototype.render = function () {
+ var state = this.props
+ this.persistentFormParentId = 'restore-vault-form'
+
+ return (
+
+ h('.initialize-screen.flex-column.flex-center.flex-grow', [
+
+ h('h3.flex-center.text-transform-uppercase', {
+ style: {
+ background: '#EBEBEB',
+ color: '#AEAEAE',
+ marginBottom: 24,
+ width: '100%',
+ fontSize: '20px',
+ padding: 6,
+ },
+ }, [
+ 'Restore Vault',
+ ]),
+
+ // wallet seed entry
+ h('h3', 'Wallet Seed'),
+ h('textarea.twelve-word-phrase.letter-spacey', {
+ dataset: {
+ persistentFormId: 'wallet-seed',
+ },
+ placeholder: 'Enter your secret twelve word phrase here to restore your vault.',
+ }),
+
+ // password
+ h('input.large-input.letter-spacey', {
+ type: 'password',
+ id: 'password-box',
+ placeholder: 'New Password (min 8 chars)',
+ dataset: {
+ persistentFormId: 'password',
+ },
+ style: {
+ width: 260,
+ marginTop: 12,
+ },
+ }),
+
+ // confirm password
+ h('input.large-input.letter-spacey', {
+ type: 'password',
+ id: 'password-box-confirm',
+ placeholder: 'Confirm Password',
+ onKeyPress: this.createOnEnter.bind(this),
+ dataset: {
+ persistentFormId: 'password-confirmation',
+ },
+ style: {
+ width: 260,
+ marginTop: 16,
+ },
+ }),
+
+ (state.warning) && (
+ h('span.error.in-progress-notification', state.warning)
+ ),
+
+ // submit
+
+ h('.flex-row.flex-space-between', {
+ style: {
+ marginTop: 30,
+ width: '50%',
+ },
+ }, [
+
+ // cancel
+ h('button.primary', {
+ onClick: this.showInitializeMenu.bind(this),
+ }, 'CANCEL'),
+
+ // submit
+ h('button.primary', {
+ onClick: this.createNewVaultAndRestore.bind(this),
+ }, 'OK'),
+
+ ]),
+ ])
+
+ )
+}
+
+RestoreVaultScreen.prototype.showInitializeMenu = function () {
+ if (this.props.forgottenPassword) {
+ this.props.dispatch(actions.backToUnlockView())
+ } else {
+ this.props.dispatch(actions.showInitializeMenu())
+ }
+}
+
+RestoreVaultScreen.prototype.createOnEnter = function (event) {
+ if (event.key === 'Enter') {
+ this.createNewVaultAndRestore()
+ }
+}
+
+RestoreVaultScreen.prototype.createNewVaultAndRestore = function () {
+ // check password
+ var passwordBox = document.getElementById('password-box')
+ var password = passwordBox.value
+ var passwordConfirmBox = document.getElementById('password-box-confirm')
+ var passwordConfirm = passwordConfirmBox.value
+ if (password.length < 8) {
+ this.warning = 'Password not long enough'
+
+ this.props.dispatch(actions.displayWarning(this.warning))
+ return
+ }
+ if (password !== passwordConfirm) {
+ this.warning = 'Passwords don\'t match'
+ this.props.dispatch(actions.displayWarning(this.warning))
+ return
+ }
+ // check seed
+ var seedBox = document.querySelector('textarea.twelve-word-phrase')
+ var seed = seedBox.value.trim()
+ if (seed.split(' ').length !== 12) {
+ this.warning = 'seed phrases are 12 words long'
+ this.props.dispatch(actions.displayWarning(this.warning))
+ return
+ }
+ // submit
+ this.warning = null
+ this.props.dispatch(actions.displayWarning(this.warning))
+ this.props.dispatch(actions.createNewVaultAndRestore(password, seed))
+}
diff --git a/ui/responsive/app/new-keychain.js b/ui/responsive/app/new-keychain.js
new file mode 100644
index 000000000..cc9633166
--- /dev/null
+++ b/ui/responsive/app/new-keychain.js
@@ -0,0 +1,29 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+
+module.exports = connect(mapStateToProps)(NewKeychain)
+
+function mapStateToProps (state) {
+ return {}
+}
+
+inherits(NewKeychain, Component)
+function NewKeychain () {
+ Component.call(this)
+}
+
+NewKeychain.prototype.render = function () {
+ // const props = this.props
+
+ return (
+ h('div', {
+ style: {
+ background: 'blue',
+ },
+ }, [
+ h('h1', `Here's a list!!!!`),
+ ])
+ )
+}
diff --git a/ui/responsive/app/reducers.js b/ui/responsive/app/reducers.js
new file mode 100644
index 000000000..11efca529
--- /dev/null
+++ b/ui/responsive/app/reducers.js
@@ -0,0 +1,52 @@
+const extend = require('xtend')
+
+//
+// Sub-Reducers take in the complete state and return their sub-state
+//
+const reduceIdentities = require('./reducers/identities')
+const reduceMetamask = require('./reducers/metamask')
+const reduceApp = require('./reducers/app')
+
+window.METAMASK_CACHED_LOG_STATE = null
+
+module.exports = rootReducer
+
+function rootReducer (state, action) {
+ // clone
+ state = extend(state)
+
+ if (action.type === 'GLOBAL_FORCE_UPDATE') {
+ return action.value
+ }
+
+ //
+ // Identities
+ //
+
+ state.identities = reduceIdentities(state, action)
+
+ //
+ // MetaMask
+ //
+
+ state.metamask = reduceMetamask(state, action)
+
+ //
+ // AppState
+ //
+
+ state.appState = reduceApp(state, action)
+
+ window.METAMASK_CACHED_LOG_STATE = state
+ return state
+}
+
+window.logState = function () {
+ var stateString = JSON.stringify(window.METAMASK_CACHED_LOG_STATE, removeSeedWords, 2)
+ console.log(stateString)
+ return stateString
+}
+
+function removeSeedWords (key, value) {
+ return key === 'seedWords' ? undefined : value
+}
diff --git a/ui/responsive/app/reducers/app.js b/ui/responsive/app/reducers/app.js
new file mode 100644
index 000000000..2fcc9bfe0
--- /dev/null
+++ b/ui/responsive/app/reducers/app.js
@@ -0,0 +1,585 @@
+const extend = require('xtend')
+const actions = require('../actions')
+const txHelper = require('../../lib/tx-helper')
+
+module.exports = reduceApp
+
+
+function reduceApp (state, action) {
+ log.debug('App Reducer got ' + action.type)
+ // clone and defaults
+ const selectedAddress = state.metamask.selectedAddress
+ const hasUnconfActions = checkUnconfActions(state)
+ let name = 'accounts'
+ if (selectedAddress) {
+ name = 'accountDetail'
+ }
+ if (hasUnconfActions) {
+ log.debug('pending txs detected, defaulting to conf-tx view.')
+ name = 'confTx'
+ }
+
+ var defaultView = {
+ name,
+ detailView: null,
+ context: selectedAddress,
+ }
+
+ // confirm seed words
+ var seedWords = state.metamask.seedWords
+ var seedConfView = {
+ name: 'createVaultComplete',
+ seedWords,
+ }
+
+ // default state
+ var appState = extend({
+ shouldClose: false,
+ menuOpen: false,
+ currentView: seedWords ? seedConfView : defaultView,
+ accountDetail: {
+ subview: 'transactions',
+ },
+ transForward: true, // Used to render transition direction
+ isLoading: false, // Used to display loading indicator
+ warning: null, // Used to display error text
+ }, state.appState)
+
+ switch (action.type) {
+
+ // transition methods
+
+ case actions.TRANSITION_FORWARD:
+ return extend(appState, {
+ transForward: true,
+ })
+
+ case actions.TRANSITION_BACKWARD:
+ return extend(appState, {
+ transForward: false,
+ })
+
+ // intialize
+
+ case actions.SHOW_CREATE_VAULT:
+ return extend(appState, {
+ currentView: {
+ name: 'createVault',
+ },
+ transForward: true,
+ warning: null,
+ })
+
+ case actions.SHOW_RESTORE_VAULT:
+ return extend(appState, {
+ currentView: {
+ name: 'restoreVault',
+ },
+ transForward: true,
+ forgottenPassword: true,
+ })
+
+ case actions.FORGOT_PASSWORD:
+ return extend(appState, {
+ currentView: {
+ name: 'restoreVault',
+ },
+ transForward: false,
+ forgottenPassword: true,
+ })
+
+ case actions.SHOW_INIT_MENU:
+ return extend(appState, {
+ currentView: defaultView,
+ transForward: false,
+ })
+
+ case actions.SHOW_CONFIG_PAGE:
+ return extend(appState, {
+ currentView: {
+ name: 'config',
+ context: appState.currentView.context,
+ },
+ transForward: action.value,
+ })
+
+ case actions.SHOW_ADD_TOKEN_PAGE:
+ return extend(appState, {
+ currentView: {
+ name: 'add-token',
+ context: appState.currentView.context,
+ },
+ transForward: action.value,
+ })
+
+ case actions.SHOW_IMPORT_PAGE:
+
+ return extend(appState, {
+ currentView: {
+ name: 'import-menu',
+ },
+ transForward: true,
+ })
+
+ case actions.SHOW_INFO_PAGE:
+ return extend(appState, {
+ currentView: {
+ name: 'info',
+ context: appState.currentView.context,
+ },
+ transForward: true,
+ })
+
+ case actions.CREATE_NEW_VAULT_IN_PROGRESS:
+ return extend(appState, {
+ currentView: {
+ name: 'createVault',
+ inProgress: true,
+ },
+ transForward: true,
+ isLoading: true,
+ })
+
+ case actions.SHOW_NEW_VAULT_SEED:
+ return extend(appState, {
+ currentView: {
+ name: 'createVaultComplete',
+ seedWords: action.value,
+ },
+ transForward: true,
+ isLoading: false,
+ })
+
+ case actions.NEW_ACCOUNT_SCREEN:
+ return extend(appState, {
+ currentView: {
+ name: 'new-account',
+ context: appState.currentView.context,
+ },
+ transForward: true,
+ })
+
+ case actions.SHOW_SEND_PAGE:
+ return extend(appState, {
+ currentView: {
+ name: 'sendTransaction',
+ context: appState.currentView.context,
+ },
+ transForward: true,
+ warning: null,
+ })
+
+ case actions.SHOW_NEW_KEYCHAIN:
+ return extend(appState, {
+ currentView: {
+ name: 'newKeychain',
+ context: appState.currentView.context,
+ },
+ transForward: true,
+ })
+
+ // unlock
+
+ case actions.UNLOCK_METAMASK:
+ return extend(appState, {
+ forgottenPassword: appState.forgottenPassword ? !appState.forgottenPassword : null,
+ detailView: {},
+ transForward: true,
+ isLoading: false,
+ warning: null,
+ })
+
+ case actions.LOCK_METAMASK:
+ return extend(appState, {
+ currentView: defaultView,
+ transForward: false,
+ warning: null,
+ })
+
+ case actions.BACK_TO_INIT_MENU:
+ return extend(appState, {
+ warning: null,
+ transForward: false,
+ forgottenPassword: true,
+ currentView: {
+ name: 'InitMenu',
+ },
+ })
+
+ case actions.BACK_TO_UNLOCK_VIEW:
+ return extend(appState, {
+ warning: null,
+ transForward: true,
+ forgottenPassword: false,
+ currentView: {
+ name: 'UnlockScreen',
+ },
+ })
+ // reveal seed words
+
+ case actions.REVEAL_SEED_CONFIRMATION:
+ return extend(appState, {
+ currentView: {
+ name: 'reveal-seed-conf',
+ },
+ transForward: true,
+ warning: null,
+ })
+
+ // accounts
+
+ case actions.SET_SELECTED_ACCOUNT:
+ return extend(appState, {
+ activeAddress: action.value,
+ })
+
+ case actions.GO_HOME:
+ return extend(appState, {
+ currentView: extend(appState.currentView, {
+ name: 'accountDetail',
+ }),
+ accountDetail: {
+ subview: 'transactions',
+ accountExport: 'none',
+ privateKey: '',
+ },
+ transForward: false,
+ warning: null,
+ })
+
+ case actions.SHOW_ACCOUNT_DETAIL:
+ return extend(appState, {
+ forgottenPassword: appState.forgottenPassword ? !appState.forgottenPassword : null,
+ currentView: {
+ name: 'accountDetail',
+ context: action.value,
+ },
+ accountDetail: {
+ subview: 'transactions',
+ accountExport: 'none',
+ privateKey: '',
+ },
+ transForward: false,
+ })
+
+ case actions.BACK_TO_ACCOUNT_DETAIL:
+ return extend(appState, {
+ currentView: {
+ name: 'accountDetail',
+ context: action.value,
+ },
+ accountDetail: {
+ subview: 'transactions',
+ accountExport: 'none',
+ privateKey: '',
+ },
+ transForward: false,
+ })
+
+ case actions.SHOW_ACCOUNTS_PAGE:
+ return extend(appState, {
+ currentView: {
+ name: seedWords ? 'createVaultComplete' : 'accounts',
+ seedWords,
+ },
+ transForward: true,
+ isLoading: false,
+ warning: null,
+ scrollToBottom: false,
+ forgottenPassword: false,
+ })
+
+ case actions.SHOW_NOTICE:
+ return extend(appState, {
+ transForward: true,
+ isLoading: false,
+ })
+
+ case actions.REVEAL_ACCOUNT:
+ return extend(appState, {
+ scrollToBottom: true,
+ })
+
+ case actions.SHOW_CONF_TX_PAGE:
+ return extend(appState, {
+ currentView: {
+ name: 'confTx',
+ context: 0,
+ },
+ transForward: action.transForward,
+ warning: null,
+ isLoading: false,
+ })
+
+ case actions.SHOW_CONF_MSG_PAGE:
+ return extend(appState, {
+ currentView: {
+ name: hasUnconfActions ? 'confTx' : 'account-detail',
+ context: 0,
+ },
+ transForward: true,
+ warning: null,
+ isLoading: false,
+ })
+
+ case actions.COMPLETED_TX:
+ log.debug('reducing COMPLETED_TX for tx ' + action.value)
+ const otherUnconfActions = getUnconfActionList(state)
+ .filter(tx => tx.id !== action.value)
+ const hasOtherUnconfActions = otherUnconfActions.length > 0
+
+ if (hasOtherUnconfActions) {
+ log.debug('reducer detected txs - rendering confTx view')
+ return extend(appState, {
+ transForward: false,
+ currentView: {
+ name: 'confTx',
+ context: 0,
+ },
+ warning: null,
+ })
+ } else {
+ log.debug('attempting to close popup')
+ return extend(appState, {
+ // indicate notification should close
+ shouldClose: true,
+ transForward: false,
+ warning: null,
+ currentView: {
+ name: 'accountDetail',
+ context: state.metamask.selectedAddress,
+ },
+ accountDetail: {
+ subview: 'transactions',
+ },
+ })
+ }
+
+ case actions.NEXT_TX:
+ return extend(appState, {
+ transForward: true,
+ currentView: {
+ name: 'confTx',
+ context: ++appState.currentView.context,
+ warning: null,
+ },
+ })
+
+ case actions.VIEW_PENDING_TX:
+ const context = indexForPending(state, action.value)
+ return extend(appState, {
+ transForward: true,
+ currentView: {
+ name: 'confTx',
+ context,
+ warning: null,
+ },
+ })
+
+ case actions.PREVIOUS_TX:
+ return extend(appState, {
+ transForward: false,
+ currentView: {
+ name: 'confTx',
+ context: --appState.currentView.context,
+ warning: null,
+ },
+ })
+
+ case actions.TRANSACTION_ERROR:
+ return extend(appState, {
+ currentView: {
+ name: 'confTx',
+ errorMessage: 'There was a problem submitting this transaction.',
+ },
+ })
+
+ case actions.UNLOCK_FAILED:
+ return extend(appState, {
+ warning: action.value || 'Incorrect password. Try again.',
+ })
+
+ case actions.SHOW_LOADING:
+ return extend(appState, {
+ isLoading: true,
+ loadingMessage: action.value,
+ })
+
+ case actions.HIDE_LOADING:
+ return extend(appState, {
+ isLoading: false,
+ })
+
+ case actions.SHOW_SUB_LOADING_INDICATION:
+ return extend(appState, {
+ isSubLoading: true,
+ })
+
+ case actions.HIDE_SUB_LOADING_INDICATION:
+ return extend(appState, {
+ isSubLoading: false,
+ })
+ case actions.CLEAR_SEED_WORD_CACHE:
+ return extend(appState, {
+ transForward: true,
+ currentView: {},
+ isLoading: false,
+ accountDetail: {
+ subview: 'transactions',
+ accountExport: 'none',
+ privateKey: '',
+ },
+ })
+
+ case actions.DISPLAY_WARNING:
+ return extend(appState, {
+ warning: action.value,
+ isLoading: false,
+ })
+
+ case actions.HIDE_WARNING:
+ return extend(appState, {
+ warning: undefined,
+ })
+
+ case actions.REQUEST_ACCOUNT_EXPORT:
+ return extend(appState, {
+ transForward: true,
+ currentView: {
+ name: 'accountDetail',
+ context: appState.currentView.context,
+ },
+ accountDetail: {
+ subview: 'export',
+ accountExport: 'requested',
+ },
+ })
+
+ case actions.EXPORT_ACCOUNT:
+ return extend(appState, {
+ accountDetail: {
+ subview: 'export',
+ accountExport: 'completed',
+ },
+ })
+
+ case actions.SHOW_PRIVATE_KEY:
+ return extend(appState, {
+ accountDetail: {
+ subview: 'export',
+ accountExport: 'completed',
+ privateKey: action.value,
+ },
+ })
+
+ case actions.BUY_ETH_VIEW:
+ return extend(appState, {
+ transForward: true,
+ currentView: {
+ name: 'buyEth',
+ context: appState.currentView.name,
+ },
+ identity: state.metamask.identities[action.value],
+ buyView: {
+ subview: 'Coinbase',
+ amount: '15.00',
+ buyAddress: action.value,
+ formView: {
+ coinbase: true,
+ shapeshift: false,
+ },
+ },
+ })
+
+ case actions.COINBASE_SUBVIEW:
+ return extend(appState, {
+ buyView: {
+ subview: 'Coinbase',
+ formView: {
+ coinbase: true,
+ shapeshift: false,
+ },
+ buyAddress: appState.buyView.buyAddress,
+ amount: appState.buyView.amount,
+ },
+ })
+
+ case actions.SHAPESHIFT_SUBVIEW:
+ return extend(appState, {
+ buyView: {
+ subview: 'ShapeShift',
+ formView: {
+ coinbase: false,
+ shapeshift: true,
+ marketinfo: action.value.marketinfo,
+ coinOptions: action.value.coinOptions,
+ },
+ buyAddress: appState.buyView.buyAddress,
+ amount: appState.buyView.amount,
+ },
+ })
+
+ case actions.PAIR_UPDATE:
+ return extend(appState, {
+ buyView: {
+ subview: 'ShapeShift',
+ formView: {
+ coinbase: false,
+ shapeshift: true,
+ marketinfo: action.value.marketinfo,
+ coinOptions: appState.buyView.formView.coinOptions,
+ },
+ buyAddress: appState.buyView.buyAddress,
+ amount: appState.buyView.amount,
+ warning: null,
+ },
+ })
+
+ case actions.SHOW_QR:
+ return extend(appState, {
+ qrRequested: true,
+ transForward: true,
+
+ Qr: {
+ message: action.value.message,
+ data: action.value.data,
+ },
+ })
+
+ case actions.SHOW_QR_VIEW:
+ return extend(appState, {
+ currentView: {
+ name: 'qr',
+ context: appState.currentView.context,
+ },
+ transForward: true,
+ Qr: {
+ message: action.value.message,
+ data: action.value.data,
+ },
+ })
+ default:
+ return appState
+ }
+}
+
+function checkUnconfActions (state) {
+ const unconfActionList = getUnconfActionList(state)
+ const hasUnconfActions = unconfActionList.length > 0
+ return hasUnconfActions
+}
+
+function getUnconfActionList (state) {
+ const { unapprovedTxs, unapprovedMsgs,
+ unapprovedPersonalMsgs, network } = state.metamask
+
+ const unconfActionList = txHelper(unapprovedTxs, unapprovedMsgs, unapprovedPersonalMsgs, network)
+ return unconfActionList
+}
+
+function indexForPending (state, txId) {
+ const unconfTxList = getUnconfActionList(state)
+ const match = unconfTxList.find((tx) => tx.id === txId)
+ const index = unconfTxList.indexOf(match)
+ return index
+}
diff --git a/ui/responsive/app/reducers/identities.js b/ui/responsive/app/reducers/identities.js
new file mode 100644
index 000000000..341a404e7
--- /dev/null
+++ b/ui/responsive/app/reducers/identities.js
@@ -0,0 +1,15 @@
+const extend = require('xtend')
+
+module.exports = reduceIdentities
+
+function reduceIdentities (state, action) {
+ // clone + defaults
+ var idState = extend({
+
+ }, state.identities)
+
+ switch (action.type) {
+ default:
+ return idState
+ }
+}
diff --git a/ui/responsive/app/reducers/metamask.js b/ui/responsive/app/reducers/metamask.js
new file mode 100644
index 000000000..e0c416c2d
--- /dev/null
+++ b/ui/responsive/app/reducers/metamask.js
@@ -0,0 +1,137 @@
+const extend = require('xtend')
+const actions = require('../actions')
+
+module.exports = reduceMetamask
+
+function reduceMetamask (state, action) {
+ let newState
+
+ // clone + defaults
+ var metamaskState = extend({
+ isInitialized: false,
+ isUnlocked: false,
+ rpcTarget: 'https://rawtestrpc.metamask.io/',
+ identities: {},
+ unapprovedTxs: {},
+ noActiveNotices: true,
+ lastUnreadNotice: undefined,
+ frequentRpcList: [],
+ addressBook: [],
+ }, state.metamask)
+
+ switch (action.type) {
+
+ case actions.SHOW_ACCOUNTS_PAGE:
+ newState = extend(metamaskState)
+ delete newState.seedWords
+ return newState
+
+ case actions.SHOW_NOTICE:
+ return extend(metamaskState, {
+ noActiveNotices: false,
+ lastUnreadNotice: action.value,
+ })
+
+ case actions.CLEAR_NOTICES:
+ return extend(metamaskState, {
+ noActiveNotices: true,
+ })
+
+ case actions.UPDATE_METAMASK_STATE:
+ return extend(metamaskState, action.value)
+
+ case actions.UNLOCK_METAMASK:
+ return extend(metamaskState, {
+ isUnlocked: true,
+ isInitialized: true,
+ selectedAddress: action.value,
+ })
+
+ case actions.LOCK_METAMASK:
+ return extend(metamaskState, {
+ isUnlocked: false,
+ })
+
+ case actions.SET_RPC_LIST:
+ return extend(metamaskState, {
+ frequentRpcList: action.value,
+ })
+
+ case actions.SET_RPC_TARGET:
+ return extend(metamaskState, {
+ provider: {
+ type: 'rpc',
+ rpcTarget: action.value,
+ },
+ })
+
+ case actions.SET_PROVIDER_TYPE:
+ return extend(metamaskState, {
+ provider: {
+ type: action.value,
+ },
+ })
+
+ case actions.COMPLETED_TX:
+ var stringId = String(action.id)
+ newState = extend(metamaskState, {
+ unapprovedTxs: {},
+ unapprovedMsgs: {},
+ })
+ for (const id in metamaskState.unapprovedTxs) {
+ if (id !== stringId) {
+ newState.unapprovedTxs[id] = metamaskState.unapprovedTxs[id]
+ }
+ }
+ for (const id in metamaskState.unapprovedMsgs) {
+ if (id !== stringId) {
+ newState.unapprovedMsgs[id] = metamaskState.unapprovedMsgs[id]
+ }
+ }
+ return newState
+
+ case actions.SHOW_NEW_VAULT_SEED:
+ return extend(metamaskState, {
+ isUnlocked: true,
+ isInitialized: false,
+ seedWords: action.value,
+ })
+
+ case actions.CLEAR_SEED_WORD_CACHE:
+ newState = extend(metamaskState, {
+ isUnlocked: true,
+ isInitialized: true,
+ selectedAddress: action.value,
+ })
+ delete newState.seedWords
+ return newState
+
+ case actions.SHOW_ACCOUNT_DETAIL:
+ newState = extend(metamaskState, {
+ isUnlocked: true,
+ isInitialized: true,
+ selectedAddress: action.value,
+ })
+ delete newState.seedWords
+ return newState
+
+ case actions.SAVE_ACCOUNT_LABEL:
+ const account = action.value.account
+ const name = action.value.label
+ var id = {}
+ id[account] = extend(metamaskState.identities[account], { name })
+ var identities = extend(metamaskState.identities, id)
+ return extend(metamaskState, { identities })
+
+ case actions.SET_CURRENT_FIAT:
+ return extend(metamaskState, {
+ currentCurrency: action.value.currentCurrency,
+ conversionRate: action.value.conversionRate,
+ conversionDate: action.value.conversionDate,
+ })
+
+ default:
+ return metamaskState
+
+ }
+}
diff --git a/ui/responsive/app/root.js b/ui/responsive/app/root.js
new file mode 100644
index 000000000..9e7314b20
--- /dev/null
+++ b/ui/responsive/app/root.js
@@ -0,0 +1,22 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const Provider = require('react-redux').Provider
+const h = require('react-hyperscript')
+const App = require('./app')
+
+module.exports = Root
+
+inherits(Root, Component)
+function Root () { Component.call(this) }
+
+Root.prototype.render = function () {
+ return (
+
+ h(Provider, {
+ store: this.props.store,
+ }, [
+ h(App),
+ ])
+
+ )
+}
diff --git a/ui/responsive/app/send.js b/ui/responsive/app/send.js
new file mode 100644
index 000000000..a21a219eb
--- /dev/null
+++ b/ui/responsive/app/send.js
@@ -0,0 +1,288 @@
+const inherits = require('util').inherits
+const PersistentForm = require('../lib/persistent-form')
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const Identicon = require('./components/identicon')
+const actions = require('./actions')
+const util = require('./util')
+const numericBalance = require('./util').numericBalance
+const addressSummary = require('./util').addressSummary
+const isHex = require('./util').isHex
+const EthBalance = require('./components/eth-balance')
+const EnsInput = require('./components/ens-input')
+const ethUtil = require('ethereumjs-util')
+module.exports = connect(mapStateToProps)(SendTransactionScreen)
+
+function mapStateToProps (state) {
+ var result = {
+ address: state.metamask.selectedAddress,
+ accounts: state.metamask.accounts,
+ identities: state.metamask.identities,
+ warning: state.appState.warning,
+ network: state.metamask.network,
+ addressBook: state.metamask.addressBook,
+ conversionRate: state.metamask.conversionRate,
+ currentCurrency: state.metamask.currentCurrency,
+ }
+
+ result.error = result.warning && result.warning.split('.')[0]
+
+ result.account = result.accounts[result.address]
+ result.identity = result.identities[result.address]
+ result.balance = result.account ? numericBalance(result.account.balance) : null
+
+ return result
+}
+
+inherits(SendTransactionScreen, PersistentForm)
+function SendTransactionScreen () {
+ PersistentForm.call(this)
+}
+
+SendTransactionScreen.prototype.render = function () {
+ this.persistentFormParentId = 'send-tx-form'
+
+ const props = this.props
+ const {
+ address,
+ account,
+ identity,
+ network,
+ identities,
+ addressBook,
+ conversionRate,
+ currentCurrency,
+ } = props
+
+ return (
+
+ h('.send-screen.flex-column.flex-grow', [
+
+ //
+ // Sender Profile
+ //
+
+ h('.account-data-subsection.flex-row.flex-grow', {
+ style: {
+ margin: '0 20px',
+ },
+ }, [
+
+ // header - identicon + nav
+ h('.flex-row.flex-space-between', {
+ style: {
+ marginTop: '15px',
+ },
+ }, [
+ // back button
+ h('i.fa.fa-arrow-left.fa-lg.cursor-pointer.color-orange', {
+ onClick: this.back.bind(this),
+ }),
+
+ // large identicon
+ h('.identicon-wrapper.flex-column.flex-center.select-none', [
+ h(Identicon, {
+ diameter: 62,
+ address: address,
+ }),
+ ]),
+
+ // invisible place holder
+ h('i.fa.fa-users.fa-lg.invisible', {
+ style: {
+ marginTop: '28px',
+ },
+ }),
+
+ ]),
+
+ // account label
+
+ h('.flex-column', {
+ style: {
+ marginTop: '10px',
+ alignItems: 'flex-start',
+ },
+ }, [
+ h('h2.font-medium.color-forest.flex-center', {
+ style: {
+ paddingTop: '8px',
+ marginBottom: '8px',
+ },
+ }, identity && identity.name),
+
+ // address and getter actions
+ h('.flex-row.flex-center', {
+ style: {
+ marginBottom: '8px',
+ },
+ }, [
+
+ h('div', {
+ style: {
+ lineHeight: '16px',
+ },
+ }, addressSummary(address)),
+
+ ]),
+
+ // balance
+ h('.flex-row.flex-center', [
+
+ h(EthBalance, {
+ value: account && account.balance,
+ conversionRate,
+ currentCurrency,
+ }),
+
+ ]),
+ ]),
+ ]),
+
+ //
+ // Required Fields
+ //
+
+ h('h3.flex-center.text-transform-uppercase', {
+ style: {
+ background: '#EBEBEB',
+ color: '#AEAEAE',
+ marginTop: '15px',
+ marginBottom: '16px',
+ },
+ }, [
+ 'Send Transaction',
+ ]),
+
+ // error message
+ props.error && h('span.error.flex-center', props.error),
+
+ // 'to' field
+ h('section.flex-row.flex-center', [
+ h(EnsInput, {
+ name: 'address',
+ placeholder: 'Recipient Address',
+ onChange: this.recipientDidChange.bind(this),
+ network,
+ identities,
+ addressBook,
+ }),
+ ]),
+
+ // 'amount' and send button
+ h('section.flex-row.flex-center', [
+
+ h('input.large-input', {
+ name: 'amount',
+ placeholder: 'Amount',
+ type: 'number',
+ style: {
+ marginRight: '6px',
+ },
+ dataset: {
+ persistentFormId: 'tx-amount',
+ },
+ }),
+
+ h('button.primary', {
+ onClick: this.onSubmit.bind(this),
+ style: {
+ textTransform: 'uppercase',
+ },
+ }, 'Next'),
+
+ ]),
+
+ //
+ // Optional Fields
+ //
+ h('h3.flex-center.text-transform-uppercase', {
+ style: {
+ background: '#EBEBEB',
+ color: '#AEAEAE',
+ marginTop: '16px',
+ marginBottom: '16px',
+ },
+ }, [
+ 'Transaction Data (optional)',
+ ]),
+
+ // 'data' field
+ h('section.flex-column.flex-center', [
+ h('input.large-input', {
+ name: 'txData',
+ placeholder: '0x01234',
+ style: {
+ width: '100%',
+ resize: 'none',
+ },
+ dataset: {
+ persistentFormId: 'tx-data',
+ },
+ }),
+ ]),
+ ])
+ )
+}
+
+SendTransactionScreen.prototype.navigateToAccounts = function (event) {
+ event.stopPropagation()
+ this.props.dispatch(actions.showAccountsPage())
+}
+
+SendTransactionScreen.prototype.back = function () {
+ var address = this.props.address
+ this.props.dispatch(actions.backToAccountDetail(address))
+}
+
+SendTransactionScreen.prototype.recipientDidChange = function (recipient, nickname) {
+ this.setState({
+ recipient: recipient,
+ nickname: nickname,
+ })
+}
+
+SendTransactionScreen.prototype.onSubmit = function () {
+ const state = this.state || {}
+ const recipient = state.recipient || document.querySelector('input[name="address"]').value.replace(/^[.\s]+|[.\s]+$/g, '')
+ const nickname = state.nickname || ' '
+ const input = document.querySelector('input[name="amount"]').value
+ const value = util.normalizeEthStringToWei(input)
+ const txData = document.querySelector('input[name="txData"]').value
+ const balance = this.props.balance
+ let message
+
+ if (value.gt(balance)) {
+ message = 'Insufficient funds.'
+ return this.props.dispatch(actions.displayWarning(message))
+ }
+
+ if (input < 0) {
+ message = 'Can not send negative amounts of ETH.'
+ return this.props.dispatch(actions.displayWarning(message))
+ }
+
+ if ((!util.isValidAddress(recipient) && !txData) || (!recipient && !txData)) {
+ message = 'Recipient address is invalid.'
+ return this.props.dispatch(actions.displayWarning(message))
+ }
+
+ if (!isHex(ethUtil.stripHexPrefix(txData)) && txData) {
+ message = 'Transaction data must be hex string.'
+ return this.props.dispatch(actions.displayWarning(message))
+ }
+
+ this.props.dispatch(actions.hideWarning())
+
+ this.props.dispatch(actions.addToAddressBook(recipient, nickname))
+
+ var txParams = {
+ from: this.props.address,
+ value: '0x' + value.toString(16),
+ }
+
+ if (recipient) txParams.to = ethUtil.addHexPrefix(recipient)
+ if (txData) txParams.data = txData
+
+ this.props.dispatch(actions.signTx(txParams))
+}
diff --git a/ui/responsive/app/settings.js b/ui/responsive/app/settings.js
new file mode 100644
index 000000000..454cc95e0
--- /dev/null
+++ b/ui/responsive/app/settings.js
@@ -0,0 +1,59 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const actions = require('./actions')
+
+module.exports = connect(mapStateToProps)(AppSettingsPage)
+
+function mapStateToProps (state) {
+ return {}
+}
+
+inherits(AppSettingsPage, Component)
+function AppSettingsPage () {
+ Component.call(this)
+}
+
+AppSettingsPage.prototype.render = function () {
+ return (
+
+ h('.account-detail-section.flex-column.flex-grow', [
+
+ // subtitle and nav
+ h('.flex-row.flex-center', [
+ h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
+ onClick: this.navigateToAccounts.bind(this),
+ }),
+ h('h2.page-subtitle', 'Settings'),
+ ]),
+
+ h('label', {
+ htmlFor: 'settings-rpc-endpoint',
+ }, 'RPC Endpoint:'),
+ h('input', {
+ type: 'url',
+ id: 'settings-rpc-endpoint',
+ onKeyPress: this.onKeyPress.bind(this),
+ }),
+
+ ])
+
+ )
+}
+
+AppSettingsPage.prototype.componentDidMount = function () {
+ document.querySelector('input').focus()
+}
+
+AppSettingsPage.prototype.onKeyPress = function (event) {
+ // get submit event
+ if (event.key === 'Enter') {
+ // this.submitPassword(event)
+ }
+}
+
+AppSettingsPage.prototype.navigateToAccounts = function (event) {
+ event.stopPropagation()
+ this.props.dispatch(actions.showAccountsPage())
+}
diff --git a/ui/responsive/app/store.js b/ui/responsive/app/store.js
new file mode 100644
index 000000000..ba9e58b49
--- /dev/null
+++ b/ui/responsive/app/store.js
@@ -0,0 +1,21 @@
+const createStore = require('redux').createStore
+const applyMiddleware = require('redux').applyMiddleware
+const thunkMiddleware = require('redux-thunk')
+const rootReducer = require('./reducers')
+const createLogger = require('redux-logger')
+
+global.METAMASK_DEBUG = 'GULP_METAMASK_DEBUG'
+
+module.exports = configureStore
+
+const loggerMiddleware = createLogger({
+ predicate: () => global.METAMASK_DEBUG,
+})
+
+const middlewares = [thunkMiddleware, loggerMiddleware]
+
+const createStoreWithMiddleware = applyMiddleware(...middlewares)(createStore)
+
+function configureStore (initialState) {
+ return createStoreWithMiddleware(rootReducer, initialState)
+}
diff --git a/ui/responsive/app/template.js b/ui/responsive/app/template.js
new file mode 100644
index 000000000..d15b30fd2
--- /dev/null
+++ b/ui/responsive/app/template.js
@@ -0,0 +1,30 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+
+module.exports = connect(mapStateToProps)(COMPONENTNAME)
+
+function mapStateToProps (state) {
+ return {}
+}
+
+inherits(COMPONENTNAME, Component)
+function COMPONENTNAME () {
+ Component.call(this)
+}
+
+COMPONENTNAME.prototype.render = function () {
+ const props = this.props
+
+ return (
+ h('div', {
+ style: {
+ background: 'blue',
+ },
+ }, [
+ `Hello, ${props.sender}`,
+ ])
+ )
+}
+
diff --git a/ui/responsive/app/unlock.js b/ui/responsive/app/unlock.js
new file mode 100644
index 000000000..1aee3c5d0
--- /dev/null
+++ b/ui/responsive/app/unlock.js
@@ -0,0 +1,118 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const connect = require('react-redux').connect
+const actions = require('./actions')
+const getCaretCoordinates = require('textarea-caret')
+const EventEmitter = require('events').EventEmitter
+
+const Mascot = require('./components/mascot')
+
+module.exports = connect(mapStateToProps)(UnlockScreen)
+
+inherits(UnlockScreen, Component)
+function UnlockScreen () {
+ Component.call(this)
+ this.animationEventEmitter = new EventEmitter()
+}
+
+function mapStateToProps (state) {
+ return {
+ warning: state.appState.warning,
+ }
+}
+
+UnlockScreen.prototype.render = function () {
+ const state = this.props
+ const warning = state.warning
+ return (
+ h('.flex-column', [
+ h('.unlock-screen.flex-column.flex-center.flex-grow', [
+
+ h(Mascot, {
+ animationEventEmitter: this.animationEventEmitter,
+ }),
+
+ h('h1', {
+ style: {
+ fontSize: '1.4em',
+ textTransform: 'uppercase',
+ color: '#7F8082',
+ },
+ }, 'MetaMask'),
+
+ h('input.large-input', {
+ type: 'password',
+ id: 'password-box',
+ placeholder: 'enter password',
+ style: {
+
+ },
+ onKeyPress: this.onKeyPress.bind(this),
+ onInput: this.inputChanged.bind(this),
+ }),
+
+ h('.error', {
+ style: {
+ display: warning ? 'block' : 'none',
+ padding: '0 20px',
+ textAlign: 'center',
+ },
+ }, warning),
+
+ h('button.primary.cursor-pointer', {
+ onClick: this.onSubmit.bind(this),
+ style: {
+ margin: 10,
+ },
+ }, 'Unlock'),
+ ]),
+
+ h('.flex-row.flex-center.flex-grow', [
+ h('p.pointer', {
+ onClick: () => this.props.dispatch(actions.forgotPassword()),
+ style: {
+ fontSize: '0.8em',
+ color: 'rgb(247, 134, 28)',
+ textDecoration: 'underline',
+ },
+ }, 'I forgot my password.'),
+ ]),
+ ])
+ )
+}
+
+UnlockScreen.prototype.componentDidMount = function () {
+ document.getElementById('password-box').focus()
+}
+
+UnlockScreen.prototype.onSubmit = function (event) {
+ const input = document.getElementById('password-box')
+ const password = input.value
+ this.props.dispatch(actions.tryUnlockMetamask(password))
+}
+
+UnlockScreen.prototype.onKeyPress = function (event) {
+ if (event.key === 'Enter') {
+ this.submitPassword(event)
+ }
+}
+
+UnlockScreen.prototype.submitPassword = function (event) {
+ var element = event.target
+ var password = element.value
+ // reset input
+ element.value = ''
+ this.props.dispatch(actions.tryUnlockMetamask(password))
+}
+
+UnlockScreen.prototype.inputChanged = function (event) {
+ // tell mascot to look at page action
+ var element = event.target
+ var boundingRect = element.getBoundingClientRect()
+ var coordinates = getCaretCoordinates(element, element.selectionEnd)
+ this.animationEventEmitter.emit('point', {
+ x: boundingRect.left + coordinates.left - element.scrollLeft,
+ y: boundingRect.top + coordinates.top - element.scrollTop,
+ })
+}
diff --git a/ui/responsive/app/util.js b/ui/responsive/app/util.js
new file mode 100644
index 000000000..ac3f42c6b
--- /dev/null
+++ b/ui/responsive/app/util.js
@@ -0,0 +1,217 @@
+const ethUtil = require('ethereumjs-util')
+
+var valueTable = {
+ wei: '1000000000000000000',
+ kwei: '1000000000000000',
+ mwei: '1000000000000',
+ gwei: '1000000000',
+ szabo: '1000000',
+ finney: '1000',
+ ether: '1',
+ kether: '0.001',
+ mether: '0.000001',
+ gether: '0.000000001',
+ tether: '0.000000000001',
+}
+var bnTable = {}
+for (var currency in valueTable) {
+ bnTable[currency] = new ethUtil.BN(valueTable[currency], 10)
+}
+
+module.exports = {
+ valuesFor: valuesFor,
+ addressSummary: addressSummary,
+ miniAddressSummary: miniAddressSummary,
+ isAllOneCase: isAllOneCase,
+ isValidAddress: isValidAddress,
+ numericBalance: numericBalance,
+ parseBalance: parseBalance,
+ formatBalance: formatBalance,
+ generateBalanceObject: generateBalanceObject,
+ dataSize: dataSize,
+ readableDate: readableDate,
+ normalizeToWei: normalizeToWei,
+ normalizeEthStringToWei: normalizeEthStringToWei,
+ normalizeNumberToWei: normalizeNumberToWei,
+ valueTable: valueTable,
+ bnTable: bnTable,
+ isHex: isHex,
+}
+
+function valuesFor (obj) {
+ if (!obj) return []
+ return Object.keys(obj)
+ .map(function (key) { return obj[key] })
+}
+
+function addressSummary (address, firstSegLength = 10, lastSegLength = 4, includeHex = true) {
+ if (!address) return ''
+ let checked = ethUtil.toChecksumAddress(address)
+ if (!includeHex) {
+ checked = ethUtil.stripHexPrefix(checked)
+ }
+ return checked ? checked.slice(0, firstSegLength) + '...' + checked.slice(checked.length - lastSegLength) : '...'
+}
+
+function miniAddressSummary (address) {
+ if (!address) return ''
+ var checked = ethUtil.toChecksumAddress(address)
+ return checked ? checked.slice(0, 4) + '...' + checked.slice(-4) : '...'
+}
+
+function isValidAddress (address) {
+ var prefixed = ethUtil.addHexPrefix(address)
+ if (address === '0x0000000000000000000000000000000000000000') return false
+ return (isAllOneCase(prefixed) && ethUtil.isValidAddress(prefixed)) || ethUtil.isValidChecksumAddress(prefixed)
+}
+
+function isAllOneCase (address) {
+ if (!address) return true
+ var lower = address.toLowerCase()
+ var upper = address.toUpperCase()
+ return address === lower || address === upper
+}
+
+// Takes wei Hex, returns wei BN, even if input is null
+function numericBalance (balance) {
+ if (!balance) return new ethUtil.BN(0, 16)
+ var stripped = ethUtil.stripHexPrefix(balance)
+ return new ethUtil.BN(stripped, 16)
+}
+
+// Takes hex, returns [beforeDecimal, afterDecimal]
+function parseBalance (balance) {
+ var beforeDecimal, afterDecimal
+ const wei = numericBalance(balance)
+ var weiString = wei.toString()
+ const trailingZeros = /0+$/
+
+ beforeDecimal = weiString.length > 18 ? weiString.slice(0, weiString.length - 18) : '0'
+ afterDecimal = ('000000000000000000' + wei).slice(-18).replace(trailingZeros, '')
+ if (afterDecimal === '') { afterDecimal = '0' }
+ return [beforeDecimal, afterDecimal]
+}
+
+// Takes wei hex, returns an object with three properties.
+// Its "formatted" property is what we generally use to render values.
+function formatBalance (balance, decimalsToKeep, needsParse = true) {
+ var parsed = needsParse ? parseBalance(balance) : balance.split('.')
+ var beforeDecimal = parsed[0]
+ var afterDecimal = parsed[1]
+ var formatted = 'None'
+ if (decimalsToKeep === undefined) {
+ if (beforeDecimal === '0') {
+ if (afterDecimal !== '0') {
+ var sigFigs = afterDecimal.match(/^0*(.{2})/) // default: grabs 2 most significant digits
+ if (sigFigs) { afterDecimal = sigFigs[0] }
+ formatted = '0.' + afterDecimal + ' ETH'
+ }
+ } else {
+ formatted = beforeDecimal + '.' + afterDecimal.slice(0, 3) + ' ETH'
+ }
+ } else {
+ afterDecimal += Array(decimalsToKeep).join('0')
+ formatted = beforeDecimal + '.' + afterDecimal.slice(0, decimalsToKeep) + ' ETH'
+ }
+ return formatted
+}
+
+
+function generateBalanceObject (formattedBalance, decimalsToKeep = 1) {
+ var balance = formattedBalance.split(' ')[0]
+ var label = formattedBalance.split(' ')[1]
+ var beforeDecimal = balance.split('.')[0]
+ var afterDecimal = balance.split('.')[1]
+ var shortBalance = shortenBalance(balance, decimalsToKeep)
+
+ if (beforeDecimal === '0' && afterDecimal.substr(0, 5) === '00000') {
+ // eslint-disable-next-line eqeqeq
+ if (afterDecimal == 0) {
+ balance = '0'
+ } else {
+ balance = '<1.0e-5'
+ }
+ } else if (beforeDecimal !== '0') {
+ balance = `${beforeDecimal}.${afterDecimal.slice(0, decimalsToKeep)}`
+ }
+
+ return { balance, label, shortBalance }
+}
+
+function shortenBalance (balance, decimalsToKeep = 1) {
+ var truncatedValue
+ var convertedBalance = parseFloat(balance)
+ if (convertedBalance > 1000000) {
+ truncatedValue = (balance / 1000000).toFixed(decimalsToKeep)
+ return `${truncatedValue}m`
+ } else if (convertedBalance > 1000) {
+ truncatedValue = (balance / 1000).toFixed(decimalsToKeep)
+ return `${truncatedValue}k`
+ } else if (convertedBalance === 0) {
+ return '0'
+ } else if (convertedBalance < 0.001) {
+ return '<0.001'
+ } else if (convertedBalance < 1) {
+ var stringBalance = convertedBalance.toString()
+ if (stringBalance.split('.')[1].length > 3) {
+ return convertedBalance.toFixed(3)
+ } else {
+ return stringBalance
+ }
+ } else {
+ return convertedBalance.toFixed(decimalsToKeep)
+ }
+}
+
+function dataSize (data) {
+ var size = data ? ethUtil.stripHexPrefix(data).length : 0
+ return size + ' bytes'
+}
+
+// Takes a BN and an ethereum currency name,
+// returns a BN in wei
+function normalizeToWei (amount, currency) {
+ try {
+ return amount.mul(bnTable.wei).div(bnTable[currency])
+ } catch (e) {}
+ return amount
+}
+
+function normalizeEthStringToWei (str) {
+ const parts = str.split('.')
+ let eth = new ethUtil.BN(parts[0], 10).mul(bnTable.wei)
+ if (parts[1]) {
+ var decimal = parts[1]
+ while (decimal.length < 18) {
+ decimal += '0'
+ }
+ const decimalBN = new ethUtil.BN(decimal, 10)
+ eth = eth.add(decimalBN)
+ }
+ return eth
+}
+
+var multiple = new ethUtil.BN('10000', 10)
+function normalizeNumberToWei (n, currency) {
+ var enlarged = n * 10000
+ var amount = new ethUtil.BN(String(enlarged), 10)
+ return normalizeToWei(amount, currency).div(multiple)
+}
+
+function readableDate (ms) {
+ var date = new Date(ms)
+ var month = date.getMonth()
+ var day = date.getDate()
+ var year = date.getFullYear()
+ var hours = date.getHours()
+ var minutes = '0' + date.getMinutes()
+ var seconds = '0' + date.getSeconds()
+
+ var dateStr = `${month}/${day}/${year}`
+ var time = `${hours}:${minutes.substr(-2)}:${seconds.substr(-2)}`
+ return `${dateStr} ${time}`
+}
+
+function isHex (str) {
+ return Boolean(str.match(/^(0x)?[0-9a-fA-F]+$/))
+}
diff --git a/ui/responsive/css.js b/ui/responsive/css.js
new file mode 100644
index 000000000..7c394a87b
--- /dev/null
+++ b/ui/responsive/css.js
@@ -0,0 +1,29 @@
+const fs = require('fs')
+const path = require('path')
+
+module.exports = bundleCss
+
+var cssFiles = {
+ 'fonts.css': fs.readFileSync(path.join(__dirname, '/app/css/fonts.css'), 'utf8'),
+ 'reset.css': fs.readFileSync(path.join(__dirname, '/app/css/reset.css'), 'utf8'),
+ 'lib.css': fs.readFileSync(path.join(__dirname, '/app/css/lib.css'), 'utf8'),
+ 'index.css': fs.readFileSync(path.join(__dirname, '/app/css/index.css'), 'utf8'),
+ 'transitions.css': fs.readFileSync(path.join(__dirname, '/app/css/transitions.css'), 'utf8'),
+ 'react-tooltip-component.css': fs.readFileSync(path.join(__dirname, '..', '..', 'node_modules', 'react-tooltip-component', 'dist', 'react-tooltip-component.css'), 'utf8'),
+ 'react-css': fs.readFileSync(path.join(__dirname, '..', '..', 'node_modules', 'react-select', 'dist', 'react-select.css'), 'utf8'),
+}
+
+function bundleCss () {
+ var cssBundle = Object.keys(cssFiles).reduce(function (bundle, fileName) {
+ var fileContent = cssFiles[fileName]
+ var output = String()
+
+ output += '/*========== ' + fileName + ' ==========*/\n\n'
+ output += fileContent
+ output += '\n\n'
+
+ return bundle + output
+ }, String())
+
+ return cssBundle
+}
diff --git a/ui/responsive/design/00-metamask-SignIn.jpg b/ui/responsive/design/00-metamask-SignIn.jpg
new file mode 100644
index 000000000..2becdb032
--- /dev/null
+++ b/ui/responsive/design/00-metamask-SignIn.jpg
Binary files differ
diff --git a/ui/responsive/design/01-metamask-SelectAcc.jpg b/ui/responsive/design/01-metamask-SelectAcc.jpg
new file mode 100644
index 000000000..239091a98
--- /dev/null
+++ b/ui/responsive/design/01-metamask-SelectAcc.jpg
Binary files differ
diff --git a/ui/responsive/design/02-metamask-AccDetails.jpg b/ui/responsive/design/02-metamask-AccDetails.jpg
new file mode 100644
index 000000000..d7d408ffc
--- /dev/null
+++ b/ui/responsive/design/02-metamask-AccDetails.jpg
Binary files differ
diff --git a/ui/responsive/design/02a-metamask-AccDetails-OverToken.jpg b/ui/responsive/design/02a-metamask-AccDetails-OverToken.jpg
new file mode 100644
index 000000000..f26ff31e8
--- /dev/null
+++ b/ui/responsive/design/02a-metamask-AccDetails-OverToken.jpg
Binary files differ
diff --git a/ui/responsive/design/02a-metamask-AccDetails-OverTransaction.jpg b/ui/responsive/design/02a-metamask-AccDetails-OverTransaction.jpg
new file mode 100644
index 000000000..8a06be6b9
--- /dev/null
+++ b/ui/responsive/design/02a-metamask-AccDetails-OverTransaction.jpg
Binary files differ
diff --git a/ui/responsive/design/02a-metamask-AccDetails.jpg b/ui/responsive/design/02a-metamask-AccDetails.jpg
new file mode 100644
index 000000000..c37e0f539
--- /dev/null
+++ b/ui/responsive/design/02a-metamask-AccDetails.jpg
Binary files differ
diff --git a/ui/responsive/design/02b-metamask-AccDetails-Send.jpg b/ui/responsive/design/02b-metamask-AccDetails-Send.jpg
new file mode 100644
index 000000000..10f2d27fd
--- /dev/null
+++ b/ui/responsive/design/02b-metamask-AccDetails-Send.jpg
Binary files differ
diff --git a/ui/responsive/design/03-metamask-Qr.jpg b/ui/responsive/design/03-metamask-Qr.jpg
new file mode 100644
index 000000000..9c09de42f
--- /dev/null
+++ b/ui/responsive/design/03-metamask-Qr.jpg
Binary files differ
diff --git a/ui/responsive/design/05-metamask-Menu.jpg b/ui/responsive/design/05-metamask-Menu.jpg
new file mode 100644
index 000000000..0a43d7b2a
--- /dev/null
+++ b/ui/responsive/design/05-metamask-Menu.jpg
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/final_screen_dao_accounts.png b/ui/responsive/design/chromeStorePics/final_screen_dao_accounts.png
new file mode 100644
index 000000000..805cc96b6
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/final_screen_dao_accounts.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/final_screen_dao_locked.png b/ui/responsive/design/chromeStorePics/final_screen_dao_locked.png
new file mode 100644
index 000000000..9d9e33930
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/final_screen_dao_locked.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/final_screen_dao_notification.png b/ui/responsive/design/chromeStorePics/final_screen_dao_notification.png
new file mode 100644
index 000000000..d56a5ce62
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/final_screen_dao_notification.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/final_screen_wei_account.png b/ui/responsive/design/chromeStorePics/final_screen_wei_account.png
new file mode 100644
index 000000000..d503ff301
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/final_screen_wei_account.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/final_screen_wei_notification.png b/ui/responsive/design/chromeStorePics/final_screen_wei_notification.png
new file mode 100644
index 000000000..3560c51ff
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/final_screen_wei_notification.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/icon-128.png b/ui/responsive/design/chromeStorePics/icon-128.png
new file mode 100644
index 000000000..ae687147d
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/icon-128.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/icon-64.png b/ui/responsive/design/chromeStorePics/icon-64.png
new file mode 100644
index 000000000..7062cf4f1
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/icon-64.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/metamask_icon.ai b/ui/responsive/design/chromeStorePics/metamask_icon.ai
new file mode 100644
index 000000000..27400c5a4
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/metamask_icon.ai
@@ -0,0 +1,2383 @@
+%PDF-1.5 %����
+1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R]/Order 6 0 R/RBGroups[]>>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 47428/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c111 79.158366, 2015/09/25-01:12:00 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/"
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/"
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">metamask_icon</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ <xmp:CreatorTool>Adobe Illustrator CC 2015 (Macintosh)</xmp:CreatorTool>
+ <xmp:CreateDate>2016-06-15T14:23:12-04:00</xmp:CreateDate>
+ <xmp:ModifyDate>2016-06-15T14:23:12-04:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2016-06-15T14:23:12-04:00</xmp:MetadataDate>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>240</xmpGImg:width>
+ <xmpGImg:height>256</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADwAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXnP5r/mvB5Tg/RmnAT6/cJyUMKx28bVAkf+ZjT4U+k7UDYuo1HBsObl6bTce5+l5X+Wf5t6jonm&#xA;KZtfu5rzTNVcG+lkZpHilACLOAamgUBWC/sgUrxAzEwakxl6uRczUaYSj6eYfS9vcQXEEdxA6ywT&#xA;KskUimqsjCqsCOoIObUG3UkUvxQ7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXln5rfnHb+X1l0bQnWfXCCs0+zR2tfEGoaTwXoO/hmJqNTw7Dm5mm0plvL6fvfO&#xA;U889xPJcXEjTTzM0ksshLO7saszMdySTUk5qybdsBSzAl7R+Rv5ni0dPKutTqto5ppNw/KqyOwH1&#xA;c0BHFuVVJpTpvUUz9Jnr0n4Ov1mnv1D4ve82LrHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq&#xA;7FUn1Pzl5W0yF5r3VLeNI9no4kYfNU5N+GY89XijsZC/mfkHIhpMstxE18h8ynCmqg7iorQ7HMhx&#xA;3Yq7FXYq7FXYq7FXjf5v/nG2nPL5e8tXAN9Ro9Rv039A7D04WBp6nUM1Ph7fFXjg6nU16Y83P0ul&#xA;v1S5PAWZmYsxJYmpJ3JJzWu0axV2KuxV9Ifkr+Zq67py6FrF1y121+G3eUjlcwKtQeRPxyIAeXci&#xA;jbnkc2mlz8Qo83U6vT8J4h9L1PMxwnYq7FXYq7FXYq7FXYq7FXYq7FXYqlN95s8t2I/0jUYQQaFE&#xA;b1HHzWPk34Zi5Nbhh9Uh9/3OVi0Waf0xP3fex7UfzX0WEOtjBNdSCoR2AjjPgak8/wDhcwcvbWIf&#xA;SDL7B+v7HOxdi5T9REftP6vtYre/mf5ouD+5eK0UdoowxPzMnqfhmsydsZpcqj7h+u3aY+x8Eedy&#xA;95/VTFdc803n1dptVv5powSVjeRmqx7IhNMxPEy5jRJPx2cwY8WEWAB8N0l8gRXnm/z/AKXazpXT&#xA;7WX65NCo5II4PjHqVrXk3FDX+btXNtodLETDqddqiYH7H1LnQPOuxV2KuxV2KuZlVSzEBQKknYAD&#xA;FXhX5t/nOsyzaB5XuCEDBbzVoXZSSrA8Ld0I2qKM/foNt81+o1X8Mfm7LTaT+KXyeI5r3YuxV2Ku&#xA;xV2KqtpdXNpdQ3VrI0NzA6yQyoaMroaqwPiCMINboIsUX1j+XH5g6f5w0WOcNHDq0I439irbqwoD&#xA;IiklvTaux7dK1GbnBmEx5ukz4DjPky3Lmh2KuxV2KuxV2KuxVKb/AM2eW7CoudQhDA0KI3qMD7rH&#xA;yYZjZdbhh9Uh9/3OVi0Waf0xP3fex6//ADY0OHktnbzXTKaKxpFGw8QTyb/hcwMnbWIfSDL7B+Pg&#xA;5+PsXKa4iI/afx8WO3/5ra9OJEtYIbVG2RqNJIo/1iQv/C5gZe2sp+kCP2n8fBz8XYuIVxEy+wfj&#xA;4sVvdY1a+FLy8muFBLBZJGZQT4KTQZrMmfJP6pE/F2ePBjh9MQPghMqbXYqler+YLPTgUJ9W57Qq&#xA;en+se2X4dPKfuaMueMPewW+vrm9uGnuH5Ox2G/FR/KoPQZtYQERQdZOZkbL3L/nG7y8Y7PVPMEqj&#xA;lOy2VqxBDBEpJKQSPsszINu6nNpoYbGTqdfPcRe1ZnuvdirsVdirsVeF/n1+Y96l1N5O04+lCERt&#xA;Vn35uXAkWBfBOJVmI+1XjsAeWv1ec3wD4uy0eAVxn4PEM17sXYq7FXYq7FXYq7FU18seZNU8uaxD&#xA;qumymOeKqsBQh0YUZCGDDceI2O+ESlH6TRYmEZbSFh7bbfmL5mubeO4iv6xSqHQ+lD0YV/kzVy7U&#xA;1MTRl9kf1Owj2XpiLEftP61T/Hvmv/lt/wCSUP8AzRkf5W1P877I/qZfyTp/5v2n9bv8e+a/+W3/&#xA;AJJQ/wDNGP8AK2p/nfZH9S/yTp/5v2n9bv8AHvmv/lt/5JQ/80Y/ytqf532R/Uv8k6f+b9p/W7/H&#xA;vmv/AJbf+SUP/NGP8ran+d9kf1L/ACTp/wCb9p/W7/Hvmv8A5bf+SUP/ADRj/K2p/nfZH9S/yTp/&#xA;5v2n9bHtW1/WtUeuoXTz8eiGioCNtkUKv4ZDNqsmX6zbdh0uPF9ApL8ob3Yq7FXYq7FWO695pW0d&#xA;rWyo9wtRJKd1Q+A8WH3ZmYNLxby5OJn1PDtHmw6SR5JGkclnclmY9STuTmzArZ1xN7uhhlmmSGJS&#xA;8sjBI0HUsxoAPpwhiS+zvLGhxaF5e0/SIiGFlAkTOoIDuB8b0JNOb1bN5jhwxAdBknxSJ70zybB2&#xA;KuxV2KpX5o12HQfL2oaxNxK2UDyKjHiHkpSOOu9ObkL9OQyT4Yks8cOKQHe+Nr6+u7+8mvLyVp7q&#xA;4cyTTOaszNuSc0ZJJsu/AAFBRwJdirsVdirsVdirsVdirKvI2tmC6OmzN+5uDWEmlFkp03/mp9/z&#xA;zX67BY4hzDm6PNR4T1Z5mpdo7FXYq7FXYqg7laSn33y2PJgVLJIdirsVWu6IjO7BUUEsxNAAOpJO&#xA;IFqTTD9c81yT1gsGaKIH4px8LtT+Xuo/HNlg0gG8ubrs2qJ2ixzM1w3Yqzz8k/L66z5/s2kAMGmK&#xA;2oSAkgkwkCKlO4ldDTwBzJ0sOKfucbVz4YHz2fU+bd0rsVdirsVdirxT/nIzzWi2ll5ZtZ1Mkj/W&#xA;dRjQnkqoB6KPTajli9D/ACqcwNbk2EQ7DQ49zIvB81zs3Yq7FXYq7FXYq7FXYq7FW0d0dXRirqQV&#xA;YGhBG4IIxItQXp3ljWjqunc5Cv1qI8J1Xb/Van+UPxrmh1WDw5bcnc6fNxx35pvmO5DsVdirsVQ1&#xA;2v2W+gnJwYlD5YxdiqheXttZwGe4cRxjap6k+AHc5KEDI0GM5iIssE1fzBeakeB/dWw6Qqevux7n&#xA;Nth08Ye91eXPKfuSzL2h2KuxV9If84/eVk03ys+tyEm51lqhSKcIYHdEArv8Zq3uKZtdHjqN97qN&#xA;bkuVdz1PMtw3Yq7FXYqp3V1b2ltNdXMgit4EaWaVjRVRByZifAAYCaSBez418169Nr/mPUdYl5Vv&#xA;Z2kjVyCyRVpEhIp9iMKv0Zo8k+KRLv8AHDhiB3JVkGbsVdirsVdirsVdirsVdirsVTPy7q50vU45&#xA;2J9B/guFHdD36H7J3/DKNTh8SFdejdgy8Er6PUYpY5okljblHIoZGHQqwqDmhIINF3QNiwuwJdir&#xA;sVUrlaxH23yUeaCg8tYJfq2t2Wmx/vW5TleUcC/abtv/ACj3OXYsEp8uTVlzRhz5sD1DULm+uGnu&#xA;GLE/ZX9lR/KozbY8YgKDqsmQyNlDZNg7FXYqiNN0+51HUbXT7UBrm8mjggUmgLysEWp7bnDEWaRK&#xA;VCy+0tM0+307TbXT7YEW9nDHbwgmp4RKEWp+QzfRFCnnpSs2UThQ7FXYq7FXmX59ebIdL8ovpEMw&#xA;Goauyx+mrFXW2U8pH2/Zbj6dD15HwOYmryVGupczR4uKd9A+ac1Tt3Yq7FXYq7FXYq7FXYq7FXYq&#xA;7FXYqzXyJrSem2lztRgS9sSQAQT8SD3ruPpzV6/Bvxj4ux0Wb+EsxzWuwdirsVadeSlfEEYhDE9b&#xA;8zwWLNb24E10pKuK/AhHjTqa9s2ODSme52Dh5tSI7DcsJmmlmkaWVy8jmrOxqTm0AAFB1hJJsrMK&#xA;HYq7FXYq9S/5x+8qvqXmp9bkIFtoq1CEV5zTo6IBXb4RVq9jTMzR47lfc4WtyVHh730jm0dS7FXY&#xA;q7FXYq+X/wA+dQmuvzGu4JPsWMFvBF/qtGJ/+JTHNTq5Xk9zudHGsY83nmYrlOxV2KuxV2KuxV2K&#xA;uxV2KuxV2KtqrMwVQSxNABuSTirN/Lfl9LBVurhQ1626g7iMeA/yvE/R89VqdRx7D6XZ6fT8O55s&#xA;tUggEdDuM1zmt4pdirsVYZ5s8s+pLJfWS0lNXmhH7fcsv+V4jv8APrs9JqaHDJ1+p01+qLDM2brn&#xA;Yq7FXYq7FX0n/wA48to48kyR2cwfUPrLyanEdmjZvhiA2rwMaAj35ZtdHXBtzdRrr49+XR6hmW4b&#xA;sVdirsVdir5I/Ne/+vfmJrs1QeFx6G3/AC7osP8AzLzTag3Mu800axhieUN7sVdirsVdirsVdirs&#xA;VdirsVdirMPLHl8wAXt4hE5/uYmFCg/mI8f1ZrdVqL9MeTsdNgr1HmyXMJzEXatWOndf1ZVMbswr&#xA;ZFLsVdiqGu13VvoOTgWJYV5o8vFS9/aL8O7XEQ7eLj28c2ml1H8MnXanT/xBi+Z7guxV2KuxVP8A&#xA;yLf+abLzPZP5ZDyarI4SO3XdZVO7JKKgenQVYkjiPiqKVFuKUhIcPNqzRiYni5PsKIymJDKFWXiP&#xA;UCElQ1N6EgEivtm7dCuxV2KuxV4P+Zn5i/m7o189tNbRaNYszi2urVBOsqEkD/SJAw5bV2VG8QNs&#xA;12fNlie4Oy0+DFId5eL3FxPczyXFxI01xMzSTSuSzu7GrMzHckk1JzBJt2AFLMCXYq7FXYq7FXYq&#xA;7FXYq7FXYqyvyv5fZWF9ex0IobaNvv5kfq/2s1+q1H8Mfi5+mwfxS+DKswHOdiqrbuVkA7Nsf4ZG&#xA;Q2SEZlTN2KuxVTnTlEfbcfRhid0FBZcwYd5k8uNAz3tkg+rdZYl6oe7KKfZ/V8umy02pv0y5uu1G&#xA;nr1R5MbzNcN2KuxVnH5Z/mdP5MuXjayhudPu5Fa9cJS6CAEUjkqoIFa8W2/1ak5kYM/B02cbUafx&#xA;Ou76X8s+ZdL8x6RDqumGU2s32TLG8R5DZl+IUbi1VJQlajrm1hMSFh1GTGYGimmTYOxV2KqN9HZS&#xA;Wk0d8sT2boVuEnCmIodiHDfDT54DVbpF3s+b/wAyfI/kCy9fU/LvmWzJZix0f1BOQSWJWF4OZXsq&#xA;q6/N81efFAbxkPc7bBmmdpRPveZZiOY7FXYq7FXYq7FXYq7FXYqybyz5cMhjv7xaRD4oYSPteDN/&#xA;k+Hj8uuDqdTXpi5um09+osvzXOwdirsVdiqYIwZA3iMoIZt4pdirsVS9l4sV8DTLg1tEAih6YVYT&#xA;5k8vGzY3dsC1qxJdf99knpt+z4ZtNNqOLY83W6jT8O45JBmW4jsVZP8Alp5c07zH5z0/SNQd1tZz&#xA;I7rH1f0o2l4V/ZDcNzl2CAlMAtOomYQJD65gggt4I7e3jWGCFRHFFGAqIiiiqqjYADYAZugKdGTa&#xA;/FDsVdirHfNvkDyv5rjUava87iNGSC7iYxzRhvBhs1DuA4I9sqyYYz5tuLNKHJ4v5q/5x58xWBlu&#xA;NAuE1S1G6270iuQCTtv+7fitN+QJ7LmDk0Uh9O7sMeuifq2eUzQzQTPDMjRTRMUkjcFWVlNCrA7g&#xA;g5hkU5oNrMCXYq7FXYq7FXYq7FWR+XfLJuAl5eDjBUGKEjdx4nwX9fy64Wo1NemPNzNPpr9UuTMs&#xA;1rsXYq7FXYq7FUVavVSh6jcfLK5hkFfIMnYq7FUHdLSWviK/wyyHJgVLJoWuiOjI4DIwKsp3BB2I&#xA;OINKRbB/MPl19Pb6xb1ezY713MZPY+3gfo+e10+o49j9Tq9Rp+DcckkzKcZmP5P3EsH5k6G8cTTM&#xA;ZZIyqgkhZIXRm27IrFj7DL9Mf3gcfVC8ZfWWbl0jsVdirsVdirwr87POX5jaTqj6dFIdP0O4VTaX&#xA;dorK8o6lXuDusgZTVUI+HrUHfX6rLOJrkHZaTFjkL5l4jmvdi7FXYq7FXYq7FXYqn/lzy6t8purr&#xA;kLZTREG3Mg77/wAvbbMTU6jg2HNy9Pp+Lc8maqqooVQFVRRVGwAHYZqyXZAN4q7FXYq7FXYqvhfj&#xA;Ip7dD9ORkNkhHZUzdirsVULpKoG/l/jkoFiULlrF2KrJYYpozHKiyRt9pGAIP0HCCQbCCAdiwTzD&#xA;obabcB4qm0lJ9M7nif5Sf1ZttPn4xvzdXqMPAduT6E/Jz8tofLejx6pqMStrt+iyNzSj20bLtCOY&#xA;DK9G/edN/h7VO+02DhFnmXn9Vn4zQ+kPSMynEdirsVdirsVS7zBoGl6/pM+l6nCJrScUI6MrD7Lo&#xA;ezKehyM4CQos4TMTYfKfn3yJq3lDWHs7pWkspCTYX1KJMgp4Vo61oy9vlQ5p82EwNF3WHMMgsMYq&#xA;MpbnVGKuxVvFXYqnnlvQDfSfWbhSLRDsP9+MOw9h3zF1Oo4BQ5uVp8HEbPJm6IiIqIoVFACqBQAD&#xA;YADNUTbswKXYq7FXYq7FXYq7FXYqjoX5xg9+h+eUyFFmF+BLsVWyLyRl8RtiChAZewdirsVTjyfZ&#xA;JeeZ9NidOarOkpUio/dH1Afo45mdnx4s8R5/du4faE+HBI+X37Pds7N4t2KuxV2KuxV2KuxV5Z+Y&#xA;esC91gWcZBhsKpUb1kahf7qcfozke2dTx5eEcoff1/U9b2PpuDFxHnP7un62K5p3buxV2KuxV1Bi&#xA;qFukowcdDsfnlkCxKhk2LsVdirsVdirsVdirsVRFo/xFfHcZCYZBE5WydirsVQEq8ZGHv+vLgdmB&#xA;W4UOxVmH5WQCTzOzn/dFvI4+kqn/ABvm27GiDm90T+h1PbUiMI85D9L17OpeVdirsVdirsVdiqG1&#xA;K/i0+wuL2X7ECFyK0qR0Ue7HbKs+UY4GZ6Btw4jkmIjqXh000k0zzSsWkkYu7HqWY1Jzz+UjIknm&#xA;XvYxEQAOQWYGTsVdirsVdiq2ROaFfHp88INIKAIIJB6jrlrB2FXYq7FXYq7FXYq7FV0bcXDeBwEJ&#xA;CPylm7FXYqhbtTyDdiKfTlkCxKhk2LsVZ7+UduW1S+uO0cCx/TI4P/MvN32HC5yl3Cvn/Y6PtydQ&#xA;jHvN/L+16jnSPNuxV2KuxV2KuxVhP5l60IrOPSY6+rccZZj29NSeI+l1r9GaHtzUgQGMc5bn3f2/&#xA;c73sTTEzOQ8o7D3/ANn3vOM5d6d2KuxV2KuxV2KuxVCXiFT6iqWB+1Sn8csgejEhBfW4/Bvw/rlv&#xA;Chr64n8px4Va+uD+T8ceBWvrv+R+P9mHgVv67/kfj/ZjwK19cP8AL+OPArX1yT+UY8KtfXJfBfx/&#xA;rjwhU2s5Ge3Ut9rv/DMeYosgr5FLsVUL3l9WZlFWX4hX26/hkoc0FKDdSnwHyGZPCGKhZ6oLy3We&#xA;CTlGxIBoBupKnt4jLMuA45cMhu1Yc0ckeKPJ6F+UmpSxapdQMapPGrGvjG1BT/kYc2vYs6nKPeL+&#xA;X9rqO3IeiMu418/7HsA3GdE807FXYq7FXYq7FXi/mfVP0nrl1dA1i5cIaGo9NPhUj/Wpy+nOF7Qz&#xA;+LmlLpyHuH4t7jQYPCwxj15n3n8UlWYbmOxV2KuxV2KuxV2KuIB2PTFUDdWaV5caqe/cZbCbAhAy&#xA;WjCpQ8h4d8tElUCCDQ9ckrWKpZrHmHTtKUeuxeY9II6F6eJBIoMztJoMmf6dh3nk4Os7Rxaceo2e&#xA;4c2Far5x1a+5JE31W3bb04z8RHu/X7qZ0ul7IxYtz6pef6v7XltX2zmy7A8EfL9f9id+R9d9WP8A&#xA;Rc5q8YLW7kjdR1Tfeo6j2+WaztrRcJ8WPI8/1/jr73adh6/iHgy5jl7u78dPcy5RyYL4mmc+9GnN&#xA;o1HK9iP1ZjzCQisrZOxVp1DoynowIPyOIKscl/dc+ewSvL2p1zNiL5NZNCy888na79QvDa3DgWlw&#xA;d2Y0CPTZvDfofo8M67tfQ+LDiiPXH7Q8b2Nr/CnwSPol9h7/ANb2PytcvZ6rYSqwX96odu3FzRq/&#xA;Qc5fRZTDPEjvr57PT6/GJ4ZA91/J79A3KJT7Z2bxS/FXYq7FXYqk/m7VRpug3UyvwnkX0oN6Hm+1&#xA;V91FWzC7Rz+FhkevIe8/i3N7PweLmiOnM/D8U8azhnt3Yq7FXYq7FXYq7FXYq7FXEAih6Yqg54Ch&#xA;5L9j9WWRlbAhQeNHFGFcmChJ9b0DXL6ALpN8lt2kVwysfcSLyI+hfpzP0WqwY5XliZfju/b8HB12&#xA;DPkjWKQj+O/9nxYTe/l55tilc+gt11Zpo5VPInc7OUcn6M6XD23pSBvw+RH6rDzGXsXUgnbi8wf1&#xA;0Uiu9K1SzAa7s5rdTsGljZAfkWAzZYtTjyfTKMvcQ67Jp8kPqiY+8KNrczWtxHcQNwliYMje4yeX&#xA;HGcTGXIscWWWOQlHmHrei39tqUMVzAQyMKuvdGAqVb3GcDqsEsMjGX9vm+g6bUxzQE4/2eSco3Fw&#xA;3gcwyHITAEEAjodxlLJ2KXYqx/X7J5UubeJgj3MThHaoVWcFakgHau+Z2kyiMoyPKJH2OPqMZnjl&#xA;EcyCEB5f/LjSLBEm1AC+ux1Dbwqd+iftf7KvyGZ2t7dy5DUPRH7fn+p1ej7DxYxc/XL7Pl+tkDoI&#xA;3KqAoX7IGwA7UzUg3u7iq2fQWlzGfTbadl4mWJHK+HJQaZ30JcUQe8PAzjwyI7iiskxdirsVdirz&#xA;L8y9S9fV4rFSeFmnxj/iySjH/heOcp25n4sogP4R9p/ZT1PYmDhxmZ/iP2D9tsPzSO7dirsVdirs&#xA;VdirsVdirsVdiriARQ9MVQc8BT4hun6ssjK2BDdq1JCP5h+IxmNkhF5WydiqAu9A0O8Ltc2FvLJJ&#xA;9uQxrzP+zpy/HMnHrc0KEZyAHnt8nGyaPDO+KEST5b/NRsPLOlaYH/R0RgEn205u6kjvRy1D8snn&#xA;12TNXiG68h+hjp9Hjw2MYoHzP6VVlZTRhQ5SC5CJt5l4hCaEdK98hKKQVfIMnYqo3dstxEV2DjdG&#xA;8DkoSooKhp8jrW2mqJE3UH+XJZB1ChddLSWviMYcmJfQsESwwRxL9mNQo+QFM9BAfPyV+FDsVdiq&#xA;jeXdvZ2st1cOEhhUs7HwGQyZIwiZS2AZ48cpyEY7kvD7+7kvL2e7kFHuJGkYDoORrQfLOAzZDOZk&#xA;ept73FjEICI6ClDK2x2KuxV2KuxV2KuxV2KuxV2KuxVxAIoeh64qhZIjE4dd0B+7LAbY1SKBBAI6&#xA;HplbJ2KuxV2KrJI1kWh69jhBpBCElhaM77jscsErYkK8NwGor/a7HxyEopBV8iydiqhcW5kKyRkL&#xA;Mn2GPT3ByUZVz5IbVDcyQLTizuI2U9mYgZZijcuEdWGSXDEnufQeegPn7sVdirsVYb+ZmqGDS4dP&#xA;Q/Fdvyk6f3cRBp47tT7s0fbmfhxiA/iP2D9tO67EwcWQzP8ACPtP7LeaZyr1TsVdirsVdirsVdir&#xA;sVdirsVdirsVWvJGgq7BR2qaYgEoQc2qW4BVVMn4A/x/DLRiKLVIbscAGQjbpWtPbtgMFtEJIj/Z&#xA;NfbvlZFJtdil2KuxVogEUIqMUIWa3K1ZN18O4yyMkEKkFxyoj9ex8cEoqCr5Bk7FUTpEdv8Apmxe&#xA;YqkQuYWmZjReIcVJJ2+z3zI0kgMsCeXEPvcfVRJxSA58J+57pnfPBuxV2KuxV5B531M3/mK4INYr&#xA;b/R46eEZPL/hy2cV2rn8TOe6O3y/bb2fZeHw8A75b/P9lJDmudi7FXYq7FXYq7FXYq7FXYqoSXtq&#xA;nWQE+A3/AFZIQJRaEk1c7iOP5Fj/AAH9csGHvRaFkv7t+shA8F2/VvlgxgLagSSanqckhVtY+UnI&#xA;9F3+nBIqjcrQ7FVRZ5V/aqPA75ExCbVUuwdnFPcZEwTauro32SDkCEt4pdiqhNbhqsmzeHY5KMmJ&#xA;DoJzXhJs3YnDKPUKCr5Bk7FWd+RvOPp+npOoyfu9ltJ2/Z7CNj4fy+HTpnQ9k9pVWKZ/qn9H6vk8&#xA;92r2dd5YD3j9P6/m9CzpXnHYq7FXhnnLS30vzHeW4BWF3M1vQED05PiAX2U1X6M4vX4PDzSHTmPj&#xA;+Ke00GfxMMT15H4fi0l5N4nMOnMdybxONK7kfHFXVPjirVT44q6p8cVdU+OKuqcKrZEEiFT9B8Di&#xA;DSoB0ZGKt1GWgpW4q7FWwCTQdT0xVHxR+mgXv1Jysm0L8CuxV2KuxV2KqiXEq96jwORMQm1dbpD9&#xA;oFfxGQMCm1VWVhVSD8sjSVssSyDfY9jhBpSFkbsh4S9f2W7HCRfJVbIpdir0fyR5zW4WPStRci5A&#xA;421wxr6ngjH+bw8fn16jsvtTjrHk+roe/wAvf9/v58x2n2Zw3kx/T1Hd5+77vdym2b50TsVef/m1&#xA;pJktbTVY1FYCYJyAa8X3Qk+CtUf7LNH21guImOmx/H45u97Ez1IwPXcfj8cnmOc49G7FXYq7FXYq&#xA;7FXYq7FXYqpTw+otR9odMINKgiCDQ9csS1iqItI6vzPRenzyMiqLyCHYq7FXYq7FXYq7FXYq4Eg1&#xA;HXFVVLmRdj8Q9+uRMQm1UXETijinz3GR4SE2vRgopXkg6N1p88iUoTWNf0bRoBNqd3Hao1eAc1Zq&#xA;UrxQVZqV3oMtw6fJlNQFtWbUQxC5mmMXn5w+TbYqYJbi8J7wRFeP/I4xfhmwx9i6g86j7z+q3Ayd&#xA;sYByuXuH66ehfl//AM5Q+UtVuk0rzAH0mT4Y7XUp6GGToo9dgW9JjWpY/B1qV79Tp4zEAJkGQeX1&#xA;BgZkwFRe3wzRTRJNC6yRSANHIhDKyncEEbEHL2hC6xpcGq6ZcafOSIp1oWHUEEMp+hgDlWfCMkDA&#xA;8i24MxxTExzDwG5t5ra5ltpl4zQO0ci9aMh4kfeM4ecDEkHmHuYTEoiQ5FTyLJ2KuxV2KuxV2Kux&#xA;V2KuxVDXMNayL/shkolKGAJIA6nYZNUwRAihR2yolC7FXYq7FXYq7FW1VmPFQWJ6AbnEC+Skgc0V&#xA;DpGpzbpbPTxYcR/w1MyIaTLLlEuPPV4o85BEDy3rJNDBT3Lp/A5aOzs3837Q1HtHD/O+wq48pamR&#xA;UvCPYs38Fy4dk5e+P4+DSe1sXdL7P1q8Xk+cj97cqp/yVLfrK5ZHsiXWX4+xql2vHpH8farR+Tog&#xA;f3l0zDwVAv6y2Wx7IHWX2Ncu1z0j9quvlLTlIPqzVH+Uv/NOWfyTi75fZ+pq/lbL3R+39b5x/OyS&#xA;VfzBvrLmWt7JII7ZDT4VeFJW6UrV5Cc2uk00MUKiHV6rUTyyuRYJmS4zsVfU/wDziJp/mFdA1bUJ&#xA;72QaC8/oWOnHiUNwqq00+68h8JRBxeh+LkKgHCgvoLFDx/8AM3SBZeYfrMakQ36erWlF9RfhkA8e&#xA;zH55yna+Dgy8Q5S+/r+v4vV9kZ+PFwnnHb4dP1fBiOat2rsVdirsVdirsVdirsVdiqvaWF9euUtL&#xA;eW4cdViRnI+fEHJ48Up/SCfcwyZYw+oge9PY/wArfMqQrdskahhX0ORaVK+KqD+GbQdkZjGzQdbL&#xA;tnCDQstDybIrFJboJKv2k4EkfOrKckOxz1l9jWe2B0j9v7FaLyfbj++uHf8A1AF/XyyyPZEesj+P&#xA;m1y7Xl0iPv8A1Ky+U9MBqXlYeBZf4KMsHZWLvl+Pg1HtXKekfx8VceW9G/5Z6+/N/wDmrLv5Ow/z&#xA;ftP62r+Uc3877B+pXTSNLQUFrER/lKGP3tXLY6TEP4R8mqWryn+I/NWis7SI1igjjPiqgfqGWRww&#xA;jyAHwapZpy5kn4q2WNbsVdirsVdirsVdir5U/O7/AMmdrP8A0bf9QsWZEOTRPmwbJMU28p+XL3zL&#xA;5l03QbIH6xqNwkAcKX9NWPxysq78Y0q7ewOKv0B8teXNJ8t6FZ6HpEPoafYpwgjJLHclmZierMzF&#xA;ifE4WKZYqxn8wtFj1Hy7PMIw11YqZoHrSiggyj6UB28QM13amAZMJPWO/wCv7HY9l6g48wH8Mtv1&#xA;fa8XzkXr3Yq7FXYq7FXYqmOm+Xdc1Ir9SspZkbYS8eMe3/FjUT8cvxaXLk+mJP3fNx82qxY/qkB9&#xA;/wAubK9I/KjUpZEfVJ0t4OrRRHnL8q04D51ObTB2LMm8hoeXP9X3usz9tQArGLPny/X9zL9N/L3y&#xA;tYgH6r9akH+7Lk+pX5rtH/wubTF2Zgh0s+e/7PsdVm7Tzz60PLb9v2sghhhhiWKFFjiQUSNAFUD2&#xA;A2zPjEAUOTgSkSbPNfhQo3NnaXScLmFJV3oHANK+HhjSQUovPKNhIpNo720gHwgMXSvuG5fgcrOM&#xA;MxkKQ3fl7zBa1IjW6Qb8o9zT/V+E/cMgcZbBkCXNdCNzHNG8Ug2ZWFCCPHvkKZ2vW4gbo4+nb9eB&#xA;VTFLsUOxV2KuxV2KuxVpnVBViAPE4q8U89flBq3mfzvf6yt/b2un3Xo8Kh3mAjhSNqpRF6pt8eWx&#xA;nQa5Qsr7b/nH3yssai51C+llH2mjaKNT/sTHIR/wWPiFfDD178qfyf8AKnli6/Ttrp3p35jMVrcT&#xA;SPI4jcDm4ViVUsNgwANKjocnC+rXOuj1DJsHYq0yqylWAZWFGU7gg9sVeBa/pbaXrN3YN0gkIQ+K&#xA;H4kP0qQc4fVYfDySj3H+x7nS5vExxl3j+1L8ob21VmYKoJYmgA3JOICkp5p3kjzRfjlFYPHHt8c9&#xA;IhuKggPQn6Bmbi7OzT5Rr37OFl7RwQ5yv3bsp0z8o3qj6nfLQN8cNupNV9pG40/4DNli7E6zl8B+&#xA;v9jrM3bnSEfif1ftZlp3lLy5p9Da2EQdSGWRx6jgjuGfkR9GbbFosOP6Yj7/AL3U5dbmyfVI/d9y&#xA;bZlOK7FXYq7FXYq7FXYq7FVKe1tbheM8KSgdA6huvz+WNKCkWoeSdNnFbVjav4CrqfoJr+OQOMNg&#xA;yFILvylrlpVolE6AVLQtv16cTRvuyswLYMgSx5b23k9OZWRx1SRSp/GhyBDMFUXUF/aQj5Gv9MaV&#xA;VW7ganxUJ7EYFVVZWFVII8RviriQBUmgHUnFUNNfINo/iPiemGlQTu7mrmpxVrFWReVfLr3cyXt0&#xA;g+poaorb+ow26fyg9a/LxyyEba5zrZneXNDsVdirsVYV538iXeuajBe2Uscb8PSnEpIFFJKsOIap&#xA;3pmo7Q7OlmmJRIG1G3cdndpRwwMZAnexShp35S6ZEQ1/eS3J2PCICJfcGvMn6KZDF2JAfVIy+xnl&#xA;7bmfpiI/b+plmk+X9H0lWXT7VYOf22BLMfYsxZqfTmzwabHi+gU6vPqcmX6zaYZe0OxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxVRu7K1vITDcxiSM9j/AjcYCLSDSQ3vkbTpSWtZHtif2f7xfuJDf8NkD&#xA;jDMZCkV55O1m3HJEW4UVJMR3FP8AJbifurkDAsxkCXjRtX/5Yrjb/ip/6YOEsuIK40PX5lANpKQO&#xA;nIcev+tTHgK8YVB5S8wEf7y/8lI/+asPAUcYVU8ma4w3RE9mcfwrj4ZR4gRlr5EvfXT61NGIK/vP&#xA;TLF6eAqoGSGNByBmccaRRrHGOKIAqqOwAoBlrSuxV2Kv/9k=</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:OriginalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</xmpMM:OriginalDocumentID>
+ <xmpMM:DocumentID>xmp.did:d4d07395-aa96-47c2-a9e5-d0351947bb0c</xmpMM:DocumentID>
+ <xmpMM:InstanceID>uuid:c63c1031-e157-9748-9c58-86481308e954</xmpMM:InstanceID>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:1abccb90-0c26-4942-b156-fd2eb962e3e1</stRef:instanceID>
+ <stRef:documentID>xmp.did:58fdc1b8-1448-3a44-9e20-282d8ec1cf95</stRef:documentID>
+ <stRef:originalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:d4d07395-aa96-47c2-a9e5-d0351947bb0c</stEvt:instanceID>
+ <stEvt:when>2016-06-15T14:23:10-04:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CC 2015 (Macintosh)</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ <illustrator:StartupProfile>Web</illustrator:StartupProfile>
+ <illustrator:Type>Document</illustrator:Type>
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:HasVisibleTransparency>True</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>128.000000</stDim:w>
+ <stDim:h>128.000000</stDim:h>
+ <stDim:unit>Pixels</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Magenta</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>White</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Black</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Red</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Yellow</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Green</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Cyan</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Blue</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Magenta</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=193 G=39 B=45</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>193</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>45</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=28 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=241 G=90 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>241</xmpG:red>
+ <xmpG:green>90</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=247 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>247</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=251 G=176 B=59</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>251</xmpG:red>
+ <xmpG:green>176</xmpG:green>
+ <xmpG:blue>59</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=252 G=238 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>252</xmpG:red>
+ <xmpG:green>238</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=217 G=224 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>217</xmpG:red>
+ <xmpG:green>224</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=198 B=63</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>198</xmpG:green>
+ <xmpG:blue>63</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=57 G=181 B=74</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>57</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>74</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=146 B=69</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>146</xmpG:green>
+ <xmpG:blue>69</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=104 B=55</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>104</xmpG:green>
+ <xmpG:blue>55</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=34 G=181 B=115</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>34</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>115</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=169 B=157</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>157</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=41 G=171 B=226</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>41</xmpG:red>
+ <xmpG:green>171</xmpG:green>
+ <xmpG:blue>226</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=113 B=188</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>113</xmpG:green>
+ <xmpG:blue>188</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=46 G=49 B=146</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>46</xmpG:red>
+ <xmpG:green>49</xmpG:green>
+ <xmpG:blue>146</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=27 G=20 B=100</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>27</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>100</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=45 B=145</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>45</xmpG:green>
+ <xmpG:blue>145</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=147 G=39 B=143</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>147</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>143</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=158 G=0 B=93</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>158</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>93</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=212 G=20 B=90</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>212</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>90</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=30 B=121</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>30</xmpG:green>
+ <xmpG:blue>121</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=199 G=178 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>199</xmpG:red>
+ <xmpG:green>178</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=134 B=117</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>134</xmpG:green>
+ <xmpG:blue>117</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=115 G=99 B=87</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>115</xmpG:red>
+ <xmpG:green>99</xmpG:green>
+ <xmpG:blue>87</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=83 G=71 B=65</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>83</xmpG:red>
+ <xmpG:green>71</xmpG:green>
+ <xmpG:blue>65</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=198 G=156 B=109</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>198</xmpG:red>
+ <xmpG:green>156</xmpG:green>
+ <xmpG:blue>109</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=166 G=124 B=82</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>166</xmpG:red>
+ <xmpG:green>124</xmpG:green>
+ <xmpG:blue>82</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=98 B=57</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>98</xmpG:green>
+ <xmpG:blue>57</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=117 G=76 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>117</xmpG:red>
+ <xmpG:green>76</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=96 G=56 B=19</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>96</xmpG:red>
+ <xmpG:green>56</xmpG:green>
+ <xmpG:blue>19</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=66 G=33 B=11</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>66</xmpG:red>
+ <xmpG:green>33</xmpG:green>
+ <xmpG:blue>11</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Grays</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=0 B=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=26 G=26 B=26</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>26</xmpG:red>
+ <xmpG:green>26</xmpG:green>
+ <xmpG:blue>26</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=51 G=51 B=51</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>51</xmpG:red>
+ <xmpG:green>51</xmpG:green>
+ <xmpG:blue>51</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=77 G=77 B=77</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>77</xmpG:red>
+ <xmpG:green>77</xmpG:green>
+ <xmpG:blue>77</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=102 B=102</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>102</xmpG:green>
+ <xmpG:blue>102</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=128 G=128 B=128</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>128</xmpG:red>
+ <xmpG:green>128</xmpG:green>
+ <xmpG:blue>128</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=153 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>153</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=179 G=179 B=179</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>179</xmpG:red>
+ <xmpG:green>179</xmpG:green>
+ <xmpG:blue>179</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=204 G=204 B=204</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>204</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>204</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=230 G=230 B=230</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>230</xmpG:red>
+ <xmpG:green>230</xmpG:green>
+ <xmpG:blue>230</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=242 G=242 B=242</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>242</xmpG:red>
+ <xmpG:green>242</xmpG:green>
+ <xmpG:blue>242</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Web Color Group</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=63 G=169 B=245</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>63</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>245</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=122 G=201 B=67</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>122</xmpG:red>
+ <xmpG:green>201</xmpG:green>
+ <xmpG:blue>67</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=29 B=37</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>29</xmpG:green>
+ <xmpG:blue>37</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=123 B=172</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>123</xmpG:green>
+ <xmpG:blue>172</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=189 G=204 B=212</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>189</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>212</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ <pdf:Producer>Adobe PDF library 15.00</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[7 0 R]/Type/Pages>> endobj 7 0 obj <</ArtBox[19.792 16.0 109.0 112.0]/BleedBox[0.0 0.0 128.0 128.0]/Contents 8 0 R/Group 9 0 R/LastModified(D:20160615142312-04'00')/MediaBox[0.0 0.0 128.0 128.0]/Parent 3 0 R/PieceInfo<</Illustrator 10 0 R>>/Resources<</ColorSpace<</CS0 11 0 R>>/ExtGState<</GS0 12 0 R>>/ProcSet[/PDF/ImageC]/Properties<</MC0 5 0 R>>/XObject<</Im0 13 0 R>>>>/Thumb 14 0 R/TrimBox[0.0 0.0 128.0 128.0]/Type/Page>> endobj 8 0 obj <</Filter/FlateDecode/Length 106>>stream
+H���wV��u6PprqV�*�2��3�4R04S���32�P�4ճ��T(J�
+W�*�w6PH/�H�+
+8;W:dYmnJk$j=`^PKX*GV"-/6MPPhMW4o*<SJ[.r.2B:%l2U+:>jFegTA5n:ROqi.
+8M?-(/t#IN>re.=TbIMqYWQK1D%b&pOLGa]H?hKs'8Gqa4A/k;[i&\e-=4:h!/H6BW;~> endstream endobj 16 0 obj [/Indexed/DeviceRGB 255 17 0 R] endobj 17 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 13 0 obj <</BitsPerComponent 8/ColorSpace 11 0 R/DecodeParms<</BitsPerComponent 4/Colors 3/Columns 880>>/Filter/FlateDecode/Height 947/Intent/RelativeColorimetric/Length 90241/Name/X/SMask 18 0 R/Subtype/Image/Type/XObject/Width 880>>stream
+H����oi���@H�����y�&�����8��_�n�������y��A�'��?
+I
+
+W��<�*� ��'���%���Y��%��V���ma�o!���ǩk�v�>��w �u{=�Q��<\ȃ*fƸm�q���Y%ŏ�R�p�
+
+i�H�F�'��>hd,��I#��_���ы��Tj�~Q�5�c�R�`�n:�s� e8��� ��P����
+WW�zٶ�:��l�g���l�7Ƀ�Hi�J&������/� Ӻg�.�}���C�����'���d�D|V�֪'9TL*�4�I]��6� �
+���>�#g���V���-�?}=�� ��Tj��OK�<�>�Nh a�uOB�n�Y#qkB�)����fiQ�@ 
+�
+z���tu��t&���k�s����g1�twuO/�J���>_��9E�zb�(Jr2�h�+�ɓ�)���⇻��A�!�����_:۪.�%��ٱ4�E�3w��~�� �sO��q9��F�$����~��E��<G���J���?
+7"P�� 16?w�'����PƔ�P� ��m?U A�J�������O�C�/%��-n�� :d�}��_H��R0I�����yc5S�j����V}��� nǡ�!��1�I�,�C8���LaP)G�cA�� 1 (�E�4F|���Q#0#0P�W�{� V<��^�F��Lz��@���%����k�����0�u�'�I1����q�<��$p5�SyV(%AǓ8�M��Y�ĶQ�E���Y'd7��2k��/Q޼;�L&���^1* e����v<�7V2�Sy�+G� F��"wA
+����P&�rA\�9g��J�C�
+���c����1Bu��U�U!�h�B
+�m����?I��X��q�Bf=�O�-�u���S]*pb �L�p���
+�+Qf1XGbu�.�AL�}�����{��;�j��:�1�X�M;`�m����)ݒr�2���?��?��b��<g�2��|��NDq���)}��s*�[��Sw�LGE�R>ӥ^"�T�.4�{��7���V�:7�cO� ���n���]��&I�Iʴ���׭]�׳����L&ټ��~�e�?61��8qW 6�$�уS-���J+j��� &�H�R#Y(�u3C�"���va������VO ����qˤg���/��{N�d*�� �w4~����8`ਡ�O��D����T
+����(� ƃ��(r�Vu��6z�0F�|�i�U�6�������_�Up_� |�7//�y e2��6�ka��E9JT��h�<'|���� e�\x�y�(�7Q�Q1Z)�7�#�5eoӈ���0��g�+ۨ�wC�xc �X��S�g")�-n�k����E��J��N[��*������ FA�K��L��LR7�R.��L�BME#@�*
+�~U���݊�tEEVOt�7�U콊�ؾ�x��Ԝ'�is����jf=��O���[Z��O� ���((��A��>��&��]�r�"��т|f0`A|0�/2}�+58{�:��!ELTǝ�uB�1H��z��GQ0�g����[��|Q_[VSo�r^G���y�?l�D$g=?�ȩՕL�N9��
+���K��*RYģp����u0�%K��'���*�- �l�p�D <P�#�Y�G���}Ũ4�I��ϸ.V��;�I�������Q&+=u ����PaqU����S_�q(R o*B&���Bc�@-٫��m�� 大+R/������rlpך`m{�ͯ-��Vr�te�O&�^��LOF"��e59��h9��Ą˵�J�ho���q�{5�0����ށ�:���5�8Ƀ*ô�x'/>I��D2Mnݾb��L)��O��Y���ׯ��R3OF"�R �j"�iO8��%�����{��Pqs �?H�e�e}-����XJ��N��m\�-��H/}G�<b"�µŭ�|�x�y}}YM�����>ϩ��Z&���L��/�u>7&�I wQ)� /�+P�.b�P�"�$N��5��5�B]�=�{�2��`�[������Hnk�?������-��s��\��粓�y*d�qP������9�I����,1���k[������`��^��A�/�n��3��Օ��c��V�n��a�-_�s%Y�S�����M{b �FǠ�oZ����nk�E�%�yt�$mA��s%E���v]������JW������^x�A�� �Xk���0v_���KӉ�� i$��Fߪ�/�u(� j�L�I��������O%�k��/S���<z�YW�nZ� <Q�b�誒��&�[q���Dz1��'��Mwc����U�0s)/�Pz�����R����m����u��/X�����?��O�y��d��R�<��ɇ0��m'hˤ�S!m(/6�o�G���F��"H�Cs� c���f��䐧YBh�ߔ���syڡ��y߿�n���,@2����1crXS>r7B>Y��,7�70����ݙ��s)�]ub�Q9O�Έ�L��1�2$j����n*�2�*쾊O&iV��"s��r��+� 2L��j��ȞC������xҜ����J� 9:J��ʌ �H(���hx�A&�xk �i&����Iu$6ԕ�j���:.��E� Q\-^*%V�@V;��R�M���]�d�L��W�<}*�w�&Kߊ{���-7@�-&;.
+C�6���6 �@9TB�U�f�I�[#v�1��r�`��,���f/5n�� ��T�Lֹ�ޤ��o�sI�w�T&�����\�ߍ�#�UB��XJ&�uo�����6TE���-E��HL����u[���F���Uf
+���x�謖���X���z�{FEr6��q��iV�d>ս�l��
+��\�Uv�^dK�CR&��p�����6�kڄo@)������ɛzx���Z�ZfB��v�5n�F�C�� �`�r�{Lŷ�y���7�g�2H&��;x�@��k�A�SYQ��C,��2�9�Wp�
+������c�!{)��r���*��R����j�!���&�#�8ˁScM���}��Zi�*H&��M��f��$�\�P�
+Ŵ�\����Id e��DҐIЍ��F1�����|C�eH �ld�Ԭ6i.2K8�t��׎&�t�(�Q��+��Zf�B*R&��~?g����4�|W�~� �!�$����1�[�N��Ikq���S��(T�[�'iͧ4*m����~�@���?���>���KT��)��Ε��J��3t
+dE�À.�"!�|��g_��F>";,o)%O�Q�������~Z��2F�B
+3����%f_,%.u��;��}�����o�Z��_`>��19�)�ۂ��֙Ĥ b���-�� 2z[&��;BE����z1i6����Cӯ!�G9��h�t��j9��'I#�8�ˁ�B��!�=��*��t-T:zT�����G�\2z;��F3�}Zg����L�h����H�Ӎָ�!�fi�V�L:�,N��0E��wH�V��sR I �!�-U�֐L�1�����#4���z�v�B�`�V��|�u�� �4�i�$�\"&^�X�j�bޟ��� m�R���� q6����H �JER�����/-N&�w�'�,�͌ƹ�ӿ�8�!�f�I�|��1T��B����S�?�D%�}�35fW�̊�CȊ\�!/�5n�:VC1�@��#�&R&�����2rÚ�!����"H �<��O"�$;�,Ɣ�G�)�!� �P�i���q��6k^��6垾���n��m��G��ţ��������t�,Q�\W
+����Ho�[�]H&�lB���<iΌ�'�)�L��t�`��=C�B >��OS&c1�[p��Uyu�������������N�'v�9
+���L���凍\����L2铥�Akq���q�$��C���k�DyQ�c��O���z�q�*�8�
+U_��D"QA�PA�@�I��w�涱��DZ��I�PP�i����G~�;�9���]����6ov��p�3U�$lJ�'�o0� bR��v��L��ž�~�c�I��F��eA[Q��IPY1��o�7xGv����Λ�j�i�$�-I� �g�2l�c��.Ť�=I !;e0�'Z�JZ��wzT6�b3;��� )g� �� S��V�G1�,�� ��xt� ������ �$��(!b1������Ѯ��-������~���$�"�3V[�f�K�@MR�+��3ϟ�ePI��a~�F�p��2� ���Þ�qZ�JZ���
+0 ��'����0$:HJ��\��� ;``pPL�=N���M�.�H1Eb�~�ԓ�vsK`TO�=�h�wѓ
+�m�� crE�?m}��F!��e_JRPF
+7���b1��T}<�x���4z�V��,&���읲ye����T��J=���q����#cz>)�R�v:��5�[Q����Г�O�"���5�o)� �c���^�m��X�y���Tع���T=�%o�-�oK�2���U~c���͠�B���>(h1*��h�|:
+�ؐ�<p�D �����Ť��G��|��i-j�zR����E�Qˠ'�
+c��'��z>�w�TҺ�辣QEx=��D19��-�d��!}?��d!�}3����Z�#)��nmDz����ly�_|1^��N���d`Q0��l�9'0�Nn<X
+�(iC�4P+� $���
+c�T6��^b���-��4��je˷O|�z�S~�?_�q��C�j��R�r̖E˓�>�j��E�k��.C-�n#�E��<�I�O{�vE5�ӄ�&E�N��& �݆
+���w&B� ���g��w���)#�„�S���]\Q��V��Q��>�$I_jJ��X�,�\^�Y�S�d|'z��D%�{o1�!䅇qx';q������ڈ�><�a� X��/���/� �:z�556hz��^�`tN��ʦ]a�r�DhKUvX�eg��f�¤~��u�bU4u�+�&g�b�8��5�I�� nݣ�T���c�%N����N~(�d�X���'Bh%���=���f�j-NK�2z]��W�"L�y�'t �l�^fZ��&�a,�- E���K�v|deKhߙ��Ds8�^{2yc�"~tt��o�����`���V�x��h���v۠���d���N�����`�}���ʼnCh�Vr��fg�֭iљ�O ��т�|�,I��@�3&����7�r��~x�]5K~�� <�'�ɸN��j�G=��=`jߖ��}��Ƌ��Wǭn��Z��\Lҳ��o�`M�2 iC�ɍ|�a�'BN$�ɸN~(���<'x[)��!t��DJ���`����ɨu�O�&��7���R�,��R��6�=<������{.�q�;!t���&O6v�se�8-@ʨ�m�k���$b������f�a%�܌*�
+�s��Mz�C�*�d\'\z�1z�A��D�����d�&<��u�;e]� x�^�,�Yo`�Z�A�>��
+���9��$Y"?L�tzK_��14*Y|�!ԯ)7�$�U����
+L�&\��Pby?�ޓ�u��r!m���� ��FZK�G���brΓͲ��c)�eE�+W�q�yt�T?�w�� �]����]�}["�֫�<O?�Z��I�(B��ڸ���R�9�S�!&[J�9,^ٟ,9�&�G��U
+=�
+�
+7]=�!�I
+�AQ�ש'=FE�4b2��&al�6>�
+��������h�B��")��;���I��s*�Q����Y9c"�1鲒��z2�k�l�vy0 7>�
+�d�֕MW.o����BgDtʿv(u�X�4�Kp}�G�ߓ��-�8,���]����o��^������ѓ�[J�^�����c����(�N�Y��]$eo� �h9[�ƣ�:1�v��t��᥌e|��� �q�'��K�����p��4 �b
+4 ��4@ߩ��߿N�N �d� ;�tSl}O��J*I�p����r�G l?�
+ע�(�'㵢đ�gi
+����&�������!&;��=���@O���K1Ŏ=��5�:�2J.778&�$��k��4�RJGL*�sͽ�֨+���I�N,�I���ij&}`K���闍�sEvD��R�Ͽ���d�}����O�I�b�_9���3��D��a`�(r\���|��@O�@���Mo��ߎ$�g��i�)���R�~c�b]��_����+$��H!n~�F]1�GL*v��Z�F���i
+����� &����NA����@O�t\ᏻNo��V�0��
+'?��Z�t���w
+٫
+
+���w~L��w�ɰd�_���X�����2�oĂ�ϼ�0aL&5��QP�RK0�0�*���?�%��
+G�C�;��0�SO�!䒢�(m���� @b�c���_v��(J�k�E�@m���K�8���h/M Hhb IY�eI�Q}v�����޸r�7�b���yH~�Լ�0�q�i_��V�����S��!=����#_�m�L�Ĥg�����i��Ұ����= ������X.�o��7��=�<����Z��d��R����'�4�!����s��d�����q�ak5k�����M�MJ(�PtKx������#�I������
+d���!��թXK��tkc�Z*y��ͅ� ���( � w¯<�\�*D��b������,�$=O��V���p'1�K.:|/�lӥ��+<���LZ��dg�4b�5��H�<R����+1�88�{�� �� x�#����2sI�����
+|��?$��d�����}�Q3��׶�]���Aʰ''[�0'�&l�R�3 =�br�NG]>i&o练Ɏ[�U��lL=�t� _w���H�Y���{�D'���C�%A�)Cy�t�)�8�tDzP��ˠ|!B!�D��D���Eg ��̓~���WF/��Vs��'�A��\�U/!
+.a{��0���
+.�ĕ�#_��u�MLzb)Z���O���V�fc+U�����A����)��"
+4�D�'���)58=�2�6L"��>^&Ư~���nc�#�{U��ҭ��'�� T���� Z�;� �����$U:r�i��
+_�͒K� �쳷x#LJ�4K\��4�^�mΔ�X]�[���X�VB�f�@)5:�'7}OV2L��=�P�i��ϲ�gc��0�Y�h-8�i��ҧ��Vk6�\�o��'�Nq���|$�T��(�$)�y���6A�ߓ�g O"�Hb��1��fl��s�a��rE��tku*F��������?�L$ |���)�>� R����� �Ѹ�oB(L�7H>IwU���h����c������}�[3��;�/��)�go�2�q���CJ�=� R��HO��Y���$B�kѧJ�6�)�b �F��l{�h-8�թ�rb�V�����yZ��gcF�;�H�Ң���t@ʰߓŤA#v齌�3B�IL��ODxRz��I��;e�5 R�kw'w9��O����D�
+�y�š��|��%0���Ke��X��\�v�I�ِ�)�H��{�fZ;qR��C�{ �/Dn�y]&�O��k�ꉥU�S��=�l�'凯G��w%)�H�3�c�t:B��xO� ����3$�0.e#���P�ɶO
+|���XZE�_���\(Z�ODh�<R�^ihIy�)҈;
+��rk�'e�����G��!%�� ����������:�W!�G��{�DN���h���J\9���\�w��ACl
+��w��ϱ��R�>"����j������'�3���J�)_�P��K�w�G���&)� �w��Z�t���ݠ�Vw��gc�)ßH��aO&nr�#��<r:%�����Bh���;�]�����d�"+�VK���ic�Z�_�� �o���=)C��6Ki&RL�Ye`
+U�B.���t/M�O0�tx!D����n�}~�yLҿ�V]=�2�f�^�C�Q��_�u�y���p�%(�I�͹�䈬��!�I-�y�B�s9���5�k��I���A�Qn��ԩ{Sѯ�p篧��G�m�2=d�7���R�&Ӻ4M 5����4�<�P��'�|�-��>;=NG��c2nc�R��t��`�����AJ���x��w�&ӷ��4�p#��B��Σ)Óe6���y�0��)��%L^_�׫�rhe�{-G^��O9&%�4��j2�Q/
+L��AHi�L�"C�ɇ�v��M��å��)3�0�Pf�ۿ�Ղ��X�a�0)�QqVgsI����V�^U��B�����~l׋�� Gސ�p��3� ��L��4�RI�9�&M�?���V �!$)n+�Ye6��\�V0����YO'�j� ������Sm�,�u�^�)�d�w>��R� CҠ/eO� 5`2� � j'#��=%�J��X�H�Pe9zT�w�?�p�f�}iT�n�Qn��tw�R�����)OX�"���pO�%t���T&������Ϗ�]3����)�$�7e�Pf[p�r޸||l5pnd�ғ+�ĽH9�z���K6]mŤ z��Ϳ
+�'�}���nM�ty!�׸/0y�(��[v7t�%�OZ��`bsI=��P'L�'ol���3�{%�R�J�� }&����|�DQ�5M,��$)K��B�cuq���\��B銞�����SV�'�Ofw�5����7����'H�#RΘs9���'���R/)�Ȗ1�BrT��k��,pY�
+�}�+�;B(Ř��� �ɯGE't�s+ �mF\��wO�;���Kl�T�Ȓ_�S�O��c�f@�=-M�//��:GnW?q�P�gE9o
+����W�!D��dUb�;�<�޵�s���[#�Vۦ-�����Q�|�_��緍����T��hw��r+��P��KR*��B��@�E` �kR��.I�tia�i�^��Arȥ��kP_ڃ�b��DJ�l�2ˣ�fgI�rlX?gw�>X���<���}�"W�
+*e��� �Oh�)�5���Ћ��PŅ����������]lx�h���7&���\�B{������ԭx���hv�R�zE��,�Y0�C��>y����F��� �UJA)����_~��D�<�KT�n33��[jǻ�_�\'���?��^���B������kB�<~�U�c�>���7�D����A��A�$��;)��Q&�%��AG�t)K���^��y4ν*�� o����{M��O8p��r\r@x"B�<��Xt���)�P����ǎ�)Q�'eR�>���qبrۑ�]JƾИ�k7l��J){�'��@o<���q��N�4M[-F��l"N����A��2y:q�!߸f�l W2��Z�;fj#��SWf��d2S����ׄ����iՓ�Μ)~�.�y�V� �h�G�<y��3�ߎ|�R�����������Cϣw��÷�Ҭ.}�'!3ՑL�L�ri�66v6��y
+�0�A���%�Aj-\v(�'��9{-�ҥ6��x{"Zw��(%̝�ٟ(j9�1�5Ʈ#M�&��*=6�ʹX%
+����&(%�}-( �$�7���&#M��d1���:�Uˑ ��� ���4�_}͸�S d2Y+8�� ��k�7.�٩OK����Sn˧�z�Z�.A�<��dPH {�P&�W�ra3/���B��]�
+��E�<X[ ��.[�(�g���5\� dK��<l�f������x�R�3�Jyb�e�b��U� h����bP͍F��'*%���2)��:�ȗ.����y��j����H)�s���FȤ��3AQ<�2���1iQR0"|�*$��l�f�_�JP&��Q��Z�Ka��v-���/�~�^��3P)� �$HPH��L&���R��~h���b�*$�<���=g��}����s����|�R8�$��Pʪ����.�7TJٗFa#����}��d��i��ع�gC��r��6C�����2y�R��hBnҁc��tБ/]�2\���ۑR�H)+6����rB& &|�IJ�V�Q������j9�C� ����29�ereR�-��G�w)̣�Ҟ�&Msz�b�j�R�@6<�I�����0�� )a�8r���n1kt��?P&c
+�d�����4��<@{�d�΍b}r�J�4�E�7l�;|@�*�w&�$!���ϧ�Uke2��t��-:��]
+�����,�!߼l]}�
+�����O�g6�*�be�C�
+$��_���X��;�T�����1��H����I�>~@�C"��a(��R�
+�t�R���u�f�:����N�R�eؚ3C�Q��JXkl���� � �c�fS,�h�IC�c���=����u�0_Wf�k����>�k�nL���1�ז�^�����O��> �~����Q�'t���z�`��'#���W� xV
+��t`O���=��?���7������F�{�Nvf��o��wvv�*�Q�J��*0�
+�D��?�ޙ�a��� ����B� �J_$<��z��;��������i�{w�F#�e=�{��\&C[����r!����7��&��'kn¼~Ѻ{�]���2 @ �*n{�Q�^�Qw�+�e��ǔw�T���>~'�,�U)+�DB�Gbe!��z/�E�"���-|tʌWX�b��v�F�<�6N�H��P&?p��dr�A[��_Wm_���
+5?&P�F����������1�J�'�3p��|R]]�9�M����]9LL2 �Q
+��LrH�P��<ɤv4��Β�V�^Z���Yv?���`�����vF��RB�(���M( �
+�H4J��oէX)Ϣ �G)�<�Ʈ@�C�*p�&̟���\q7H&5��UQ�^Z�^u���-�R)E�7�?�A�|^�u6�0H%���LϐO���R�����Кr��{$�$�A@�$n|�^v�$�z�n₰WSo_Z�[sSrd�Rޛ�>|��|��R�
+�%
+X�3��J*%�0|�,ϙ"g��,�3�9!�+��\JdR��"N�tg�Q�^�Ҋ��R����lr�?R)�i���'a,P� �* Jyc����q?���DVI��1�?�� �IM�<(��.-i��[�-�g�b�\�~���{�� ֟!ɥO�Z��:,Ø�9{��ٵJ�:3�6p��V�ݕI�I-�� o��޾��Ѳ��c���ݷ85���k����k,K�(;�9�g��' �8�r��[���a/�#<�4+�,
+:VInI����(o��� �d�^r����@ԛ����/��{w?p�_��&�4(e���D�Rc���ё��D>�]+X�kd�qj�2��2y{6��p�dRw
+V�Nͪ�^�3�2 X)�mP �?s�bֺ�Vf�{�D0�/#�o`�7��Β�Vm_Z������_~� �B��pS���E��TTz��aL�tZv��2Z)�8��J���q%�S&�I?�IH�d:A�7�.��ɲ��G��=Pkɳ)�?�(�_��;YDl���g���O_��!�;��FJ*��*e��'� )���2��H&� �� ���zӏ�z,T�=Y]��=+eQ/��0g��"�c��b|�蛲��I�k���F� �$!���Yrڪ�KK��4.��»5��J��j����;>i�:'�:nA){;,n��Xepx}P<�4�MX�y��d�@
+ƏA����)(#��n�a��o�$�<2�cI�GG&/Zw��$��Q ���ھ��ފ��}!iD���_~Ͼz��dÈ4�0
+��$�l��WS/`��_w�t��7������U6?�J)p�0g�%z��*u�#�"�#�eDy�� ����ڔ�ן8�Ȉgg��nW������4c�[��4�R~z�Ű��:�,��,�G� �L}��ʳ���A�H�L�Bo�H��xV����ۗ~�,9ʛ;�`:A)1�0��C�|E"�<g��� !�$�,�����)_E�,���%����L>��E�d�xv��ۭ�
+����tb�X:�O�����Z�` �R�Fyx�Qh$�TIcz���7�8'a0y&�'�2Y�d�̟�L/b�]U/`��_w[Q|$��w
+�H\A��=xraOjVD��EI`�N��I&�������Ό�8�隧�ϗ7E69t}�y^�&��+�t���z��“/޽%�v�p��\�ԧ��"�>�A���nB����.����W��C�(�y��S���&��r�t+�Y�H�J W"U|C�~��KJ�Ǭw�RŔ!�3c[�1 F�d�I2qǐ���xC�o)B�i)��L�N��0�&���%6$5�KL���#x������G�;��n�䟴T%m8�<�9�%��S4���o�����6����� I�@Kq=o�w�;G�nۊ�h�х�|�!�`J�d}�<�v,�Y���l6�I<i�����]`�4M(�,�^�H:;`%5bdɑ�| 4�L^r1鞽���^U6\��g�* ���r��C��a��%��BB��]`�� Ir���o��I��~V!I�\������>&�o��zI��k�i[і���p뺤�u1�3O�*�QL�#d��I�'�����LH���;�,� �o+R�1��� �;ϝ� �D�D��X|���� �R�&����K�!�R�]�?y;��i'|�W���KCr0��X�,>��{;P�7`H�dt�~���ìs��VB�F ��*�`��V�7����'������9�8���QN;����
+\C�D�}��#Ig�J��E>�B�m����'R�ӆ�"ixؐ���c�χ�n' ��=B��3��]L��It���f-"�`*E�'��G�I���)�\R&'vؒNK)¤V��3,L*>��� ��E�}��o|�|
+�Dң�[+�l���v�u,ޒ�fZ˭+�G����_��2���T$fv��S3DJ�U��z�DJF+�7�����$����; � S��2[+�K}��t�]��aB���z1e� m� �����л�~>�� ��R"��eΙFc!��έ�|���F� W"�%�F�I�� O�)�K��H���rڰ�8�:������3Rƿ$ %R$Z㼩��{W"=�q� �����t�)�p�m�yۊ�d��@�}z����Y:3��JJ�[����F��,��qB���&�$H�����a�os\7h�=$����%�L�&����8�ͤ�j�߹4���n1�ȡ����3��)���틤� %
+n����^_�G�,��hZ�m|R��0e"���<9���X�iI�$O.���<�z>>�j�<�3��!�R� �i�^L�� L�����rД/15�D6���Ė�mE����l6���u���A�]W6<����=H�"H��k!�<?zo�+�I4�mչt�)�v�u�/��ת@�1v,���u1�3�C���4��3շ^!<X����AR� %
+H0i9� 0��0����3L�z6<9��� � �2o�����r�PLhĆ�"0�98H���h�;�IL��6�VtД�05.3��תR�#RF��p6��/
+Q��$�E�mHf�DS��ɼ�߽4�Z
+&H㑒�#RʆB�l���,� m+
+L�`��ڪ�l��Ѡ��6~T���K�'�'W"�y�0i%�#
+�D'a���?t1���<���|�)�z��X��Z�g�z�9x;$�"%�v�)�i�)��юec��^��$R����Ӕ/��7h��Jd��]�kU���ҳg}�q�Ob&3�IYJ�D~Fە3�����0�k���1.��z�mE[�_��=.F���Z�A
+V������$�*#�%RJsc���i�$—���0�R�.����dL@&�@�@����R���+�Q,�8�+δ�q�h�_=�DX���q(%�8wr⧟����L� ��ڼj��,��z��IQ��6ǃj\�kNA[f�k�$^���rθ%��r��ď?;��s
+2 �h"V� �<4�4^WGú��ZU�6�v���=J��IF.�
+w�̈́c�=��M��~�_�ghf��]����S�ɷϩ���`6SV���OV���d�-6秋1�}���ᓈ/�U��#�� �?�?I}�G�����>� �;9��G'��#�~,��C��ڹ����I�9�=3 z���+�{�a����k��?qz8gd�%�$
+g8����& �D��y����̉��^/�Z���,iU�J
+�$
+�<
+��J��)H ®���A]T�*Cp�&��N��l�L��nf�U�YT�*�V��%����6a���50C00D�?���Փ+os����9��ؿ�At�jJ|�LG�q'��l/�-~zG�7 0����O�hA�W�\�m5��-�2��V����*Z�<��!��Q�=�d��F���-��V�"`R!Z�Z�Ϳ���� �� |�;?E�*8��0K�2�HGܲ,K��
+w�0� W�քa��+[�<.�劣SU�Zy���Id� ��h��"�fm�!��a�Ss�,Z����:���ŏ��>��ĵ��.d쑭���J �(h5�iI5˾���:b-#�0o#%�E?+�IF���x�����l��'�Qw`�4sm�H*��3Ͽ���9b#�|�9�.Ī:��Id� .2}'�lY��; {o
+{�0y�=k=+�7�8\�ɲE*��'���k_�k>��1+��m;Q�O����
+=Sb#�VS2�H�'���?]�/��}�,�6�P�.�
+w�0i�O6s��i"=[Դ�-��=�ұ����7�'#�_G�p[rH������sē%�^ l�J���R�
+�$E�F�j�-�3>YM�#D?�V��x<P� |9����w������� (
+�C#-�%��4 �l���0��V�����E>������љ�x�H$�D�#�=���>��D� +�= �$A�Y�H�\��4:�襑S��O�|#�܊���⟞={����G.\?}�|ٿ�S�+Kڸ'����Kz%QOC)��JJ6sµ���,�LT&)��Ъ��?n�8��d��U��%���璤�䓉D���[E���J���b_y
+�s����}�����tHO
+�8��T����Ssm���֕$+F�".���P�(��.
+Źڬ�6�:T�����Q��ߵ�O"��4TJ͕W��r'x�(9���$ I���O= �����XN�=�?
+�+3�8��B0 ����gS[=%��;ˋ/�qU�b�'D}$�C�*��,
+�@�S��8�e1����[� �g��Y�4���U��rgI��(9+ʝ�'%I��t�u�KkK���8�Ӥ<h�'Î��HJL %�'3��]j��� Q��c�D�$�����~H؝ ;A�㩕bA�� U"})i�`�.�|'V(*>�Dt��T0�|������v�Ɛ8�{��bR�I6�eG���X�(�Z9�-��A�:���E1��/'��|�Ŵ���ɲ��n�����w4e驒�����/��t��D�y�C=�n����zu ��������^<CO� /�� Q���L�#�8��K�&<�'A˰ß������ɋ���$;)����r���O����t:�D���姻e�3}l�ߛDOb�h{�@Rb��xi�"�/žI)��(�*~���]xA�p��=q�� �S�͸���C��fT��>��|��{1�~05����$�����I��a6��e����?*��/���W5�������;g���l�k����J<z�s{��]�3�a�nk�GO��[a� d��d���x�|��*��J����S��HS���o֭
+�w� �jKЮM�|�<
+� ���J�Z��$O|v؟ �_
+P�� 3>�o ��t���C���, �U͂d7�; �V %g�I�${r�5Tpi`�ԓ��N�ߛDObZjw��W��,[\{S�󥐏D�|���~H՗(��/)�K�$ 0���"'
+sS��0H���b�<)V:���o(��I�c�\���&��z��b2�|�1�$m����$��;āko�`\}�|0O%_߁Rȧ��E�r ��|'�P�uq�n9�d�Ԝ;x��@߇�u��Z�H?���Jm �K]�T�{�I.��;��aC�k����(9
+ji�4�.;�N�ꌒ���i2:�dm\�����x���Ld>�v�`�n�+���̿��>�.ҟ���T�Q�y���$K!߼�>�^U�+qGp�)�gQ����9�ݔw6��'�
+-v��Y`��+�I�ѩ"���[p��������i�4��agi�.����uR1N��<N�#ԧ:�A�a� �0<I����bA�#����ԝ=O��&����F&u��˝��m.;?z���= �p�0ӗ��ƚ|KK��0H��U��f'xO������u�J슝 ����3�1�h ;c��"\#�<�^A��ٺ;`�`���
+�ƾ`b�����h[��4Aix���Cx�!)ICK�7ۋ��TeRֽ�JU�M{�fm�M�'��DiE�ec�s���������飫+�����>gH�v���P��J�Q�I���m���Ho�T���'i�WB�?ZF�|2.u/S(�r���c�*'}����J�
+^��s��=hg���6t7��;�=X~|�r�>�v�fT"�x�L�_�?����;�H��ɂ�6eEk� �nU�[_�N�dQaUJZk���шv����w1��q�R
+�5�mY�����l�Q��lDne�6��$@ڡ�O����?��wd��[:��(
+���Vk�k���WX� �2�.���$���<�<��H��Jf�'oD�\�m��X�"V�s�@�6���2�CR?L��<�M���'�d^��s��0����V���Vt����+z�&�����9&�C���+%�ԤW����d����o�*�x�'�y�' �n�I\\{��-*%�q�'i�*���C��5�r��$�Ef�R�,L[��S�H�i�X�q�E��mG�b�"푯# �W0h��m����߳�Y� B���~RڦdR��8K����,u�N��{��_�d�H�A�Nmr(��ѩ�hP�5�J�7�d�ޞ�I��E��V�n >y =����VCy�Y_)���*=���)��$����O�wJ�Roz��j�?D�?��@h�|8և7�7�_��!����xK�}rB�v6�!�f�'�up-0�m�A� ��J���~�̀��|%G|���|RWqTm�ή�tk��C%n�'��O�J��ɕ�X���B�"É�M�Rd�|�O�r�� ��i/���@���#��5�<֊@/wy�� ��|ra�yxU�6��������E����)��|�/O�d��^m�sN�̸R�v����I�ٙ^����pN}�I-נ����� n��vTSST�>�r��O�Zq� ,��|2J}��W�B)�mV�J��`ٞ)i�a K c=�>��r 6q������vHB�gzf���;�&�
+�dK�z9A|X�|/�㬶<X"��M�����:�����z��e&~�:���o|�
+��.K�w�������f���Z��
+B�/�G��n���e��^;͓S����uf�����u�G����%A���}�C<�*��xK�V��ߜ(��'5fr�o�o��?��� ���b���,���*^uZ� v�š��\����>��k�'_27��ɼ�<�ņ�$��x�����t{��]�Y)�V�“>�ʜ D �8Ҏ�<��'�gy���'G��&�zʃp�}�0�c�7ӳD�o]��B�G���r����� "$\��x��7������533>
+��ol�Mze[nw� ��h�����y�ɞ�I��>�����j�[�I��J)�����J"`�>e��nX
+EZ����U�%�RܨCRe]`���&�Q���0,O����o2����L��~r� ?�L�8�v<��zҍ�wCr��� ��9�{����7'<$H}�ҭ�G�]NÌ���}�m�~r������2K���
+�W�W�%�����6��0��q���9�����~ ���F�p�9Y~C�i@�2:UւO*+�'�^aqp���Ez;��)*l}��rI�6�v��OƇepD}2�Jޭ�n�(��6��l���*w��64��w��r��RY���Za:?+��V��t&u�u�3=�/;�KKĠ.���`���"ҁ��hڋ�т��Ll���Hh���;�8�l#~�+D{��I?�8��Q�+����M�է|Rc���Z��
+>�V�S>���'�����"+=�r�!cT�V�Pv D)/n_)�
+��Y�ʙ
+V��rB+>��<���}
+�,g�GCO��֗�$���Ħ223؍�{U�Q����0!"z^"eT���*�'�TмM9%��Tkժ�� ��$�e:;_�_r'��8j�)Iԫ���.�]k�#8�O
+ϓpC`�:Tjϓ�u4���-Z�C��I�O�K�ÅV7~���������fyu�Jo�yR]e�����Js��Dx2O�-v��Gض��^�DDY�? ��p�UΞ���*��b6IY��q� ����oe Ӳ�|�x�9 ��7}t�p΅ƻ�DJ�Ҵ%�������-4B����D��e��<��7J�Zs�Oټ�ጭҵ�8��q� �$�D�AiB<�8DϜ�9l��J�.���fO�'A<On�u�m���'�hDw�r�]zy�_�DD�).gFJ�*�x���N�2A�BO9%�^�Ϸd'�VV�b�g.���v�6qҁD�Jxt�'j�n~|Y�B��9�d /]D�
+foq]��� <)�[� ]i�y�Hnc��d~ v��Q�Wi�˓�(g�~��C�<w��&T�B�6�B3N|�����F�[K^��ԉ"%�&�k�.���@O��̜���2�S+��X.hŇ�.�i�D��d{���T��!鶈w��Zp�I������n���?Y��=�������r� < ���Ojjm����CF�Dz=��n��(1E�9�H���)j�M���D���� ��)���C�N3S´���l�v��<��^
+�@��;eNk���MQ�\��,�B��n/���n�ѵr�$y���KԊ������_��{�X�zdރ><TT^ӜJ�������Gi�!����K����S��NΘ�'U5-1�ĥF��@x2��^vg��x:Fx��(ye)�
+U�R����$��A!7�sT6���lws,7�fnz�R˾�c�gǥ3z:�j�) �T<�HϓP�K���a�S�>� ���A��1��d��]-�k�|p"hQ�6ɣ��TaQ�YVeUj��No�2&�I�� <�]�HIx2��d�Z��$"�]E�9�H ��fN�-O��i����ş�����b���J�|NW�~1�ӷbS.������J_��rB�P�.�D�
+�cA
+��� 4��"E���(�@cC㝣2���H������!:�ovj�'+j�' ���*��'�n�b�`r�Z�b$"�2�4Rrq��p���U��wL�%@��`_������F��J�Y�AZ��G��̺���>- ��I���y� *W��a��q;z�G�h9� �@�^�� �;[���q��P���A��C�`���5O�jZ�U6EU3]i&<�/���i�����$�P��s�ra�5P�l��ay2w����r�B/��~�z���8
+�Jm.��Z�s/�Sg~�}g��w C��]p��ia������e��Z��K�|�u��vp�j��'��љ�ضs޽���O�S������EZk�'UV�'� xr�������=��
+�qLʖ�O�z$"�J��v(CH�<x��~<Ճs�*!I'�4�B�N|�ME�E�aLE�4T������M����CߘV��tJ�2�0I�j� �w��?�����y�<ȴ��=��1I H�m�c� v ���JK�r�W I�`��\B�V[�h?L�4E�ک���I�6m��[�\ ���F�\H��=��<�R��{l���rH���<���c��X=i�A��>IW�
+�PJ�P����pL>��L�:���_H��IWi͊�
+����5����U����
+{��2����-�n�t��� IHR2�{�r��,�҉�B�܀����1`�u� s��% �L^I�JwM.���/?O¦�x6y��p8����"SgQ����w�����%�a���T���B��6�P!���J�.�Ԙs�F�b�<�w��9٦��d�dJ-7������e7���I݃$$��9 I����*���1&�
+I�;џOЧ�Vk��T�̬�+ ����r���wK��X4O�S�nNF��R�g�?���{��7GE� "{����j󇇷]x�"?s��Q3n:�JԐ �ܥ�+5Vy��ē)�B��g�4���mHB�™����Ti�U��+p�*���'��5y{�*�QV-=�AJG��5�gC���kqK��yZ�>J����'�\����� :b҅���E&��V����R]�z94�x ��I�(��3 <�)1 ���<�������j��]�V^{-�M��B�$$q���\��j� ��P�C07-�e�m� ɟ�./- O=��z��ݦ6��� ZP<�G�`���u{��L�oIh���p,�5h�M7!�6�fD�@�P�`�sNJ�as�(�� ��3�F�ʔ���d ˈ'7���+�}��mHB�� �!%$�B����Ϋ�;��E���4��CVt���*�6<�`؉;@-,?ͫ ڿ��ü�E�����e�6�f�^"���N�R =�^;8���9��i��y\;�w�bWjO��`��3s��ۙ�+䑇;+o�Q�'U:0R��2[[M<����m�B���;��%�H���ݳ�� �lߑ*�� �5m܉F��Fm����[5��KmI�Ǻ�&w҅�HtO�IA�l�f�3��/��wS�<�؋g;�P��� �����z��?^�Rr�ߣ�z��u�]񨋂c���6j�MO�3?��Oj˵�HZcO2�͂'s��O�����Y_��UF�$!�TI R�R� �&aJ�� �Я�U7��5��y'��L��}���Y}�zHTR�N���{��~�%o���Ӌ��B�Q�(��7��BŕJ̭)I�Q�x�Xg�W�����K�4R����|�)�Ժ�-<������ �O�d��'Sv���1�C-�IS�#!ل�KRF��`+=ތ��2�U �q��
+4�O�ҋ���c���H��J���{2��c��r���2���l'5)Ry<8��ϡ"�dAqx�-,�On!�L����P�P`�� ɦ��TO\RF�r�!��~�
+YO!EJ�h�_?����X��|}���$I�^u��� Ra�Q3n�U�ܶ�,xR�Ӂ'�^O<�j����b u��
+�$ ��IhR�k ��F�H��ڰ� � �$�eA7j�*��ؕyǪ���& �@�5�:&R��c���i<�f�W �]�wM�g�O�A�?�Et�l���y�]?&#%i0��t�#��ix��{ך�s�E� 73�Α�vSFVqy��z�Cf~5�d�.nC=��+���FBB"$�I)T9��q�S�*�X��B��`#��_ɪ-/
+�9"ɵHɿ�*T#6�m��vv'�� �xy�p���J�5 ���sXh��yҊ&]������kK2�e&c�u�]�$_\aB`�ull%lh�(��6�a3�B3����� <ɽy�'��Y1.~�[��yO���8!�BJN�-Ԩ���--R�>kڸ�9�G�(����j�2��fV-��9��iL7j��. ��ޓو[�[E �'��-����D �e���P�v|�&�o�o8���������>�3}�=�y/�<�2��!/��#ړg���me��_
+��./g ��MA~5xR�/��Ynn��e@�=�c$�5!“?iH�fU���φ8Ucl���3���]\�<�TfVj�%K�*��o��ـ��[�'G�^
+��B~r���i����~�?5����c�2��� ���$H�CDaAř�$""WW$uwj����fvv���ڭڣf�v������-�P r�p�r�k�췻!�N�Bw߫O��P �����<�}�- O����[�|�'����O����#�e#��g��`RJ�13�C_^�����S�l�F�I?�}I�8��n��f`N�$��|�@ �e�,�y�d�M���U�n$9K�1|N=��@~{ 太7�$��Ż�I_��2���FB���"��l3���~n@♨�z��2|R��ا:���D�x|r])�O�03�[��<+$x�a0��.��uN�3���zގ�Z��k��`��QS���}���m�>�@,��5:,��kQ0�P~"��@��#!��񰊿� ^)�����\3�g����%�݋N��0O���|�?����Z�}�1I�
+D�PÁ2�$��B�G��F��ťs>�7g�O�`� ���伍r_����`�bc� RJX䨙�m^� �CWۘ�Z��=��u��[�͂��\� mR�J�ݦֶ�̗��́{�CG��>�0�����������P� K��q�Q���>�UD ��.Ґs�t��Ӣ�SV�����6 &�a�!0�Z�t�Є~wQ>��$��b��U��I��`�����5�`SJ`�qm��N��(`ف��X���{�VF�)���y��}U|R�W���T�"�<�������� ��b?<��ɾRꑙ�-�O,��_2"�Ƽ��Z�Y�k�>��sa��8���� o
+��r+9g[�9m��j����6F�O&����@�F�Z�����{->��9�_b �u�R�
+'�T�Y��X�Sp��mx�5t�1�۪�O�����d%��N?��`�j�b�9n�yƎ���Dw�Oe$o>9lB��ރ��T1��S �G��%įN�L��&�6�'�$;�ۘ�X�M��Y�� L+`����" |2;[2�}r� 3�y��e� -/1 ���1JY+v����"X꫟vC0d�-����1���K�$0�(���\�.�U��i��i�ڗt Ē�eB�ߎ(���i�&��©�Y)�� U��j�L�6�E�+E�p%�L \!@}�co1q�쳢��V���L�ѥ�ϸ���������y��-e>��L�a� ��9;�\� � :f��Y�JYC=i�[I�qK=�&\CkZn%a�|��J�u>~W-�m��(���S��JT�Ӽ غd�Ä���Dl���.��탄���<' �ί��������"�.����2r�A���� �Q�uj2&j�B�W���b��̌��}2�d�.p! v���GZb0��#~�6��z�`����^�[�<3�����-;i��P0�G�ne䝒�_D��*���(�ֻ�)2��Rh-܆Of� �۳ådWዄ�7<r����7x9Kr����P�����T����Y'�~�a\��ުPY\zllfLt����'v"<�<�L얚� v��@���"Wʑ
+�7���u��U�٨9V/�}y�r� 5H�Մ�.�;>:R�n|Br���KbƊ%3˔�[�_D��r*#��B�}�ĩ�R���_!������/
+]bf���i"��p~}��SL<�'��(%Dp���)��"���<��a��ec���2S���`0[F�J9c%wB-^r˥V�Y;����n�MZ�L��\:\{Z�wL�II=����-3��-����D7k�����r!�nB��KC�@^�8 }�I
+�|;�d�!�I쓻b0�[�K�家т���>�Uʑj�����ۀ͚�K��hw+V�N�-�=��ƨ_����S�g���M� �23��L�e��0���/!�׽ѫx�$#��}���k�.��b+9�@B��RJ.�O-��c���v�����{e����� ߛ��I����3㓐����-�—��>�UJ`�J
+�Z\�z�服`/~�κ�MT�Q�����)=p� ����Ho�J b�!�Orw?tT�ŇC���"b3��L��-��E!r�[�F������CWI_g��4��d`}�]����yyj�I�I
+t�C�9O�皇WI����=�f~��"�X�u����>:63;;��n�3>�Њ�<�"��*%,�Z��-��.;гv��`�Vr����ʈ__:\���?��HO9���S�[sK������f^�p)�UDx�ɡ
+ꑙ&�5Ԩ����]�U�.������D�*��K����&��NW�l3���|����M�7呜O����T�T�O�-Fx�?֢�hG bm� f;�M)a%�5̮$��y-�5{�.@&A)W8ü�ܝ�j=P��+�?��vu��܉���pH�ʷ��)Sdœ���� t �Կ���E{�RV �\ܧ�w(xXE�X5 ~��O�B�H�����O��鑚�/����دۧ��;��Й��1��s��ZiW�*AY+,��i�)���jʃ"
+���<�
+v��e�����G��T�
+�������^txZ�`vIr��@ ���1�P^������A���]t3sn������Z�9z��O*O>q�*���e��ɍO������B�,0L�f��Z��mq��'��SV��u��ǖ�֡�&R��j=� �� =�aٳәqG��}'O>w�`�&m�I6�d��`n���ā�����R���i����d!`K�����aS^�x��{�x/c瀵���_]=����ٲ����ŨpqÙ�_p��N���:XG��`��z��·�u�I�wEr?0O��ad�m�jV2���D
+s_I��ǘ'�JO��⾑��[��q#�%�O�#V���\/��H�R�D�a�)d���f��hjoeN[�C��By9zR�M)�`�w�>/ �%�I ����L�w��zÖ �⪟<�d�|�E�vPB�Kr�׵��Y}���S����ز��Hy�L���Qy�$N�'UR.� �q�Q��3�����'!�a�)#��(�KmXX?%ӡ#xZ�6�6¦��̓�5�#�:�� �+|I ��}��r9�� ^B�^�*Ua�{��.:�ȿ{�WW�\__�����SEǫ6a����ׅ'�����3v�}`� �t�4�'%\<cē*�<��:R�����f��_\.DO�)��� �n)��i��`t�\t��$��KfK���
+�����Gs����e���_5N[��l�*��Qdw홸�H��'5`�3R�}*��Ӷ���'�l�/�{<Y]]���eS0���̓xB�`0<I 7��Ӵov�'��+”�g��ɋ.�+��$�y�e| ��Q�G�m��� .1����"�5�"�%KJ�r�Y��#��MmR�����'e�*&���x���v��,�׻� f#@� Y�>9��p_�x;�i�eeH�uJ�n�i]t��EJ ������Яxő&4'E� ��{Bv�hZW��y��ڌ���WM����.oz����il2��r�w#>� �;YpQu�Ϫ+�>�&ܿ�ۗM[�1���g�t,1湐���T�jג"e�l�a����`F-��xJ�I�$��-�d2�'���1O�uH�d�(0LNe���E�n��r��ow"j��S�<��$e:K �? �(1hN��p�x����I��2i�)̥�]��o��U+M�doa����� 񻸄1�6�>)a?��R�%��]�E�8)�€�TI�=�XV�d�) �%EJ���VXp
+)���A�dH �L��XZw�y��øE��KЛL��'��jj������E�/ ���&)��6��*���s�ę�|��,$CJ�`��v1R�k��݄������'%�$zR���K=��'1L2�)��+�����wO"J��SV�s��$��'���I��O�҆I6��5�Gd 2c�nx��'u�dV/8�<��4��_ &��5R�Z�CDOr�J�8k�cY)t��Fl�E���A��� h�T9m�r��^9��MO��6MM���{��O
+�'?��K6H����2$li��0�g�m�N:��Bk"%&�
+�X���8rK���fãÒ��2-w�sh9�Ȓ�� U<����Y�����S(}����`0�KvH Y�P|GqL�M&�I���X����7 o$e��a�YH׭]Z�k'diR���wUO�'u��Z��x��}�c0=f��VĂ��7��̃I�rP���Z)#��EQI��&�� ��x2��!;��w��e�6O&Y}[�A��1��v��k����|�A��y ��d��[ �ᕘ"��C�%�H���LTR�]dHi~)��g�ܖ�F�8�W����H���j/r1ϰ�3��w�9gC�>�6�!KR��<�<�^B�>a��BI���k  >�Ʀ%���W*aK���k����ջ�)�h7'��k��'�G ��x>�2�Â�{f*�v
+�oH�\6_?৖�
+AEdR�����
+�-QO����^��g*J= �\���g�y�h�T��
+ո�ͩ.�;'s���R��r��O^��)���s��2�t"�C��w���U�uŲ�^�c�N譛�g^�
+�%�Rq�Y(%m��~ ap�i�nk��_)%�I�I��_)�9N2?�'K�l[��* |2�%�i��/�y���tTw)
+Ly
+�K@)� IcU�R#O|��\����);�i��(�d=� pm�\ ?��5Sy[
+��۩D�֢vV)��r��m����jhg�%�d�K��J *��ھ��{� �
+�% o�pV �􁧔�����Rn��Ǚ3T6(�j��a?!%��Q���O�\��m�������
+��X�\�H)i���N�/��wp'����*>�'�0+�O�6d݂�5sP�
+
+(�R���IQ�!y�|r��3�I��I~3��Odo�
+�Z�֛
+���l���H�F�O=�Ac��7RN��k�%
+����g/o��:�l�! �Wv�)� R&/���Š<��d ��ux}UE�9D �a�Jg��n�h?�t,�h�2��$�����?�*
+hT�`HN�9�0/,��9ck��a�� َ��qv�Ѕ����E�qH�#��u�ۀ�,X;�: R>R�嬢p��?�|,��c ד0��2�󖢨��T�� ?���/��: ���IF�{rg�k�a�zX�,����E����^-)Ja"��Ŝ�H�F��}�)�:���^�W���{�)������zZ\��i��|w�mL
+i���f��ɍI�p� �q�!,���iT*X6�},�I�[G"�c�5��9���G��6@�BO�vV �E�#��)qe��ȿb;��$�[�����<?�L��*,]����8�s;���}�P��YL-�-RV��_Q�Tw�@J�V��λ� ��b�Y�L,y���_/u{�
+U-!*a^x����I�cn��e�&7'y~��� Xr��DXF%���ME}�FZ�2}Z�)�9!R�e��i���4QADʇ��8��k�飕����P
+�vː�����d���l{��g`��ed{{/pK;�W��+�X�$@�4*.�?_t��j������D��)�Lx�9����!�o�l�� S5���(F��ZB�.�b��ΰ�q�ʍ #!���)�׍�'�%��� ������{�Q��Y W� �|#��?��YO�}��E��t�Sg'M�қeS��R����Ȧ�H
+.mk�iw��|XZ�՘�L�*{(`|��R-���]�}�bJFV�Hy�1���e�;�R��R�4�S� h��y��,q`;���8CF�"#�{� :x��s�r%(�,#�"�� Ci��4�-��k��uV��� 󅤋f}9,��F%�uE��Ġ���D
+��p~�gK�仳ls������3�cG��ׂ+ݞ�� כ)X,`Y��Z��t�d�<΋!�PR�D��>/�p�'�g�"�]��8WvJ:�HJ;�5)��z�֧b3��C����"Ͽb[S���
+ӭ����?��������2��g�+X���iT\$$l��R_0�(�LʠR�u_N�t����)�H�ȓw8Q��w0u�L Ӿ�Eu=x�43�ȋ8�D�q���� #�
+J�E�F�Y�����xG��ð��Zڼ�p�6���/�/�g�}�C՘(Y�0�vf��8��'I��L��p�<�B�*Z��QYK���×��{�A� ��"�HI�L��eO���w8?��^:��'�Ӿ|EuP����G;�'�Iq��;�6'���Qd�v��T�ɝ9~d��mֿ�,���,&.I#:��Y�vRRi�J�Q�@1)�1�ɹY�I��J� GQ�}S�C6��`ȋ8//��
+�� ��՘ X>egQQ�Le�NV�H���� Po$�dz��H��a���#��f�<IQ}22w��FE)$��3�:ʍ�!��1cc����K�I&ʖAy�'q��^�} |����Nj�+��뾜^�Y3�����g�O4�N�u�J��DQTO��z�;�G�z �_*^X`{s������d�� �א�TY��vXj��5%@�`9,��;[2��C����e|;o]L)o�709_V�M �3�{V�jѐ�����r�rc�%FvL���7�vh U�vX.�ʒ�%Z�]m~�w�����Yg����2IK�5����H�DJo�<\g��Q��(J{>#�Yd�EB�-�� ߛCC*�ƈ��i/ �,S;��3Ku�iQ�Fq����o(u/� ���'%���h�԰�՗�ۛ��(�)F�+�e��ȿb;3 9���tl`��ܚ�o*�KE�RX����v�~KR
+F|��O�o�6r����iw����Ȑh��sv{���ɓN-߳e9,�1 Kp�5�������$L�h�@��֤l� ?ehZ��)��_�$���񗃺�Z�'���������ъ�����3T��`�0醴*,�<�q� ���a�`���e?R�[桵����)߮뱿�g_v��v��;W_�ׯ�t�G���˿�������ÀGB߃� ��5S�,n���������,1r����Y����=7�)��RXT㲑қ��ݞ���u���n��� %=S2��&|�� ���%R���ݚ�O����.?�]�HZ�^(��W� �t��8���c�_\��u�]|ď�|t׷���0�lh�Xn�a���23�D'u�٪���a���,#U�*���ir�mR���4�ݒ-xO����R�#����}����g�����<����?���|t��>޿6��툢�,���1rj���]d�Q�����n�pW?��R ��g=�r`0E�$+��H�Ğ��0og�� �N���ߵ��A�C��F����ؙc}4�sȏ�;�{l�[��D]��
+7�D�H�;�~��аL�f
+�S�f ��6����D�~^#eA�
+�}!ORԤ�{��6X��r�K H�~P.��A^
+�㨨%Dx���`��U�@��4�n��r����Eʙ����rh�
+�s�r� K�U+�m��)�7{b�iƬw"���X��,���w��rI 3 ak�')jB=�� D�;�`�)���T ��(?����e�t��@��T �+�H����he�/ 斗5��~,(Y�ΡoO�rk��W8:�<�}g�7�GQ�_ކ�u��C�4��,A�t��I0�RH)��úlgŅ�\D�W�X�����AI��IQ�L��%�A���8�>�2���I�Xb�e��
+�������<�&)j�����#�H9�`za�>�(jrٰ,*Q�jL6����t�4��.�~��X�DʷY�ѓf�(�*R�J6��
+x�o�M��ɤT!��կ� ? K3���(� �/1t�9=���2a�rU6,�a��8�kX6:��;8�bH)o��#e7�����Ii�
+�W#R������\_>�_?� "t�94���_��s��]��0�R4R�"B�n��qD�%�H=NJ��%;�dʩ�|�@�yU����М��G�r~���#R���23�D_G��\�*ᠨD9"j �3�i�>��i�b8� ��qR�Ͳ&��kaҡ���8m3�����ug=����r�`�v�u�&�r_}X�<��o8 �pΠ�HY [�-�SE�]��[�5���
+���R�v! 6&��uW,3t�9��Fw*ʃ�{��ٰ�u�
+�s.�}��93��e(�;�=a��Ç.4�s���@_5�� `��`V
+Y�\e�0��I�:��T�'%�yb�H��͌���Hٽ���T���ۄ�<�BHD��{��(jJ�TPR�2�ϓ†e�F7TKp8�I9��?ɌO����3L�L9Г�9���z�i#�8ο�vwI�xΜː�V�6j�+5UWiz��jWEj�6Uwە�Y !!`��\�������CU�O�"�c�}�Z. !�m�`n�1$�ߙ��, i�g`~�W����3g,�j.�,Xh�#�&��H������E׽^��,��e����D8��٤�>���f�u�g����y5sR�宺�_���y(iM���F2�ln��L^U�K��a�+�;���*[�.�2cڙ�%�j>T�y�YI ��SK������cJg��)e�xJ���_7HJ +s�Z��G�~��5�8c�L�2a�~ɁeRZ��X�a P��Җ�Մ�� _"��!��1���a�RD�g�T�.�c �5���!`����f����#Mt��'$>�0��r`9-E* �9 M;�6Н�H�'�)�ZL
+�MȺ������6����v1z�DR>Փ�.1|(a�K�v��X.�(Xf����j���"C>1�L@d"�'�F�փ(��W+��
+�J|��=jR� ?� ��~�c�����U>�H��[09�D�ڄ�°��fX·8�2ӫ蒋1�vJw[I{�-�NK�np��6D`6KNs�Kv�9g��{,�����Ťu�
+�N8W5�@�/3�2�W�P�-�;E��/��j�R�F�-� �,RF����Ń/Zm�ҙ�� ���_�l�ox �`c���G�vȹ!�#M4�.���c�g���)�p31R��'c&�SA��_ ��Z���>���&�)�O�����ü<<�^�HJǓ�/3�+�a^�<
+����Mn������-�M��H�x� .��b��[�k`��&]O�z5^B������뿓1̳��<H�!{;���Ҿ��R�����TP
+���^��j����R�V�͉ao���6���pj#MN�b��(���ޟ ���,s�T;T\�K=(��'�HJ��!!8���J�������ng��Do�������i�� r�ǘ�_u����*��� >�� r;U:;���P���g�^�\�K��ô'��V>ܨ~{��{-L�u�0l��m �����JD��r�!p��Ow
+��{DJ�j1
+ 娟�����C��_�+�gO�'��Z%�;0$l�
+΅�s��#%a-Ʋ�������J�d�e����J��Y>�UJ�YIɁ�Ii�V���a�ӽK 0��;o�U���0�m)U��c6
+��D�|S�P�S"2�]�%�OK�z۔&%\�w�G�&�a�3-��e��+ɠοI�!�{B_}V��'�$4TK�����dza�HงI9���^�[�bD5�S ðX���y�T&e6r���`b6�3` +qX
+�*�F0`9��ÁJr��qI �
+`�鰼!�o����@U����-@ʁ�L��F��V{�[��De%������:�B�gO<><9P>=�a����
+�+�ԗ�֒�o�x�����ػ��*��b��� R��*�Ű�J�
+b��F��oU�pv�h���R��J_ß��<�Ǖ���m�N����yjȸ�+M�5*���+�rgC��<�
+�+�e���]���iEO��yXf��A��0��K�o����0,}j�ݳnҐ2� 9ُ �ace��(Ս�bt�#��h�)�E���Z�|�t�Q-_��zh������|����w��۰��z�s��r��I��j�������Z�|�]Gc��W�(;�G�q(>f��13ƄdΓp��a5I�J$*��/ �&ia'��m�I �����a����XG��K�1���h^�b,]��~�ּ��Yx�����8���(����6T.������f��\ ��m:�X�-�=�FPbZ4>�ѓ��I(���{�n�d����aبIb0���$-� ��Ű ���z�a 4��ԍN�c�̈ۦ�S˗��Kõ? }��Ю�������sQ1��4z�4�]�rO%�p���Z �ĸ�l�Pb��И)7�'���$Vkf=94tb=x�-�/#n�� ��ȟ#���YaN����M��J��4�n#݊�q�\�K���j�� ���7C{����9��'���n�6�����\:K�w���e'�cυ�u1&)�#z��=i�/��ZN)����t?|0 �Lin�w�� )��Z^u ��8`ؔ*�FG�8 (� ]ֈ�q�u%ڌgi� Z��x�1\�jx��C{�|7�I��D�b�^ϹC��#��J�I�� �J�|���蘄F����A�\�/%�����L`����cR�IE�Z�8P>;��M�a��.;�n�I g��"&1,mb:4:�.�11����h�L�F�(9���j�u���W�. �Zط*pd}���;]���9_�t|�\<�\:`�9�������]��&��a46���q��=�Ԟ�V{�ɡ���":����HJ ��Ib0�\��&��p.e���} ��ıs �H4R7�4�m��k�����_���׹|���_|�9w��~\��Y�.У�բ�l�p�$�i�F���a�����S�����\�%�2m�g;w�ת��k����������8wkQ�
+>
+���8)W�`��㥨�b@#�QC�&ƴ���i�1b7�:l��\���T�|W)y#|����峿���^����k.��V��u���8�(4�G���nã\D4hh��{U4�ъ#��Q��4�'�ILF= �H��+ ם���@Q�Rql���g�V�����!���?^���.DG�y��Bf�y"�U4�Jq&r���p����wC��k�����{���K��^㟦>�!�q��8ч�-nwk�Q?ߑ�F���F򤮘LK�����I<$,���/��rV|��Ơ(j�86�gA���'!ٮ�0�W%���� ܞ����h��Kŕ��xr�|f�\�A�����O��������*�s]�o
+#�*�T4�{U1��^\���F@E�j�ݨ?x�U�<��6|�Ѩ�'g�Џ8+��=J���u�l��Y��+�I��P����]* ��Y4B�a]�l F�bُC�� U�/��}��G����9��RK��}Y���ې���1��bt�rЈ�9��]M�P�D�����T�1�����Ӫ>r�z�iE-�@��R���t�:%Ȑ��S}�l��2GňhdЍU=�ǔ���e[B��,t����5{u��o�}w���.J=WŁ&a���� ��DbD+���@c܍�oI��b�'�Y������I
+Orx����_Gȓ��R�,�� %��.4�>"�Jc,mZ���
+E��w�~=|ts�|�|f�|~7��>���򵞖ګ��ˢ��[lF��F0У��q�0���w�8�7O���j�E�L <���^*)a2���F���u�Ⰺ_���u�a��(�Ƹ3�-*�� r1?%b7L��b�2�&��;ʑ� \��P��r���տ�~��X�k)��/��z��0�$ �F��c��!D�D���^6�w���9t$(R�yRK��`�I6Or�}�"OR��+T`������E�`z�Ъ�@�X�\7��XG#���#���u�Eqf(%o O�$|�Q1^��������K��s��Fi���[끐��W�ց���ح~xA4�)"O��03Ƀ�<X<�^�8,�>bU�=�R��86�gy>Lj� 暧��_�؅��dR���ܘ�n�ۀhte�On}�s��������O�Y�[��_{��uI�)����
+^���i�Fr��Lj���.��ub�0�
+2�F�C1=�t�G����H��ȓ�'�SSg� �33��G�L0>v��9�R�Z)����9H̳̚�z��h���P��hԔX�����S�[`/gS��k���4�N�:�S��1�����T,uTKݗEO����������D̍{���~�0�!�vƚgE������'�!3 3�|��3�� ��}R��|��?]S��…f�@���>)2���H�Bn��.�Y%"V���"yЍ��X����.}3\�%\�5T�#x��+{��� ���B�:��p�0��%��n��8���=�XO�@ą�Hh�^�ȓX�bR}qxVa��S�-9V���DZ���gä�����:�.U ��tA�t�1b7#�a��ܤݬ+t�P�{r�.���5{u�� �-eRG�����'�y��ch�cg\��R��8E%C��'- �+&�Lr{�1�S�b�$E��8����oS�����\��>N)B�BU~��P��J�4�h[WuhҤ���p��~�i����RPB;��q�qb�qǹl�v�9���>vH������y��$& ����<G_t���|=��ڭ�fO�ֆ�-T��K2$�qI�r`�t��Kṇ���Y�ڜ8�t����u/�N�=����{��G.VG�����{> y�������?������z��~>m�e��)+qe����~j�$����RZ���FJѤ�SkL��=x���@�)v��*����b���hbbLC���I@�W��+6��"~�ر��N�6�;�\
+\�8ꁋ��3!OS�k���?��'�険��Q
+ ��D�!���H _E�*��߮h$l�4.��4/Y��*ɥ�p�EK�X�Q���X�%Q�L�Ȏ�'/�~����7���"m���(.
+�V��
+�^~���q|�z�h�=Ԋ�tT|�b�zR�'�7RJk�}>z&[`߾]�ѽZ�9�a�E�x���S�*)�&|/�?S�Qi�]�=µI�4�5 ����O$��E@c�f��g����`{���G��=���7f�Jf.VF�a�i��%��@�B�͔�O�(�1�f�]�7NŮ�ňnİ5��=�0)�}OJ��l�3�� ��MI�a��f��+1){rf��{y n�V� ���B���1/���<��X��ġ�>��ױ㿛=���ٿP1�X"G#]�B} ���1��<����V�L���dP\�Y�M �VM����̓k��)�h�ߪ6�ʓ���a�#p��n�2L
+oi�ГL��&c��hbP\�b�f�»ӈ�����?��b|e�����oϴTDZF����a��P�0h���'��ꑹ$I�ؓ)���bİ�M���_s۶mR�xR"��0 �Up0PY�Չ&C�© R���~��w���h\J�Jfa�&YV�,ͣ�14�%�'E��r�X�9qx[�英����� {gl��H�u:�{6���4�|m���N��>*F��>�h��h����Y��a*J�������IكIv�G������R�i�a�C�(7oieR����=~̭�F3��2i�cIn���TI��F��Y��ӉڭT�GvĎ�v��kцw��e��ÑΏC�&a�N�;
+=��j�&Z�y� 7*ѓ��.V��ޣ�f��3.�W$�����dɏR~�,׈�"*���&=?�B�����D?���o� �g�ދtԅ]gB��?�σ Y��E��[��ҟ���dJ�K� hD7b�Jj����F�2L.)�~�bL6e��=pl �Ё'C{򓥚T�&Y��n����(Z6�5?Mz.~����wΞ�=���1:��=�B�s��K����� Ђ��!�(.�\Tbf(F �,zR���$��� I�)ѓ���h�'�1\�����$y�z��Tݎ�'���j��_���"�j"��p���t��!� ~;U(qb�����2�@/�Q��h%Q��=�T������IY�I�=3����F��"�a�>`$�Rf*ɛU�[�F��;sf]�z봽n��*x[�c=�d8��}�؀0�����'�=��]��Q�a�:S�'�
+��!%�Ub�#�$F�OI ���P�0����E)yٚ���0O
+w��Հ���Ǖ��/}��e_t���8C��7�#�F ��V���j��휜�@���O�$�`$ݪ6�Г����EC����^�ݩ5�-Src�<y�U��x���0�iw]�b���!��P�p�F]�O ð��Ǔz�F[P o�Y�I8^f�4���I�$���R�%C^����h2�L�h��\i#sr��2kaG"�d����Fo�y�5�e��_�v|5�9��[����a��ē�{���KَIIj�I�_$�f�z%zÔΔn�b�Ye�!�J���H��(I6e���&3�~��j]�`.�w4�썃�ơΦ�.뤻���,�i7l��~.\�{����0��O�ZmA����L�-Rf���2��)��,�L�"t��D(EҒL�5R$�-w-[`$����~�ڜ����<do�lr��������Q�m��v�k���kj��2�lJo�4�g �a�;5x��T~>�RZ7�dSI4`x]����}��Hi�#oV��)#�1I�I�1^mX�X[vRF>��C��8���vX��p�3��A�m���eO;��j� vx�%����0l}�Oj
+�u�I�� ��>��h�ߪ6�'1��%��r�b�Q��uw����k��V(��"͑���L�p��ɦ� 09�n�t��:),G:��ݶq��ɾ�+^;�R���Cðuٺ����Q~~���<�p$��[z�)=v1l��bgXe��⾮���7�^4q�r.U�ai5��c0��cq+�����`��
+�uڂ=-���n���q����p��eO�l�{L��a�غ�$�+(��&����<)��cN�a�'�p���5H����f�p)�A"[2�b�dc�Tj+ �K̋�V�X���/�ߦ�3��o�ʼn��ؾβP4
+]�`/ݺn����nSѴvl�TUh�����N���N]׮h�R����-����ߝWB� MjqL���~�{ι�c��&��&�y��ս'`��=���1�J�������L���
+�J‡�r0���~~*��r:�!8MݒB�����I��T*��|R�IT}��,��oa
+ec�1a{�m"�n�A#�Y�SݿPM��#��M��|�,\��x@�^[‹���9�@�'V)�%���@��9��&c���ݒB�P>���I�Z�|_�� �1j�[H�!F�^�P6��.��u֬��l��RKֵ��>12�m�{Nt�u���ϱ%�q����r#ݝ�=�T�'�����%�X�-�A�p��|�{�����>"nyIꪢP(��IQ&u:��K`����5�ׄ����y�)�g�o�X#�!�, ��n4�O�3F�J�a���F؀1�*|�L`lq7v ��!G�o��lN/�[�Xƈ[�v�#�c}�-)
+eYJ�'��P�2)�v�~������MM��s�c�5 s��
+%쓂Ї��5c���*%�R ��� �F���F3��I"�Lj��C悈@2��%����%��zZS�-Y�$�����+��㕜a�z�[E�ǔ�6v���'"ީ���-C���BY{J�'5*�P�2I�Y�Ϛ��[j�Rw7��.
+�_33�̭f"�&�l�_�H&�M��wBh�J�o�{�^+��HO�Pؕ�>�N�\��Q�薶��c��u��}�? P��P6�'Eut �Q��*U�BY�P�(��"l�ă�|R�1�n41�')���w����ob���C��*�
+��)8�[\�ب���+&|l�� ����������� M�!�hO'qK�]jH�*�P(����I�:g�:�F������F�T�����j�~mpH�R%z掯��}h����/��̚쓒�;���d�u��|�R;k�g�z��+ei��kw����L�,�p/s d2�p�c�n6�k��l���x��=���J��-��L����c��c��3�M�P@���t2$yR(�{d��=���!5*�B^UUQY�����R�R1�m������ٽ���~��G^<��{�̟|mg��Y�,^�Af�f��Q5*y�S(_��F�E��t���n�%�(&�
+� ���r ��ADP�oK�8 I�(φ��Re�d��Э�̤y�R
+�����(���:�F�4���BU] ���ƀF*��� �ޯ���?x�g��ק�������;p�}���
+�8�ǃ@B��=d��9��a�®���3�6��&���w֬�>Iٸd�5K�s�̭f����u�M����m�!X4�>����!�pp�rl��"�&C6l�|�!���:>?�[�tKNu�O��T�6��:�랈x��
+�R���-�iK�l΃a�X�"A]��+Mx�5� "�!�Hw�x�g"❌�/���U)����QԪs޸pż=�:n���IP�o<����~�٧~��C?=q�D�[�>���I�m(��� b�!S[�ω��
+�$�$.V�H+�j��sݴ�$!�^ ,4����c�O��$>���Ӻ)Hۍ�$mzb�+���ϙu�v�$c;�G��q��{�k_w9��{���*�ֹ�s���m6.��e۲�F6{1�N&C��xLjƬ���1R��+�Dp G�D� _��fS���0���%A,�O� ᓐɎ';N�8u���cǎ=z�ȑc�>��j~� ���׿���~���z�g���u�/�������5H��H�bih
+�,��d"0� ��0&y�9�`�-�����Ǽ�!��ˆ&�Rp{G�Y���N�ԯ��3�|䓟z��)������|�{����?z���o]u�����:�O�ކ.���!샓q1��-����Fu�o|:q>�o��l���3��t �7\��Ds�$���%��+]UX%�*̾���z�s'�8�N�F�W��R=����np��\Z�J
+�����Ps�mA��?�!��3�Ҙ~3C�!����۵$�$��ŸG�'���v�r������{��_k��������� (%& {�v9� �H����0�r�?aL1Ƭ��Q"��6�5Om�E�8��!�E��n�?�0��H&�wK��赑F�w�����?��{��F��P���?�G�"��'�3���thq4R��H@�%�<� ���%�mZ�p����<�aUP����QV��ַ}1���'�f������sL���q\Q���q0���sܻ��� ���44R�\���ر�4��Y�����u8d�쳩��Р��\�aF��wS��l*�]#�$�ggq4<�� ?�7
+uw��cݽ�\wқ�x���Z|J�^�:�/���A�0I8�
+#a����`)9��b& ޡ��˩�6\���E�^.9"CI, ���b�}1�Nˑ�xpͱ��<��Z7��xd�a�b�p��[�fJ�x�+�U6?�*������'�ۑk$#���H�0����X��O�0��1�|&<���3���un97<�0.gu��-� Ru�ܒ8�5
+[n4���&i�t,�A��y�>T���I[�i�wQ�^?�6@�W����[�ɤ�"U���8�_jhC�oE�$��.�ؓ�=�Ǿʇ��A�ͦBŨW�Ba��RP�Չ�zxp>Z�<��Ơ����"�ki�2Y�KQ��"�|Jٶ|�9\2|��Uτ›��W��ᒱ�<��2i��߹`oh>��FR=�Q�īy��9 Y�W�
+��pp*��`z<&�9�L��j�-}�d
+�P���-������1/�r!Z�o��|�t1!��Ēhr��,gut2Z:��ޭNד���?� Վ�򠯲N�A�fV�
+ф�1�E�c�x�+p�k��w�t�ݥ�i$��Uo����>Xe�[�����h�<B�
+M ��Z�x2��%��d�?3<�]���vK��� ��r>��ak3�X�rf��%ê���G?$��%�r�!�����!/J� V���E����N���\6c+PQ�Hչ�?�H^�@�-y�L%`2�/�i "��Z���D�WJfS�����\�r� 9��6ܑ�3Í��`!����0(��qت2��nR�C�Rc�%?�ﻥ����������n�ʹ�f���ض��T�^g3�i~��#�l��"��RJ����n�S�[�z'��Tpa$ �,�c��ۈ�b�.�W��u�x�R��i���5�!~��5/����M��-��
+����(,⠨8 �d�k�����{W�p^U�����k�}���e�i�H�6���H���,�G�:��g�"Ck�g�[�9��n9<�\Ӆ^B,M�$�$��Y}�Э�&l'������DmP��-����XgR�6ǰǪ�0IC#���_�k?rv��w؋;ZG�m��FR�s1��USG]�XΦ���P1��.gu����%�����JCs���h���!
+��s�' �w a/�f���8
+��?�|���"tAB������eQF�#��m��<����hD�ٴ�Mm,�ʆ<0��K���kK�x�KJͲ)׭���\cY���K&
+k��m�W_w�a����IBacU�#�l���A�����h(*Z!�ۇ>�4�^�D�8��o��MӋ�� ����8���A #1�� a�b�/�3�.�,��rj}>Q6�Y6����qx� �f��ga�n��`˽2�%w�`���лc}q�<�#�I��[[HښT��q�hN�%��y��-'(v�������� �s0��)�EX��VP<��o��9�H"�3����`.'�yoS)-�lkT�5+Q��L�;�(޸�Oڲ�F�X6�j&�X�k,k`K���� IX�������3��Q����'��d���,_���H���� �M:ܽ�=���y��|��������M�����÷'˪��hH �
+"Щ$K��y�ǒ�P=ԖeS�լ��{��j{��R2��L|}q������R�O��~V�
+��X�F6UMNJ�$I�ӭ-�‹Yθo�=^?����=$^z›O�n�H��AO',������yr{�Ԑw�#2��l����E3R2dw���'Y�C��6����Jc��L ��VN���L�D[ޠ�bQI.k�L � c$I��qS���n��0B���_����ѓ�K�K��(�Ey�@����v�sL�xf�$���uH�/��k�)�zw|�
+�/`����n�3vY��Z�T�u+jgwy�a����6��WS����bF�� fHJ�
+S�%̻Յd͊3���*�eϖeS��c����lj'��-U�]Vc��Escq���pZx<�<�%]9y1CM�'��$e�z���0O���O�m�m��à��?�L�#����cw����π*!��Z2��.�*a�UұFV�f,y� W�\��n����Vbcin{Eظ��+[PW;�%�����{��ʥ*�2��t��M�49���1b��B��$��v� �Ꭾ+5d��!"0�EX��h�(�k�f���C���rZ�D8�#�K��`F&t���%�6�E}�6d:�R�2;�UƴR�}[���U��닳�em'�/��{)�+SI6�aWgI�h�R �f����qy��7���'�-���]_����$;a�ݴ� �;�
+���H1�WI��+��=���7��� �+"��dG���o�������O���8(��$y�4�`0c��?Y�^�&j�dђFge�T6��jV܅���e��2�l �N�fbk ɭ���`��P�%k�g���]�>/��qW��I��ض�h<e/�=^o�8���j:On��ۇ>�6�)�� t ��MRR�^'�#�$u�`����`>�l���Gpf1)h2� ���|r3�*2�#��C�(����[��N^�-�`˽�-���p@���9�b�$�L)KZ^B��s�Wz着�Քؕ�S ���EX����M��� �<�{�𭳷���xc0���� ��+0"�ꌭSIں�����s��g��t��Њ �Ll,�5�����liA����$��o��Z&��<�Z�IY�x�����I��V@tI�=��A���|���|�"����8�򝺥T� !#1�D
+&\�e���b�׀��&`ͿX�_Ƙ�o#�b\�C�ގJN'T�� 8Rҹj��q����0R����n�E\��.�$���۳�Z���V.�x���%��ג��ߠ+ڶ젫��To.��[~�T���g I+��|k��Kp�BL^(wѮ:�A��%�TϏ{��z��M.L�´Ur4�d��� f`B)��1pH� �0��e� [0����͵�B*�^�DWfk�I��z�t�&]�o�d�^ʬ��Q�o���L0Y����A ��h
+X%_z7�HJC� ���������}H�{_|raf8��!�� f0#~��-5og�j�˰��2X9���˹�R6*�%����%�d�+������z>��ԼTt�R� �����Q���5��3 �9�Ҝ���AL[J��_���w�ݧ���r ��UvU��Uv鯺g$O�;��`0���gv�.���,=Z��� �Z��v`Y2�t$�"–p���&[�DWf �ϟ��R
+��.��-�m�����Sc9sNR�D n�x[<@Fx��^��@�=��֒.�k��0R�N'�7��?����%�nҋh��zG0 fC)m�p�H6�e���u�A��'�-L���Z>�R0[��H9��ğ-$7�z��*vl�s�W�1[�(��Z� w���Z�Pa����/���y�@��O�G��oH8#Oʷ�F#
+n<�����b l�;茷�Yϧ��(ɫ��0�y� ��rELG�Mk��oh����{Rmy:��`dCH�%����'��֌ #1 �;a��g ����e���U2Q��e�Bf:���&�f��sS09/
+&���]�A;������v�7��\�y+�3DL‚\0��DLW�=8��0����R<ާ`��$�ር©���?���+s5)2��`�7��g��+Æn~XQo<1V��o���[*̎-;�o��&����F���n����������O~���M¤��Z`�N�W�+6u�N(��lǴ����
+L꼷�HXR|��2��L|m> �\����r^¾S��x�dVZ��h^ _��}�H�<)�*�$��89�C?�#�# �'�gw�ϛ�x��.d$��\/⇔۲k�$��$
+#mq<���  �p`���-$[�7�vL0��`07�X�����gAg��a �U��'��HQ��A*�J�G�G�$�R�Ǽ��o@tǁ>y�%F�?�����$�
+�r�ޝ��;�H���e�{쳷쫑;��2�pb$EQu�)������mX �%�Y�KE���C4?|��\�9�b��x���.&�� �j����-`�p��nC�&��ӗ����S~�>�K%����U�|���n
+�!�Ü.��������Vi�m����t«���~P"S�g��]���C��(���]*y��g?
+EQEQu��F��L
+H�� pT���/!&���_aB�A+�ʄb�J���ZDh�jh��b�"Sl��SF[��q��vB�P�
+�P�)-��7Bd I�&��;=��&�_����{{�|�!;L���s�w�9�W��=������!�ግ�Pڇ�#��=^v��^���f����V$Ax �6G��<=\� k�˰n
+]��J{�X�/���-�0G�OK�K;ֺW�̷�Baפ �=R�2��X�
+ 0M5b�cдp�;NY����#�pMg���|�ӌ�4��W�4,�v_�}&����:�2��Z=lX�͚j0���T�<6�g���2n�}Md~’=����}�.��5+�۳��)���H�8�tY��yh��J-�k~'3~,Ϩ�&XƂd� �Xn�p.ù຤��Fі��P�>7��`&�&X护�M��5*�~��Z$��{��S:Ǝ���VB�LJ�`Y+T�H$\gR|%��1��닶����4�3h��X�z�4�J ��w� @��(������_R� `_��� g,��]Ɯ�rl��Y.8.l�g��;j�Ⱦ�X8w�޸`�oO:ݔp�Z��D��E��-����#*�5D^A�;LI5�6�(�V�X� 2�"sA����VãT��l��1�qVx��`�L2% ��4����M��T���દp�����uwVUn2"��`C�p�������ٯ���+ ���s�A�GETdT�Q�X�RP#��m5)hՖg}Ԉ $�!)�f,Q��*>Z�E�B ַ�G0u��jEq@��{u�s�Ig0uf��s��_7����Z��Y�����<k����K1{�&�F�[�g�V���G:�e7� �΍˷T��� [�5�3�����1�ɊD�Ö�D�y��3w�+�q��!��J��A�(ov
+s��i��-q�8���Z�,lQ��7���O�i FYk��}�8b'<n8�YR��8�8k��}���oiL��#�k�y�3�=L,�݆��4.���(�t�n���67�U�x�^_�U�5�w��-�6������2�}�[7ܵ��l�����������"�-]ó��o6�U�f�s��煝��0���/����>��_�z_W�9��.�O�r�?�KS�y���/�?�X?��'�[Ư
+�q�'+l魌�~��_�$ۘ�\��z��F��ܠ�=F��_.�L���kQ���G����+Y I1�ӠMå���;�o�]���s��y�k.Z�5���׽��F�Ė�� �.?���Ǐ}��Q$^�k�0p�2�E��~��L�4���Z ^�b�7k�'7�-X�x]�#]Z��\)������߽�+k"�I���J�����j�~�ނU7���:�>��"������p�3{+P��֬���&��Y������}4�cI�,ҝ~eݣ�V_�y���{&!���D�qK;�]�F>��pq�O����׳U�Q+f�R�n� ���r���[���m�Ee�Zv�7a񺷛�p^k͖wp�R����{YP^�:����y-[W�!��=�Av����Zk^w7n����q��u�����Eٍ+��y�*+�E/lͼn��=�XN|��q�ڏ��ۏ}��k�O��*��lX���Z�u^{�Nj7h���k���� k!��9n���>J��TO�2A���: 8�A ߆xm8 ���Wg��q�ys޾;[Y5�kmx]� �����~G��7��K�~ t�"�\Z�j������U���\^��<K;��;�!ni�Vu�C�0������s��TYP��W�*�n;2ov��ޯ����B�lB��:�?Lג�kU��TY�(����|W~j__����w�������+_� ]FR��ZkA�Ɉ��>y����[��s�Μ�� ~�l�m���}�r�~̜~�=oT��*��ZK��c��2 �J��
+��에T{ak�u)�\`��f�+�Q�g�>�q,^y��ײj����v}5���}�_��CC���9�?��׍5py����¸<{{n��9�Z�Fp���6�99�%�D@�����7��˚�qD��uX7���M�A
+��0��PGDr�z-�oD���]]��[,S�g�����h�ۃ,o�)��Z����OX�S�K���[j_M������d��,o�)� =�d�o���ٽ]�w�:�I߭V��
+�0D�3��ܩI��F�)��� ���r�v�7�u2Vysr����5�N�Z_kWG,7����.�����W1n*��I'��c�T�/����#���^ "DA7Y��y#H^G�����N(��JPysR�n�@�ͽZ����Wm�$B��d��8b��n�Py��!X��,o�*�%`��b ���͵v�aD�m9��*k�`����U�7�4\�U�䷌�*��G`�����R�� �7{~��o����ỲI���FAJ�YAj'c�*ay#Pvs�����$^e#'$�;#��%��#�7Btu ���/]��PY��(n6� }�j2����%��5��J��oN��3o�*�(��S����Q��Z�@�{��`%�(n��~̼*���8��_$�7����5v�Q89m�}3���
+Ny��ʼ0� N�z���$ ��7k'�{�7�u��v�!D�� ��P���´�����v��Ysv.Jy3wh9�#�<�/���X���卐%:�����鍐m%����>���5��P%���(�-�+�y#d^o���ɡ�7B�����"C�d\¼2k'q�IYi����T������!�J}���q#d!��7'�a�/��:$nVަ��4���A�7'����F��ٯ�X��2�����>��c�:$Ok�
+��a �"T�Z�K��X�3@�-�DL�~�sC���BؚJR�a#jdSaSB��=�������P�j�����~>�?���7�}��uݼH�:�ӕ�8P�s�%�!k�Q������}լ��'0�@5�s��7�y�1z�����ޚ��: ��ym184�h�����R3���� ���݃�̷]�0�@5�O��� u� ���|���d�� Ts�Z�B���� t��S%�dN�=���y�cՌ�y��h��� :z˨��o���y:�I9���j�������J�
+� ��<S�x��!�q
+���ष=lC�*��'�-��g��^�IP���`��4�ŽRߊ� ��� M;�� �O8C�<��o ��D~�3��=z�d�=� =�uRup�6p9��Dg��V��_@g*��ep��Z�$F�������Q󛸿Aj��1�ѥ�$DZ�a���4�}��_@g�KR���t#�7H�lm�%���%
+pN���Uo�1c�p����������M���C�p���?�!�;��24 ��J9o[o� 8�)�ur>� 8ЩʏG7�$8\)A�n^F��<jO��|��2��}����"�+���tqlgG�[�&���.�ߺ-���c��2�Ӹ8hc��������OP"��ËA' �rg�!�-u��F�zԨ�/��NR1���x=,��x���s�7PC~��E�[�I�7P�q~O��ɇ-e�j8>=3����u��|lR���bz=,�p��%��s�[ p��}�h{3t�~�7P$翛h{Ki1rM,oMb����q�E��koM�/���
+���#S��-���3��cyw;߁��\Fo�P�/][o�-?$
+5�|�����k����҆��@1�J�� N�Plg���ƶ�f�ҟM�To�8����N�����V�>P�'��z���� �� y��(��ɘo�s��|l]k�^.dR�g�s�����
+�L"5�7�����B��,泪��q�9tի�K
+����0����N���-8$�_��]����)�yt��s�\Y���O�l���ӉX4bBo�ޅ� t�Pp�� �˛��…�\�s���Z��#N���˚5�[6iHom^�������=v��h�\�gS����r�#7Г\`�|t���P��ߗ�Q߄�VMc�=-4�$��aykh�؟����uP څu4%���ݔ|�����`Yͷě��=����J=>�K�z�w�R1�j5���L҄�<��Y����no�8�O�l7��B_: ���o��no�'���Ǜ�墚o� �kޛK�N`���fz���|����%3z�h;�hK.4�$��c��b.m@o.�Do�+) N���To�\:��ޛG�w�r��R\�-�� �WS��j!?ӛ�z�78��{q����lp��w0�ǯk�T��L*1ӛ�Υ�K�����[x~Ω ���Z�����{#���h�������|w�U+�gR� �uoEb�}�������7���Y��L�m��� ��Vog����
+>�~�[V��\�r��g� ;�p�mU
+�tR��͡Ƴj���lor���7|�H�R̦z����� ��7��#�ۍ�@1�J�"���9�!w��c��,w{{j�6P�jޛGkNc���Q[��S�Ԫ��lo����Ou'�70�j���b.��7}{s�~L�4
+�2���/��j�y�����i�$�!�C�|.���M{{� ,����� }{si� �7����-��"��z����t+�XC��|>�mo.����5:�h.��E<�ձ7�օj�!�'�3��x�9�܃� ���Gr�x�u������8�{r}��Ft#�7�G���닩�t<���u�!%ߑ�����i���,�e�AT���.¥=�_
+�X��2�q� etӴ"ݓ���
+��H��9�{�I���5��+�H�7�����*Po�|�s���� ��-�=�z�� �+N�욾��!�yۙ7���G���~��2o(1��Ņ�-���ۅ �U]Ϸ_��t�
+qOƲ���J�~�/(Ⱦ�UzC��~R����_����9����<�Pv�ۧ��[,��D�y}vjz��,�]�z�_�cN�M*@o��*��s�Ԅ�������%����3v�%W�U�-�V>PvN�ɿ�X�Xμ��B�k���G���� �׬�r������
+����M�y��9�
+䝛��W��
+꿖�9-g�PA��wo���7T���g��["W�*��k3r�-�������
+�ˇ6��ͩߟ��B=�$����1��(#��Ѵn�Ҝ�t��O�����*��i=.�71o���'�up�L{�y4]��'�|�β�h�z�Ğ��G� �.�Y=��:�$�&Ka�����Ln��٭�0�Yp�L��9 ���p���B,�+���k�Up���W]�(��y�"�D�����?-q��e����t@�x<��({��aހ��t��^�er����ӳn�2zށ���{+[3�А�
+(x��@��-��S��z����5���0�6��{xg�F�������?PP��9"Q��]�.�����L������p���e��۵��g
+��ƣ� .�3����u��g�[,�<� �ӧ�� �-V0��8]55���刭4��O�镅Hj+� h x��]�,�ݥg�0�OX�l\6 ˔Az��K& Ɉ�8(��l�f\"s8(�Ƭ�s3 .��3p@c^�����w���? Pp�|��.��<��M8�|D�E�����8�8+�'\"'��=���>}`��E2�4�t�ۧn{����M9}dB�}|���?
+Px��q�K�~� h.]�[� '_�Z` �8��n$2�yzZ`�\u\$��
+�#�������Q˙AC�?3��
+�"{�QiL- ��s�@7�����V&����7�;��W�Ǟq̓;�Np@w�gܚkM'.�1��孢��k\\$���=��K�lT\"�6qP� u���F�Wc�}KnL�{
+$A��Q���#��+�X �
+>x4�� ��"2��h;N��A�*
+% �a)Pa�� HA�) ������;g�Y�����{w�?�;�ݻ��;�{��o4H�z%"�A����D�o)E$��8P"HH�� ��$�����9L�o�8�T9�8��I���"�/��!�S���9R{�K[#�� �#�xV�V�X�)����A�����ȏ�|�� ��NUl��@p Po�&v��PfKo|&�� �]�`���M~��.48q
+8'%&���� ���{��Pn�����E$"���4�)��m�77�8&�L��wno��e�p��xo%?L,p�n\�㨷�����1��Ln���+5����q�t�A�7X]6���%x�Prɋ �`�(��9g���w�re';�Zv��Q.Y��t^T�$ �m7
+��O!_�k#��5��ݯ4��c����H��� $J�I���z� �j�{.���i
+�LoW_�0H�>4��`z8��YtЪ2:ʑn���/q�����Hw7�&yU��]T��]5)��l�y=�5HN�\��o��'`��9r��sGn&�=/���l+�洄nYMj�Jc!�Y�C{쒀,��J�(`b_��_�4߀�vMdd���`��U�,{7�aZ��~�ҏ��1�r~En�$7Ħ7ʯ��<൦��!��x�\o�ou~l�Q�Tl�abo�қ|L�a(�L(p��ݳ2�EFӑ-���z�]\��ш�`b�;�$�B^4�y��V}�[������"�l�{ �e���+Oã1�� *���-{#$@��@�S�zj�.�l� 6�a�䬮��TΔ�a�}�ܫ)�r��Q i�"��e��Ϳ�?Ckĭ�4z\���*ʡ���ۻgo`pSE�o>gz�>����iJ��bӄz���J����|
+�sN���/ߗ��s�) K�.�|"��T�= K��z3H�=��7�t��}wj��jC,"[���_�)ZzD�%�E��_/b������L!8Ӂ����)R&�x�-�w��ޏ/���0�rރ��n� ʜ�T���$��2�f�R���U�WY.{��j�
+������G����md �a��Ҳ��rJVʂ>���l�̘� n�/Jj����{�S�����ư��5��B��҇��d[�$�g�$�;|gp\���-��AW��-<�>���nT=�"���8� �y�d�t��|C�}�aL��À����k�A��܄3Q�1.r�?���)x��ұ����[V
+h�3 �d���� t"�=�T�͖� ��'�[�wFe��K!�) R��6V
+49��������{Yx}� -���m�?�����z��Λ���PQ��;���F�vw���(9�7��u��UK6S����7�M^u��J.*��c�G��ׄ� .$�S���F�\ˌ_k<��l.=��u����������� ��u^��Q�p`�N-�R- �°���S�Y�9r ��-�&�a�J��`U5{mx�Zg�F��:� |qk�
+�=gG(�%z+�
+�%�QSE�@�E�X�ݒ��?���lVC]�A Eإ�
+*hE�`�/������ymiiݖ��������7�ܙs?s�W����O��.���X}[2t6���Bm�E����`�6�NBn��n �l��@)�� '?X>Y� e ^�#S�?�YB��\�ܑ�n�ƒ�s�k�l_m��^F�PB-���/+?��f��a�P���!E2� .�du���p}�R�-Ԩg
+� ����Y�1T�.k'��Q��l �o܅φ��oK�ll}�aW%����r���ɳ��&�$���Rx��ؾb��1��1ԁ'lO\�)d9��ҭ)�������>�Mp��]���7�Z��‚�G':u�΀�(��q)
+u��$dlM�
+'�w��k ���S�-|�� O;y�]�
+1��ԍ��]7�T5ھ�G�Oݸ�$kT�F���`�O�V|P�čM��]�t���Mc�Y }�����v,�n \���fcj�{.)�ٚU�ŠrLV$��B@�u*B���7F6y����2��|��rr��;+�\[ιr�pt��r�Cx!��r]��(�P�
+�g=��c(�1�� f���B8P
+�������G]d���� �i9++�m�'A�<���j�n�7�9T�M0�Lٙf�S;��qP��2��� j��@��2�O�ي��P'8��}c��PQ��������猪��s���Qb�or������I`��
+2��bd3o�$�y��Uݸ�뜺�U��MA���W�3]�s�W�L#:$`d3�`�R�J>�UdQ��n��3%�ilr�O���8Ӫ�o+�9�����ETO�iSW��h�r���F���d�w3:�{�ϣ���l�W����� ��.�6��l�Y��{e�x!8t�_��xW�>�mΈ����Ȁ�5{�J=WF�sL��hPv�$}_��RMפ����}
+˴{Bz��r�5x��.�U�I�&��$������{C��[��#�Eq��x(կ�a9E�P\�%���w�E�OwS8��q�'^�ӘD��٢�#AJ�S��T�Y�+�v�0��Z�G��M0٪���]�lQ����m>P�vy$+��^D �& �H��}�Bp���8o��/��w��o�$��_��u���.7��Zհ�� ����7��D����-z VwԼ�u�Y���a0�N����@Y�e��囍 �'�cmt-�Ɨ�Yk�C�#0�1��*SuS�,٩p܅�[C�_���q�b��hj���F Y.���&�L0W7���O.(Uf�?�U�ʍ��l�E0�%ݹ�@��"��qy*�`�@��v�y�Iy�%Yqp
+�~&en��c�*wn��jI�cw�5k���Η@,'k;�}�Y.����Z�.�\�\�)+;=�����V�~�M�+�\�`��I��)�^�*�-O0 ! AB��\��u߃7�%˵ �.��}w���[�<�Ċ�s�d�r��#G�o?"Z-�6��K1
+����$d/��:�0����\}]����7>���
+���vT�UC�:�ˉ�A€e����>�Ś��<���Ov����x�_�'M�8�jd�c�3t�S���˷��}�Å��17{ĨA�L--��3"�\&��� ����Aڒ��C�(D�9=ڭz��&�b�]�� 0
+H���yTSw�oɞ����c [���5la�QIBH�ADED���2�mtFOE�.�c��}���0��8�׎�8G�Ng�����9�w���߽���
+ 
+�V��)g�B�0�i�W��8#�8wթ��8_�٥ʨQ����Q�j@�&�A)/��g�>'K��
+�x������-
+�ꇆ��n���Q�t�}MA�0�al������S�x ��k�&�^���>�0|>_�'��,�G!"F$H:R��!z��F�Qd?r 9�\A&�G� ��rQ ��h������E��]�a�4z�Bg�����E#H �*B=��0H�I��p�p�0MxJ$�D1��D, V���ĭ����KĻ�Y�dE�"E��I2���E�B�G��t�4MzN�����r!YK� ���?%_&�#���(��0J:EAi��Q�(�()ӔWT6U@���P+���!�~��m���D �e�Դ�!��h�Ӧh/��']B/����ҏӿ�?a0n�hF!��X���8����܌k�c&5S�����6�l��Ia�2c�K�M�A�!�E�#��ƒ�d�V��(�k��e���l ����}�}�C�q�9
+N'��)�].�u�J�r�
+�� w�G� xR^���[�oƜch�g�`>b���$���*~� �:����E���b��~���,m,�-��ݖ,�Y��¬�*�6X�[ݱF�=�3�뭷Y��~dó ���t���i �z�f�6�~`{�v���.�Ng����#{�}�}��������j������c1X6���fm���;'_9 �r�:�8�q�:��˜�O:ϸ8������u��Jq���nv=���M����m����R 4 �
+n�3ܣ�k�Gݯz=��[=��=�<�=G</z�^�^j��^�� ޡ�Z�Q�B�0FX'�+������t���<�u�-���{���_�_�ߘ�-G�,�}���/���Hh 8�m�W�2p[����AiA��N�#8$X�?�A�KHI�{!7�<q��W�y(!46�-���a�a���a�W�� ��@�@�`l���YĎ��H,�$����(�(Y�h�7��ъ���b<b*b��<�����~�L&Y&9��%�u�M�s�s��NpJP%�M�I JlN<�DHJIڐtCj'�KwKg�C��%�N��d� �|�ꙪO=��%�mL���u�v�x:H��oL��!Ȩ��C&13#s$�/Y����������=�Osbs�rn��sO�1��v�=ˏ��ϟ\�h٢���#��¼����oZ<]T�Ut}�`IÒsK��V-���Y,+>TB(�/�S�,]6*�-���W:#��7�*���e��^YDY�}U�j��AyT�`�#�D=���"�b{ų���+�ʯ:�!kJ4G�m��t�}uC�%���K7YV��fF���Y �.�=b��?S��ƕƩ�Ⱥ����y��� چ ���k�5%4��m�7�lqlio�Z�lG+�Z�z�͹��mzy��]�����?u�u�w|�"űN���wW&���e֥ﺱ*|����j��5k��yݭ���ǯg��^y�kEk�����l�D_p߶������7Dm����o꿻1m��l�{��Mś� n�L�l�<9��O
+�����z���p���g���_���X���Q���K���F���Aǿ�=ȼ�:ɹ�8ʷ�6˶�5̵�5͵�6ζ�7ϸ�9к�<Ѿ�?���D���I���N���U���\���d���l���v��ۀ�܊�ݖ�ޢ�)߯�6��D���S���c���s���� ����2��F���[���p������(��@���X���r������4���P���m��������8���W���w����)���K���m��
+%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 19.2.1 %%For: (Zachary Mitton) () %%Title: (metamask_icon) %%CreationDate: 6/15/16 2:23 PM %%Canvassize: 16383 %%BoundingBox: 98 -140 188 -44 %%HiResBoundingBox: 98.7919746568114 -140 188 -44 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 13.0 %AI12_BuildNumber: 147 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 79 -156 207 -28 %AI3_TemplateBox: 180.5 -120.5 180.5 -120.5 %AI3_TileBox: -163 -488 449 304 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI17_Begin_Content_if_version_gt:17 1 %AI9_OpenToView: -39.6666666666679 23.666666666667 3 1419 866 18 0 0 -5 38 0 0 0 1 1 0 1 1 0 1 %AI17_Alternate_Content %AI9_OpenToView: -39.6666666666679 23.666666666667 3 1419 866 18 0 0 -5 38 0 0 0 1 1 0 1 1 0 1 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 7 %%PageOrigin:-220 -420 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 24 0 obj <</Length 22700>>stream
+%%BoundingBox: 98 -140 188 -44 %%HiResBoundingBox: 98.7919746568114 -140 188 -44 %AI7_Thumbnail: 120 128 8 %%BeginData: 22554 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD24FFA776FD75FFA04A4AA1FD73FFA04A754A75A8FD71FF7C4475 %4A6F4A6FA8FD6FFFA04A754B754B754A75FD6EFF764A6F4A754A6F4A754A %76FD6CFF764A754B754A754B754A754AA1FD69FFA8754A6F4A754A6F4A75 %4A6F4A6F4AA1FD44FFA7C9A075A8FD1EFFA8754A754B754B754B754B754B %754B754ACAFD3FFFCFC9C299C1997476FD1EFFA76F4A754A6F4A754A6F4A %754A6F4A754A4B4AFD3BFFA7C99FC198BB98C198754AA8FD1DFFA8754A75 %4A754B754A754B754A754B754A754B6F76FD37FFC9C99FC198C199C199C1 %99754A75FD1DFFA74B4A754A6F4A754A6F4A754A6F4A754A6F4A754A4A76 %FD31FFA8C9A0C1999998C1999F99C199C1746F4A4A76FD1CFFA1754A754B %754B754B754B754B754B754B754B754B754B6F7CFD2CFFCAC9C89FC198C1 %99C199C199C199C1C1C175754B754ACAFD1BFF7D4A4A6F4A754A6F4A754A %6F4A754A6F4A754A6F4A754A6F4A6FA8FD27FFCAC9A1C2989998C199C199 %C199C199C199C199C16E4B4A754A75A8FD1AFF7C6F4A754B754A754B754A %754B754A754B754A754B754A754B754A75FD24FFC9C99FC199C199C199C1 %99C199C199C199C199C1C1994A754B754A6F76FD1AFF764A4A6F4A754A6F %4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A76A8FD1DFFA7C9A0C1 %99BB989998C1999F99C1999F99C1999F99C199C199994A4B4A754A6F4AA8 %FD19FF756F4B754B754B754B754B754B754B754B754B754B754B754B754B %754B754A76FD1AFFCAC299C198C199C199C199C199C199C199C199C199C1 %99C199C199994B754B754B754A7CFD19FF764A4A754A6F4A754A6F4A754A %6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A99FD04C199C1C1C199C1 %C1C199C1C1C199C1C1C199C1C1C199C198C199C199C199C199C199C199C1 %99C199C199C199C199C199754A754A6F4A754A4A7DFD18FF7C6E4B754A75 %4B754A754B754A754B754A754B754A754B754A754B754A754B754A754BFD %05C1BBC1C1C1BBC1C1C1BBC1C1C1BBC1C1C1BBC1C1C199C199C199C199C1 %99C199C199C199C199C199C199C199C199754B754A754B754A754BFD19FF %754A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A %754A6F4A4B74C199C199C199C199C199C199C199C199C199C199C199C199 %9F99C1999F99C1999F99C1999F99C1999F99C1999F99C1994B4A754A6F4A %754A6F4A76FD18FFA14A754B754B754B754B754B754B754B754B754B754B %754B754B754B754B754B754B754B7599C2FD16C199C199C199C199C199C1 %99C199C199C199C199C199C175754B754B754B754B754B75A1FD18FF4A4B %4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A75 %4A6F4A754A6F99C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C199C1 %99C199C199C199C199C199C199C199C199C199C16E4B4A6F4A754A6F4A75 %4A6F4AFD18FFA16F4B754A754B754A754B754A754B754A754B754A754B75 %4A754B754A754B754A754B754A754B75FD16C199C199C199C199C199C199 %C199C199C199C1999F6F754A754B754A754B754A754A7CFD18FF764A754A %6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A %754A6F4A754A9999C199C199C199C199C199C199C199C199C199C199C199 %9F99C1999F99C1999F99C1999F99C199994A6F4A6F4A754A6F4A754A6F4A %4A7DFD17FFCA4A754B754B754B754B754B754B754B754B754B754B754B75 %4B754B754B754B754B754B754B754B7575FD17C199C199C199C199C199C1 %99C199C1C1994B754B754B754B754B754B754B754BFD18FF764A4A754A6F %4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A75 %4A6F4A754A4B74C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C199C1 %99C199C199C199C199C199C199754A6F4A754A6F4A754A6F4A754A6F4A7C %FD18FF754B754A754B754A754B754A754B754A754B754A754B754A754B75 %4A754B754A754B754A754B754A754B7599FD13C1BBC199C199C199C199C1 %99C199C199754A754B754A754B754A754B754A754B75A8FD17FFA04A754A %6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A %754A6F4A754A6F4A754A7599C199C199C199C199C199C199C199C199C199 %C199C1999F99C1999F99C199C174754A6F4A754A6F4A754A6F4A754A6F4A %6F75FD18FF4A754B754B754B754B754B754B754B754B754B754B754B754B %754B754B754B754B754B754B754B754B754B754A9FFD14C199C199C199C1 %99C199C175754B754B754B754B754B754B754B754B754AA7FD17FF7D4A4A %754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A %6F4A754A6F4A754A6F4A754A4B4AC1C1C199C1BBC199C1BBC199C1BBC199 %C1BBC199C199C199C199C199C16F4B4A754A6F4A754A6F4A754A6F4A754A %6F4A75A8FD17FF764A754A754B754A754B754A754B754A754B754A754B75 %4A754B754A754B754A754B754A754B754A754B754A754B7575FD13C199C1 %99C199C1BBC16F754B754A754B754A754B754A754B754A754B6F75FD17FF %A84A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A %754A6F4A754A6F4A754A6F4A754A6F4A754A4B74C199C199C199C199C199 %C199C199C199C199C199C199C199994A4B4A754A6F4A754A6F4A754A6F4A %754A6F4A754AA1FD17FF76754B754B754B754B754B754B754B754B754B75 %4B754B754B754B754B754B754B754B754B754B754B754B754B754B754B75 %9FFD11C199C199C199994B754B754B754B754B754B754B754B754B754B75 %4B75A8FD16FFA86F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A75 %4A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A99C1C1 %99C1BBC199C1BBC199C1BBC199C1BBC199C199994A754A6F4A754A6F4A75 %4A6F4A754A6F4A754A6F4A6F75FD17FFA74A754A754B754A754B754A754B %754A754B754A754B754A754B754A754B754A754B754A754B754A754B754A %754B754A754B754AFD13C199754B754A754B754A754B754A754B754A754B %754A754B754ACAFD16FFCA4A6F4A6F4A754A6F4A754A6F4A754A6F4A754A %6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A %754A4B4AC1BBC199C199C199C199C199C199C199C1996F4A754A6F4A754A %6F4A754A6F4A754A6F4A754A6F4A754A75FD17FF7D6F4B754B754B754B75 %4B754B754B754B754B754B754B754B754B754B754B754B754B754B754B75 %4B754B754B754B754B754B754B7599FD10C19F4A754B754B754B754B754B %754B754B754B754B754B754B6F7CFD17FF764A754A6F4A754A6F4A754A6F %4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A75 %4A6F4A754A6F4A754A7599C1BBC199C1BBC199C1BBC199C1BBC199C1C199 %4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754AA8FD17FF75754A %754B754A754B754A754B754A754B754A754B754A754B754A754B754A754B %754A754B754A754B754A754B754A754B754A7599C199FD12C1994A754B75 %4A754B754A754B754A754B754A754B754A75FD17FFA8754A6F4A754A6F4A %754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A %6F4A754A6F4A754A6F4A754A7599C1999999C199C199C199C199C199C199 %C199C199C199994A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A7CFD %17FF75754B754B754B754B754B754B754B754B754B754B754B754B754B75 %4B754B754B754B754B754B754B754B754B754B754B7599C199C199FD13C1 %99994B754B754B754B754B754B754B754B754B754B754A7CFD15FFA8754A %6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A %754A6F4A754A6F4A754A6F4A754A6F4A7599C199C199C199C1BBC199C1BB %C199C1BBC199C1BBC199C199C199994A6F4A754A6F4A754A6F4A754A6F4A %754A6F4A754A76A8FD13FFA84A754B754A754B754A754B754A754B754A75 %4B754A754B754A754B754A754B754A754B754A754B754A754B754A754B75 %99C199C199C199C199FD0FC1BBC199C199994B754A754B754A754B754A75 %4B754A754B754A754AFD14FFA14A4A754A6F4A754A6F4A754A6F4A754A6F %4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A75 %75C199C1999F99C199C199C199C199C199C199C199C199C199C199C199C1 %99754A6F4A754A6F4A754A6F4A754A6F4A754A4B4AA8FD14FF7C4A754B75 %4B754B754B754B754B754B754B754B754B754B754B754B754B754B754B75 %4B754B754B754B754B754B7599C199C199C199C199C199FD11C199C199C1 %C1754A754B754B754B754B754B754B754B7576FD12FFA8A151754A6F4A75 %4A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F %4A754A6F4A754A6F4A754A4B74C199C199C199C199C199C199C1BBC199C1 %BBC199C1BBC199C1BBC199C199C199C199754A754A6F4A754A6F4A754A6F %4A754A757DFD11FFA14A4A4A754B754A754B754A754B754A754B754A754B %754A754B754A754B754A754B754A754B754A754B754A754B754A7575C199 %C199C199C199C199C199C1BBFD0FC199C199C199C199754A754B754A754B %754A754B754A754A4A75CFFD10FFA8754A4A754A6F4A754A6F4A754A6F4A %754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A %4B6EC1999F99C1999F99C1999F99C199C199C199C199C199C199C199C199 %C199C199C1999F99C199754A754A6F4A754A6F4A754A6F4A754A4A4ACAFD %11FFA8754A754B754B754B754B754B754B754B754B754B754B754B754B75 %4B754B754B754B754B754B754B754B7575C199C199C199C199C199C199C1 %99C199FD11C199C199C199C199754B754B754B754B754B754B754B754ACA %FD13FFA87C4A4B4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A %6F4A754A6F4A754A6F4A754A6F4A756EC199C199C199C199C199C199C199 %C199C199C1BBC199C1BBC199C1BBC199C1BBC199C199C199C199C199754A %6F4A754A6F4A754A6F4A754AA7FD17FF75754A754B754A754B754A754B75 %4A754B754A754B754A754B754A754B754A754B754A754B756FC199C199C1 %99C199C199C199C199C199C199FD11C199C199C199C199C199754B754A75 %4B754A754B754A76FD13FFA8CA7DA176754A6F4A754A6F4A754A6F4A754A %6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A4B6EC199C1999F99 %C1999F99C1999F99C1999F99C199C199C199C199C199C199C199C199C199 %9F99C1999F99C199C198754A6F4A754A6F4A754A4B4AFD12FFA87C4A4A4A %754B754B754B754B754B754B754B754B754B754B754B754B754B754B754B %754B754B754B7575C199C199C199C199C199C199C199C199C199C199FD11 %C199C199C199C199C199C199754B754B754B754B754A75FD14FFA8754A4A %754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A %6F4A754A4B4A9F99C199C199C199C199C199C199C199C199C199C199C199 %C1BBC199C1BBC199C1BBC199C1BBC199C199C199C199C199C1994B4A754A %6F4A754A6F4AFD16FFA8A14B754B754A754B754A754B754A754B754A754B %754A754B754A754B754A754B754A7575C199C199C199C199C199C199C199 %C199C199C199C199C199FD11C199C199C199C199C199C199754A754B754A %754B6FA7FD18FF516F4A6F4A754A6F4A754A6F4A754A6F4A754A6F4A754A %6F4A754A6F4A754A4B4AC1999F99C1999F99C1999F99C1999F99C1999F99 %C1999F99C199C199C199C199C199C199C199C199C1999F99C1999F99C199 %9F99C1754B4A754A6F4A6F4AA8FD17FFA1754B754B754B754B754B754B75 %4B754B754B754B754B754B754B754B754B754BC1C1C199C199C199C199C1 %99C199C199C199C199C199C199C199FD11C199C199C199C199C199C199C1 %75754B754B754AA7FD15FFA8A14B4A4A754A6F4A754A6F4A754A6F4A754A %6F4A754A6F4A754A6F4A754A6F4A756E9999C199C199C199C199C199C199 %C199C199C199C199C199C199C199C199C1BBC199C1BBC199C1BBC199C199 %C199C199C199C199C199C199C174754A6F4AA1FD17FF4B6F4B754A754B75 %4A754B754A754B754A754B754A754B754A754B754A754B754AC1C1C199C1 %99C199C199C199C199C199C199C199C199C199C199C199FD11C199C199C1 %99C199C199C199C199C175754A76FD18FFCA4B4B4A6F4A754A6F4A754A6F %4A754A6F4A754A6F4A754A6F4A754A6F4A6F4A9999C1999F99C1999F99C1 %999F99C1999F99C1999F99C1999F99C1999F99C199C199C199C199C199C1 %99C199C199C1999F99C1999F99C1999F99C199C16E4BA8FD1AFF756F4B75 %4B754B754B754B754B754B754B754B754B754B754B754B756F9F99C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199FD0FC1 %99C199C199C199C199C199C199C199C1A1FD1CFF4B4B4A754A6F4A754A6F %4A754A6F4A754A6F4A754A6F4A754A4B4A9F99C199C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C1BBC199C1BBC1 %99C1BBC199C199C199C199C199C199C199C199C198CAFD1CFFCF4A754A75 %4B754A754B754A754B754A754B754A754B754A754B9999C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199FD0FC199C1 %99C199C199C199C199C199C199C1CAFD1DFFA84A6F4A754A6F4A754A6F4A %754A754A754A754A754A6F4A99999F99C1999F99C1999F99C1999F99C199 %9F99C1999F99C1999F99C1999F99C1999F99C199C199C199C199C199C199 %C199C199C1999F99C1999F99C1999F99C199FD1FFFC299C1C1C19FFD0FC1 %99C1C1C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199FD11C199C199C199C199C199C199C199C2FD1EFFCABBC1 %99C1C1C199C1C1C199C1C1C199C1C1C199C1C1C199C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C1BBC199C1BBC199C1BBC199C199C199C199C199C199C199C1A0FD1EFF %FD18C199C199C199C199C199C199C199C199C199C199C199C199C199C199 %C199C199C199C199C199FD0FC199C199C199C199C199C199C198C9FD1DFF %C9C199C199C199C199C199C199C199C199C199C199C199C199C199C1999F %99C1999F99C1999F99C1999F99C1999F99C1999F99C1999F99C1999F99C1 %999F99C199C199C199C199C199C199C199C199C1999F99C1999F99C19999 %A1FD1DFFC9BBFD19C199C199C199C199C199C199C199C199C199C199C199 %C199C199C199C199C199C199C199FD0FC199C199C199C199C199C199C198 %C9FD1DFFC1C199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C1BBC199C1BBC199C1BBC199C1BBC199C199C199C199C1 %99C199BBA7FD1CFFC9FD1BC199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199FD0FC199C199C199C199C1 %99C199CFFD1CFFC298C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C1999F99C1999F99C1999F99C1999F99C1999F99C1999F %99C1999F99C1999F99C1999F99C199C199C199C199C199C199C1999F99C1 %999F99C1999F98C1A8FD1CFFFD1EC199C199C199C199C199C199C199C199 %C199C199C199C199C199C199C199C199C199C199FD0FC199C199C199C199 %C199C199FD1CFFC9C199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199 %C1BBC199C1BBC199C199C199C199C199C199C199C199C199C199C199C199 %C199C1999999C1999999C1999999C1BBC199C1BBC199C1BBC199C1999999 %C19999989999999899A8FD1BFFC2FD1EC1BBC199C199C199C199C199C199 %C1999999C1999999C1999999C199BB99C1999999C1999999FD0DC1999999 %C1999999C1999998C9FD1AFFC998C199C199C199C199C199C199C199C199 %C199C199C199C199C199C199C199C199C199999899999998999999989999 %99989999999899999998BB999998999999989999C199C199C199C199C199 %C199C199C199999899279998999999A0FD1AFFC2FD23C199C199C199C199 %C199C199C199C199C199C199C1999F515299C199C199C199C199FD0DC199 %9999C1992E4BC199C199C2A8FD18FFCAC199C1BBC199C1BBC199C1BBC199 %C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C199C199C19999989999 %99989999999899999998C175510528057598999999989999C199C1BBC199 %C1BBC199C1BBC199C19999989927286FBB99C198C9FD18FFC9BBFD25C199 %C199C199C1999999C1999999C1BB994B2E0628272E279999C1999999C199 %FD0DC1BBC199BB992E282E99C199C1A0FD18FF9FC199C199C199C199C199 %C199C199C199C199C199C199C199C199C199C199C199C199C199C1999F99 %C1999998999999989999BB98752706052827280528279998FD0499C199C1 %99C199C199C199C199C199C1989998990528054B98C198A0A9FD16FFCAFD %29C199C199C199C199C1999F7552282E272E272E272E272875C199C199C1 %99FD0FC199C1752E062E51C1BBC199FD17FFC998C1BBC199C1BBC199C1BB %C199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199 %C199C199C199C199992706052805280528272805280528989999C199C199 %C199C1BBC199C1BBC199C1BBC199999951057699C199C1999FA8FD16FFFD %2AC199C199C199C199C199A07576272E2728052E2728272E277599C199C1 %99C199FD0DC199C1759FFD04C199C199CAFD15FFA7C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C1999F99C199C1BBC1C1C1999F7575272827280528057598C1 %999F99C199C199C199C199C199C199C199C198BBC1C199C1999F98BBA7FD %15FFC2FD2EC199C199C199FD0BC17576512E27C19FC199C199FD0FC199FD %05C199C199CFFD14FFCA98C1BBC199C1BBC199C1BBC199C1BBC199C1BBC1 %99C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1999F99C1 %999F99C1BBC199C1BBC199FD05C1999F99C199C199C199C199C1BBC199C1 %BBC199C1BBC1999999C199C1BBC198C1CAFD14FFC2FD31C199C199FD11C1 %99C199C199C199FD0DC199C199FD05C199FD14FFA8C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C1999F99C199C199C199C199C199C199C199C199C1 %99C199C1999F99C199C199C199C199C199C199C199C1999999C199C199C1 %CAFD13FFCFFD32C199C199FD15C199C199C199FD0FC1BBC1C1C199FD14FF %A0C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1 %BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C199C199C1BBC1 %99C1BBC199C1BBC199C1BBC199C1BBC199C199C199C1BBC199C1BBC199C1 %BBC199C1999999C199C1CAFD13FFC1BBFD33C199C199FD15C199C199C199 %FD0DC199C1C1C1C2FD13FFC998C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C1999F99C199C199C199C199C199C199C199C198C2FD13FFFD52C199C1 %99FD0DC199C1A1FD12FFA7C1BBC199C1BBC199C1BBC199C1BBC199C1BBC1 %99C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1 %BBC199C1BBC199C199C199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC1 %99C199C199C199C199C1BBC199C1BBC199C1BBC198C9FD12FFC2BBFD35C1 %99C199C199C199FD17C199C199FD0DC1C9FD12FF99C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C199C199999899999998C1999999C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %98C2FD11FFC9FD31C199C199BB99C199BB99C199C199C199C199FD15C199 %C199FD0BC1BAC9FD10FFC2BBC199C1BBC199C1BBC199C1BBC199C1BBC199 %C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C1BBC199C199C1FD0499 %98999999989999C199C199C199C199C199C199C199C1BBC199C1BBC199C1 %BBC199C1BBC199C1999F99C1BBC199C1BBC199C1BBC198C9FD0EFFCFBBFD %2BC199C1999999C1999999C1999999C199C199C199C199C199C199C199C1 %99FD11C199C199FD0BC1BAC9FD0DFFA0C199C199C199C199C199C199C199 %C199C199C199C199C199C199C199C199C199C199C199C199C19999989999 %99989999999899999998FD0499C1999F99C1999F99C1999F99C1999F99C1 %99C199C199C199C199C199C199C199C1999F99C199C199C199C199C199C1 %98C9FD0CFFC299C19FC199C19FC199C19FC199C199C199C199C199C199C1 %99C199C199C199C199C199C199C1999999C199C199C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C19FFD0FC199FD %0CC1CFFD0BFFA79999C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C199C199C199C19999989999999899999998999999 %989999C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %BBC199C1BBC199C1BBC199C199C199C1BBC199C1BBC199C199CFFD0BFF99 %C199C199C199C199C199C199C199C199C199C199C199C199C199C199C199 %C199C199C199C199C1999999C1999999C1999999C1999999C199C199C199 %C199C199C199C199C199C199C199C199C199C199C199C19FC1BBFD09C199 %FD0CC1CFFD0AFFC2989F99C1999F99C1999F99C1999F99C1999F99C1999F %99C1999F99C1999F99C1999F99C199C1FD0499989999999899999998FD04 %99C1999F99C1999F99C1999F99C1999F99C1999F99C1999F99C1999F99C1 %999F99C199C199C199C199C199C199C199C199C199C199C199CFFD09FFCA %C199C199C199C199C199C199C199C199C199C199C199C199C199C199C199 %C199C199C199C199C199C199C199C199C199C199C199C199C199C199C199 %C199C199C199C199C199C199C199C199C199C199C199C199C199C199C199 %FD07C199FD0CC1FD0AFF99C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199999899999998999999 %989999C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C199C199C199C1C1C199C1BBC199C1BBC199FD04C1 %FD09FFC999C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C199C199C1999999C1999999C1999999C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C1C1C199FD07C19975754B27A8FD07FFA8C1999F99 %C1999F99C1999F99C1999F99C1999F99C1999F99C1999F99C1999F99C199 %9F99C1999F99C199999899999998FD0499C1999F99C1999F99C1999F99C1 %999F99C1999F99C1999F99C1999F99C1999F99C1999F99C1999F99C1999F %99C199C199C199C14A27F827F805F8F8F852A8FD06FF9FC199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C1BBC175270027F82727272027F82752FD05FFCA98C199C199C199C199 %C199C199C199C199C199C199C199C199C199C199C199C199C199C199C199 %C1999998999999989999C199C199C199C199C199C199C199C199C199C199 %C199C199C199C199C199C199C199C198BB98C198C199C199C199C2A0A0A0 %C9A127F827F827F827F827F827F8F87DFD05FFC299C199C199C199C199C1 %99C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C1999999C199C199C199C199C199C199C199C199C199C199C199C1 %99C199C199C199C199C299C199C2A0C3A0C9A1CAA7CAA7CAA8CAA8CAA8A8 %2727F8272727F8272727F8274BFD06FFA0BB999F99C1999F99C1999F99C1 %999F99C1999F99C1999F99C1999F99C1999F99C1999F99C1999F99C19999 %98FD0499C1999F99C1999F99C1999F98C1999998C198BB98C1999F99C199 %A09FA1A1A7A1A8A1A8A1A8A8A8A7A8A7A8A1A8A7A8A1A8A7A8A127F827F8 %27F827F827F827F8A8FD06FFCF99C199C199C199C199C199C199C199C199 %C199C199C199C199C199C199C199C199C199C199C199C199C199C199C199 %C199C199C199C199C199C199C29FC199C2A0C9A0C9A0C9A7CAA7CAA7CAA8 %CAA8CAA8CAA8CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA8CA27272027272720 %272727F852FD08FFC299C199C199C199C199C199C199C199C199C199C199 %C199C199C199C199C199C199C199C199C199C199C1989998BB99C199C199 %C2A0A0A0C3A0A7A1A8A7A8A1FD07A8A7A8A7A8A1A8A7A8A1A8A7A8A1A8A7 %A8A1A8A7A8A1A8A7A8A1A8A7A8A127F827F827F827F827F827A8FD08FFA1 %C199C199C199C199C199C199C199C199C199C199C199C199C199C199C199 %C199C199C199C199C199C198C2A1C9A0C9A1CAA7CAA7CAA8CAA8CAA8CAA7 %CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8 %CAA7CAA8CAA7CAA8A8FD0427F8272727F82752FD09FFCF98C1999F99C199 %9F99C1999F99C1999F99C1999F99C1999F99C1999F99C1999F99C1999998 %BB98C1A0C9CAFFAFFFA8A8A1A8A7A8A1A8A7A8A1A8A7A8A1A8A7A8A1A8A7 %A8A1A8A7A8A1A8A7A8A1A8A7A8A1A8A7A8A1A8A7A8A1A8A7A8A1A8A7A8A1 %CAA127F827F827F827F827F8A8FD0AFFC299C199C199C199C199C199C199 %C199C199C199C199C199C199C199C199C199C199C199C2C9CFFD0AFFA8A8 %A7A8A7CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CA %A8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8A8FD0427F827F827F87DFD0BFF %A8C199C199C199C199C199C199C199C199C199C199C199C199C199C199C1 %989999C9A7CFFD10FFA8A87DA7A1A8A7A8A7CAA7A8A1A8A7A8A1A8A7A8A1 %A8A7A8A1A8A7A8A1A8A7A8A1A8A7A8A1A8A7A8A1A8A7A8A1CAA127F82727 %5252767CA1A8FD0CFF9FC199C199C199C199C199C199C199C199C199C199 %C199C199C199C199C2C9CFFD16FFA8A8A1A8A7A8A7CAA8CAA7CAA8CAA7CA %A8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA7A8527D %7DA8A7CAA7A8A8FD0DFFC998C1999F99C1999F99C1999F99C1999F99C199 %9F98BB989999C9A7FD1CFFCFA7A87DA17DA8A1A8A1A8A7A8A1A8A7A8A1A8 %A7A8A1A8A7A8A1A8A7A8A1A8A7A8A1A8A7A8A1A8A1A77DA8A1A77DA7A1A1 %A7FD0EFFCAC199C199C199C199C199C199C199C199C199C199C2A0C9CAFD %23FFA8CAA1A8A1A8A7A8A7CAA8CAA7CAA8CAA7CAA8CAA7CAA8CAA7CAA8CA %A7CAA8CAA7CAA7A8A1A8A1A8A1A8A1A8A8FD10FFA0C199C199C199C199C1 %99C199C199BB98C199C9CAFD29FFA8A77DA7A1A77DA8A1A8A1A8A7A8A7CA %A7A8A1A8A7A8A1A8A7A8A1CAA7A87DA8A1A77DA8A1A77DA7A1FD11FFCA98 %C199C199C199C199C199C198C2A0C9CAFD2FFFA8A8A1A7A1A8A1A8A1A8A7 %A8A7CAA8CAA7CAA8CAA7CAA8CAA7A8A1A8A1A8A1A8A1A8A1A8A1FD12FFCA %C198C1999F99C1999998C2A0CAA8FD33FFA8FFA8A87DA77DA77DA77DA77D %A8A1A8A1A8A7A8A1A8A1A77DA7A1A77DA7A1A77DA7A1FD14FFA0C199C199 %C199C1A0FD3DFFA8A8A1A8A1A8A1A8A1A8A1A8A7A8A7A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1FD15FFCA98BB99C2A0CFFD41FFCFA7A8A1A17DA8A1A77DA8 %A1A77DA8A1A77DA8A1A77DA77DA17DCAFD16FFC9A7FD49FFA8A8A1A8A1A7 %A1A8A1A8A1A8A7A8A1FD04A8FFA8FD66FFA8CAA8A8A8FFA8FFA8FFFFFFA8 %FD12FFFF %%EndData endstream endobj 25 0 obj <</Length 65536>>stream
+%AI12_CompressedDatax���$��&���?d&� C�;\;�f���J-���n[[Y����UZ�(�������xd&�,�f� #+3���q98�������O��x�O�q< ?������wo��� �~���7_�{ˏ~��/&G4��M~V���ۯ�߼���LG{4����?��o�q����wo^����_����^ޡ��ݻ篞��g�/PW��n���C}�� �4�`e���߱���=������&������7���������Ô�?L�/ޣ��v�u��&3%C�����o^|�����O߾yq����7/߼��W��?��>�����y~���^�|������0�����;�����qv�~c��7�/���o^���a|���t�/_�/t���qz��W���w�0R<�3�ٯO�a�C)?�����l��/J�o�|���ۿ�i�[Lݘ�ج��{��K̬̂��1���?�?J[�������x?��~��������W�~��Ng�����u��G���|��˻�����F�ѤS�7_ܽD����/�� H1�������������o�ɦ�� ���>���Kz3�� 3��y��}v��gӭ���w�2I�M�~����?��Wy�O�t���Һ���2�!Lj���}.�6���(�^��{��_G��<�����Ѽ�b�� ���|ao��Sl�߿�DŽ��kѽ����_���bٚ���O����1�';=��I~R4!o�����;�H]c����ձ����W?�y�=�5�w���7_j�������|�����ӷ������R��}��T���o����?�~���_�^�
+�!}H������o�_w�g�߾�������܎Ͽz����z���_�~˧ߩ�O��� n���_|=w�.�̙�����/�|����ܿ8��~��_x�����N���u�T�OX[�˷��Zߥfi�>$_��>k���sP���3��|q�-y��=���?�F������?!]��϶j~���x���x��7/�~�t���S��/�>�������\�?߿�c����ww�I|��+r�������;鳶�|�0�e���>�� l������o�q��\��߼�����3�L��/���p�b��a,�H�=;���0�?�)vU\)�� ���߀�%�%�Ӧ\�� �\���܌��x[�f`��*nU��-���LDI�o^�iS��i.繜�5J��z�7�ѵ�]������[�*�F�A��iU��U��*'-������V�m�ӯVuY[�a^^�Zd]���f��U͛��V+��e��b��e���7�����g�]k;l�a]�/W�k�dY�Ԭ�U)۵�Z�)��*և:Y�e�Xt��Me��@CY#�չ�k)7�ܲԓŗY���U�e�L�Iɭ̍����z��ʵ�ؔF�2� ��s�sλ���ɝP��-V�x�>��'�O����[L� .�C
+S�
+�p7�v�� v)e�s��U<�s���� ��SH1�4�S:��t�}b��>�s�S�ʧ|�o�-��&7� �L�N�y��n�i̕��W�*^�����r������d��N�O�N����t��e�mw��p�
+D�5C���pq���n�X�.� �K�׌�ucq���7�g\DW���)��;��2�Un�C��|�Ey�� ��x;Rٙ�-�خ��v8Pz����? g��x�'�H��˗�v؅0ܮH��� �*`Cl���d�!��2r.y 9��&*w�"�6`�ټ���.b������/�+>P�<s ��r �4��`
+�f��j=��i�v�?����?yZ��� q�E�^�\�Z��J���YYa ���(����rrga�oе)L��N� �,b�tU;Z��Nd6�˻3�C^/�.҆YN�a�v�I�B�ԩ��gMs���Н5�ڣS�C����1Z�Sߜ��|O3�[�"�䍈��أ%l$�"- ��� �FF��/�����ӗr6��Y8�*�ߩ)�)���š��s�]q]�;�� I��x��L����n�fI�\���Jg�e�Xr������%>�,"eX�a��lX~PdS �}bٛ��2<���d����uX�E3Ϩr��;.E9����J�\d��('}(bs=�U-�l��4W�����=�9�"}ZӬ���YA�������L�6�%�Ts끼VJ����{O�X �2�=�y�e[�3UC�wD翇�d���?���S�ԇ�os<���;�������XԵ���?ʏ��O�BF��7�mLE�߰��s��8҆�+ � H$�"� �(�"� t��Ay��\��( �!�DʢJ�BFǭH��|��! �,DiȪ4$��u��N"e��(�r��E�"�R,R���Qш‘���Q� �,e$JI OeSB%'�Јj�Fĥk�K�(2Qh�ؔ|����J5��t[듖|97�nI�����?F������յX�4�̲P,~�)u�u�x��I��x�" ?4��� Q��s��� E6< KC�v��D�1<�L\$��9.Ң���j��U˭T�k]��/R����)[�[hJܔ4lTy�Q��
+p*�����2�:�Z��������a}S7zϢ��-n�M^_…/�Y�;l�I����r54
+�rzb�>l4��맕a�ýE|r.V��O��oGEq3��- -U��
+ͪ�L�T��TJэEUZ*mX�M]�JY��\9���U��Di�%�%���2�r5�������=Ҵ����ъ ��%�s��(�It8�i�4fCT
+a�);��12<L7�@2�0���{���y�D�H���?\~�s��t�-*X��*;�K>�y?�Ӌ+[� �@��c���&�*��PV��5m��\�8���6 ŸV+-��7b�U[�#w)�Z��f{% 0��<@j������Xp1�fr�b�=�]����9I�t=�G9 [>�E�����Xy�+3�������K�o�J��O+ï�~Q��Q0:1�L�<�98�Il�j> -�Ѿ��8��Jl+���u!���3)]Hh%� �\h�B#ڸ����L��o�{[Z�&qk��"fÊ�mIWC�v8���x�}���i؎u����'^��{����߇q�m��C����IJ���Ϟ=�����c@�0�9B��k۱���i�c�c��wt�6sM�&;�XݸC����I1��T��
++��t���ǵ�l�⟿Z� �+R>���q�V��#���6�C�xji�7~��zQfd�� ��@,�����zv4����.����/�_�b���S;;�c4`&�# 4؜6%�0y��SI�Rм������ �m{=��j�P���]�����|���|��s�|<:@>� l��m�������/z���r.��_��S ��
+_rUX���Ba3|�!<4�S<�0��< Sy+�De&���W�@�AAr��-^����u�U��jKTˈX�ō�uX������ᒗ���e?��#u����F�nf��VŜ���z�Q2�7�sP����f��'z���3 m�����dq<9+��r>�3_<U�k]'
+@��rO���"���i �� 嚀y�0s�fE� ���:�g��x�,>;���ug{�Y�ʪHNEa십��]�����ԕd1����U��� w]<��[� )�8��c�(�����b�b<;��]=)�,��I�ȥId�,v�+�PO���D �QuV�o���ʬ��*rk�$V_ba���_���U�����[�X.}�7I�ʲC#�rOL��,����lE����kY�,�� E����n%ʦ"ƞD��1V]� ֯$XJ���:�vl`{6V��Y�=�+2�ҡ�Y<�W�bc����~Z�-Cq��Ŋ}�س�o�g��u8��r�s��m;n��X�u�}!�Ց?�j6U615r#����I��n
+�����w�z·�2�����_�}q��|t0��>\��v���,��н�e|
+����(Cq7o]ͷ`['s�ث��j�[�d�˧�1rQ��Nت�����8 �E��Tԑ<��}�>�S������|e��f�k �Hʾ����_
+�M��^A*V���
+o�DT��7 �F�\'�uY��6@ � �,��[���eh>�O*�r.V��+÷h�#��exZ����:�i0�$��3QN�
+ߑ6�V<ϒ���^X��EH��92k�V'j�X\+Kd��P�8S����GY��р3ɡe�N�qV1�� e'��������%:����U�9J���1џ��P�:��v��lu�{��L[�5*�F��6Ԯ/�+B ��ƪ-;�� eф�a�ǓJ��ږ�߶<��'� Oo�_��K��M ]"�\�EkF0�ED��ϤE Ȕ���θϔog����|VUu�^�v)H�!� {'�x��T:��U���jCIT��Ғ��آ(Z�J(Z�4�K�Y�薮l��Z�Ja���\"6�Bi(��D�9���P�{�i�{��:�:�6�KO�y�íO��0i�5*�a��l�X�!X�%R�K努Q>E���(c4���,�Z�ۙ;��^�o�;r%�( � �/>��1��]�3HJ��W�.=��Cq� �Q; �J��liJ��B��%���۵�C^ײҫjL[ExD�Z䤵 ��n�I˴�~Ի�z��Mj�,v8�'��2<��9>� Oo�_�êD�� �Oس�&������F�
+�
+0j�h���MMo�p-�~v*����fP�j��0<м�4�A͗����ƪ]���\ /0�)�zdp���[�_b��ݫ���j�ZL]��km�r��kX��6�ָ՚�.X��Ƭuɨ�1i=d�.���LYO�^I��S��)exZ� ���2<��� N�O�'
+�������O�'
+��x������m7��?�a>Y����kp�i�>��d��8��$�\�09� f‡��B�'�zgFx�q���O/e⎭�cT1�;ɸC0�tm�ojj{ ��(qp�͂C�@���z ���Ni��m���)�x�?��Nv������U��!�q�nܺ/�/���r�vE�i]���ŧ�Mi|��T3��ٷ�O'��ؤ��\��L+�u6�u&٦|t�,�J��tѲ���K�]���j�=?��Q��`%�֜k���,pHy�Ta��k�5u1'�@I�QA��l�� �P�8��MJ&�7nJi�Q��<�Y��O�d����F0��D��G3yv�hC��x/���e��w9�ˣ/�h�-�UP�h��n��u�&r�S�w��O���f�c[��x��^$����؝lx��qq}���c�����sn<���c&�z��}���� ������Q�P�M5V�����' 5�޿�K��9�fK����rC$ۊ���������-h4�5��^�73�
+^.E/�y�j�R��Kߗ ��i{� v��?����|�'ȍʾG���K�6��� �ʅ���F|�,x5�奔�v���1���a�b,��T������rT��hv��/�̞��ʽh�j�2~� ��s�&pr|O���s�O��!y����"�p�Q�-�����*X\�ZY���[z���4��]%��zC�@醒����(M�Di�s�g��'����-tuh"Bm�@�L^u}DmA�n$��$y���`���0&�g���nճC7x'�᥎�(6�Kf��t'�8�=n��W�l��AS��uO���x8S�V��*���;�T��d���>���ٖ�I�İ�X�#�!�
+����Ma�\Q��ݙ������>�Y+|�Z��[1�z[gz[����1�Ԙ۴���mJ�Ur�5���Y|�Vn�o�d����w��`�x��NR�K���������i��s���l�\7��P΍||���T��GY�ug�nK��E��$%V`��t
+�6�>+j::�T��\P�h��e�l��銻P�n�C��%�o����S��5��
+�YS�h�
+������fW�X1V�������� �*��:�I�2���S�O�BI�4�4�!�eV�k��?�x����ܓ�'cO��L�j�4-���o�K�����Y���uU��h�% �J���L�fd��-y����t�u�����<��+q��e��Ymˇ_��CU���V��N`7���
+ �6��<žr[D����\,-�9n�^$ D���8�a�w���2\�0�[�����ԡz*-���-�Z�L�T����F�h7@�K�`�nQ@밆����#�^�M�n���RD_�y��rwQ�v���p���ѹ��ჲ�p�b?�M��c��C��a7�M��t����;H���sM���8�)��4y%q��i��$�!�wb��-�
+K�� �g�Ѣ_�� \߹���D!��˔�] ��b�j�Q"#ΐ��Sm�2�a����+|�;rud�ȼ]��A>���Q�?u��l�R0�Ԝn����`uEss����9 +Q37�f���Q�;NL��t��hp) n)�n��6W�Z����nE*���:]�y�u};� ��ӕd�q�Y�J��Z����,�=���*�S��Z��
+�`E�;p8O�
+�n��2� ;aN(���FXg ��`��ᡭ�Xb�mZ�b��w �k7����ax�-��(Å�S[���/|���um*][�W�m�!n;2�.��_�=�1�1i���8��c���T]#�w���-����ՇI�~��ݔ�÷Q��~����^/�CQ�J� Rz�$��-Hi���[Ȥ"k���?hR���{�W5�q�n ���U��V�i+��~�
+�
+�wh�p�C=�C�����~��ӷ���ݿ��OVr��b��X������ݽ} ����?���9D���a��St��~�;X�4�3��a{��G�Ol�
+DžI3�^�+�0pl)=�4/��$��M�Ž��'0Y�:D�H�k�uˉ�f$��H��˟��^�f���<�$����j�'��ɲ�'pe��8l���,X�Z�d�.�T>�S��
+��}��[��Ϲ0quf�ۿ���df�7_��������/�� ʃ���s���7_��ٛ? ��o��jõL������{����آ���!TfE�b��ѝ�(��x�L(2�f㴸˸$��n
+���,L"�C"��z��J��Є��� \��7T����[���ʤ�d �+��� �6�vB�oe�W]�!DW1�oHwm%H2k������dRq'C��Վ�XZ��[��i;F�x#�B޵] y��oe�����N�l�3_�c�D9��D/��*m%���
+dބS�y]�-�� �u•��H�J�bc�x�[ ��w?*��� �rYrB�ʟ:3̑��n�sS.������e���U��dSi�k3G�>fT�9i\�h?��q��s��iC;��+x��#���@E��:��P�����l��XJŽ�Kun|���ƛ��y��$����� 8C��(A�]�Z0O�ׄm x{\��F0TO�E�ȓHfw����aaJ@C�r�`%@|�R%�R�U�#>L�o�;yp�"MfP"0�=��Xp������n� |��9����APr�-��
+�2�3A�(L�O�ř\��'�"�D�ӂ���3���
+|=g���
+g�Z���h+������6,Q�����Y��ޚ�Y�ռ����9�>s���ǹ %ґ�?l� ��m��m]�㽃)�L������p轑Ch�M�
+�� �S�I�8\���Յ<%4��4.�i+�഻�2�>=�ρ��o?�R�ݵ�4����1��������?U58?!Yި�&�2<OYuf�\1?d1��� �J�Y�^U���wR�1�4Q��@R��'q��A� �S"�ݏV(�d@�DU�w��e�%E�A�[�ԕ
+Y �BƸ4�* ��h��UN��v�v4��N ��[�i�^:�N"hw��@SQ�AK'!�S�; �- '?d� ���ۅld�
+��eLQ�-2ux5n� w��S(�1����&y Kٵ�'��؎�������Ԁ�$Fa��q�R�'O�>q�ň�LeL�f�9m#�p\�� ��K�dv�e���~�e��� �K¶����#}0�U�O���e���$��|��xA��*
+ L�T�U��$</k> ֎�&���&�4yr�(��$bx�(�5�M�0����Ɉ�p�r���w�ݗ#�-F6<_��
+�4֣VԻ������s9)߲zNWQF���m�;�-:�ϱ�?�3�R�O�N��Y�Ϲ4w�J�?�Y���1�F�7lֵ�,� ��F��8��J\�o���Y�}�68j @)���7�TەT�E��ਟ���
+��ic�� c&���N�-pd<ttd�pW �#
+����*�NX �F^��ӎ���^�p����r���f�WY�˕��<
+�
+`��^��7��1���q9���M���(ID�RΖ72���� z�\-o�7�9� F�4����B��!X�9f6� :3m,o�(a�)H�S o�S-p���C�}78r!�f.�. ��k"'W o�g.m�m ������B�#Y%���O�ň�X�H�����pd��1 L
+/�� -��"�UMg�h=�l1{�u�������`3�M��d�h���<�1i*�"h_wm�w��`{{*��} '��㜥4+q����-������PO �UMcdm)G�t8��41M�b /�7�1ru�/���T�TØ�\Bb
+c�}[�2>���d�?���ѭLc�̍�w���0S�kY�~x;(&68�`d]@��i� U}�q��@3ŭ���Oʨ4|n�ނ,�� �xʀ���1M����O#�i�ڸ�&H-�nqdq]�$���������v�����0��qTɣR;�{��#OR?W�jJ���'$q�
+4��"�Fj�0Z̝��e�H�Ӑ�K����aDc�Jj{� ��e�Y��[�E��l]�����l�B���
+����yi��/�3�Do��:Mp��q�yNj�z��7��*�<7���%'D�fW�ҹr�""���u���:�N�#=����չ��`o6�H���{yvw�#�l��}�����}�2���9��t�4���8½�e�b�)t����sg(]��vFy9Q�
+w�x�7c�"��"����Ş/�N7��vCyl�.���D�=y�#ȼ��oJ��W+��3@�x�sv��ޝ�b��t��։t�ym�f�{��<<A��t��K��>���nХb�%u�V7K����$��3�)ގ��I^���c_S��ro�T��#��x�C�A���a�#�4[So+8ո�����{|*&D
+�l
+�1 fE�h�5���X1�F��HX��P��I�X �X|���5�^ɓ���Ir=���t]�F3�}��7���Q�0Y���u�oe��%D�>��9t��Ɇ�/�G��e#�*� B�Bu� ��������V�����ѫ���!�-�W�'��0�r���Ǻ~,�����!�^�i������Tv�tI�t�u:+�!� �H�{���D�>GY�ƕ�n\��/� ��iǩ�'+z&;�v��������ʈ!�5p� O�����|� ߩw{��$�$��{�b�����[�BP�����O���;�y,�Ͼ� Y��[FK�fa�5�;-����g��L�P�>��]yl����?���w"CuQ�*v�����>���ͫ��֋БGq��E{'{:�
+�豛��ɗWi+v��w���f7��V����'�˒�Q��v�]�j.����gT쒑hL~��^��eY݄6���:oCت(����^@Ú�d�7���^_��y��
+�� D�LsL�^�:���~�"��r����|���ws5�mn%n!#\����
+�얍�y���0�9ġ�xJ�xI&0!����S�l� <ཽ�Az#௑��(k$2J�S���` �L%��NO;�/�< &��*���0��y�f0�
+��XO�V:GK��oe�'��o/^��wD�F������F�W�f��n�
+�8ݱ ɉ�)Z\ɹx�f#~������2�`gW�uSq!�nH� ���"��7��4w`>��`��ő<`�z�*P��o��1�գgu�ΐ!?��穋�H��#�o1)g��� �5�k7�8�'*���%��Pb��NH�����j�2��pW�������FpJ��O�^6��G��A�0SX�b��;�V��F��
+/ƺ�7��E�N����)�(ꦑ6�~,VE �V��SӢR�fn�~������:}t�0�%�GQ��� �D��j[1"F���Q��Q�b3Q����]���?��h�+&�@z��LYB���
+,%���M�w��'I�������a�$ �Q=���u���Y���sT�B� -ݓU�� �g&��TQ��L�QL��g�y�iP���6�Ǝ�}]7iR^!FKBᦢ5��J��d��2Ɲ�:�����q��u�#U
+�
+Gbg�y�����@h <):o�^�i��&�망�n(��������
+��"de�A53cK^����3C��"�xf�B+�D������uŅ*�M�fH�V�@�� cX�=dԥ���� b��kug(]��ꓚVI�`4f !m��� :Ez�8ӿR�@��L�M7��P[�y=��A
+� ����D �T �C׊Vc}j�x�ɠ�j�)�B�Н+e <�*�%2.Aܖnb;_���G韬����蓺V�ɕ��V��v,����]ߠ��wj�ڵm?��c���Dtp�4���Gb@ +(��•��<j"�y/R;θ��:Q4�rS���%f6�tw"zSv�[��NC*���F��J"�"�9����XvZ4�O�ZYե洣ԏ����8^�/\�NM�e����������4��c ݲ�
+X d�p> �.hۈ~��$��t�$k��UeG�ʀ<���K^�ԷxQ$d �B�(�^��먭Ş���Bע}�*M6��94�O�
+X����
+u�,�_w��<�Y���l
+r�顰�^SÂS����i1�hȤ�3��[�I��E�8}R�3f&� V�N���H��eA�a�*iq9�8�Nq���6�8��.�p�̺�h�3�h����I����i�0�Tfġ�E�"�� �Z�g��y�/�롵� !� �:�x�>��-/���ߢ��Z� {�[�;��=��qUZ�*����Qu��஺/��[�e�t��l� �mѾQ�Z7��n�v���`܆���E�U �����v��
+�����d7�GW�c4zv�M$�A=�Ne6�o�|�5%��� 8��@%&73�7`pT= ҙO�6�+6�p�ү7�h�����h 6M\ɳl�'�k�����_o1��S�]������L�t&: =t�J$+ [�TN�5� G�t9�C����PM�-���d<.3%�ԃ�q���փqL;-"m����նo��Xlo#z�9�xK��c���Z�$���i��@5�ύخ�촨fL*J�����9JHm .g��/��SCނ�1Z;ʌE�U�s.G�T��`��rt*e��&9��i��c�]�’����c蘄]:�7J�Y�-'�Z��hjC�=��*�[�6$f�|D�(s �WB.�ͪܕaZӣ̑6 ţ��U��n�&2 �j��Ȣ�;z�r�;�����;��/\C����B�N���(�Pt�BS������n`ߖ/5�q;��Z4��t�����D=e7"� 2�� � �A����tS� 履�Ւ-��<��`+�p��6��H4�]�a�^�]��ț����b�ӊ.
+8�<���
+�y�-�3��0m] }R���O��3����;u������N�#�4�f ��S�����>�X)�pÉꮅm3�׭8����mP�� d\�K 6��oѼЋa�Nt�43�Ҍ�G�S!xzF�ж�^pݴ��t3���zT9�����BET��"�C�� ":�]�� �È�@�:���~$����@":��$������:��J����z���^�������.8D��ׁCt
+6���~�)���/v:R�)h��M�'��o �
+���|\o��a\=y�)t�3!��-m߈7p����@�y7��E�:�B޵Ҕ���������=׼{�R?���G�|�?�V�a$T1Oب*�Ed\5!�s�oD� �4��@����.�3b��$n��J{Us�8^}]U���~9�)������-�ר>M�!�:4�iR�#��e6���ݏ�i�Xe�i��ig��#����[%.hb7Ϡ=[/���ab�rQkG�0���^3��Y�'�{���:� Ė: �vir�wb���+��V��Ucն��$���4�M?��ʼӽP�짠<���-1$��[&���m�I1_�Vb�F�VcF2����i��@Tk����ʸLŰA���[��#��4�S�~^Ʀ�5u<4�O���>N���JE�(پ���v
+�s.M��CoEL��I���ə�nܶ��x��`;�(�V�����LG+qv�^B��dI�kQ�d�X佗�a��k4��Y�|��X��;�;�i���Ӎ4h|^3�\ĺ�&qe�ߩiQ��fn�~������:���\��l(ne�GQ�j���~��Zߊ�U��!<�j�����i� _0�Ϥ.آ_�����+T�B�sG�߭�5�r��Mq�ym�v��׊x��-&�o7���_��k�^�m�Oj߿率�n,�-�G�B"�K�V#��9+�(�k�-6��s
+�"�'�st�'��2��r16�T�2�!"��}ؽ�����Hؿ�7��E�U�޴�k���醺��c&� C�]�JS��f��z�������)bM�7�6P ;T�ĠزM�V�r�r�"��d�� �+L�L$~I�Xb4�O���w�:մ� zA0�ö�d����kE3�ڭVZ��0�>�n�<����V���Q� �ܾ{�M7�P[�Q `5uf4� �ф���֘+3�ъ6F_B��D�b��K�-�ɢUdV�]|gR�B�9��AmA�k��8Δʁ�h\�Kעy�j�ݶ���<Pm��s� Z�������Nm�eҶs��S��…Ũ��[!���?�7?Ad${�r $ж,�4�����1�?P܃'�D$-�zT�$�x׃�%�)�A*&h�*���c���@�4Fh�h�_�2��ja����41zY��� b^�Q\�jo1 c�q�
+�
+6�@a�ae4έ�’���,MG�q=,�(z���C��ݺ&��u��3�FB�w���$�l
+E��{,���6�A�2�� �xA�� @ɹkA�v�*��«��;-� ��dC�B�Dn��}'�dхt_"��1�c��h���FZ��@*̓�dZި�\�y�ř�L��b
+��--�-��8 �"d/]�T��̴��t�>�P���I���(�������v��� �u� 4O�8oub��)��{4W�`C�hr)�8E ��h��`�h����K����}L���Z*h����E4i�[4����g�������c�j#��;�DKe������uk��#��i�[��Ni�9s��R� �,�i@����`-��~k���9��N.mm�]
+ ,0����+����\�10W��sZp�yt{��˵�� j���D����$}�4E} ������o��~߼}����w�����w���ᗿy�n��o��v�w����_�^߿����~����ֿ���gx�۷o^_��:�7_�m]iF�����ϻ�/�����ٛ��w ��n���޽}q�����R�����0Y�߾y�|�Yڛ�gW�q�n^Q�пOw_޿.���������/�G�EQ��� ɺQ�������<�f�
+�ɵ��,����;}�WCg���_���;�����1��>1FF�>g�g|p4�������s�������mY������n���^�۬�Ù��߉|@c5e�D!����'�1ծ�뀑��V+Fky�>�٩�*� ~ ���y��#og�clJ)+��J&�H4���
+f�`E
+�ZT:�УR�S��9��@�3�%O���,�#/h���F�1Cv�U@u�yP�k%d
+y��� }�@�Z�7�p 1�W$��D��I!G�a���TI���@SVPK�������L����XsI��ш����ҏgPl>UB����n��>GRW��9�E&��?Y#�Њ
+�����l����J�F�����IV��E� [��V��
+81����d:( i��Dd�;YA�'�1�-\��ÐP� ��2mE���y�"��V$Q�ғLd�QW��n��9"�(s�8�0�0Y<'��)HQ5Y�ۑ���LK
+Bn
+T��ى��V�l���� �K���+��<�b�T�㤙����SQ�-B3Ŕ5I�p ^l�F*b����^�^��+]�n%B�2�o�-k�5|nh���Q��!s陣�KP2�>nK�v� ��b@LjHE�#�
+�&���4�240=#����%s��M�9�I��� $Q,�*WN�X��YI*�J� GFO%]�POH�(ߢ�T�s�eѲ��W��T<0����ƬF����&v��
+FB&?�i��Ra}�4�J[1Ez.��
+W� �a�ҏ�e
+�
+�/A���xC!�A]U��8�V��w�C ��!oO�s�ᓗ�C�j%����\B[.|&Hp�xQ�3�t+�d���`�X�)dV�ǩ�
+4+GN��I�eΥ3I� bD��I �`��x�����V4�HE�=�s��Jeg� �%h��>g�8���H\;��nZn��e�3�ٙ�YL���4��tR9%������\��U��ص�ءI��T|���>T�~���>T*Y�IxYq�;�gn�0+��)�[���"|�=8:W��4n�D�L����_B�QI�>�l�C�$;w����$��t�д���;���#/%�~�ԥb�œ�oG_0�;��hAr^�9��\�o'“
+QW�T �&?�H��8 �5`��R�oF�9����H����l ��Ie�v#�Y� ��B�\j'�A�D�U�Ò��CTG|z��!�VX���V."=�X�>w ��8��F�i$�RJ�[JW|_���p���oe-����v�8�G��O��|��� ���!
+IB��Hd(��z��S0w'�<ziGa��\Ɗ,��A�g&�B3�1eE�)�7��\@5�0jVfX\5^���)t=���nKOBՖ �@
+IEm��l��a˴�Rvg� *��t��-#d��D| n���1w�81g��e�/$R�`i� ��q�E8�+e^���2e����[5����ע��>�)�~����-����~�(i"^��Yш���*�W#C�J� ���'���~�L��#��?ϸ���KO�Հh�Ju�3�8�IL/��EQYɭ@E'����R]����3����D�"
+�!�#.��ZU���z���Zi)V�y� ~TD܄�tY�x� �w��� &�:��GX~i+;$2��d�9&�Ee'�i�!�� VA�Y)�VQAE�ṑ�H�TjŭQ�����aW��]������2Ĭ � �H����
+j/��P����݉2����L��8���z�t?�P��siFOI��q�����K&W��'��5!�4��ĥ�j(YQ(�
+XվU�P���d���l�V�@D��w<���%ߜ�bF=�E���Q30��YUJ��Y���9A}7�
+��jO�*i�j�I[����9p��>;�2U%�D�c��&�ƴ�0'N�ˎc�yB *¥$ ���@��k��[ _K���@���(w˚�fIP},PǼ�(�gn$:��PIc���㘊O���0�gT@t;)�-",$U �1=ȗ��N/m�3���x�6i���^��d�Mf.,� &b �H�dI�ЊQH��<�h���De�(�h ;i!X��z<���T��$��J%���n�R ֒|�% ��4�J� �� _�$'1�'��;q���
+��$uRƙ�v+���q�&En��P�>�ğ5\j�"Gs�`���c��~�\���|�P��$=�Dz8��N�4jsM$���P��<��s�p��E��
+���2�8z��i�� �5��Q3CL*-���B1e[��c_�aZF��q"��&+_w<��H2�2U�
+z$9��FF
+ר�^ `q���$��sA�"'P�'d�#z3&�i��pr�ē�w�� nTh�H�0I$��jNy�[8�º�8^+Qޓ��m@R}�(`|��ֈOE� |��id]�RBR����+:Q)2P�L@�(o$T�p�0���
+}��
+�%EEWg�8�չ���Ʃ��A��]�x�n�Y�!g��ŐIYW)�¨{�D*$�q� �F'�w�c2xL=h�+��)��W��XQ/�� G�f[4%�X�CJ�損��Pa��^04�yB
+�3�ٙĊL�$-8�h�R�dw�rzjs�K���l
+`N�_�7y�:x5���u����
+YO��l��OEa)��J2���j�B��
+�PHEw21h��H�#u;��(DM��v,�ٓ���-� ��� ;I���������dgzW�{8C�@_���a�l=0`��� �eC�������<+���ܟkR<0pg3"�L2�b��gC�h4�9�r0GG�u�'��x���,�
+Oͪ�q.��H�(Er�m
+��%���NX=��f��_'s36O4�h ���<n4
+��um�ɞ��K㾾C�+R�قi��EE �KY��)�D�_�XB@j!O7�j��2�Z�?���x}pq���ז��C���ZxA\M�)��4T�/����\ �������k�W�ڂ�uc�Ϲ��+�M�2NQ����.t���W��Vr�c�b�u��Jz�4=�եH2����S������6���2���F�ti��>�� ����0ng�=ܞ��q�)� �l� � ��{��F���n^
+4
+�2A��r�+Pj��#����؂��\�͍i���&YS~IY�6�e m�C�ۨ�j�k��
+�'�-L#�����!��<��؍�I�MM��Ϊ��n0�ǟ�`�� cu
+ n-��K#��!!�?�F�T�� 4IS���i�AK���X���Z^�!�Tzt�AwJ�6��:7��~������:*�G�Cb�!1;�� �8[]>m��S*���|)겍@ �.(��W� <�:��; :�զ�3
+�h8����q������ML(=\���2�)���@�������x�Y�ȫ3{!n ؿ���?
+����mD�=��ߞ+#�Q�Z)�N,�czA-�\7t�6�l�N ��B{7qes�� �P�)|��ï�M�C�c�K-8��>��4 3���4Lh�=���^��Q��� H��W,7��)ӣ�3���?P8
+!FR��d�% Hi�&��v ��* r��*Y�6zELS �"XG}��v �`Ϳ�MA�7�R�-�̫{�f4����-�?B�E�f����/�3~bpG��h�v��c�P�S��|���]rߘ�d� ���2��J9�|J6
+�m!�Dr�<� ��K����9
+U!�|j��� l��_��p�$�7G:j'�R�d��q��! U~�~־� Em�;np� �A��*&<��8�'�cQi���T��r�[Lm���G@��^��J�)�.bf�_y�X�z|��+�Ǟa���V�'%Sf'\�<����]1�)f�v�=�%�LV��e%�w�b��$�T*������돐C�ʉ��
+5\���+T�-�=��V� &������{6���ϲ��s�?X�(露�>�4��}��<�����Z����M7�Jh����]�5y�曲7�1�R�d�dYl=�y��E�p������w_�L!�;!����N?P G�k6��H�~���)H$�(��Ң���a~=�Ћ�����o���rUO _7�t��~o����� �}���\v��S�)u��I��M
+1�"z��{`�3:�i�+�|���R ���S�C$2Z ��֨��yFZ ��y���� ��Ru�NYU@\������da{@b4a��$ 4��}2*��/I���^�2iN{�8�W SO��e�Wi��2S�����W��PL&%fZ���p-*�ޝY��Ng�]�JQ4���@����D�+�^]�����'�@*�r����2N�7j��t��Hyq�S��Q�m�V˨�ͥ�{* ��ݨIιEVR�J�'��+�֎ ��ah�RqC
+����#� �M����r/���5.�i���w~�hta��C�ƌ�K�SAŸS�ϔ~�DK��V�{���%@H��"�`7��5K��K-Ǎa3����]��
+�N�����oU3髜 (<s���5$�{�ν�}���� �I+Ը_\��k�����@C� G߸����׋�
+nS��Vf���NMԴ��G<qҘ�<�35����\�Ҏ�]��5ۖ�t�0ɰB�;/�1�'�YV�4�%A�N�$Er��rR:�u��`���+��R���_��.5l��uG�&��Bv�.̯�i�Ush_�j�ә�!f?��P�zE2<v���j��ɪ,�uj�-H�R�S
+`t\���_�(vk�j�3�W�f̍~���1��ŝ�8~���q�����m��@?]'8910xiJX^Z��8�%�q��:���J9;Źk)�w�Bop��{��iR$.�$D��E��l��c��ydЍ�F���/@A�)��W�g:"�y7ztK��(��*�uo��ef�6�b��V
+Ku����cbb��]����Q������h04B-z
+TKh<���,�ŕ0�ݶd�1�uz�$����K����1�;�:�MQW��w7w����4������s ��_�������������?��?���/��?��C��4�~�QC�i^�rA��忬^2�[5A��+����cK�|�f�58 }�9j�%����B��0�^�UY�FHG���Q�`�BY�Qpbfӹ"���v���c���/,!��t��ɰnE\L����"I�1��=��͊Rߋ��G���фP"f���:ϵ���m�C�C�V ��] 1��yl�e�EY9��\�f+��� �*n����/�fr,i^�/�@��%V��*|:�4��f�~�ǵ��F*>�U�|\W�FU:����w��X��#�=�
+���ψ��5vW��=��J��Eא��d�;3]助�Q���2z�tN+�_���`}�{�"}���4�*�T*Q��Г���B~�_d�)봳�4Fړ{�f�) ����$y�����ضi��9ؿ`W@�hMZ�,��[P� ���B��0��@��Z,��a$�|�3�<�C�q�rT J;��v��Kև�`N����ZuJ�8��S��l)�~�6?��
+�8�O^AV��
+ M{��
+1A-w݄�)I��Xe�Ye�`����(�a�E[
+�^Ŵ�r�!ly�@j� �94pɠ>�Y4��s��t�(?�~�N�!�$s�
+�ku�{a�R9��'t�v�5��e
+�K'��S>!1�=@t����������P�Wfl;Mu�8��Z�]��oT��X�ó.�?@i d�30��P^�6��@(A�G�`Se
+?���:2�˴elX,&6�I��G�t�&��s�۠�q���Jr6:Z$Q6�D0�N{+��X�� �PO�M���#��;
+
+@0��*�'�7v� ��?��b�՘�ᒏZ��
+^�q�J�� ��P�{�l�nD��X��'���a�-�� �oz�.��
+�y䲕�[$,@ ��豨5��d*�� A�9�.i!3�~�:E�����gu����ק��+�T��B,�U�����A��2;è�q�߽(��g�j��E>�RZ�L�����k&��}9E��o�B1�����ws�44�&䩡4"t}n �U� �(a�s��!��Sf6Ce���U3<��  ���3�ޖ,�8��a��E��v~@3�ڑ�*��BDzL%g����Ɵ�S mA���9�2@E ���h���1�t���zE-h�� �6�=����� |^�q�D*��b�T�`[��B�D����������ˋ�M9
+��]l�뫜�%[��U�>C� ��8L޷���8�d�
+�G8x^�+g
+ X{�3Y�=�aY���L�R��I����N+v\��)3
+M�H�^��ƒ���d��_w
+����8b��ʋ�ң9��rK֚�F�����HU��[�O]�A�d��� x�ހ��?7�L�|'�
+��Jytw�F�W��r��-ԼgT9��ǁ��77� ���M�VDF�O%����a�=�W�V8��s�{9D�Upf���B)�R|N�9E��.�6�݊'5&�����%���5*G�*عJ�� ��p�m�}j��H��
+�::�S.1Y6�C-.ncE�0�ڌ{�����`�}6\�hpY��e�
+���o����}u��n��`׵\���������YZHi�Qסo���stq��R�j�{6�a�Ο�ȡ1K� �m����F���v�ʫ���R����B�P%D�-Ά9 x��g
+���� &�����\
+�OX@(X�8���b�Zgw�@C!'���AQ{�������`w�+�9qV�r�6%}L����
+u I�)#�E��q&GUӒ��JC��x�z��C�>s4fYH�x�{D��dǒ��Ա� �p��\lw��Mgn��0�.�P�Q�V�<S�7��2��=r���j륯��p�T�խ��Qd�����:35k3;������w�P�g�Rl�x� _�l�BG�R��׼�:T���<s�O=4�
+\��i����7RN��)m��� =�.�6ڡ��X#��rՄ�2�h����j�*z�.�WƷbαsE�#.��N��HVe_2�E��:���몲��D��)Rʦd�U��C��-�Lҋ���!�Z�����k�q��爵�S/����B�g���/nY����v�#A�*B�IgZ�V����
+ �����W�P��<�Cp��s�j
+.�Z8z���b�g��m����Nn1-���)�8H���w�h4�=] ��� �S�����@ 6(���
+�f�8Gq*��ܵ 1�� �q������,�*��l���|X�V��
+���7\��%`7Ľ?#�O �MMV>ży�H�|+�D3Sry,���������$G���y��Ѐ��@���@ce�J�%� �=5t�n�+���C'�P�|o�Ua$4{,g0 t �_�}8��PH�G P����b�Λ�S�����$@Ǣ�*�_A�%$I�)��r�m��D�1�׎ʶFe�^�;�^F
+�AQ��e|��(U�Xj�no*I���!CuԐ�E�V�Ad�\d�����[�����V%$M-���<w������iy/uO�� ��,��(��9
+ŗ�w*8e��⡩5�D:O1�+��������z+�U� 4x.�G�OmXHa#����g�s�/�m�����1@ei)������Q���ZǠbQ�4:�>V�;�C ��<�36��لd�����i�$s�̳8ȅ�(ߧ�5�����y�-�� �d�n���ѽW�� "^�m����1�$�d,_���z�DD�9Ƕ>�����4�#����Xh��D��;����u�ܦ$����K��s����9M�G�����jTo������Rn�_�D�s�����?��������?�O���?�ӿ���������O��O���������������?��O����O����������O���޾�����������ͭ0����'���Ϸ`<១6�`�V1g����� ����ܪ�n1�������7���Z���r�7��ŭa�~�|f�{�������� ��1S=���V!o��sT�����^�!�<�!��#� ��+�I#*�6(g��}�|�щ|BȺb+[��)�>�$;�fq�Z�vBIU��s��B0�W0H�QL���s��l�T�� R�g/�?/�z�KԾ��{��#'A� �=����fy_�ݧo�����(?[�.&ʧ�}!��� 틐�����09�
+a__$���Z_ )��Y=Lٞ�G}���okzJW�Gz��)�o#z�>�����H����Bd��|垦��2oC�?��W-O˷�<�#���I�ʀ�~6���Ĵ��x��m��]<�4��O.��)s�6�Wl�[���K�G'x���o�ξH���}'�W��ݻ���p��+Av�os�.�~�tq�s����6���=|�� ��s��~��w�B��~��Xry��w���6g�j�˓�r�mŎ�"�0ۂ}� xf;��'BO�u>��=hKPE��:�t����{�o/u�1�#�D��.��;��q��2]N �j�e�nd�����Y�G�!,a�q[�m��� L��1}Q�RP����.C̲�|�>-�tya�h��J�G��8�4�02~�~��'�w�o��y| D�Q��
++t�/ks�G55��x/�F�Q�����6J7�����l�q�((Π4��~8����/�m����o��ct: .? �/d`�!_>�+����/B��nz�1��uN��i[�s!˰�!A��f��y����[ ���_~��V�۶ܱ[�Y9���nQ�2���L^���ї!��#���W�~��G��/ݮ�5(}O��%��0�"(߲����oyX3�Đ��|�C7!���Dn��4\��m��&���ᔿ N���Ja�� �!�X?Y�EŒ�f�]"j��7Fp���;,�=��/��u[{�7.�OG��<��[�|�0�.�S����y��۶�jpaE�nZ��O�nS
+�mҝZ<����'��Y� yF~��FID��p�Fż�vp���<}�)?�m�-�)��e�� ��4�f�Z�jOm�I�m�]Sl��Scⴎ��n�e��$����F�V��厍 +��m� 4uΧ6~�g
+(�=N�Z�K*#��69�ON/sc�u�/sc�d��i��S�^V��遼�>����H�,�a Q{H�l�p������E��J|��0#�Ƕ1R.���^���8|)�Yn��I��ak�4Og�����A�*&�-��y�Y �v����'��v>T� 7�{�Aέ.,̂��r�=��*��f ��*Q�x�����d�w'`V�@�� G����ƿ�棞���K��m�{�V.�d9��+`b|:��g��2�=�����%�Ǜ�/��B�m��VC.L{�w��>�zYQ0w��Ų�lg^\�k�o�������>��"�ۇ���Vx�:?�Q�o�
+c�؋1�����.q���Z�{���Ɓ6C&�i���m�\��#�f>o�2�/r/
+���1�m���u��0�~[�2���X���t�ч�-����Tb��W��~���ǖ;meq���3d�-y���ɟ?��R.T�Ib%ݦ�gY�+ D�u}��ڻ�����=����5����S$V���k&zʴ=]�=h�t�oGX,�2�_޳��O��ω����g�*���QY����<y��o�Y{�K@�����g�� �Ԝ"���=���d�_׷�l
+:�Q��F��-,=-�Ǜ�=��0SY�_F�oo���6
+�g��7�l�Qڷ]�\�]bi��_4�Q�Mai ������ ,���}z���&��G����U�����?{�zǓ�3�ȧ��cs�R3|��֯x-� |:�^ji�m�J��B��w��Ҟ��A�b��r�#r�z�j�x�o֭��9��s�<^�Q�sdĴ�=\��U��V���.�M}��S��puL�!�����\}NV=�e����E=��H]o/W� uI��\m�ׁ��O3רn;i�k*�6s��r �n3רl��hכ�+w"x �:��rU��
++�8FN*]��+ J>����J���T=oWW�G�����jCU�w.i�����Wb N��eۻ�f��4>�we��8��&]������8MH�,�W?e�9?e5i����Q�쀄˛�+� Tt��U��~1�������{�`_��y�1h>��q��� žË�m^="�㵔7�Wb������/UCl4���,U��39�\��UiT� 9\}���w%Ai:��y�ȵ�tܭy{���k4��Fr���կ�*`r0n�W�,��
+��v|�� p���5��!)�ެ_�(�c��թm����8iƑO�W!)�Z��cێ�"�Ηe+�ۈ����ʲI�nå�i��6V$JyW��Q\���aT��Bv|������W�L�2�'(��k#_{�ۆӒ��N��EM�a����U�!�<`������zZ��Èt�z��}:��ӻ{��2N�?�R�C�&u^;���:�� #Ӎz ��~{�֙s������>�3f����X@��t:T�Io���۾��B�:��)"��M<�Lu��г�� y���^[y�,��u��g)�V�=\A���X ��KJ=� ض#�>�ڛ i3�=oR^á�dl�z�2��}4�=�m:������m)�s�Q�t;���.��(^�^��x��~ۈ��9ú9)��ܛk�ԏ�n�P0I�Z�G�n���'6���E�d��6�Nқ��Rn��f��lV|�->Ufa$.kOe\@ -G��/϶�-۾�/��q��a։�/`<:��N��Bd�,�#'xr��v�+R$�Sw��M��f��[�l��{�l�X��� ;�Ŷ��yM����eU3������2l�����-�>�L2 @��1I)���ļT�n'L�#����-@n'LP`敍y8a��c���N�B&�p��GS�j+�L��o�|`��N���8��� �O���4�� �%�ˉ�d�:�����e9r����%I �W�٥W��{��s1��. wTbP�4��^�x�ذ���e9
+G�7�8o�KB��t��^�
+��=U ����Y�D[�����".s^Z�)��&��� �4r����S�0(�50�x�����&�6T0)o�6��J�lL�('F���� 0�%׷ ﺝ0m�cu\�� ���}Z��RU��n�(�Pb�!� ez��ү ����o��ڑN���+Ey�(��4+���΀2yxb~E���2�I����3�.�ٺ��f��S���s�.�3��SuV��g�gOOLɟ�!c�q������eC���\R�)�p�a�Ĕ����VM��� o�
+$Ϯ���g��H�(�� ?�ζ�D��:oL�F�@�Η����ñIb+�d�6�4M���� /M�E�+�P2 �R�AV�49�_\2�P���6Χ��ex��T7Cg�����Dɥ��siѦ
+���z�>�&j�k�ҷϥY}�^���A
+lWK��l3K)᩼yX�AA a[Wv��ݎ�]��fTɱ���S�
+�����6�S���/R¿cT���� �?�0h��p�j�4 �<L��Ǵ���r�L�����&��>M͂/��/�>3���ı,
+9�<
+v3���������}hw!\y;�y:R���p�i�w�G��-����FQ$>Ai���O; �f���|����8�������@i�y
+�6���Qd���DZ�$]����w�']��Z��
+ �ݟ��&��x�v~� q�(����/jE���SS���y��Qr�lx��}7.�?."R��7�Z�}��E�s�D}�i��I�҆�����@�`���?������w��7�ට�׋������93�t{��G�M���mO?q�J��=<�l����J<ۘ*�9$� :f����0��u�Y�N��2���O�+��H�u\^~�Ʀ���
+=��� �$� ��m�'<�
+�} �כ�=��0�}}��?��)f� ���ҫ��zs���b���SWOOǿ��/�?�/l(�oc�˿9���$����B^}Y��+^_�:��k[��V�ԕ#x����ȶ��G�?{9~��Z����_�I0��u�d����K���r�\ Q�M����%vљ[������2�S�1�
+1xe��V?à�4E�6�S9 pM�g���i·VPz��� �ո}�*Q����~��{5~��]��>����nj㯚E�7Z���y_(۝�gY�j۪��f+�}T $J,c���ۏo��ޛ �<fan[�j����H�� ���#[מ�(m�=�~绷8J�F�2�P\7��(~!s�tЃi��o�QA�j��a.����/�c��M�c��x��uMzx�AJ�=�������q���օ(�-+<(�j��K�����r�Ȑn�;H�Z�.E�RБz�ہ����L�2�i
+TR�͎%^����=����M]��oӷ�j���o U��.�7����e��樟ooTŀYl_���p��ܺ�6o&n��@nﶞB�r[���O�6аs�C�Z�i�������c��Wm6~��U���D���F��6[��=BhZ��=�՚^��vT��X�H�-������g٦�ZG�.-��u����3��� �,�Y����=��T�Dh�t�7��|V%��7�3����s��dK��Y�[�|�7+W�n��qq
+�-�j�~0��>f{��ː���Y�e��=O�2��U�5��[�ɲu��͒l˹n'���X�d���U�1���a��2C/�T�e��bʝ�0@N�|l+1�4(�=�dj�z����u���i��%,����`�}�v{��� �߬�E���E�eU'�����]�:����#ܼBb��4꛻WE��(�� k#���"#M��i�u)�v����BC/�.�F/�����O׹��e��P(�)#�pc�qAW���͸X��.��@�)%C!&�.,4@�X���@�֗���-��B�Zs`��x�i���/-�c%��g����e����m�L�l�Y���2��-�i��\�K�l�r/��*��y�^�f�(zx]�l�v�bwU�,��Р8�C+�x��cj∐�����J۪
+�u���h&5��ET�!��KT�,�~_O�\.��m5��1�ށ�Ah����c��m�tiH����/�z;;QKc�ۆN���^}@Q�/x�7 �vX˵)̄����GT��&Md��/��6��-���O'�}l0���n+��j�����mT5(�l����>�=�����m�ԗr��A z���8 Qu�5�8I�uP]�h����I��5_&H ���k28�t���F��w[ �ro����H�*���1�;���L��o~Gci�n�#S����FdRK{352)_��2��Ůu�ys.�b�۱h��@�2*�%�џh�E �R ��y������T�ߨ��>����i:��@�n�!����͆d �7�!Tr�+ng!� ��/C!��1~��&�o��k�j>]��I��g���z�����8�� �Yѐ�,�H0�b��ϗ��O���?����Yv?Âm��|���4��R�z�=}��ˋ���G���OK����Z�%6=�{d,��_��~��(K �Ӟ�/��ӕ�Cǻʷ�$H�/����?x�4���r��4��i�nx켎��N[r�_�%�,O��|���,��Lt�o ��wNQN 4��,s���/�x�����ѯ�q((�۝��S�6)���)#���o��ޗ� ��Zo����wn�b@���6�WgDy��X��p�=/�7�����e[S��`�ӭ���8��c�!�LjJ
+��7MA��'K�( �ۉ�3���_1��� h�_2���) �:�Y����%,i��C�:O��q7D�/G]_N��b�=�@ $k5s��כ����"D"��ߌ�\E��K�� �/&���4�6��v�'��[��xf���c��䑊c��h�����s�i�2��JL��I:5�e9�9��K)��`�9�ˁ�S��� vOj3����y�Ӱ1��Cx\�D��B����(� <��ޗ�����`z��b^���<���ʄ
+ LH�
+����V4C�}H~�s���
+T��b���Od��[3�FՊ�+=D�Rי+�u3�Ϝ[)w�����@�3�x�8�JhL��-����hZ���G���(�uA)���� ����x��%�f� ��}ZQK�����ѹa�7 ���Cjb.��u���v����4v���[����XVb��:�R�� X�|�� �8E�u�˅W�S͜��7��Mm�:����B(:�7��Rf�Y�Y�W�����G:�gx�sc�¢Y��@��v���M�}�*0^Fo
+��# ���܄zMъY���V!:{
+y��\N�z�{qQ�7�*=j7�*]�p?}��>���K�\j��*��h�@��>��7,��-��k�
+.E�[�Afx^��n�����FVQ<��C"ּuH�3����뮟��/�V/'�Aպ‰��k o ��P+�E( ����x�x@�Y�jcI��qE�j
+sٛۗ�^�$clvN#\ ̍�x�e�e�^KGf�s�V�P��1�Ğ�N����vj���"&X:�8=&��4T��!대��WBDš_V
+��� N(��3�\C��@���Sy.�J���6�\Z��\{�� �I=D�+��Vc�#7�`� 6g���\�Ո*+�~#���}E&tD�I�K�R�E(���������k��M�帿�ܔ�q�Ɋ9c<��Z ���C��������E���4{���\��������K�=�q�C����_2'�=����w�w����f��撾����y�)^��9�\*z�h5��{v�:�U�'`c{EHG�Ӈm�lN\�b۩��@k��8�=��t�석� S�Ԩn����B�om��B%�e�uZ��S e�-�����1��< �@�a�K`H�%dD��$՝�ev�`]|3�,``��;���w+�(�*s�{����- �e�������p����V� ��*{�D�`���KL634`��έ�}@���0,�ei�c�Y��mmY�.��":�� ��3�w97�<�� ˆL�8�r}2��2��x��9jN5-H���Ngv�� o��������V��{�# `�%�@Ǽ^V{ 9I�+�A|u˚BG �NX�/�Q��iM}Lz �sЀ"9�{b� �M�`���
+B&��{ዠ��o"�9z�ɒ��}�!�H1��oq1�O�c�F]� D_��K��}6\$RgC�C�-a*>I���h�86|Ɵc�y��ϲR��6��i�cTPqtaij�I�����#���z���k�VR���s�a=?��C��ʤ%����8�L\{47T��6��^q�j��}�h������
+BZB��6� 3��6tB(�qj�_J���ϑG�/�B��'e����~5~�+�ե��������L�%N���g��l���fHtng���[�̙�6h>��8ה)3��a�'ё0��#z��!'�Lu����ѷ��)��';���f[��4�� � uTʪL
+&�E���"�1@��Y�s'8˹�B䮴�jk_]�%W_6J���� I��RZ�,u �B&9 �V��5Wp9K�[[�[��Z�F�V
+3� z�O�PB�<�k�2]��݁���Ɍ��\ � 3f�"�����y>�pc'O�j��%�`�E6��!h�2&Q�&�u��fv"��b�;����ח]�*����\�H����h���Ei6��
+%�MGZ��`�v��
+��bF�y~� �{p:��И7t�C��#���+���,�<h�2�W! ��5�*,�0K�=�1�qQF�$ ��K����> o^��Lj��Ql�"� �� Z�+�P��G�;6{
+�^C�1�9�+�lIoy
+4F����D�b����e ���=;~[�p�p��5�Wa�Bqr�d���� �(�0�]e/~�1vm�^�젅@�'����U�� G�8f�
+bP~��l�hґ �Z#;[� ͊�pm/,:%��f'4h�5H�͋G,NC:��l�؇�(5ۙ���F�h��
+�Bj� ���hP��3�N
+�d�M#/P�\�p7�D�H�q �F +4�| ��g��Jyk�����52��=��c�
+�{�n��=�qXF�$���_����q[V�(�Ʀ��@��e}�CUz �=Pi�tSAfɴ��� ]Mz��T4��=ۻ�v�MM|)i`�����X�XIc9��!r��;I�ٱ����\���Rf�W��
+�"�+�M�M
+H�m�'�)�5�mZ�͇9LېM���ǖ"8t8Ϥ ]V+��NW� F�.�-���e�s���"����
+��=�R�V% 5#uAj|@%Rk.��#:��ǣG��5�r����1RR���6����T�>t��6��qL�5�����?P�`[��S�wҔ�����~PͰ��-]%x��LQ.��-�]�UBҘ��q*SE� I�&���
+q
+"p ��Sh��[�9�@l45�/�d� 1i7���B��j �x(���X�i^��Q7�J�@=PGw+ԃ���S?{�E�' B��� �������㡕͉s��c�{G-h�E2;9�ʹL�@į���F���΀�;U�;[ �!'F.@Ls%�Rζ�m&3y�o�x�&��T5-V/�p#��l���y��
+m��
+B�n/�\�qgXS��p�ҁ ���܄�[���� ��4{��|?�M0"�q��^��F�� 抌�8��������{�����^�
+l�d#�� �p�'�>�ܶ�C-��S� ��"=ܨ5��y�haJ/ҕ�Ebd�>�A5{�t��C.��r�u�dp 뛨�����:�Q����.���
+���3�@��� pa����3�a�.@$���{�.�0N �{W6�Q�:4{�B�8Gy��d��&.��
+ -g{B���HkK�i&-Ez�\ %@�O9��G�Ӥ�}�5��>
+�{�I��PoXC_��`��Ά����\k�+5-���P��Zg�K
+ ��\���P�V9(���r��t
+��%�X*����Gp�(,�%�Ue?�����H[�����z㛓٫�R߇�f�4zQ�B��K�[�'�b9E��``H���T��1��oA��ĵU+���^�#E�k]1��+V���;+ͤ�����r @4��m�;���a ")��+2�M�K����0��p� %
+�������#D�� 5%)�� Qd���T���dg�D֔��A����W(��-�fF���S~U/A��B!�P+�!b{=��t����2I�C�"�3���Myo�cC!���) _�HMÔY�:�v�bQ� e�ኆ��5e`�'��z���*X��R��]��ѫz�9rs�F��٣�%����F��B���,�5��r�i -|�0�����J֑�}h����� ����j�R�A��+Q�
+��fsii����1v)\�� �'ÿ�^KSD'g�,��p�D%�CP� A���:"DR�o`g{Q�u��Jzj*�9]05���ԃ� i����.�2� ��"�|\
+�x�=�1F�_���C�v��<OL�@ �E�o����(�|��0��P��_�Նu �T�/D����#�/""j�z ����]� �%���cZ�� $e�I/�}�h`�����+�o��hēS�
+���1�m�
+2�Oz�@b����}K� ��G>�c���Rhd-g�T��'��j�m$�+9�/�SH_�W9���T
+2�� �/`�0���@x�TJx��g�T�H/Ϡ�L���C4�}V���0 $$���kX0\�,��ZX�W��k�� �%I!@���L���wE��HP\η>��L����K�٫uv��5��x|����B�0���5�Nޏ[��4`BDIL�9^��0��t
+?dd�4���d�|����n:�DtN߱q�-�G��ZN)H�Tk�)� �W�0�4����J�U*� f�Z �﫻��Mֱ8�s�Vu5O�5����-���Dzᣌ���(v�P��9�)����T�6�T�x.'��/-/
+z��Wi+�&����#�# m��Q�2�� �� ����S�8=���b����8 �m؅�3@r�^�ŝ�����]�=��䒣��$�:�Q׾��@^�0��14�~��]ԃD�i� l]�%�'U`0�I��,#�;�uG<Y����b���1rGV������ЦK�`g����ðmI�|���8��@y�i��^釸F�+�[�Y��j��I��4u��CM ���V�9�%SVIF{�5da U@��=�W��=�4��Rr��]�jg�X�`x�Q�)8�� �o�y���[=$Ezy#�|��X�GO��*��b��:y�&.X,V:���ځ&���54H~����T������2<b��)�wП���0v4.�Μ�CJբ����%hj�Gk<8��,�K+T��F���P��۽&���'��YfL�\������|�P�m��ӠJ�R�sUd�5CЋ� �D=�}�Wn���S+��m
+���sG2��F�/�N}�{R[�k=0rƕ,'䏽��f�ʆr�+��5�ʬ����yZ�V�=�dP5���M���V��+ �tȧ��:�hY��&���}W��O`�jh�3ﭜϘfD�A��Q/����5�%�G�u��
+�4`ӝ�q^�r"�pO�)w ع�&�3`�f�u�C�Z�t�7�k���>=�r%���w|
+>���� � �ԡ�3˭�l7I�|�m
+���JT� )� )F�^d��EI�RU��=b�9_��EJ#�C1#���E�z��ө����q�B�(H��s9ԢMΔ(%7�n�z�F�+�qbr��6b�؂M�λ0�� �!�܊������@�ɍ�T:�/M
+r�a5qQ�9�����!J�)�7ԫH���w���Se{�\���g* gI�ᠺ�K��`������f��(��MH�����~ ��KT��*� e~�� ���ı ���F�Ӕ@ �!��B�g�^�����&�
+�ux�5x� EZ� �x�Y�#��4�����!A�,�#�� �|�"�u����5n��#7 JA�U}����r)��^�[xb�U=1�3e��
+��O�J���C�D��A ����B�G�8��Z����;0�J(��N5䝖�9b��-�'n;�Jj�׫��# �^Fw"�ʾ^%S�s���X)H�W=lTS[D�9Pt2 D2�C�a"јiK&Fg`])qLKV���a�!%��u� ��l�){$�9���.`�1��b�� sߥPx!(��=��ٗ#*`��זej��1�����&0Շ�"PA:ɘO�j�g�T��ϱ%�B��S����Eے���װc#�PΌ����S�dlb���|����?eV�&������N��ƣ�C̽S��#(���F7�Y��y�Q�3�b��e�=��{����(���0JmQ9�+���_\��,U�k��Z���pt�w���2�l�#N��N�XPcՄ�7��2���.N��
+���>�@�1U�X��f�a9a(�@>�p ���w^o���D�&b�p�2�ɋ.��q�c&��ˢ����kZ)�IN���V��#�M��u��U7�(XÅ�#����N��тH~�D�{R�r�2֠�g�hj�կd��(q��<!P��]
+8�!7�{ 4|�>P �1�@�N1:�m6���U�[2=닿�����c�)s!ș�(r�w��
+4�ye����Mr�j5�@������q�h�cP��/�P�j(��!C.SI��*\��d �4o��e.�Pس��W,�݆�ɘ���%���V�=���e�p���n��W���g"��2+�p 9j��\����e�D!�i�5�Ӟ�V��P#z J�T ��-��5�vE4L�ft{V����,cn�w��E��*� �6��l9#��SS�h9��$�V�X��C�\��b)� �۪��`�Y[��/Yu �9���YA�\�š�n��b�'�j�I �h/�i�/6D�@iJC@%Z��=��Vĉæ���K?�{��CWC�`� �
+�x��ط��h^w�C��e� [=� �
+ɏW)�Y��MD�R�yD$Ujs��n�$y�.f߱Y��/f�&`x��q-�d����ӫ�������|s��M��`\ �u �+�P�{�'<T])&����m���g?�ҭ8r�
+�L���"�ќ �mا�Em�=�NF�I
+w�(!�Mj�챙��}�ǜ�c-���~�S�X��@ܯ�r�N�9f�;�ЃP�F/����[v�Hlzmj܉`v��<´B��'�Tdz s�{�b/�K�~'�q����w��sT!�]�O���L���~2����#��eȓ ��v"��K��b�^��LO�F(w��F H-T�ԋ<$�F؂�ĽĴ������\�Pn�)�e�}�S jX����2�|����(�)�F�'�����`�2�B�{ /�&O��*k\6c��ͻ-�R�p�a��+6���K�*l�IQ�\�"���2�B����SV�^�b��i��(��aϳ%�
+M\V�)!d���!��B'h��|���ԍ���(B
+,�M�Qִ�*R4��!M,���K ����x !���rH<$@� H��� �L�i��"S4z�c9�)�;��{ړ���]\�0?�]�)�%{��}ZI�a������9w@����j�� 잤�"��v�*�� X�l�[�B}�!֦^���uG��T7�7hœ�ޙ�%ǜ�2�n ���QW7��)�7�Ȏ,�����5��mpa\������~EOx�z���OM1g�fFL�]��b$���d��`��ث�N�[�|�[����3LA�5���P��k�cdh����� ��S�D�ʂ��6L]P��Gp�� ��rZu�"9@��^M � ���A�!�������Wu�u���1�E���PI���7"� H�������<����I����L�4/kU!Dyк��
+�e�_��i�Z���0�{
+�;k�A��j��e��_��)��� �'�E�\3��P��3�q7�B��zJ�o4K[k)hk������3$':o���I�Q��(��!������r\�!:!����L�[���1��^����x\1@ ���
+�M!��"�(c�T�|�˱�����H���� {#��K�=����?�C���z~I�%Y��y„f����+K�<l��y�C< ���Z��쁎M+oL�j�FSWU~�!+]��.T��r�Z������a������Շ�J���7�9�+�A-Rry�f4�?!R)���S�:�����c'���"fllx�mB����b�!��ب����É�e4("rR��t�.D1r�G}�$?�_���u�Yg��K�H�:sS��I�p�f�B���V���҄�5�[�e!d�^L1`6�^J�̛,n-��>��.�=�X�=e10&Rg���>b��-�-��`|�;��`>�4�0V�IA(K���H�ݣ+1�iڥ��WW�<!�ٚ�g��Nc��ȋh\ ţG�~z¢
+��;�lb���Z���[x^<���r�&;�%?Q�iQ �+ &���4�cCd�Q�s�D���e%�� ��F����xB�"z��g,��2.<���<��,��͌*�l%"�xJM�����@0A�����x�UmU���-F��_u�'����zh��=�ٜ��V�+_�IʵKyUu��;Y�����*�����K��
+�Ȃᓜ��Х]6 GHA��'���.��3"�Z�����~��7S\�fKABY��\�D��Z.�W��pc��uxv/ �?���J&(�~B�d�xBa�Bv,Qo����K��ДS�y�rj a��ޫR��߱����pY)��kI�̤���Y6����}TF���xb�!�*2�ة-�%/#�%0�"�\
+���No��lI��S����^Ǚ�S�bU)��K��6m��s��������$�Lz���3u4�-�;�e`Y%�� ڴA5�M��b��Ykࢇ���������J� Q�$ܝ gHC� -
+Fc���s�)eU�������*U��oU��F�+z9��I?t�z�0dl�&���ti�;H#ּ�9J� �X� ����#xRQ�sLA�/�����XݭX]�WFm��2r��EG���p�?^�f,�4�s K@���O��'u��2\�дpT/]���[}���7�,����'���?�����?�����_����������|������������n�����~��W���w�����������o~������O~�y����w��G%�_�5�����c���hH��1v��
+υ��2���)�?(�� (�7!��� <���'r��ɴr�+,�P�a.�e�.��;�.>�y
+��+I�b˩���;B����}Jh;O�/���� i~�e�RBd��r������R8cHA��=�X�$����4�Y\L�>�����(�"�D�������7y+.mT��>,Hނ<$#�j<I��t�VDR��B2!H�s��}Za� ���)0�
+i5�K�W��f���Fq�>��u{��"eɷp`�a��%׌Ɯ����AO�����D�7=X�&�޹������n��$�O.qb{�؃���D��� �iR�oR�l6��Cկ ��@YU��.`Qd6��`�{�e�""�R�>�A�����i�W�����sX���Am2^D��!9jr���Z�@&�QH���x|`�7�%�_���J��x<X4��GI�q���"=[���tID$�p�h��Ì�-�x���C7 �eI
+hF��u�x(c��Ż,������ы���qy�h
+.��G�Q���SC��
+ѫ��!�d��P�����PfD����2Ӎ��WUЈ�w[�H8K�{h���zH��#0���'V%���s_��D���n����Q���|����?��$D ��*#�U��.��.yr�(��m�Ⱥ�ּ��qmv����U�~W��Mfd)~�u�[�%���g��gK
+��T��ct9�����\\�"�$������H���"�=�l�RW�|��� 9 iŃS���]��� l�������B�*.=R�|>�U=h \���<������pᤗL��xt!\��>G�F$� H/��$b5���1�h�3��O�v�~?`��C�o�9K7-,K"�����j5w�]�)�r�#
+d��] ���n*T_�:J���e)C�I��[��uŅ�e��Z5����KZ�"���@R]�ZV��w��{N
+�v�9�����ٛ+�?M��)��d��D�_u�O��瑒���90{�q���8v_��m���#Dd��Ӥf�"��qdT�P���v\��u�d������4�����|*b��/K����=��O�7��69X7+�����!m)��M0���%�)�$Ԭ����~��xuٮP��O���z�� ���~�c�"�8h�;��� � ��Y%l&�����f;G��6lI{~�hb��� ��iy��Cu��K�ۖ"`���{u �c��:6�|���*PK!����tʧ� !����2��O�&t�U����wa��7C����ߣ �n &Q����U���a�����*3w$W߯X���l����mA
+�i�;��=&���Ga�����ށRµ%�܊�%��ރf��Gjǯ�5�} ��Xa�@v��uS �+ᐰ��1PWy��-�_�C}7t�`�TdҘ�n�6#-��#*2�^Z�=ql�ȿ����i��3�������砺L�!�OfA
+���͍�M-8Ő��Kƍ�)��I�;J��Α���}��\��.=]տ��E�~+4�P���KU�Wmpq�KA�J���D����'C�u8�6� �^J�'Vq}b�H0RVX�GJ���y���
+{L-,�;�B������/;@�=W3�^R�MK���y1M�����צ*� ��ۏgG�o�T�/9�l�F�N�R� ����E���]�R����W��W
+y�u�^඗�覙�� .�p�0ir�0�d���UzQ���`�(l������Y; ��1x�#p63Y����4�����]0ʤ��n��Id̃+2�3ҟ���)����*�e~j������6�꯳k��)?�s��3�I��k2�ih{�5~�'�Z����;F���#��Ě:����/���ɭ����2Ї�k�A
+~)�>�Ct<8�� j��ΰ���(�H*ֶv����͎�v�P��$���G���.d~UW�K��c�
+�|?���
+oHDi��Q`)Y_awx���upKT�ff�����>"��>B5 �8�Ԝ.�ݗ�F�c��Q>`EjR; ��B�
+)�׋���ͬ`MA5�}8=�� �� [/4�`��C�*� )��_�K)ч
+�E��1�_ �:�P�v�:k;W�/�$M�;���~ZF��"�E �K嶄��5��;�va���CTn�5W��X�A���] �m�$���h���v����� �95B�@�\"�p�m��{�l��dEA�{��0-%C6��G�w��ĞՕ؏��:\-�Q�!�P����~`�x��6�<�QRa��D��6A�η���gZ��$x��0Ym]��>p� :��X2X�+y5*U��ռb��9Ic���R ��B�&�'�Qtb�Tj{PQi��0� C�H]I�+��Ps�=�� ˫!VY���b����y˓{�\����7�Ce )!9��P���?����ڟ�����&�����ܾ��v4&i���.&'aY5�*,�o���2��c��B��C�,�ޛ_����ғ<Òk���\����хԀّV
+5��W����⒢��}�E�;S�r�,1�e�fY^�P��-��cO
+�=��S9S�T��=�"��~�K=������ĢH稙��OH0ו���nվ����Sw�w�*)�A��ݡ7߉T A�ۉj�� @)x���\ mY�7�z�Pm���� #��G8W��!֓Q���b���^]��>�L]�r�~�‘ʕ�P� �M�܄eSU=���C�k����C�{�oT�\J��%U�(��d!��aIn;W/9�(����W�{�K��<�Cn��I��ծl�1"��S�ڥ��1ΰ/+g銒 AvڼdyU�VR򎒧�"�e��wݓy5ґh�@H�AtH*a rՓ74CױR �: #�^A�aF�Q Ry�zX�û��b�
+��<��R�8�$�z EL��B�F�Rq��ԞrB�|���B牔���X�l�W��,����f1A+V�Ӧu?�[<>��h;�x������!�# �#�\W(C0Kþ#��sY�S�p@�hc��"�/P��۪8�.;���)�&W\��C��E�(l�%�9����
+�*�sEK�V���3�Q�).I/i��
+��
+�̻t}��7����
+����8A`�b0�G`K�/R1�)�w����\��S�y>�K�
+�bwd��~k����[����� �P�q� Vy�A���t��1�$D����H�����R}P
+X�ͣ�JF��� ������e���<w �Y< �k�g��T_���G� ��b{|L�����_�"ֺTFJ�yk��LU���̔痱�#�
+�ʉ.1���&�t �'L��ɴ�-�Et�y/$�Y@�`k?�R=���T~�( ,����TmѪ��ʯ��F��{Ԭ�k&��5�T~���+��*$u�pqX+|G�-�C���Y��"G3w�����/�_�d�!����/P��Ʉr���9���m'�2G��
+���B����)�1�aj��^($ ��!@�*�%(O�G�W��FL���[���R���M-;�=�J� T��D2zh,|y�
+/P��+Hx!v`�^cAЀ%P�[#Ģ��g 36:�S9Fpa�������7�Xo� �'
+�� l�O͌(�e
+R�i�/���}�R�� � ��fA噀.�sD��X0��(�&u��ґw��Mh�b�,��F̻��y��F� s���4A�:ɥ� 1�GJC�6{ ��2�ʜ!�Ez
+���^�t|v%u����gK*k�8��#s t�t]�
+R�l�䰊�� �_�CV8�Cᤴ�:�h%q�u?��__0CQZ$M�wV�?����љւE��{ї����n@�ޥy�b݈�.rD�Pc3�m�wܢf�T>A��)��dk0�/�G{2�9W��ܷ&��n=
+��Z��h�T"ہL���Os�z���q�e_Y�/  *��ɰ-�GPQ�wݾ;9��HĪ7� ����X9��Dj�����Ք훹�2̓���¨I\���sl<.Y�,���w"{��ΗS��
+��ؿ\��/�r�] ���X�R�Oj��d�:�4���*�pxu��}TQ�Ϣ@א�\�-G��^� b��C��XBô8�L���) �;�(�,�\5вw!�`�������o�^��i���,u(��e�B� ��+�Z�Ԃ�'��"��Ԙ�d������� n� �g$̂��ȄD�P;�1���7-�RJ
+xm�sG"�IC%�������v7-E����d��ဧd$� ��ʟ�O�|e�H��%(���g��9"�;�A}�$���f���;dogDo�"{��ߐ$�
+T �Lq�?D��G६׶(�#���%}�î����_�UF=���jo�����?�K#�kELl�L�@>T��@�#�
+1�{�Ű{�I��|ҫ�1͆U��ң J0j�Σ�
+)A���&Uv4�;�+�I�2��\a��9����N|��q������� �I@�de]�y]VnWI�� ��'�� �^�쾉����gt��fDZ����)Vċ!L�����wz�ln
+[������gѐ����T ���Q�Af�@���I(�E��_����+,9=q��3�K�΀87�z�U_ C1א�%9�i� �ʁ�X�����+��/�2뼔�'�c����O�]�����xŘ����M�����,�*�)t�q�V�
+�ȝ�YRl�4w�4�%���� ��y�SG%�����uz��+߁҆W'1 q>n��\Q���aر�����'E�8◙�����,�G2=x���5���C�"�����`�_��qeD~IK����"��fm)��'������5�}�n�'�5kl#e^�t��ˏ�J0�e�bŧG<�����.F�8��(]�!3���u��<�������y��F U��g�.�FN
+�@�V�빃�.�<y��Gg�D�@�N-h�;pv��"�G�Aucf�6����/���IQ�VqC��$7Zc������YEw$�,c4�]��>+�H({��T�;��f�$[P����i/�����]�&�$U��׮eU���-#�c��� ������J'v�@T���2��XPviQ4z ��&=�B}�� ʋ� Q﷟M-�I���l?�$����A޹�.�C�{T>�85^�
+!��]Ԁ�!K�n1%���>?�^��.�O��������4ChcƙtOaYÁ�ɦ����6e��t����,S.������%B�d剅�a�p�~$�,ݻd�f�"a�GIP���"�w���-<
+�V��������k/�MKB��N@"�s:T}�ܕ�L�S��-�faG~�IG�l�8�д��$yi~�~�r
+��ݓV�N6c�{�om~��ا�z�X��f����?��d��T&�/R���.��b_������%~5EZ�`FSU��b���p;'q(u��ɲ,�~���TTo��2��MA��-$��D�rX{��,���\Ҝ8-9�}%l��Cf�ڙ�������%}��z�8:OboG$2
+���ET^�W?�������юs]�g����'P~�0q�o��a��Gꦀ�l��RA���3`�IV�|��F�p����,�N�<��J��!Hs�hN�DjͰ�R�������Wj��:cJE�yH��t�$��Ԋ�"?ïMe� ~����3��L�b�� ��PM{�
+�E��]<5��R���幈Z�S��Q�ՖwJ��Xs����Иe|�[��cI(�X� �t���J5�'C��A���fPP �[l, �3�������a,�C�
+�]+n�ah�����2�A8t$[�en�2��� BK%.kg�(�PI�Ӂ�n�����*���_��x�Eұ� ���W� �)���?uɶ��CZ�d��J��u|^(8�fQ��wG�O����%bR� 2Q��e'�4��)�Chv�,�ě�/�C�( �C�� mb�p�� �@�"��~J%�EM�Hc��t��K��Tx��hx�N�`d���C�
+�Hpٽ� Q�W��`Kع~¥ƾj�!=�f�Z�DK�O��L�Y�88n�����t��qZ��9�m�-k�n��j^%L_��vH) �R��v�$~_ʗ ׀ޖ��T���@������KL_ho�/��<�%�XE�>��� �f�埭����[�M)b�]LnC�@ ���7��"�A��dž�bqX�jv|[�����'6����i�1"�q�v��Q��K��+2˦��
+BV�
+4�
+�+�f]�uײ�c �,�"tP�YM��]�Yʬ�n@y_:p�h��{]�1�J��`cC!�ֽ���+J��5��ʒ��{���6��2�@�+��`F�;��x@ۙ+6"�!U���@��e�Բ��dw�
+.;m^��K�:��V�Je�v����|8�{������iA�=�_��̣jx�D�,j�)��[�K�eI��G67L-L�3����n�ޑ�B���r`���&����SRW>`��bnb'�ThZ�q:c���J])(�-��P���tIq�n_�Ot:�D��X��)p�ML�F�83�i����V�����j�(�oj�}�"��qB�L����"�6(+�)V�.aD�W(��h�^�T��I�B ����J�ډO�~���b��cn��g�#ܔrhT��~�]��j���|��A��(�����{��ڭ�� #��Nb�
+��=�G�}�:�bEWa���"��n#2�+������5x!Kx��f�s?�r�9#:��ň��*�B�ʴ~0�Y�����wl�az�x �d��<f���[�k9YV�!����F� �8�n��q��:��@B���o�g�wT/o�v��sAK� ��ʣ��*mH�& �T�>���/�F�R�|�0bH�{:W�����ߵ�ry���9��S"s�%��/���:()��u�K��*d����t�g���-�W&��=�W�`�}̭�r� �ܦҥ�|� � �8J��( ̏�$R
+$u,u���^�]yB�}j�B(���b�!�Tn[} ���x����B�z5�zX�.ϸ*�
+C�N�őudY~"�A܎[]�i�Gد�s���:Dwأ &[e�Ͷ@���|=��>���h�<;8^��W���0]
+���wG����J?���u�Bq�ʛ~pR�
+�2��ʖ?O��+��h\�I���iΩ�|D��4�q��� ĝ�z�� ��E���n.��� F����ˢq�8����X7y_��� Q<�s�<����r��K��
+�9x��n݋]��snO�~�lܘ����+]d��:��ţ  77O4����tg[���Sb:�I�B *���h쯓��|er>x��^x��b�+U��9�+=�#�-�uij^�
+NPO�5Ϗ�w'xyi���bYqiT�U�N�SW��� �[6^�> k|n�c�����w�^�A=;�~�f��<���8�Wk��'�1�{`j���q����ĸ���rN %�K��g�h�1C
+��ୌ���6�W˵
+Hٯ�UO���*��P\����A�1&��12�\3�H=��X�8i���+x��)�ΉF���E[��#���*���M&��� '8s��Ł3��h����( _���7�`�+�3���L7��6�s���>s\�?�)�z�Xqa�� ~W]��^�}�b��m6_m�{%q�8��C��Wϛw(���;�_�w��!�T4����k�F�ع�z7��ts�yi� ��U�|����|��^_���1�c�8���|e�������������������7�9��y�L%��zs#�'qS�4�"���2v���(�_
+��ԝ�<�'ڮ�◰�;F8��"��x�H�D#��hl���2c��Ѳo�h�Dc�o�b�fS�������k����z���ij�'��#�P_�~�-� j)�Y{�Uc���_�?.׻9�5�]��9pz/�aM4fј��>�l'���Y�ZN�Wl n9�Tp�Ƿ &k�jm���B�����9mnb�cl7��;U��F����9��|���Ph�uA#)ϙ�J����?gs=ƹ�v��D��}��'%����WnV��$�[h9.�7K�73iO�+4��W��+��rN�GN������Hŧ%�z\ֽ�����\�g� �>��}D�J!�oa�Bܾ�e�Eh^� ���y�)�϶��ʟ�K�����cȠdg}�|�%ϔ�Z����(4���휠?D�d<Y��=3/me�5��1Op]��P��};oq��� ���0@�[��|��nأ}�]���<�kp8�G3��9s��𠰗��eVB-'0X9f�hJ'J[+��W�p~q���LjB#:�o d�9m��[�G�s'����H:����殤#��ļ6���!w�'x��bC�qEn��
+� X���W�K(������m4�%'�x6�tQ>���PN^��s���;>�2N���$˒���[���"ª�
+p�=�k���}�+����ɸ|\�@z�y��ظ���g��A���)9�a��;�)ۻ���:�2�=�zy�DL�]2���,��v��O�(R��;����A��:Cɷ6��X4^��H_���2��|</�.<�`d��x��p����e�%����,�a� �cw�Xi��<�c��E�U�柟/=�L*��3֜=��S�z<�ˆ372���
+"�w�*���i�i��V�k.0������x�^i�y�ȭ<�J�!=)|J6u�ySWɇ"c^7>-?+<�IW � ֿ� �ude��w��]��q[/й�����fc;1o}�v6�%�>�6��9��dN(�<���V��{'n�7��{?�g��s�ԅ�G�E˷�<���$���f�G�g��3���}�Ŵg��@��9끷����w����q�s2���0��%�{�w ެZ�b0���
+E��!jYES�̩2��}�� |���F<k��ԩ>v����L��4���=���b�� �:��Hr���n���<��]½��+u������/��Z����S���0YF������Z����DQ�$i��8�MM�jq_�Q��}�QO�3S������ �O ߍ����Q��B������30��\R�� �n�(2��3 �W9�\�!��ٕ-͑'�'F��z]���}���9^տ��SA�6'��"#������|�2EĉM�� �Oj'g��E*S�/A����K�$� s-�u]�g�A3O\�I��ch�Hz���W�c�@�X,, �u?_�1\jL� ��+���I��뙪{}q%ڕt�u�2�� d}�ؕ�29���ۙ��� E=\{բ���m��mf���X=���AC�_�j�G�����^W�~r�'��/F=MO��Ly�b��1�Ȭ�+�s�kM*�C�aO�姜��p9�}��(g��5����W�R͚+�Y6�5�n��q"�Q�Q �x61������Ո|JN�=�*�
+}y��·��8A� �+ P܋�E����Πo=�_ש-�@
+��ٶ��g����˙� ���IS�,9U�����;(O��k�YN�<�kN�L�a>)�2�w,lA9ܘ;���1NPj\��s�'�������fAc�s̼��H��u��h�M:��9o��L)A=.�_�g}�����s�I��m3�K�$�lL���SB�������i<�2=�|��&��~>�|6�T��I_˾9U3��D3��x��w��B��A��8��T!c �8�H����rYgx���'ȒCw�hl9�f��kJn�+?����8T�!�dt� �G�'xm�LJ߄�u�n���5+�$I��.!� JN�|s�إ;��'י<"���,d���*�<��V�c����~�P�sS�5���m�����,o�_��[�y,�0�knN �_g�>�?n��w��ו��dW�����䥮��@�IY=SW��*���~��V3�U�*��V� ^�~™�2����E. '�*]�#V+N0���F6gV�&�g �Ȱ��d����]\�t���N%#2Κ���J~�I�����
+��/�b�H�렽ƻhH �o���� ��'�ȓ����H�}�}Mۜą�F`��� r��R�dJ4�b�CWT�8� ��n|��������Yp�vE/���p,� ���GC��u͚[��Y���я�9U�צ�y�]O�Q��Pߣ���,_29I�9=i�N��k��� Npb�e �r"���^'����Z/�vئ�� Q���,
+\��g����'H(��t�'�y��o
+����/�z�_
+A{�L��X�Q'xr����^�
+���~��W�f*O�z@f�ߧ��
+O� ��I���H �������_7��p��Z�p�Z���h) ���G_�JW7��NЫfd�~:8;�X�;��L4d2�+� +L��K�^„���_�V�P�L�;�XU$Fը)������bս �4M�=8�D|��X�K*v fP���<x�6
+�?`2�N2a',\+ ��PNK#�2Վ>�(�� J&�0cUQdkZD�������b��*�f����PPG���G |�j���QT��i5U�L��#`H�h�BBx*�2�x_��}���ʄ�� �#U��23��o� �/�w"/f&�%�sՍ�YCxS5�8�F(Xg*�KU6��� ��(l�õTTW ��.� ��n6|�@M��2�vB���TL��Q4zv
+�T�W��9a&��b�h(�
+3��&S��/��㭎��Û�7��5$Df��Vi FJeB� �蘚è�5�jd�-��Jn����͸Q��FFRM���E]Z
+e�x U9� ��J
+h�'�����P��UɍL��j,rtu5H�kh F�� 5�h5�D�苾T�%-S�3S��5k��`5�ve*m�I�l����R���9I�w�v3hоf �q�/՗���]�ƒ�T��`W���y��MՁ�p�L�P_k*b�G�a]8�A��Z6i�z�&����Q���o&�̔ �%U�FPGI�Q�o ʽ�p/!�/S���5�L��T(���' e�* 2��T��2�S����~�Ѓ�$Tc\B�i
+EhJ� !
+�,�[�+�z.�*k[�Ru�ؾ-̭��>��T:a�+��Y���p�H� d�
+ F}K-��?
+�jjbҗo�~�����0R�\��H�
+)��@ß;Дǀfqqj�e :�T[̠Q8}@]P[���M��k���MRoi� n��X�P*Ə�؁��N���D�k �
+��܁���N-y��{+�5y��bۯn4�E�ɮ�
+<�";U�.����'U���E�6�U �v���ڤ9鏵܄󐄍��,Z5xZLф��XP���X��RG�� j��*�U,U�o&$�����j���N����D|CaC������D���n�� �\���P�P�al"f5��RO���}��Q�2SUV��H'�:�����kՇb�u������ ��}�\������cm��]5�
+%�!���j�����%��m��i ͌��Lj���P���<�PL,Kg ���u�P�M���j�T�-ƍ�`˄z &}�c�����4����z�9�꼘܉�!VB0R��F&��S��s7���Ƶ��?74I�x���X�J<l�/�j��26��X��R�"�¥��S"eBm(�'�.e��K��n-��*�����p�� jŋG���'䙊�S]�,�����~`M�(�@?Y���������'6T�
+n�̌L����-U-r#���%4��@1���RM
+�:e_+�/���~��T��*�g,�% U����'��Z4+�
+���M'��4�X Ӽ��X![�*�-T��D�1�����l��� N\UR88L��M�����p��p.������So��[�v��%���/u�T&�� u R ����)�A�?Bd���X�p����Z��^��F��������͚�o�0!3Ds)N!�����@+���͛�G��m�� ��k�W��Z�:�{�W:��y��y�������Q����p�{"�@o����n�������?��/�)D�@_o����9—��-613u�^�T�D^�TΨ
+�C�c�±�K�@+�[���G���JG��g�+&q��_0aYcؐ�QxLb
+'2q_P�Y#)Ǡ��_��7n(�a�M�vZ����%�eA9!Y�$V��,���m��$�c��]A{jY*��nb%��9���r�%��e�zi���hLѿ7YҒ5�7I,m��S�� $�R+��˷��Z3�Zr�~���]�Z�e��FbùkQy�����73���,$���8ڇ�g�sGЁ��(��r�Gˊ�ԲRjo@�mXe!�T�!9��ϡ`ܴll�uH�W�t�Ϲ� �b��A�#mc
+A榳���ir�����Ђ�\t�d>�Q��)�̇�E�<����̇e���=Cn!����/��Nf="�1S��sfl� #>&w\C#١�Cў�9���ĺ|J����po�y��IJ��a��>4k,�=��$ W8����
+G_]��U��u�&�u/$���)�$3���S���IL`�p�9����\\�d>�~�;��L����#2��#A� o��O��IΆ"�NŇN�3�,ds.�C��3^1C(��� �\B�4.�n��2�Km�Å��gRG2�ICA6����lJ�t�S���7T��tL�D6(g4�8ԆGs��r�Fπ�9�a��<�����'����S^a�����||�t:(m$�2� ��"��y#�<uXgO]:�a2�8Ēq�Z���ȵk�7>Xǚ�Ֆ3h.u�c͸km��H�l�$Vr�~r��6�1�p
+Akޡ��B)�f�nZ��:�c�
+���|p�.0m�7 �����s�;d�Io���w6��c6�5.��=kR����%|���\l Z�S� �_�{yG f�b�2q�S�$�ҫlj�L�s��<��)��D��}S��~IC)Ϙ����ت)l|�T6�h]8� J�F�
+�E��<��_�l��w̤Ӑ}G����p ��p���M��N�]���N������ �9���ӆ�>éȢq Z\r���o�pЩ�;��� �L�m��&�
+�,��۾����Y#[n�������V���5�_r}l��ꯋ�)؏�� ��+2���WL��yt@�2�y�X:�c�{�&m�l*��B:�}]9��.�@E��Š�R��_�����D�d�;��ZR��zj�Ƀ��1�_�0�kXk��`R�!'S"��1
+���X_��d�c�0yc�����{V`��>�D4���{_)j{�&
+N,b�맂|b�ܨ:p5�!��'��٭ ������Gxv`~� |L������Ⱦ0Ⱦ�Ƙ�2<]48,�p �CC��g<o��������a�{�]D�d���C��XS�����l�]�7�l�-35������&r���M9������Ä�e��Ϡ��a;g�C:��:�q�{��)h�g����H!{G�9"�W���I�e�~���ڂ� �dž��}J#K�!΁l�ցSX�c��=$�t@�H��'g6(k��q®��
+�k#�ԟDؔ�ʇ l�3�E�1������g#�^<�Zd��}���=����Ekn]pt)��5�A�=裢sFT�����'V��ǫ��������)7�!�Q!y���#�����5�1�鉮] ~!���k�
+qK[���O�#N��A�Q�Hv�"�#y��n�#�c��,Z� ���a��t�C:���;�������a\`�h�
+�ߨǃ�[�=)�j��M�b�>��Cx y��H�@�-�:�X�e,�멣���il���l�y����L�k���!�7�G�� .�p����_���%����!Y��� �̧V�`3[璥�eĶ'����+��_� ����� �Μ�x�[K�E P�E `��'
+4�F��]�����*=)E�j>�K��_0I��0>F6��B:���슱��| �7�U|��)�����w�O�`�s"��������<�O�}Ӈ3���`���UlE��!�?p:&a����tP1�֌o�H�ˀw�',��2I�'f�rG���mC9h�n1�����c�@�M��Kp(��}u|T�����Ψ��\�lƞy�@/�႓F�cc�'���#8��Lr�4E���O�ľ�[�Q��@�,9-��Α
+��TH�H�� �Kt���tR�t̟�w��cK��6=&�� ��0_`'�� Ɇ�˩���Tb�4��Ld�$�举���2y�c:u� *8o4�l^�9)�z���;+���o���o�ҋ&�>���s�����K�£K�� ���i��i$����Z�-/�a$o��x5�3��� |��v�&��w�u��TX�8���
+|z`l���� ��|���X/$�H߂�L�8<��%bĄ��mj�5�5�W�t���%�ws ���d���81[2�(=�O�~��=�HI��YG��N��"w�@;�$�q�N����G!�?�9Ħ8$�\p�h>�� �+|b� �y> {4��x%�N����~���p���
+����JAl��)? �O�~9���'�=�Jy���k�@���)�|o9��>�� p!�U���B�e����~�s >
+f����y� �\|���蚩\��%L���\`�(�٠�D@� š|t�dr�
+��w�����D�E}*��2��"���ͧ
+�PY��
+]y����r�<dD�x� �ރ�`y��C2���1e:�S�O7����{z2��B2�vT8Z�=b6�:V�]?+$��A(��z� z�A�|Q/�0'$p���|��%ʔ��1� ��d-��u�V1�8�bvH�
+�^&�f2��̏��*�ހK�;� ��>�@Α2�r��<��9�r:T��a*���(8}��G�|�0�2G�5=�x��G�|+|u���ڷ*Ύ�w�w�_��n� >{�/j�*�=|
+:�j�^G�^1fZ�3��}��U: 0��q<�)�T�!.��D��pn�#B���
+y㍯��������Ķ�D@�H2�t,�yz������`��:|^\R�t��S����1U~�l��� ��� Oe
+���醻+��5��4v��� UxZ�J�?�(>����4�2O,�c���VT\1��_����-֤l�*Ϡn: y p��#Kت��٦�ud�E�rG�b������q$vo'a��x����7+`-��g�Pa����a�5�/�8p@�H����*jϛ�M�W���#<h�z��B�K�Ydߑ�缣�(�� �Ny
+�.;��2��Av��9���:���o�1!���i�QB|�%䊁�|� E��/i���� b�J��5�-8!��E�y
+J ��ל#�]�����Yد~e����&�v2p�EA��mh�;��\d�x6�u����kanmݫ��n8�]�N|,�8�fs�l�k��In���=�
+`v�3p�.�2�YL�웏� �
+\R��+G<��f�q�>%�+p
+|=��[fL�9�Fk���oc���gĊ w�&j���n
+��u�����~4���*���G|K6�>��3Vx� V���W@.�O�P:�q*Uxސ��ekAa��x�� ұ��!7p��E叧c�&A^
+]p�@5e����g����K���&D���n��<Qۤ�/1/�W�}�l�хST���b3w�㲎.�K.c�
+8,�x��<�� 1�0��X/��Oy� �JɪKf�����<6��"�L���+���_�%' q �;g�l�����g��8�'dψ�[ߑ�gd8n�:�+q~6��R�QEg�D�U��D�Ec�� UrD�2Q��4�u�f�!��{>ƴ�fC�'��>���/��[��Qi�3�Z���{���Yp�
+o�W���L��ZF}I�:=���
+N.��,��X�m@��Oײ�'�
+��3��Wq���<��}��/}�E
+y�[c��_�b>nP�=V��pW^�n{�J��뗒��߈��tz���Y����*�߮�F";Go{�aBc.j�Tyu����k�:�o��>_��>��e>?Ϣ��|~�E��.���.��p3��I{�OOsy�����[i��/���Ͻ��wy~�����R���\�Yw6y�EO_�Ǐ����N��V*�?,��v��]�����;����G�:���w��=�����b~��b�= �� �ot��u\Hc����������r���s/��_n��>D�xNj�pÏ�x��<[��W_�d�m]�ih���X��"��sa�>LU��U�|�Q����`��dp��r�'�#mn���͍��S���Y~�g7���(��L�sG��c����<��s��k%������>Y��R��1���FhcO?r�=w;Xy�����'��#[������}�Rq�M�{��^x�Ý}�͝x��~��Aq�͊c�)d�sO��;w������w3�_])q~���ɮ:ח���ޝ�d?����Ieov��?����?�{��۽�\���l��ӽ��=��A몃�W��w5Ty<i/��p����&Y������m�P8��k�N4>_F��`Noo� l�<��t��O��ŏ�v�.8<=_j�b�ӋS�/~�`:�#�W~��r�w�M��֎��7��JH�Y���3�;������^O��um����X���k�`��}=��ˊ=������v�g)�@����=fA��Ϻ=��W"�����R�u#�d����2ۏ��ϗ
+�+�zP�e��F|��qeۮ'���4V�Hn�^)s{���7�{ߓ���\9��C����MD�o��u����O�!�����dg ⅛���V+�/�.�X"?�+�|ґ���t��5�o;��Ǐ��3���Zƿ�ȡ���_�lk���,�^��'�ԝ'A��_]�W�aN_�(g�݌�:�u-���m̶���-�{7Zw����qkU�����;I�9��I��u�=�uίW�?�)�~z��|~����$���������';���}_ls�߮��������w� ���1���W��]�����=��gv#���¶���oxjN������jL����;������D��X��{y�?V�K�-U�_Zl]z}���G�f���S�.�N�(_��e�w��~�Y�UW�r?�>�~n]CGBU���&��t���@��WK6�?̨(~�X��W��S��Nl z߲��Y�9׳�r�d��>�����X ��M2y�u��=�'�/�^w�}���w�X����l>��ӿ�L���Y�߳���gG�W���Ž,��O�7���w��Mq��-.�Zn>ۻ֢���r���ثO����V���l9��Mu��7u���n\K�%���&�p���z���яYnO�W;>;Q���p]Pw�ȮҪ�{�e��K��ގ/�?�����›]!�W:"�.މ,��Vp�^X�M���wËn܈*>z3���fBY���*�G͕��(`?tf;�:Q�x�_~6'z����kC��Ն:��e������dI5������J27_�o�󘗏S�ϓ��� �Ϸ �o���e)��(�{{��z�2���?m��+� ������������K;�rf4��mw|y��{%����J�W�]^��\RYp/��`Gt���E���Vx �<� ������SQ%Gкk��P��VBy����Ի9����-n�2�E7����]���rG�o��r�.���ݸ�d��J���k%��.?y��U��w���n9w���+���l����)9w����6�?�Rʜ���Os���&�?��N�e��Ġ��F�'{���^A��|�ݻk%�/ _)��.���_Uy?���q[��z��A�ۋ5Iݹ������Ǘ��.�ρ��%ߣy:w+��쵸�S�b�܈-���\��lg��q�;Uy�#���ԋ�q?���(��}/
+�F�4$���Y��*�nV�wV�_K�̹�]G�|o�c��uW��+�Oy�2k���Vl��\�� �W}}ᝌzw�lć�q�/�n���w���7?�۫kSAG���{y;}��mq~y��~t;��}+0�~a+�|�ݍ,�s/�d������Q%W�5=��py}����u��^7�w��e�[o���qv�O��t�T��ͨ���T�z%�,�nY��Æ2����=���7��^�*��t�ϻr��'Y����=���9���C��2��&���Z��*��=S���T��Y���?©���_;�\^�+wxw���Y��U�G���H�����}p>��ލ[�~�m�>1}Kx�h����[� �n��%޾��x����+���^b�󫽥V�� ����vӛ^n��^~�^��}/��c���/��V�� ��H��HQ��s��ǽܦ��{�����]뉰�ב���`]̽�Ʋ��u���"�����ws��]��g�샻 ��G���Z��:J�"�V�T~�r\I��j��OW)��.vx}���Ց������YM��u�O�*��J#_��a^w!�y�����J�����=UU��Rd�2�{��W?E/~������J�>�m*���1� �zWX��͛��n^�����k����X�z3�ī���������d����NȎ��]/bݞ�I��Ww�R|���%G.%�ᅵ���Pz�r\鶫�N/��}w��k֝쪓WcK/\�.jG:�������!y���
+�u��+�����q���o�A./��o[y�;��ģ��#�"��S��n岿��{h��R���o<ݻ|Kt��u��ګ�����$�+�%F_}'16[)14^!�7�V��x�D��B�L�oMԉQk��{���k������,*�v.�|Ϗ�e��ʫ�g�7_L.-��S����OW[��M���;ŮOT!\TSx3���rjն��;n���R8Ϧ�<l?�/�v'���o��Š�? +��,�������;?�,�JG���JNѓ��/�./�"#�}��� ~!Y��l�ʕ�d��N����7�dΨ)�ɒI�I�a��%#���L�ѓL8G�7f�d�#����$2K_�ʌ;�֟��zsG/#�_A��^G��O�v/���_N��x9���� 7#�N^�)���XQq3�*�nN]�݂��˩���&�V_M�,��^����Rŋ�C�wo���*;�C >�Gk�F��w��z-���}���ݣ��[Fn�=8~c�U=�?�o8�?2�c�_�W>����M2Ko�d��/%z�g�w'&"*$�>#п&H�J���If�ѓ,5��|gW��<���5����]g�s��������o_e3]���ש��g9n��V�u�V�\N-k��\��RR)ҋe�Sʿ�[�������ː>.=})��Njq���7�J,/��Z�����ʷ������ ��|�X�埽�/��V%�8�[.���W�$s��I-�'Yc淋!e�x�ֱk�"�gOד�� � � ��Jt���轴���$Z�렖������i㶡��i��K� Y��D����� �wW�J��V��.+��YZq!���jZY����mSʶ_H.;x>��̅�ң�K��!��
++��*ֿ��򭭻dޤyHG��g��J ����'�'����Z�m�J�a��F���%������L�H�D�(Y��1���{c��r����x<�U�~>��ⅸ���Ie�Wː�)>{%�(�N^����)��A6�_�-9p5���ZJ��Ӷ2���9�?��b��;���ĕX���ku��S��n�� ��a ~��� ��a��"��~�����m��_?�v}߻��n0�oZ� ��,�z2n͞�[>���/ޤ*���sx|�������Ϊ�����{�E�m�ޓ�D%"�( Q9CU�b2�DI�3JT$�&0ۆV��YQ��n[��y��}κsL���s�y���y����S����#�5�������9��b��1l��� ���⦳��ȸ�/=q1������W����]�į��J���X�/B�� ��1 ��}�9��~E��߯�و�h��
+�4wC��b��^u�G���79!o>��ZP_s��)���F���4A^u%ν��� ���_4��n����9����[�s��ڎ�a�6��B�V;��b����ď?��߃����g��M��.�B���(2{�=����\u��3�
+�jq|oh�S�����A�w��������=k�iL�~��.���g�6�ѰB����8�`�d�c�Dd�5�Ҝ� 5l���l4�� �\��W��r�(���^��yK��o�6+��
+�p�&����cOa_ٍ����w`�z�zvó�i��p͙�����!£��i�|�h����el���+��?��S����GNEc �q����d 2�̌!S�y�t�\d�7���>�=3g4eA8rڭ�6 ؊^ ёOT���Q ����%��p�{q����Œ�_]+�y{�xǷ�
+�������~n��;��s;��r�-,����?���� O��2ײFF����Qx!����n�}�D4F�����Lt쐩�4v��d�s?�<���R[���/�zc���ƿ9��z���/�ڮ](h�u)����m�o�^���z�r~��k���?={-� ��t������<s����\���#t�g���#������x͵&�qx�,M��x3{d1~%��ꎬl���F�,�����;3����";�Z�,繁�a���ӹu�kI�ryS�K� 87kj�^܀��f�=^�� ��n��i|p9�����F|� ~? �Kc6��,tıu��|^�'GϠI>���sP�d#�����B�Y�E�cW��vJ4}I<�l�1�r�YN���i;Q�Ƙ��q����J�����_ ��'��o�To������m��m�~�p����4|}3���Pv�����dwܿ�� rR�_�͢��ј��Er�Q�g��1���� �O�����ԛ�,�g"s�9�7�@fFvx�-E�ˑ��rdj����x�`4�F�&ύC3|ʑ}�a���_9l]� ������C����{ Z�q�7���r0���Wrz_���~�(���`.�%ʷ�>VL���?���sEd� ��[ c \!�ye�眩�D������(�0a������
+�����z��r8��8wλ��EĈ��� = �ާ<}�G�����U|������]��1�>���c���Dwdn+F�]֢9T)�M����Z�0f��C�}����ժ3x|��\�K��-�zh�8z��\y%�W5�-�ۣ�"�pe�s疟ƻ������/B��׏)܏W�|��W�M+�Ƨ��-Wm�ÿ���o��_���>�[�������ʏ��!�?�V�:q/Zq�y�w
+�*:)�4L5����!0ӌGN¹�4�Z�&�
+F6�h�G�����^�ќ�h�=���vG��h�b-��Ԗ$��t�U]����qWp�y(��B�ɍ�j�V��ʤ?��.���L���믳}�^���+��
+b�M�� !���'��������9���&�w_U1>�KnJٝ_�p߼(.���chpÖ⡚f�Ώ�&[/��R�6�{�y���Do
+��\��. D <�U����hYl��ҺkF�. 3=~$b��:����e��O�d��!��iz�߅5�"���/���'!���u��k!ث��x߸z��m�K����0��qޞ���B ��}~�˽mQ��&?����`G����1Z�����h��[����E�;���XF���0��6��M���<w#r�;����+C�n������B�߯B��/�����|KX��Fp����:�A}�����֡†�{5��g a �۞�Y���`�uK�=B$�����e)~�W����F��S@P����%���A%�c�z�81u���3��W�o5���0�����D����)�?I����7�z��bdi0��X ����yαF٢)�xdԩ��� �?��| �"ĉ�"$|/D�>ƾ��@�(�����&� d~#Ċn \�i�K���N\|�J���^:���ݷ���t�K!�o����֒m��?x1��-7�S��gSg3��ʏ]S(o]�
+yt��?�M��э�r`�/�e�=eC���R��U-������t�_�1�i�� '�:z�4����@��56��_���&�����$�:+��*9m�ף������>�����v�Nj��O�d��n�$�D�梄՚�u�Ey%�~M�l��
+>��'%ܓ���C�%r��)��Ԟ_�e�5���L-�����7rŹ�qܙ�a��g������?����ٝ��ʕ��;��P����'�u��&M_I��?�8f̞+CK�
+5�3���N�� ���$��B��
+1���?�?,�þ�{C��'O�x�|���x䭗�ɵ���w��?m�
+{����C�hH�}v~7Ƿ����炓���j����4��z�_|�R�� ���7��b" J�� �!J�At�@?�ۊi����s����Tե�����d ��ی�����'�I�$Fk��t���R ���qm�B4�A����Ԝ�ތs>-�v}$��������u���"�o�*B>���{����̃w����#�sS�W?�+<)R>��}PP:�|�}���R�JY��%�����)n�6W�Va}в� ���=��爐�{�d�mc��� ���i\���]����WKT���G�R�/$Ԯoܨ֛����&�&7���6SM�v����l� 4a�+�훈�'����0��[����jX��� p~�^|_�?�G��-o�`��*E��`�Q��1��a����+���v~�0ir�b���c�8��
� ��s�0�^q������Qd���;?�':&G� K�-Y��;��ڃ�zf���U��)��}�^~�i��on��sv��?�З>F0�ަ���=��U�n/���X�z���ջ��cFx��^p��k�Ov����'���m�۟�����-���~\":"����20��h�r'4�zZ`i�d^�(4~�n䆜1��e�O,����̕�ъ��l���H��G��#�dٕ�T��i��'"�G���a�s�V��Fo�+ �і��hɢ��H���ע����]x�J���J�n̓T��*���8���<��cf.�<�yN*4 ��q�V���!�>t�������;���J� �q���o�y�7�Ln� (�a��R`U�����Q�{Q���Қ33�̞�tJ� ��9���c�d���Wx�z#��+���+�)�!�2U�:S�f)m�4_�zq�t�E{���m�Q;ߺ�G^r��_�d_��IlA����Sy�ޚ������竂n^�S^��^��;�UPY�����z>E��xl:c�2�Tc�2
+�1�F&#q=��P�y"�wi��S���[�����~��<�y� �+8�s�LW�k�Rb �zj&]�m���&_����N��c�
+X�x6��
+����6��ucy�y�b�����ZQ5�l��C�ٍ��������������c����?��}�´�_Nמ�#����r�+F���*��[�����YV�m)m\H���=�^��J���
+�B��B
+�g�ޯ�����;m`��(y*V���?��>y����*�9�3'Kn6r[�ĒDz4ʿ��*O��H�h��Yh�̅(��+�4�Sr�#�sMB��Ve֌�;//�}���G�Ա�$����ݯW��z���f�+쫕���C��r���;z��I����:ͩ�,&�~����2f�?j����sh�d����7����a�-`�ץ~{�m��������^������(��<��� �g���':#��m>eퟐ�������퉖Μ�\��(
+����1��˨��+���L^���d!þPy�vl��ӥ��o������[��#S'��+��.�}��k�2�����gK�ҽ���uƲ�/mŗ ���ȋ�O �=�O�'���L=:�#y���a��;! ��I�a��̼|����?>'w�trY� �3u�=/���b�禎lm��X�BГ.�y�J�6�^4v�C�}�����40d۟��9GU�J'o2�2635GgB����q
+P�iHRG����
+W��D�N��i�=�\�6̢��=<��r����"�Ua!I����=SB��g@o��p�x�q��_����Z~�k���WYN�]�c���;'Y���Tj��4�J_��7'�g�졷 �uٰ����M{'S������e�l���Ň~u ��Ӫ���y�����4�(�e�
+���(����;��e����&�������Ӂ�/��ZLd�������5��K��T[�b�b���;z�@KO�ZnZ�T����ko�g����<w���"ev����1��\F�.�ے�j���݂��7�d�{W��`��� ��$�=?�Jw}�J��� s�[���b-�E�t�/.��
+Cf}�!��}���s�[���ݲ�o�o�yX >#��������=f��|���i���
+���S�k�%a�Z��4M1�F���Ͽ�h�G蔊Ѳ]�8ü ���@3t���DMUJ���担|��3�$뽻���� 4 T�*�o\���Ln�X��o"�zA<�i� ��]>����}퓝���/�w� `����l:=�����9���X.���'u�?]}h:�]kJ嵎�dw���(�zm�(}���*M݃�W�Udj��u?q��,��X����yU
+۪���Pš�Jz���p�� s��^+:c� �q`
+hR������=��Oq �q����dI�>+iV�YB���/���r�������cӨ���`�T����W*]�A��a>"%��S5����t�#G����f���:����}��]L��2j�gj�3W���Oa�;dzi[L�#zC������������y�$;�^L�{�b�|��Ͼ �.|E{/��Ճ>�^.��W*�Dϟ Q�Հ�-z���S�ݾR��1�Üy��w��B����Oi�m>�2��?�G~,�DoЖ�٠�V��HӖ��k:������\�HxlTr�!���' �T�X�'��*Rʌ 3*:C� K���Ru@+��,V|�`}H����ӫ��}��=AאI�2⳷�3}]�'�E�]=U}����Ӄ�̎��Ѓ���4�w`���`�z��g�15g�<a���G'I������ƒ����Ugl�ɭF��^�_��/vEΎ^�_�}���R�iv�F�M10A�G�G+p��UP~�$���s�'O���zgEP�� >8AS"����$Z���H.-/����/d����u-ù����펽�����oi��+���$U�����j��eT��e���^d���e6n�D5.b��d>{!��eν
+a/���O�fpLt��v[Ic�tDt����<�DH:���#�-���q�EG�1��wī��ꌰ-L`�����[a�?��処S��:TR�>�߃��A�6�1 �>���,���2��� ���/��k���;��>�:����4d�O���O�I�;AԲ����J���
+I�;I�O�����%�d �:L���]��]@7��:8�*�l����<I�G��_VIS[�=B�����d�0e.Z6orssC�~�� �6��r�'�A^"��#F� Yz�1h��m�Z�?�S�$��P��|~1��ԍ�}� ��Tb�S�{
+��i�r��l�-�e�嵎M,~����C%����������;��GO� ���-�k��ZЕ;l�ۮ�3��^�K���SR}�VV=8[���!�督�t�Dqx���_��# W��iR�[ %k����w@s'LC�� �U~�oJ0"A^�q���󚇼��J஁�Jd*(b�a��Y@�?��ۧA)���s���J��t��/5�]����͜�ЋgS��IO^N�8���_�Ot+�ΠOϣ�N�aJ&���Hw�ZI�6�9�FLm�ѕ�x��2$�$ �Z]��IŔ�����9�H4���Z�����ꂑlN�%[~Ԗj~�� 4q^1�I�E�-7���t�ج���﷑m{��� �~n'뺹z+q� R��}�T�J��?\M�6P�rc!�c�l��3�7�ט�_�I~r��t�K��F�
+��Kw��$����M��]@ L��k"E�:�ii\(�~�@��� N�tY�^�ܖya���
+�6�̭�lf�9�I6�łh�l��`�ŋvLds[,��dF�:!S�N(�#z;�ے�)[�����5ρ>|Ш���Ԇ>i���*��૾�C'�R�j� �L��q���0_�߹J����v�q�v}p�u?[�m<0 ��A���{�
+k�=D� kXS��<�]/��C�e�J���t�{gf��@w↬��B��;j��޲�� �� XW��7��U�g�<[9�~o)􏃞?hGJx���iP���ڀ���
+���B*�h��'�� ���#.�b4��o2hSrE}�4���M�Kc�GJ��kJ��5��A�9�4��U�3��/���}���މ�=J��q���]Z(�}��GG���|����cp�����������l�����֋>�M
+�t4h��{��Hw�um3���/h�����u��2C&�˒)�q�,�LV���ٔ�j4��q}��وI�b̬�5�� ��%4����n�*��������J��w��^:��W�5���jp��z��b��./��@c�M).̾����O�Ï�ܾR�@3�N��P�^[������s @{� 4������GOi��e0g@Ì�LR�>W�ny ��[��������� @l���`���A���H���A�]�&U[�;�.�������
+<�ܑ���ңD�˛C^^��^9�*Q��B_>�d _̑�D�톃�����/�K֔�tu�峖 o\����k����G�LP�&k��°� ClX�6hO���� j��F��b��@+
+�%��Ϧך�kRF@�V~v[z�F ���<ХM%���B�� s�G�xǏ�L�!аg�pNY��<6��$P��[���,����xM����m4
+��tX����R�C�i��5�L����A��n��H������?�M� ��'�{^��'^ѧ��<�G���|��ֱ��d-?�w��'������ ���S��
+�9���{�<;��]�<؆S �.y��{�ϙ� Kخ��P�w��z�����u�3�����Rj��9!�|����?��m����������=jM�N�<^��Lצb�Z�jy�8\�"�i��R����t9C��!�t�VcfӾ)LJ��ă�*���+�k��g<sQ���᳁>���bh q�w]A�����l}Y�-G��s�ms�{9����cLb�!�꾸���� ���UVv�IOO��!�]�1H�1��8�Y�zǁ�I�Pu��&� Y�\b��^�h�cȵ_Z��8��o�|.�5���`l�եl��U����Ԙ�\������r�0(�Z*��&@Yyh6h�m��*vߓл��d֕�Bc5 �t�d���Y�dw��a����X��ԙh1���F��1���<�+�U����/�:�Vp�`�`- ��؝_{�)�7lv�86�ے��5_��=w�_z*���)��1]�W Q�^m��L-C�у� �o���Y�����L���b��k7�������(��D���/�'�<G^�6A�W;N������ �1�mӁ�d8�aJwL±n�Ӌ/7&&��x��/����-`����Ҟ�$�'a?�q�TX�ar&��7��)u�Tb��:C[Ć�9�pC˗�BpO(��R�;h�1]O�@Ǘ\#\׊%,�#ⴀQ��zƁ0��W6-��p-}C~lӕ%|^�8Б璋 �zg�6�w��2t���^��w"��[Z��W&s�)h2��kpl�2�F�N:���t� �N]z.2^+(�q�*��Z��d5
+~<H���ɸ`5�c�� z[�� z�t�Z-�?������2���rಂ�(a���+���n�Ҕv�[�|B)v��ŭ�� L<.��7Yy��W���n��bv�YtJ�h���E��:��lB�����m��g�'�3�Lb7�En����A����֙m��ې5�~|f�%Ѯ�{�*��5/0�`]��Õ�6��x�Zol�3���J`�F�X3L׭U��+@'�D����\�dž�x�R��ț��� ?�tT�͹�uZ0�a�I���|�g�Y��8h�=F�yǝn�������v�u��!ܫ��f�������3ۿw�z^��JN%��e�6D�n��Hu�v��'A�� s�}����T�F}�uq �u�Z t�� &<~}�# �lw6J��KJ􎁭��ʪ��T%;�q�+����Y�l��U��^��+���-�D �+�]�+0��;;�j�yف�b���DS����v�Q�b��q\"h�����*s:'(Ӷ���*��
+�`!������OXx�F|�Ŷ�A�w}䭃N�彶�P��8NYqt0�������C8��})Ӈ���-�3����sCѪ3�@�������Zܽ�ʝ��;��S=W�-n�)����5���zD�.ߐ
+Ź� {�4�7�M�,����M���q�ҰT-�{�_"/�$��3�0.��L�\4�H���L��`[R.^�|`��m��UO���fC�+�"��5�0��Հ�2��(�{���Ơq���6p �zm{�(?9t���1��VgC�j)��F ΦS��������@st��wD�a�xݞp�;-A;��x���ze>SzdSs�T�lي�3����'#�N�NQ�\-��ѕ�==��|i.����X`��}:���
+����
+����H- n�̨��c���K ��h甠��1���T�o����|�4�����ĵ����r�#/�71�4��.���?���l��<�x$�z�vgq�&�,� g(�u��d�p��R���%���C���G�\i��UBX�m��k
+†'��}@�l�v������̍�1��6N]�m X���6Ԍ�|Z^�=����Ed�
+�E�3I�.���0�C��4���Yc��E�J�`gEd�TewM�מ�WLS�xFt���nWf�8�P̬0��2��
+���Y��q�G���=��������??��
+4����l�ieF�M}ӂ:}B�� uS��������y*�?u������x!�� ME���������4mX����0�[_c 1�YT���V�G�h� ����s���q���G�oЖ2�j�a;�$�uţ�=��H��b�L�����tx&��� �D��(�y�e�s.�!?w/�Βr
+5�Ov�$X#��(
+P�
+Z�\J�1�_�f\�]g�Ia P�����Ճ}#��U�; �[�7�׊Y�i��IXN8f��;�� �{� �R�`gA����b��gV�� �Y�K���?�Y���,���c5!��Rj���)�0wA�_���r ��– �g���B������;���������� �z�~>�񊒮ɠ�M�}�k4�_��<�T�g�<�� t���LX�Lcv���w}+Y`��<�NX`Z���o�1m���� �D��z ���x$�#���r$�"ՠv���
+GŦ�G
+0��F�΁k�>��k�����z3U^�50*��[���}ȩ@��� 7uLf���!�FB�;����9���6η]T9 �1yz���AY����e��u[��s_.��\L�vr���"��=Ө����Ŷ�t$쬜V`gi��\T$�sy;�@����7�&�,%𓁝U8��R�����;+e�A���T�r^`��m�}o�o@N,0ej�����V ��u���F���ՀK9�����"`j�dX�x����<=�'�^?��� ���Bv൯���2�R�Q������H��~$���-G���#�w���B�� զ����7x]X�
+�A���r�kȝ鸶�n=��d- ��Z��΋��bh�þGE����%U��7|�((�Ą ��T������x���r��8\��%��Y ag�_�o�+�{��> ,��|}:2g�$*M��.�; ֗�9@�J��*���)
+�X��^�f�m�;K^������l`W�s�a��qX7Q�wZ��� �9��'ܘ�vk�]�r�qU���tp�"w��b9<?4Z�[���ZO9���`}��s�`~-�� cɵ���[@X���k����_0P�xD�5eK{�٘L)�.
+W��I�_��Ϩ6��`Q�$T� ۠��+3��V��e,0O�'s��R�>�':�p�bu�H��\R�!�BJ��!����a��=�KAS�tL 1�5�م5O\���4X/��a��
+��Ø0 ٺp_���r>�r}1������N��b7�=\���\n�xвfȚ�����XϪ��Y֋� �/�����Y|�����K F��V󕹭V$��~�-�3ͧ��Z|�eݓ���I�5_�k����"���µ�{.ɥF�\\
+��,2C[�s|6�� Xi��Y�����x"�;��s��8�S-� c]Q��f�u{&�=�Z8�U��s����ֳ�Ɩr�gH�B֬��g�k6\)�{��  � �Sx��ո�ﹻJ��.M��ڗ�t�=vp�]Qy|�7��7��Or���c'�\�T�
+d�n��z��3�"EN�K|��o�
+{ݸ�ܑ����H��z�Q�Qg&U�QgpNM�}���b������hu�,�R$���1�c8/���"X����)�T#,O���{m�o���������"`�
+�&��5�{���9\R���Æ&i�S���}=�ޗ�����Dl��2��5>:�����k��R�q�t�4�-��H�Zu`�/ �o��xj!��+�ze�߅�ͤ�1�X�Ĥ�}3��C.%O/6"yJv�8eQ�5�'��;�zv�xb.\�C=/�ǩ��0Up\!>����L'� 8o�?���=[�ϖ��9�[B>!��y(�5�7�=cw>� ���n/g�-��
+ɝ��]S��t-�r�������pl�g�y��ߪ|�TEA�%�W�pl>�y}%�p���3a��"n��Dz���T�x}r�&�C^�%�1��Ϛ޲ϖ��H�^ZL5_��^T66K��l\��|����{H
+vO���W��Ho2V�X�8媶c��$�������M�3��ue���*������d��L���σk|i��J)y4�&P��u�< �r�f�� b�����L^�9����Y�
+���'A�<-�aϖ����n�������i�fP;���<�p��W�=G��O�l��)���{�>�˨7�3� �~Ŝ6��V@��[X��PnBXM�>�p^a��0ǹ-LJ��O��#�+`��:;�c�T|�
+�����"�A\-d꿜�9!���b��>O�~(��a����ʌȽR��M���?��1i8߆�����m�,:�+��t��P'��6��6�E�W��]�� B�/���ڂ�R�uL q��a��s�6uM&vZ�ӆ�|r]u|�Vo
+�97���~��alE%j'\���J�g_p�_�s����5��3Q���������q`���L(3$���cs�Oǧ�����t|:>��Oǧ�����t|:>��Oǧ�����t|:>��Oǧ�����t|:>��Oǧ�����t|:>������S����B�C X/���ދ��ג�u�IS��:'%�E�%G'ć$�[;·X?�������/$=")h^�}� �eֶ�����'��ΰ��uޜ��s%!�ֶ�/j�l-J�����ߔ���F ��2�0��-,�����~�jqH2~J��7]"�s�ӷm������pk�]k�m�E3 �Y;��
+�D���[�#��t���d �V���y���r�<�p�}��ݒy��[/��0�:���a�ü9�� �����~�����k�������×�#:6�q�Sr6�_g�����s�"R��"\�9_k6�@nmG�y��ɟ�â%s�sp�VZ��_/^
+Z��j�}�4��A)��2Q��L�V���S����ח�ʩ��(Ϭ5���2|��=��Ӷ�*��Y*�AA�Ze
+z�D+��쇋Mա�S�����k)����񊆳K�'�9��;�.>Mz��Ia��8h�6���B�6�@����L�0 ���4(��uZ�g�2tP��Et&cru٤}��Te7���a>��P��C4��-��K�Vm��f�2��i������OG�k�k�@CB��m#��z���fɫ�Q�6��q9zlB�.�9���������z3�7[�����Ht�/.�[�C_$�3�=��-ԗ*�X`{ ���؞����w2h3>\|�.�]�(6V�wL�֗��֤�$�)�G�Ǎ��E�jqY]�\\����P�p��>�I<ߔ)�>QC���L֤�C¯Q��Q�/;��Q�k ��T<���Ĕ
+�~+�?�e�sF@?W��~�:b*\-��R#�����K�3�
+t��$ ��s=��|=Й �z��{�A��IlL�H��b=�"QC��~4(AS��@O��e�2��X����Iׁ�VUF����7�em&�g����x|t k���I�4U$�C/#��K�C�)�a,_}b.�NBo7�����uM �{��DY��V����=3Db�4e�������p0���gB� ��s�c��d��>v�ej��’~f�U)�>z�H���R#bo�/+S*M�eF�<�s�ZDg �<�������M;�*����\S�l��Y����lH�Yq�DEn�x��Q�! t����ym�w��O��N�C� ����[�j�=a����%�]�n�o|v��|}�(�ߠ ~����*<�`����}�'�]�QqZ�;:`W>"��'A� %c�-z���O�d<~>�ItX��L����D��
+�{����%��S�L@�tz@CC�\m :��n��RĪˡ'*_�
+^� zDW�^�+�}!�EL�.h.ȓ�F�o�RvM��8*ʺl������'��m�����2G=��-�gPU�s����l�� :'*J�����
+4���**�ߤظ�|�2u�1hk���Z� ��-��u#��U��b�|]��^;tE��h#@<�j�>�i� �,Ķ}�Ч��ђ#�m���=dԙ�F��%�s�W�Mzx��.��.�G��)�g��N�6+xm�#�Vv-����s��A�����S@�YY�{�2��
+����2��=S|b�!�ѓz��]WbHbzz�9�&_�� ���G|*���A�$��[Mt��ב� た}�p=@O]ʪԀ��F㸰&G�j��dM.4Ct�@c��~�RD�C������N�a z
+� ��
+�ob�>��n˦�A/5�s*"M��/�-+nӡ���öDG.,Y�þ����9yh:���o6�~x 誱�D�
+bآ�Hw#��9g��;p�{�{��~��~���b˜s��}��c>����umh���- � -]'��8΢��0k0�k��&��F�f(��.<�������}� ;�>4�(��h�s�������)�S�^��*]=�Kc��)E��t�[�@n�� ��
+��`���N�{)�����/O�y�^�Yc���3��zN(N�z��? �0$��?�� �|���|����G�`5�l�g`Q���Cp���E�����4�Ȁ<
+*�;���2�F`\��b��������ǵ��W�
+�����h�3g.O
+W�L�A/ p!�m ����=�x�q9��� �'
+��s-�Y�y���=��C�~��ِ�uB���1 k @>
+{����<�f�QWZ��(֊�����Ҟs�
+����Iī��1�FB�aX����9�b���HТ����<h��& en3����p<�P���%�N�����������>
+���_%>��
+Z1������Tо���חc��?O�0p,� ŶA
+��!�F��Y/{�-����`/��~S����$�b�|�.�#�n��[ը���_d��l�ˍ��(���<s�c�����*�nZ����� ��>f7t�阒TJ�^��
+�]�Is��!���p%#+��&ԩ�jԄ 媠2����K�\�X 40�.���{������b���e���j� �e@\����:�+�S���~�I��h�"���?����(�����{���9���^� ʟf�#�ӁFh�V�[ -&C^�=aЁ��]x�����g���c�c�g}&�9����H���s��W������N���b��C� �O" w�}2`=��r�m��H���/�F���M��\�S��Cg@��-�/ ߀��^aMx��(O`|�S.�sqOzH>�W�~��D��Q�ˀv�z}V�KAx�u�5�޸�
+�T�����C�E��<�9�7��Z�=���f���N�D��~e�;�G� A���A�� ��Z#�r�g
+�W����AW����[�Ș?�~u�õ��'�M� X� �럻�N���DUng�2~��(����D<ZO��+�땾��4�:�j��9�iJ0Dq�tB�n*�fY� 뷜��� r
+�) ���3@�뱁��� |��@V�Y�Ҵ k�Y8���|��u�&��������u� <��
+���Q�>��@�&����E�F|!Z�q���<� Q���
+̛�� iZM�=�|�k�o�N/ �Y 9��-�Ƅ�Z�
+��_>G/71��W��"�Dcކ�h���X���-���I��/:�O�Ά�_ �I��s0�_���4����G�c��b�蹘��"�>hlq��+s1����y��B�k˱^����D�aJ��(��Px��d�vj �����=?���9�9"KyJ|V~HKq��`n�9�g
+�A��<��(w�Qn�����P�aE��~�)�m[�1ᝤ�O� ?�������.�?�`ln�/�� �G� ➠�
+�����ix���q[<�p�9v.�uc1��`�P�B��
+zX"��(�@��������'k���C�.�匥X��RȌ!�� �1@s <���):��ť��D�?��t{���١�,�)�GA����G�R�T��p��=(ι���DJ��(�Z���Q��cB =/�c��v�3
+���=�8�_<����+�:*�{ ���^��]�۰�"�F��;e�(���j_|�݀��� �+�c� 4OX�Kɸ|�1Aǖ���?�~ }cB_tZ|��w�P�g�3~x�`� �!� �zLX��1a5�69&O���a� k¨�ӱ����,�g�wc9��9m�Ş��1)���+��T�*��En� �Й�߆9/hi_��a��ޛg=&�}6a3��C��:�_��=4���ђ�ޓ� �>A���x��u�2�<�5t��!�!>y�cr�����&��iD���z(�N:�Z�kAzX|
+��Ό�|"��F��1J��". �.N)�d� ��Qmýw���x��r8�l��\��Mo��!9�!f�zLX���8?Z�=&n��~�y�)�[��D���5%1s$�
+p�K����#%s��p�ŐX��\xd,�\���F����o���(�xB��( �����F� ��z�F���J��/xU�\W�,�*� �+��������:m�t��%���~�+�
+56�T�N)S���3^��nD���yk)�P��
++\�\�YJ=[�s����a��]_
+�csX�
+>X�a���)J�� �T�Q��g�+U��u�OR�Ta�|��'�
+�?|����'/�S�����!-r�� q��5�����rQj�&Z���^�XK��4���#�n�P�O^��<�:���Q��@�e��AK�&�%�|.p2��Ή�@��NmQ�x�FxP{�.�+�P}Gu^|�a��x�ZX���.9������b}eX;��e���E!h3�宒�d,�5!���� �(a}�%����
+��|�yf.����o�=:����/�x]�#q>���ĕl�:��X���q(F�2�w���4��wO@\%��_P'`?^��5t�-P�%�YK
+��@\@>
+���~X�}��9�G�d�g�{@?b�jh��h��5�O��x�
+�|
+7�Y�Z���S(�cx�$�a�����r�}���b1zEh,��@a����)l:��F�M�{m�������[��c�{��Q?�2��@M`||hO�����[�����1y�q,y�f$���� �2� ��HG�m��
+� � �z��K�//lh�&����K��.�Q����,�#�l�k(p�җ�� � ��#�=S�c����R���y��[����i��/
+���iLX�&�h����[�`D�z��T�Ӹ֡蓉j��ӂo���Y�k�Վ��Fe�����?$5�5):�p�2�j��j�>}��
+R��.`V�X�*l
+�4�v͞OF�n"�:@����_��.���O��fL�<H�����O:d����u�v_����U����Ṣ1�ѭ�Ƽ�e|9i����8�Kཫ螁�$��˄A�ֳ)�j�ku�iV��`Z9i�Z��)c�c���R�|��WR�ջ�?#
+~� �ePIջ�KsN�����LV��֧�$��u8��繴fe<FS���1��/�?^���ڮ��IjV�H�݁8��Z�{�x������+�uc �t-{������Jk�G_m: �j2^m��H2�~�#�o��Ʉʝ'�Tj�
+����h3��y�=���@��z�
+�[w�Y�5�g�Ƣ���7'�Ϛ�0Z�-t�ߕܭ1f�4 Dw����J�rM�� Z��
+}���i�����L�v��g5��j3�2����ڣ%�lU��J�׀��'T�>h�w�Ll��!��̥Lr�>A����� ����fe������V�3�j�!oփ�����Z��P��״|��z����mFdÊ�B �8DV�]��d �����Һ���\��񧙴K�<���|�3w�a\���������|�)]��\��o�����^����i��HW��a �N�������+j�/z��'"�Y�X�����i�I�{�fҌ�$�J]�Tw�Iiڏr�.W*��j&�UE|����J%Jj��?] \��-a��!x��9����W��a�8�?�/(��A}dn�07��؜6��i������浙���ST��X�K�ѩ��h����!yo����U���ш�;`��m��{]|�Q�Ht�Y,ɭ9d�W|N��҄Io����&ӻTѡ1DŽ�^q 1F_��f�j�z�0�bS_z���ެ25Tj�
+�>6 忤&eX� �>(�W{��������]z�]��G=��G�q��}֋�@7K��(a_��v�F�x����K���[���N����� r��O>�l��#�77!_|
+K[�ĥ��&��]0y���n���֬�d�h�������ຂ���Q"�閰��,����Imj��'�̬���%�����>/���6��Jŷ�E��VJr���5k�2��٫�ڬ��U�����[FGož���[
+ߴ��wg��J�G}��y�[�v���t�~��)�>ü�d�~>F�q�z��X��*�dʔuYJ�J}$��}E�e�������5�E&��!3>�����ه�bqn�){��e�Zuȫj��V飊#�ҧe�;- }�ˈ�ޡ'��F�4�
+���R7�j�w?걷�H*��O>ꢨ�>)���0��ے-�8Ǽ�:�T|8�Tv��^ ���.j��WD�� � ����tA�!���J���e��>\<�$h�,y5�9���S�a˼�=LeҢ�P ��� � �4q.G����xa�kx���&��Hޔ_4�wQ_��?ZͿ�]���MG��3C>��Y��
+bz����%jI3[H�{Uǥo�l�K�\��n�_b'~QsBr�I$�j7�X�J�&�4�96�_ a­b�+�q5������������O�Ń%��O��_�|���د}��@��x�4�xkV���4�Wy`\x�嘣�d���.⾦�#Ět����Jڛ��ڎ��~Z2��ٗ������i*��FK��2'����W=G���K,~�hm�R$.m��n>)*n=')����T9�T\�o���������7�e_v�ӯ;���Q<V����V�A9��(�k'���^l�Fޝ��rFTQ�Q[����,D�W"�j��5�����v�����K�4!K~5T|9F�h/l�|�
+5�z#��DW|8K��27z Ȱ���W먨ڭ���:��y����� Ҽ2KiN�a��c�*3�U�̣61�䃔|�Ų/[�E ��yu��OZ�����w��x ����VsqE�����E�T�c�Uq���ē���v>�;��2F4P�+n����Xӯ�L���g��j���z�-�n%X6��Y�'�]����mL��h͒�0�=��_O������i"�����m�J�6�6�]��� S>ne
+���� 1kˏ4�-�?��,�PǫhaU���軩�N���|!��H=mc����DN7�s���:^�N��N�jLO?��0Ѹ���{��]k4�������|?髊s��&C�������D[V ������2��h������� �$�ބ��<�����1�U�u��9*���̲9%Z���pWNԱ�[1���`qs��Η2�a�����RY�5�]��'K�+_�<�9/y�q����~2��Z^D�Z��o����ϼ�y���'�ƽU�–7qg����wQ�Ϊ
+��Ĺ�%����o�Ϛ���4��G��6�d ��}j�&��Q�aɛ� �BT�_~1���zT��:WG���E
+�[-��k�� �}�`��M�nV��)'Zo%���\�m�W!�Zr�;Gf�$KL�u���uO�l�L���a;�\�u܍wo
+L�����u��Y���J���h�^��G�;�>+v��-q��-��:ޞ%�� lo�VW]����Z��7X�˫�anD_Fq�/�+��v/�u�
+�M*�� (�O�;{\�^s|^#w�(�OAe��E^��E2��(_II�>I�ѹQ��zo9=�ל������O6�I �
+��ʶl��aޙ�6��
+��λ׆^�q��e�]��jLj�r��{5�E �a� ��G���P�v��pnj��q����H~��l��$ر*"6��'&��=�j�G�}eT���䨳�)�Ǜ�"�=o�ͺ�EJzC$%ͭ~�G��n�]G����fM�Qg�2SO7g%�p7�`C=Ϣ��}Ȟ�l��n7ѷ��#�ef}�"��9 ���#�j�#�c]�#���_6x���g~ۢ��d��M�TǤ���M���Q�����bC�c��d�]�"�~���urƺ=�X�����qB�~���̌�rg�~pV�*O�{�'�勓^ '֍jZf��Ӥ��8$.n�5���=�r/ѱ:*%��;�j�[�mcl���2@X���ֵۉ�*]%� �g2���"m+cn���u����C9�y���<ܬ�0ڼ+'�BsR��_�KMx≶�����tG�������p��ܘ�mYq�ccc��b�����������T�7;^-g�_����ܡ;S'8{�V1����~J�ke�w�LZ�[$�{�7��"�J"N6eD�w܈`�<��[�էè�a;���ߍ��J���%��{���7��;o]������sd�;��Ý����C}����}��)���!, 嬒J�����A�Q�r�G������Z-��;gu���J�SLQӥ�' v�9 vQ�M^ɢ�e���PM�D�����S�w��y�R~��y�=|1�}�6�y�^b�}�ƭ����{�5[U��[ e�q����)�[�Q�iP_ڝ�J�"�_z�n���
+/�������
+="C �/#�p�13V���k�U~��n,�E񡥾 �o�b�߻ɲn�.����o��������
+�K�ߞ5Z��i���n��h�������:r����X5W�X8\��O(s�i�lt(��W��M����طODh���4�n�;w���)s�9�,�[�� �
+�d�����J���K �ik��s7+V([ -�}>3��v�UqBA�V�[���gK��w�Yo=b
+�:��-v /(� {��1"��-:��+ֻ2 ѭ2$!�W�m<�n�q�.DŽ���>��4�������j�S�t)���b0�C��>7���@��k8ޘ�m�1Y�鞂N�;%��/�r��E�!�S;�n�
+��Xi�p�"BIa1���b1�C�E�$��"1�P��A,��D��fD�5 �W��|�j��<�&N�� w��+gc��"D���/lt5u{����}�s�*0.��WTZ�G��7�(/F]-��=.v�|��!�J�[�Ǒ��8G�.t/|��Z�&����kn��uY�~i�I���\����p��9��o�-j���� ۰S�X�T�X�f9�nzFN�󚂶�����l��W"&���(b1�@�%�>�r?�^��z,����'y��x��˄���"b�/���J�W����?*��72��7*����BoYz�gԕ��{�nQ/
+\"s \"�r�����b��E�QoK��}*�ٯ�����䯟\/�DǼjF5��bht�s�.N��qb���(���s��J_��8t��#�����r�j�7�L F ���N$F�MD?� fNYM��r���U��@uc�sB9갸�9���zlV�GTa�s�շ�QY�ܢP� �+r ��5�y�Y���S��wΑ�ŞQm�Q�_[������>X�7;G�Ν�/{=w�]Bi� t ����Dg�O@�4E�T�|?�\�����_�{������h.��{�P�k��~�[�?�e;z���Af-�#��d�.���Z��b^�BX�$�a�o�c�+��Bg<n�K�D5;Ew�9D�?���\��c ����{Nc��91�����F��w�;��=S��X�P�X�q���Z5I��;@}*��*I
+Nx�'���#�i���I�[̓"��
+\�߼t�~����7ҵ"4&��7:��[v��r�ț��I�2�W�J��U���tUs[�uk�3�&������99|��q����| C�8�?
+Ͻ�y8 ��F��PV�@�$��XL�Q�O,�eAl5M�Ө�4�ϝ��ݏ��\#���d'Z�F�lH�.^��W�/�j[}�-;^�~�Q�0{}�u�ֵM�u�5�ˉD�B�z)tԼY3���pt����\������{$�3c��>'��;�Q�r���k���������Gh����9��-�C�V�GG���qx�!5�&�-�}�Kt��"���7n�M�j��_�u�F�){R�*K(�� r� �bƄixn�wy����u�wpMc~��H�9_�$�j���Ăeb��Eb�8q؞��<�Ϝ��[�I/|e��<��^�ž-pM(+pK)-vNz^��[��R��X�[EP��ѕ�n�h�r:��m�__�P6���,�/c:��{cѻ���a3���I��8MC9i���i#���/&&�/"��YM�T8@�Tv!v}=B��[��8!���Ԅ(���h���
+S��'�'��ZGL���
+ߏ�@(�G���J,�x��f�%�?�[n��3o�x��J(`�{/<�P�k}��\�����5���Ǖ�2׌�J������J���R�D�]�ʹ������ǿ� \�/�JĔ��Ih���)7��Č�ˉi�V�Ƭ!���H̜��X�a? gb#�<l�0UnW@��/�����S�K����.ǽ�w�-+t�-�P^����9����{�\�
+P>}��I���{F��q�+ש���导 9b,��~~?�1?����Qq�Bb6�9�6s6���%�,Q'�-2$f-���sԉ ����b�N(�˱e��[n��� ��AQ���z\����,��#��h�w
+~AX��{Ǩ�7�Qo����5F�~���[�i'������<9g�����84�b42��!7��5v91k�:b�̽Ē5b��S����� �sR�̥$1s�1CQ��=�
+m_b�{�;�����p��s[�?rG��]� �<�#���5��Su�CT[�S<̹�ZǴ�*���z�䷥N�K����r{����_��еx���M��EL�G ͫih�M���^�OLDc8 �F-"f�_��m#�0k+�OU����&ļ��Ă}��}bO���� fO�v��6C���@�_�X���&<��M`�{���е=|�${�j\i�����1���1���!6��s������ܮY�f�����|�|�j��"�8r���(���'��=q�=�����(������������$�h��t�5�XÕX��B�W�!������y�z� ����T�p+ ���®7N犓��#ž=�I�z�\��3=?�E�!��7֪1>���2{܇}|yY��d֬u�v-��`DT���Z6N ��E����(��G9��4�9]N]�b�EĴq PnD�䕄�t��iJkL ���Ă '��{������
+G�%Ej�p����[�&�/�q(LDׂ�����/��%-t*Ĭ�j(W(
+3Q��� �L4��\�;k71g�^b��
+1w�1oM,�x�X��J�����mt+�!�y����/��~��W�m��� ����zy�� �,��L/*t�~��M�/�~��9�m�
+�VsP=^���X�aM,�fF,Y�#��C�C�r��5耚���;{;”Ă�4�`��X�z�X�H��c��G��o ���7[��SV������ z9 ����H󭰓u�ч:D�l̊M}����'�TӵӞ�(�ڈԲ2ې�
+���b��}�A���xm#��L��y2����8���ᯀA _N1a��h>*SG��DL�����@�X����������s�����[xR�1�lw��f�읶=�k����;.=�ǯ|�j.�b-�j�;k��;-�R�e��(�lc|$�9��5w-t�=�QZb���!j��9��S���A���4�������C|2V5��;e-�p��F� ���!����r���};r���1�<ގ^w���u�y#�x�����<~�o��-��Fo���ӣb¾�ܚ}��n��"��f�ln�f-��S� t�8�n'�r�.V�D
+�H����K7�h���x�m�|�m>P�i4q��.�`�O{�� ��o���������턶�:�Q�>F2�Q��Ad�1W|*l��9w����0w�����I��Z���T�1�z�!1g���� ��ؔG8 a�Iˉ�[��f�$��Am� ������A���I�_9K�O�a�� j9R��#u�sz����`��3��N�q�� �ad�C��� R�7�+�8L����?rּ6�B7�ϭ��9J���-Ե��G�,?�d�b5�����Wc$�}'��ٛ��t��I�����mL��uLnc��2@�]hP�1vQ��u�Eyq��\b��y�ԉ ��B,X�C�ӳ!���5|�w��ݷ���Z%� �'�/�=<_(8�:V�偢�+N�i*���p#^:X� 4� �zm� 9�(E��G���i��9QW��H���v5z��-���������^��^��-�e�D�A�Lx�v�N��U�I6�͌-j>!~_z�(k`���7u2�C���Q]���A*��A����sY�,ۋy��~LE5c�:�����7i%���}����s�(_� Qݥ�|s�� ��ܠe{m�vMb� ����Fz��9�i�L�n�M>ԛ+�>�TpB����������S1x���vl4 ���яԳv���g$��y1f������� �'�N�ﻤ̣�v1׿�K_7^��\� ���gd7U�l���zg��6�-����~��b�<�k37˶ ��Ҁa*��٪/��j��^��8���{��6w��z?Ӂ�X�c�[<�ھ���o��W�����S��FwIi�3�; &m�tTu��;�����_����?4 �߭�]��A b�7�Y���>� �z��)n&����/m)[��8����)�1)-򔾨=%�i �[ydf�~2�d ���B��Q�a�m�� �w�0�
+�W��T#V�X�-o���[���ш_���
+���( u�a���i�� ����� �RgRb��6I3i���h�s�S��i��<mT�x��Xb*'����nqs�1���� ���G� ���W{՘m,��]��U��/`\��Q�4%O���V����0.)v��W[���s�}�t� ���3gh����k�%�zI̘�DL��
+�$�*�j��wp�h���ns���뚹�PV6 4 %���<�B�du�g��s@Bh�h*�7�{�y�O�ih����Z��߀"DR3yӳvM�R�z\[�I����3��6]ӻ�GE�>���>� �(�+��?�"�7����O�\�SE��|���K�g]l�yf���B�-a6�2W�{w�aJ�fû?Ԍ�U6�+]o�1�U����9�qF����}��.�+� �e� 3���r�)���M��1�� 3C�
+Sٺ�ضd9�g�VB�;��hx� ��$}��;�b�ݥ%�_#>��w�i�F>�էE�?\C���am�g��)sh�x�o�g����a����&�75�ɇ�y��������׾���lQ�a~� ������&�V�I������m������· lg��ag���Sח���s�Uܧ�Ц���_J�l��i��.����ٍ�\nH�Sݩ���:B���dAf�*�}�xhf�n1s�r��B�tqгM´�Tj�� �j/��r
+��1���[��\9&cf����� W���_������:�q������/<7�./5ܜc��\��zᕁ���n\G���eB^�T>�f�Xrr6��k�z{^�����������>�����s3�g���[�꣊�p_���R4��g�>�/�:��/w��sE�gb�Tw(�ڝ�an��^I�rz��-_o[_n�n6�HO�� ^��=��Zl����p�/wb^�g>E��"&ՌᓪF�N��,���]��x���_��/��Ž�g��� �ݟ}�� ���Ӟ��=��_������(�; ��y��X`~�������P���?��)����u��٣{�<<+?��W�Y<~�f��t�y�f�~Q� I�օ�Z{��Xr�I�:c����5[��ܺv#�ظ�r!:�N�d�X!G%ڪ ŎČ
+I����,�Dh%�'�y�矩…����)|r�����F���{�k($U��3j� �Own|����ܐG��}oߋ�݋4)��L���:�����ۙ���\�:��� �'��]{�e�iG����*����5�޹�� �7i6�ݩqٸOs@`�9Kmx���K4�l�4���h�������W>9�3����0�g8rm���p�O���o��V/kDc�%i��W8Jɫ�,��J��x����&�K/��׵<\���wW��O����p�ز��.�u7�rmO7qO7�}?^u~�P�7�;~o�x���p��Vx�{?��ׁ��? ,&n�����m<�0�{͞�O�܇� �ckF�����e �B��4�׏f�0M�gU.�܊p�7w���<.<ˆ�-!�t�x~���� )�&Yue���&���������<��w����?{�~�aNC��b������_�c�,�| ��j���e����%ڞn��� G�2l���􃿹p���L���\���}�˵=?n�:���t�͎{=�4��-�,q��Y7{�f��]�vi\�{hv�c����nޒ��C����������'�;B{�3��Z�֟���sZ�{�@s�����b�����\t��P>4[<���p���KgI�͓��%��J�\}j���R��?yr��� �c/f����p ��ډ|y�,]ۧ��s?{�7� Н��{��w��+�-���y�w�/uE��{dXy�1�n�
+�af�OĬ?t_䲾��#eq`���8^�o���x��?�w��_�𵷖��-���x1�‘f�2�'Q~���+X~ew��r���R��� ���l]��[� ?y~������+�8 zZc���p�\�bɅ��y�� 3��oM=�o�t�����.fvNK������_�WLb+F�1�|D�-�>ڑb��Y��gh���%��/6`���?�Շ�g�Q��O�~��7}�Jd�__���&b~Mx�[����2;����G��z���m��į;��0�ܡ��h��c����T�I����*m�W����I޾ɖ;6�k6/ޠٵi�K��C�kt���>�Ֆѹ#��4[mp�%����h�'78I�7C������qjp�p��E
+07'�s{f�-�6A� �|f�x�th&��l���d�8�� s�Rũ���{��(����/����]�g�������|�<R���x�Ϟ��g�Œ�Ybv����B�ٿ�����U�����OV��Gs� �\��[���l�~�Z_vq��>QW|y�>�i����f��՚=[�k���K�c�Y���I�p�4:���a�L%�d~S���D�v/�so��X0J�N�� ��� 7��57������n��ۤ���Bj��Txn6X|Z���vl<⤘�4�4uRY=��r����bV�DҒLi�G���Q�v��S��|��P3� N�y<s�Ш�J�Ɯ4����� �[K����\����G{�"�줬��X/��ݩ;��^n����o��]/�H%��B�:B�7;���!�ɤa͝�~�4���x�^��� ��J� ��"T���s���?����r�;�7W���Vr���W�'�W0���r r���̏C�ڑ:����\j���=�l�?Y��w�+�:h�f������FI%�3�M)��Ng�r�����k� �����GZ����>�V4��� ��[+���OҸ���Q��f�B���*]���l=n�]_!6��o��I�{�f8�N��r���p�0��>��ҍo}�G�ӌ�>+7~�q���>��,]}���
+��&���Z8��~���g��]�yb�f�m}D��������r�'�K���'wD.�g��>�ېnd��\�1f �c*F�!�q4��U��x��`��ta�����E���Ο��M7� �͸���p�Ef���ʘb!�s����,�/D�+���qRJ���~t��꣄��BB��_;Z������,�� nq@�Hs1�� �\�.\�7ۡ�!�uN#VQ�s�?]��x����!1�`$4\�3�=WՋ_�3_�P#@3��*?=_,�t�����Jhπ ³:�?��+w�/{uݯ6a�@�L&6{���:y ���.���,pw�Y-�� �t`&l\d����
+F���e�u0���ӟ�M��l ������|Z>�E�ia�vЊ��br��0 q�p�����ä��ˡKM%���U…ߴ������Q(�0 �B�)�o-j�x��f��Ģ3�gQW�FZB۟;\b�@.�j�.2���<;1����2Gz�)����V���4�I&��'p��{�%�␉q�2)1o��Z:��x_�B�[.==zu,���4��gB��"ҌJ�t��!�>�=_o_�X��6�]��K�����;B�b�������Xf�R��`��x��S�0��o�Ġ�a�!bf�D>�t��O1�ut�<�� 5'����Q<�d 0�
+�"V�����&���x+�n�>��f�r3}@��_9ZN���H�H�V~f�x��6�۷A7Q��j��u�Tmi�U_Zf'�}�'���x�V�ϙF҆lxo֨���Ո��/ʟ��œjx�
+�~̗�Z��,>vNb+G�Wŧ5�C��_�o�}�~͆y�5���h��t�h WV�����ri�C*!������A����/��?�g���������*'���<�@�6�G?[c8�l8�R�+/-&�‚��������}���!y���=|��9w�'Kk������Հ;��z0��i�{]��E┱<@L�e1=�lN>0���īd�M(O���Yʱ��
+F��l-e�L�
+)�NBD��> �
+� )����1�K/��lM,��.g�p��֗�'��A�W`�����1�zW�N�"�L~�p������h��եc1�-��BR�b�tLU���'=)�9�.�{�Q�x)�����7W�.e��=s�s���b�.����\��mRF �N�N`��۟m����������3���xm�����$j��B;.4��[�4炒��p\�D+WO��<;5���lX�V����ͼ��-��:G�ș�BB�h��CK�8‰��jF-�}��3��P4�}">����y�<h I]�vB��|Sl�}ǗI����~���)\�7�����0wg��o^�{_��7�]
+?�w�^�o���+��UN�N� Lf��9�9U���C˛4���GH�I6�_�i�3(�~�������e�k!(�
+�`��O6��m�Y5�r�����]�o���S7Y-�����bh�-mP�k���
+����-�s^�6S�>��Aq�g7�����{_��Sѩ�bH���e˱��e���R�%|��rݽuЊG � �4h���%�)�7bF�$1�k2��U�.��^m����k�z����t��y+X�Jr����=Z����y� 9�S)�(��P<��Z��]r�7n��Ǟ���J�#w�'���T�k�fȮ���]Y)v}�Cn�����:��Xn#��`�n��E�:���w<�"��.���
+�
+���:b��W8���s\ ���~������c��#/�8P�3���]9JT�-��4��;���p�g^{��;��'h2z*�,��8�B|�(褋%��7��]z)(��'��cv��1��T�`�A�q3��4z�� z����ۂ7���+ҟ,91G9��&�����Bs���~e��T�5 Z�����H�s��/Z��0 bڰ��{� Q�}����F���.��W^b��E|B�=4�Ÿ|���Y�ʲCn�ރ��� �g�� 'g��=��A��`챘1
+�||�O.�'� 9����:&�v]�ӝ�·Q󂙅���
+g�� �_�֛��r��z+�������5#t~�M���脢'B�׹��,���VC�׮B�w���wB���Z9^�?l�u���Zse����E|��3�XP:��[>�
+G.��#�F���P��_�䝜�䜚A���S�+@���� q a[:)�\>ؿ��x�����Zzu1�_�h���� �`^����Pw��9����z[�k�������]-��:��CB��s�/�J��I��n�1t<q��z��]�<�w��2v����E�� �`������B��B�]VS]�/�]\��?�n�q/������{���������T��h���N>�9�Ӊ�S���w`w�=�w�{��M�w7�Z�塾foxs��<!(�
+q��Y1��JA��!�6Xwj\�H���Ah�B���Y�u?ګ�x���8������1`gʷ��'X�-���-�b�9�� Q��;0NHS�`��D��9#HS���l��`@$���c�W�X!�qt�q �f�$T����r
+�:���I����K��.;1�+u�'rd�e �,g�,��CLZ��jy��tf�|��5^w��%Ь�y4��F�ژ��)��0�e�
+�jط�l5�x��H�\��{n~m�<�n�y��<�Fw�� ���;��������k1 M5�m���;]�d���>4u�_�n�w�̓�5Ӄ��j�\��z�rZ�$�?����Tk��k��*f'��a=\0�X쉅��즩��Z� k��ŅB��]����cy�2��{��5�w�#v�NR�����!&zz5��,��#>S���l !�6J`�09(e8|4X�ħ�j���4M���Rl�w���t��:0~H�>��y��r}���7�)��(�g���e���h�ޠW
+-n)��Q`�|3��� rR�
+'����/�����L�,#��}�-_� Uc�k�]h���+�����,�q�1�f"�;d��a��b��I���Co�_��:^-� �mb�!�h|�����>ŧ*��� �3�`K����#�� Y�c�ƣ�؉��|k�r����k V"��b��
+�y��<pVR�1;K/H�,f��O��re�}��n�/�&�� O�� ɷ�Q�����H?��b>Y.� "j�;׬��V���-�*I ����`T�]_�F��}�T��&>���B��b$��#�m����#�=�Y�uo�1�q�!,��7�a�O:�����덧�(��+/��-�;�����r-;Kl�b#��2��βp�ZT�̥�����&6��!bg�O;+���2�+;+� ;+a��b����TYގ���충��9 X`��b�>&��@�gu�̞�j��f�R!g ��_qe}��������l�]K%"ێ�d!����Vқ&�G?\%�������&�9�` �/��j5�"��~��]��g5y`�0������˩�N�#"��~��E�i.��?�'J���W6�����U�A�-�$2\7Q-��/�,n��'%��ZFN�%��[q}/\���������d�쬤��Y�6Fbg�Y���\������������^�!�~�Zuj�OA�l��<�[S=�vt鱷|��x,�KCZ����a��Z�r���ŖO7˝v �n��[ <��p>�j�Ng�/���Jh��ܣZzy1��j�������1���14͖�kS���6#�X-k�K��Y���l���wWN���d��ˆ��e�'Yq!y�߰��_s��J%]s�ʳK�ܚ��s[���Ӌ��wWJ/,�R����bX��r:�ţ�V���&nLQ�3~�C����rÑ� լ����
+�0��-p���Ď����F{�` ��2��8A��u"�sx.���ri�,�_�]�}�ᚊE��bX��N 4���#vR� M��J'�=��[{�L�O�6D;��5��L
+8?bݵed�`ˤS,�+�~��)��y��Ԟ'�~�e��Op�<��dN���������=�2l�/%Կ��o�l-�Y���}���`g��g`�C*�)euO���@=�� ��V�Y��>�{�{b��|;K>��������oe1ߐ�<�rM���lA>,��Z�eﻸk�\�=�X�sԆk���'�-�\�F�X}
+�]���쎩`nȅ31cB}���D�+��Q��rL��aĀa��T�[�� b�G�ڋI��#S�.���=��g&�߈�"�q` Ả%��w|
+��4�R����TՐ\>���� ��X�f5�}�� /*�rٵ��<��>����t���/.FOC��j���(v?�!�DZ굲�WĨɮ�D�/pސ�E䏠~¿��Ć;��n�m�"�^[�|\��h�w}P�����bR�8�Ҕ��Y���c�x��U�1l# k��61����Y���= �@� 8�C�ڋK��똍m��P�B=�� �;� W���=�����bkT�d�|��m��G<�;w���F��Þ�Z~m)��L�)�}���Ih�����>2<�z��`�� ^3|���>��K�ص/陃�nRp�p���\����nTR��錡�˩�a��� ���6�C��z��4:�Q#� C~��%���%X=9L�̈����R�3 |+�_"&Qō����׀9��9�Z�(18�
+�-\O��eb�E��#F�!�6�!�e�+E����z��j��zۘ%�k�ƞ1�Ä]_[����!���o�ƻ�ܒ���\C��%�{���7�Ǖ�2 �k����K��{9$�F<k�$֍Ź��7�s_+J�מb�M��A���W���o�Z?ߪ� �#�9��,磜����/�Pr�OK<zs��b'�����b��f� �(&��Y?�\JI.MyJ��I��vg�b��o���;z}�8��uJ�9��Taq�|^Q;ΰ�#n�7�)F�u/V��/����-��Oh%�X*�����3q��>0
+X�Qv�_�����A`m� �v|�l�G�d� 2��j�/A>B�j0� �f����;�/'O�g�.�s��C���9|Nj�|ۣM�yJ9�%�UB������~�=ҁ��zb}%�:���q���|��������]�~�E���z���J��Ib���֘�o�2��я�����M9r�4�#��?��I.���'[� �-PK�[��L81��ř��2�?e��*���6N���ƫ+Ď϶J���>���a�)��q�X,+�s�Z>^��O�5���'c�I���|͙�\ǧ���r�?X�YT1<�|L1"�F)�C|8�!��)���k�&V��6�G��>�C�.�M��k���_��R�S����Jb�9�����)��c5��y�F�K{�k5�:N�<� �]\w�I�o���J�)6d�`L�k��uL�Y92�VE<o���
+xZ�qfK-읅�XWx�/V���C� ��<����e�t�,��j'ǜ(΃��|���0Lg� �bf 1�U�>�ܢG�Z:�XM��YA�W�LX�5.�\3�#�O��#�X�賳5�$�k����'ȋ`��Z%4���9����Z����>�'~(����O�T<��JYN>����
+n"�8/��E9���W���i�*.,!&8{�ґΙd��������k Ĥ'�s��p���XO��
+��'\{�ۭ�K�yH'�; �r�����1���ݻ9���8���#؃Q���i]_]�_oooooooooooooooooooooooooooooooooooooooo�??�����/��^�g?��u������X{�9>�\b�v��DžDE��&;oė��9�]�����K��Y�b���M��]\ٿ�3ط8/f?�|����˴�~���M�ՙ}��36$8$�}Q��h��M��~ɺ �V,]�b����W�Z�z�u����KW-_��_��/������������%��/��/9d/�G�{�op���Y�;��ǘ�Ş������d��� �~p����~ٮ�����$wg��^q^�Lo���?^�:�W-_�v���y��ڕ���oO`?��I�Z:����������̡W�[��y���k�ً���\��4��]���l���AsO�������g��>wY�g�V��h��Cf��,k�9�2��A��ڀ+/5�|���f��}�=�ƃ3�0Ƙ{�������].ޚ}{�4�@�22�������"rm������)V�Z�σ�>���,���ô�I���>��ݼ �w�4�����Z��l��Q߿ߗ~�[
+1ヒ�!ebH� �"cv�4��cԕdz�s�0�L�-��Gc���8z�qLC~�t��`�?c�`<�'�i����˪��1��29"Ö$(�g%4�F��DI�x�I�4 ~#H����A�����X����!I"Dgؑ4B`��#żьS��!Gi! �
+#��c�!���$ �n!�V��8 o�ǒ� $���t�KBBU��5���D�ㇱ��b��W�WKO.0dwO�(��b&��[AZ��{���l�߃�P\��#�I�(�}��70C�l�$�9�qU��c��Z'!8{��!���Rt����8>����dM�h�&�>> �L8>O��!����f�K��G�2�CF2̞�Af^Z?3w/U�%F�p�s<�_�
+�ݞ�/���荡��t��i0>-���c�v@����9��V�dk9�r�W=Z�(��́h�6�Y���s� i^_3H�u@�H�`)�-��$k54���5B�/�Y ����Վ�qs={��5�+I5NjF�dCN�3� �N�g$9��R'؏�hÇ$Z��-�����@�"��������jCf�D���lG�L��HI��Ә�I��e:l�'�n�1&���dgH*s�dI2�u�d��w�
+򃐁�}B,�H+�� ˲c3G`�Ҙql
+�|�<%(Æ$���N�ȕ�T�$�g�
+�[C��Fq������b`�$�$f E�12o(=�H���Ԑxt��i'Fe���1�9"��И^r�8s��T�����������6c�Q�4IE1y#tv/�=��q�g���̄���"�mi�$��ѐ�>]�/%�&�Q����F�xA�VRz�d)"��K4߳ݍ��=��֛!�R+G[��0v/�,9���C�x�wф�1FZ�dL`"[��f^�Q�U�>ȵ���0~#D��~�`�-���2{Y���H��6:C��d)0�����A��O(F�L�Ր��H K�����h ����O���k�&Ռ5Ė;��vjX� FQ�)��$�:�Xc�UJ��Q1Hf`T��[Bc��@�<I�Nj\�#FIJ/�a,ݧ�� r��eu�(6FQ�dv]!A�|/�E E�����49�@%)����t��g� ���il��d�31*���Tv�İ��;���Gct�Ə1Z��7�=4�_4���eCB�5�x��m?��E�X��i�4:Jc�G��
+N��ZS �fC��4�78���
+���Y�S �c��E �1Y#��)5�q碞�
+F�0��0QN�K��ϴ%l I �NŨ��Q;^���� YW�UH��Fv/a��a>� y
+18�
+�n���]���Ը��j ��-��5�5z�=��$�?�Jo2��!ف�a��f�_�a��gwO��[ 0S���,���oC^6��&Ya�k #R4���^s�H�/�`��P1rC�Ձ�W�Y?�]{5�n�`l&8ǖ󍱄<ɠ��K2��G�a)��HPb�G�7BjT M��H�Z�9 c���-9��'��4���4�<���ӆ�|Xb �� �Ҩ4�ojڱ����c�Z�;��S!)����Q�/,�oRKNχ/2$�8B
+K ����-��[�!��a4UM-�.-'׎� ɐA�
+�9�N��$�
+˅��l;���|�Wl�(\K>��Ƌ�����c,�~���f ��%f�o���Zht�����_���JQgA���#�//�,6��2U�k�W�Gb���V>H �QH�����y@��SH�#����_L�H��'fB^�
+��AՂ�YRt�|*d��7h�<׶~���j
+�����M�������z���� �f�\�������P@֜�<7�dX��;X;�(�L��l���⭰�HJ��M���X��n��Qd�V���C[&���|b�֣t�>q���G��+�����$!����dk��c`�`���Q@G�:ct�K�j�� �$�xm���ps���Ps���C}�g���g!&�\�F)��� ��Rl�H�'e����f�E[�b,).Ʌ$[C�2�ZV��d��-ћ"��x�xK/��J���`�z ����'��$��t)$}8$� �V��{�<��� ��g�i}��eVO�:mqӟ��u��n�&���S��c-�%� 7����R�+��JG. �
+=�R` �1�#�7�άC���ǧ@FИ�r���jT�-�O5�d � S o�5E���Y�d 9�NYn )��q�����*��ǒ�e1 �� `��g���gK5W��$�\0�������~�'�|����"YP�v�.���dd���@מ��y|'�5��-�p���� Ŕ8��R�Q�� ��x� 2ڧ��4�q �B>?��j� H�5�p��c���$�ւ�z�Y\p���}��&[�~Vִ~�����^
+2�²m�%�S������Ȑq��D�ql- �4�p(c8��joV�x�|4޲��J���������YC:�:��9%��|���R�����-i�1��%|'��,)�Q�/�2}
+{��rzJe��'cv�t��ߐ
+f��05���[A��i��ɇB��T�9B��P���S���:U�k��<=C5�j�!��$��Q;��咞Y|��-�>J,�~&�?5�PJ� ���{_�����Ax��O�K5wWB�P+�X � �> X"���O�I���қ& ?B҆Cv\h�b��|+I����1Y�h7�G�-��� �=�.w<�)��w�\�I��ŕ��)�KI����K@���:S~�>��+����Kţ��u��k�ˀ]pכ�ufWXS��`u?Iȇ&G����d���hm2�G��)��Afu d�ѷC��d��?�5$� A$��Sn-GW��_F���0d�a��q�c*G}��ͥ�L9��(% s8l��C � �W�f�v�ߙ^7A-=g��@�r���Q��H�$.o$���O�Z?Yǝ���/��_� �ca^j�9����F�kE�X��OP~����)��G�ȩ�O����I�E_R�2z}�襰|���!Bo��b*���cLrC,e~�j�������}��C��e�@�1�ɓ�$Q�L�5B>�bj������#��_ GA��6e
+{����.Bۓ�|Ǔ-R�G�Hn%�Qh�d�L�k�/��B$��6�裆����[�����HR,,�V8e�z]D��8��&�����S.�\7���7ȵ�C�#c�F*�ͦz=�t���E����\|~�Psk�\ze��xl��4 �'�{m��f��.�6j��q����&��@2���Y �����`O�P��{��n�~ �
+�/��gQ��[p�0Hq�6e��~GB��7� ��ݯ\~f�� ��7H)(k���r�Ö����Վ�[��㐥��{S*�C����2�g^� H��'z�^�m$���������:��ߒ���^�G���F�9-S咡9�v^@us&�& �1�c@�_S~f!jz���b�D���ub�{��
+�����Q<��C)�H���g�)8a�O^�L����+#�^�'DW: ��w�D��;�� 9��3�4Ւ,�C� �3��Օ,fC:M��X
+߉�����F�ې4?��s�y�Kl�
+�T���2�GDd�!�'�BL�(c8[�"��n#$D�Tq���?���0h��T ��s� ��f�<��ߑ���{3�AB�7�Z���Ppz��r)=RV��?8�p,'E&�}�I��� ��,䏥�k ��G뀍2�]wLE����w�|{f�Q�B����Do���A�K�=7 @�g�|�w."�mI>��C��Og%�'B�/F������a}`���.��m����9��|H�0`!p@�֮��<Ѝ�'���( �'@M���5�}Q���,�[lV�o,%�
+9p3|�I#�HP�M��w�5ҡ��F�7����䡤�ߴ��iE����p��p���J���QnQ}����f��9������J��ݵ�3!��{
+� ���$7Z=��Q�[���J��WWH_�A�~{(�d��K�f+=�����o=����p�������\��BB�_l $��q����G�D��L �P��.l��
+!!rMH�_��o��ւo����S��=a��{���l�X�I=�����G��L=:^-<7O��v������� ��JީYrF�da��=��Q� �k�K8�>�[0��E�ԍE]��juԿ@x"�CM Jn�* d�>!/+4|�F���E�AƝ���Ԫ!�{w{j\v�ո���xJ����S�|� r��/GK�?cM�Dյ�8��[K���{W����?\���F���J'���Y�lȶ�8s���H�ߺ���b� �"�w$D�p!!�.���W2�5[O<Ξ�\Ӑ�4ـ�P�����צ� �`���X3���q梠o6|���O��� ��Θ�����;��)jQ�LH�n,O����_���-E����6��}���`�t��Z�q�$�ѻ�� �3-;�
+��K�]��'��>�z�=`{������ݔ?�v=?�ƹ�`��s���k�߇4z���J��B�G+p`;�'��RQ����x�j$�����{Q�whO�䂵 T�Y*&w���=jM�K�|�r������R�_턽��|�m�~‹j�Y�W#3쌈#@����7�Vйb%�~
+�!c�g�p��ER�eWr�f`O�/aذG��v/qV >��yjL�H��ʴQ�X}j�Rsc���$�
+�}|�j����T��Ǒ��G�[n��.�/}?�S�x��T���&����±��B`i��ov�)t>�&5|�V9ra�R88�����O���U`O{�����Y�J�B�Ӂ/G=�o�b�r|D�-^l�ld�Xx~pЄ��oc���i�$���՜["��1�P84�ߛ�*մ�sŶϷ���(w �_����`�N���߱vO]���9LZc�1[$y��S ���?�AD���ӳpF
+�/�D�3�Mg>P� ggu���YƊ+K���A�o�>��D+�Sa{C�Qଂ���L�ʁo�Pa�,�J�#D� �32,��!�r�Ԍ��h� �z���Ʃj٩�8�+ሜ���� �S}߷��Bd��1��;�>؈� $�ɷ�&��*>=��������8���4��*���W����u��Sn� ���R���V���u‘3s���cq&„#b�O��;� �Q;������A�������؝�7B*��Ȅ�,��8pC��t���qvk������]��/�����| �Y��J�氚a0.$���
+�� ���}TԔ��ӎ����c� r] p��&c�{~bp*�}�c!<i8�m�윂=Z�>|���� 1��@w�Nb� e�tΠ�\��j�rF���Qy��o��<,2�Ne����D>�{��nE/���<�7*�,"tI.΁��g�X�E}�����
+����[�Yc����cb��B��E�?`&���g�|/�壇��<CJ*M~�$�5�Fk�-'\
+�K����z��)ϭ83{ńgo�t|l�8/�~�b�� �����y���y��G���]��O6�q��y�:+��"���������ɄfIm��^[sh(���Fh�?�ΉP�̿��'P���u
+}?,�N
+-�:��c��(��}BMg���,�[��DY�g�Ef�r�)���S"�tMk?X)�r��c��7�1��gs A�����q@;�\�Tsg�����J�g�*n.�:��y�[a�8'��9��R���~��X9ru�M����@b�eW�H ���yXJ�x��sr�Q��0���r:��^��;����%�{v]�
+��$@� 7V�
+�wE�� bO���vM����3��˭B��5�oU�
+Ŏ�A�QK/-��-�(0ӧ�y�m�7
+Gf����H+�w@�������q�X��\G�G�a�>^%$u��'HE�f ���P�^
+y'�s�Wgz�<]�u�v�o�����o�O��O��߂����u���_x��t���J�W��#}�K8�����<���L���A��֯�z��p�ͯ"|.>�7�=�Z�6t<�'v���|�&�W���b���v����o�S^��f�R~s)jE߼����ꉾ��}�����;�C�&`<�O��(���S<�t�I��J�n}{P��4X��M�r�[��m���&}�ۥ��j��߈"�����<� ����՛��t�[A��g���+E��R5\}�{��ʵ��b�{��/ko�T��}O �(���P��&i���z�@�XKK݁���-PA �R��+u���{�of�<�����w��z�k�4iʚ�{n����3�c�}�PG6GF�ٌ��q�W���i����s��mr�y ��f M^i��3�ԑ��KkSC�Y`Y԰k����CDސ>q���3b���h����%K�g���S������у^ �m�Ƃ.�~�,?l��v����|��,���XX���=�LPE ��� {�+;ω+k]�^�:�=-=!)���y��d΀>:7*�h;�l\����.�P��:���̨�.-������9E$A�� 5}��I���^t�ߔ.��ou�$���$����� D9��Z��x���.�]E��v�2��E;P�"��yd�Qv��(�>�ٯ%���!L����v���C�����m�1����Í��p�e���I���9�ї��-- ��';�u3A<�&��,�i7뭒�z�"i����(&�|������˚/H_��tH�w��T�Y�*r2TvJ|�^��|��v�
+��P�1<�~Z�Ck�tN�!��j���v����z)�7��nm
+�•]�N_\�f&z�xT��NX��苐x:,��u��������ģ!�~�mI��:J}�&� &+�O�����϶x�����o��W_h���9Y�g/骼,�.�V���?�B"wTK�:�]�t��^A=����S�Z(2���֣E�tr��j#��>�:F�� ��}&��c�N!��jN?�2�o~5�
+>S��0��[�=���CR��5U�oOU��!��N�5Β�=��#b�A�b�bP��� � �{�4�͊l�8G����G�G[„�=����[>;��=�7��x�'}"
+�P��٨.C�i���(>��*~T����kх=ɻjG��/%ɍ:d����[�u��� ��>�ؓB����0ap� ��^Q���4�3�[wT���ٴ��ۢ���YQ���E�q��6�(�ۄ�U��:��q��և9�N���¤�]���o���gO��P�hE(��C�K_ ��%��:t���T��̕�lϊ �M����p��V>�x�-�����f��2�@G���-�h�q��iO���^�Z s�kbY#꒗��f�U��G������8��O,.ou2�( W���o��De�g$%�Β�:w���E���$��E���E���W=6ě^ ��fh�5v����ŵ���35�ҷW|?�a+��?��O�d谨�9@�W!����^���/��[C��.���� *�0�*~��|�%>|t�G[%��"m�&�?��5N����A.�~3�z۸����&z�bc���A���^ZXc-)h1�ޯ�4-�3'u��'�س>�z�a#z�rR����I���q�%V��{8�'a��^uڈkj\E��^Ҷ���}%1G?��u^O=�{?�z�U�h�>P�Q �lp"^�Q坧��z/���1V�/�u�J�o�J:ל��Иw�5=�Xgn��HQ9:�'l��8����h�G|&RE�ym��A��1�� ߆b����"^�ǝd������]E2���`�g�V=���6a�ws�}FC��|)��e���) y���%��&K˞�qv]��εfg�v<L5m. Dq��ݎ��ZMD���ޔ;�5I_ל����$�;D��Pݭ>ǻr��%����U�#��k:�6J��]���C�k�����
+�ػ����q���h��}���]�$õ������Wqdˈ3�c��~����#���$�~�3{�pV�����!,�|#?�n���7R�Yd��<�H��d���h���G��|٢�4V�[B��� �?�
+��>������dM�9a÷#d_���'q��JW��_u�W��rF�p��P�1���ߏ�u\K̬�IH��M
+i�����z�=#զ�~��KM��sg��+D��3Ī�a�֌䣝�q�C���?�����E���v�8?�K>\GE�lC�+��o���{����w`�ך���.*�� _����+~�igZS�#��� � s~�Ɣm���m���7aOG1Ic���R�=O��T��>4��V�8����7���5����y'4�fJ:�.M]g͇Ke�-���/�G���_���6�G߬�퍽TRRs9�|sB����j`���>I>1�<k9.y�b/yW�(~�bK�m'��&���A�Qƙ��{ɮ=?�t��t���4��[钞� ���1~��$†�X�ߏr�3<㗌7�o��ǽ��N���8���qdǀ+Y�{���>�g[�6���Ht�AJ�V�6kyd�u'ɪ�I�Ѯ���ڲ�]Ze����n��1a�1ת�dw�b��"+[�K�.D׸DU48E��;ETŸ�k��**\�T��\�� � L�o�J0~!i��{"Ú�8%x������w� ȇ�"ѣ :�#����-��%�{����A2�F�vP��$Í��OՑ�Ȁ��;H:\e6X+#;z��`�>`�� ǥm�$�uf��e> ��!͗3϶�\��}', ���p�� �p߭x玘��z���un��F����׭N���cQ�sdQ�s�:טB8�2k�㲫��ҫ}�jC��ކs+�U�F��h��FD���{}��w���*�|�ZJBͻ�bD�[O sG��+CZ��6��Q���]�����W_,% ��!5�����L��]�y �� �y�0��dPD����kM�8�y+�l��¢x��������¸ mq�)�^� ����9������۶� ٷ-4ů981��Kv��-�n1��8��r��,�L|V�WP�!K��=ڝ+��Bw�H��.�o����N��'qu�+����Ю�オ��}�#��"���B��S��/�7����=�SXU`rbI@|v�_�[S,����Ț�iG��#����c��X�����v�w2#�B�C����;o]��-��Z�/��Ug}#��qBǫZ�����1��^1w\cJZ��2[���$��{�[����3���O�f�O���bCj/'$W��^+�u���?՜{�9#�h{�L:�.ܲ��L2�!��*i� ��b����!��k˶���m9�'�sS(H�|k5�,���}�ՙ��}� ;�s;�r�̤�9f�>z��P�r��^�wsL�iS�E�kƐ��m'��"�s�2�=m'�m�I��"|���Xo^bd�obR�O�M�-�ɯ�Y�^��h�3�!�6fH�Q���+s��s��V�O}��Ǿ|�0�`�F�m�x�]��+qY������wS��c3b�/�^��I�К�)� ��[���nQS��d�%�t˕4Ϻ�� ��)7�}����qjN�>�y�t�:ڲ�8ަ�0��=-3�)(ӫ!:�xWN�[�E��ǝ�o���:ڦ�A�]Wn�C{bbB�Ob@Sp
+��=����|s�72���cxot�Qd�l�����e���� �/�a�j���|d0��n���*Cb�ڮ���܈!�G��� ��O�0��Z{<l� ����R��*w�)|�w�7�����{OYv�_�u/��C%�(��'>-���-s�ʅ>���9b��1�#<J���k
+N���S���|g��w��#���|�Ya�Klx[@��{U��{m����d��_ �3���G����? �ݚ`�ރ`�M�u�ؼ�
+a^�Y���> 1��'.� ����(������Ǣ����Wп=ku����y��)���r�8����l������,U��Y`>Ps�>_;n.�4w��}�����Ga�~��>�s�o��f�i�s�l��`���`��F�t�v�f������kf�`��1����s�{Ɗ~��ެ�T���/���{��2�跕.QOK�cҪ}��+/Ն���F���H�͎��,��bBt��x���2����Р�kkTBC�����p8���C>- W/���z�7� ��L3��;�0�t�A������a��k�дR�o �/���^�Z�0L�$0L��T��*�+��U�M�L�A�(���'i$�.�icty_��_g�����`�u�W�� ����p+�b]hR���ج�~���|e�/�^+��{\�!{S�}��'�c��w��7Ş����љU>q�5I���L�}�.�_�΄�Ɉ���;�١��F��Yn�^-�j�b�~�j�m~J^�?o���ڶV,Z ��)` ��"{W��R�w9 ��ϊ�I���o��?)��M����׀�[E`,���*� �%>��� �ſ ��/��X|).��?��[�ػE>�/�z����y��;�
+����/��[��'E> OJ<��zƿ|���O��"�؈�@�wMdBxe`|X���k5��v�ݬ�I���e��fvjܞ�asA~�Ɲ`��T�dzg�ڜ<��
+�����چ��8�?��{?���6�'B�:�ӕ��y����}��N�,y�fF���n��(4��;&�,(�xǵXT۷dơ� Օ0�� ��b�m��e���r��j��778E��u�"S�-�
+e0�k���`���߾W��?����P{�|�g�ǰ=3��x���ޟ��R������7k�V�v�1���m%���a?�d�q/�tmv���e�O�d�6���{�7�1l.�Ji{��V��P����W<�ϸ'��q)%q���d��̜��έ��/������?�P���9�c�}����c��v�d��Qw�ĩr�1 �?36�-�.������?�����o�S���dT�y�=/�N|P��Q�/s���E�OMX,���Z_�U���J�pݪ��v;~zC���iL��|o|w"�O�� f*,
+0Uq9��� L�̞�֪y��G�(i�e6Q�o=`�"��
+}e #�נ��*���en����17a���g�������r���V����|%���x���d�P�Tǭ
+�}��|����_�.��,��:P�}e��+{��#���-���#�]���Ω
+�o��_~��)h�T��銪�pQ��S~�%��L��@e�z�2~�1i+�=�X��~:�`+�.��Δ��?�� cI���H|{��Ť�"�Īb���w�)���Ş���y%�-��} ��R�8�z\��L���X�I��n�_~�� �g���q����ipU����p��l�gms��Vh��x`�2���T�i��K���U$�` ��wLV�lx��",��[�]�}\�%��Y\B�� ������/0+/w�m|����#�Qf��s,\~ٶ�0�N��ۅ��8�3(�����sp��L3�g�9V�9�7�y��$`��`�vx�֊���8���q�LUm0w���&~<���8Y���b�-[�^��� My[��/���oJ�[��ߔ��>Tx$�Ը% 7�$�4��6Tx�����#Y����3t�S�m���Ϙ�����&�w��Yc�yW�9��U��7���o��o������3T�m��� �_&K7ف5�`��]�=�}�� �՚e�N�G��ᦼ@��>�X��;��S}�[lW�G2�sݍ�Y]u]ͮ��+=`-���X�N�߶͟m���x�,?(+�
+ �+8�f(,��-S�N����e`���m[��9;�}j@�䀹[�����`��;X� k�d�O[,����u�Z%��,;�X���.::�]hL9̽�`��{�=�1���=���=���=���-��g������̾9S������|C�E�
+�@u�ئ��g��'È=��{������±�� ���`ެ�`�R ,�v �<���x�Z^`��3X�},�v��1`���=��S՟0k�����Ǚ��Pߢ��g/��=�Ooz�]T��j����s�ɉŰNh�re�!E_]T�ì�3gӿ��\ �0z)�X6q1��ˀ��R��A���ڦ
+�ϐ�۷̞� �L\}#<���f@���
+���DN��1����������x8Z�\��p{�PXT�nb�Ju��AC0��­�p3 }
+�[n
+6�`��g
+[#{&�~���fԴ>0��QƆ;�����ߊ�kʉ��cך����Rbڛˉ'��R��b�c2��.D �8G&���� 1��S�k�ư����i@��ٜ"��r�/g(-�9�|8U��:�S6�9K �25��z�x rh���"�g�j�O�=fV�O�ۜ��A��}��xUM�s��A��50k52&��ӼO�I�KI��У�ӭ�2Tϡ�嚏Q�Z����=���5���-v��3���# ����Y��|����m��3�#�D����y`��`�:C�A�X�;�U6Q`��� ���l *�����M�(nr��#�jŽ��I;�'�p/�өh�^��ɚ�� ���~���2���YZ��*�FFװ�u1"�6��2��bP΂ڕ sg�ڨ.��ƚ
+l��z�"�$�ێ]W��0e�@�%�Zf�f-���}!M�w��(l���X�=vוxUN9ء���u����V����˜��:P_J| �Z/�b�Ql�j^D�j��<�������#��?8��iP��0=�nN=�lNJ���m�o;N��8%���8Da�����z�i���\+X����3�v+u���?X�wl<` �m�����`�j�~' vb!r��>��B�ͬ�/թc� ��A����æ�f��s�E��oN��?\ ;J/����}� o0ۍ+��!�5���e�$���F}���|o��*N��;�hq�3a폣To��o]DjM����x���%K���RUm0��� �Se�r0o�N�b� تkva~`��OU�]:]��V���1�gD��za�ָ���������?ڜ8�3Gu�3\�� ��;#1��X������3�з� �b��ڄ�1*f U�'���<���g��X׍��=w϶f�뾓�����b�8�'��yY�v�K��|�>�N��nS�-T�Vn�<��e�ZiwP����*���z���W���cm�k�1{5��m���������Y~�gLb��̫>,F4����@��y���}�l׫bt�m�9��9%��U��>�����CF�czL^c�n`�� �>Jt#�ժND��"r�2_|"j:��`���!�`����K��Z"p�Q5� �~+̛������m*�< �XSW��;h��4M~X�
+��>��ł�������s>1ֆ-�42�����c^3c)a\Lz���*��`�x�� <�����킚߭��/�GƉ��3��c'/�p1?�q��Y�x4J *�`�/�c�/wwLDJŒ�W��!��^s*m�]�� }��|�F���
+��W�r+r�>�l���*���-
+0���V����9����/��Z��A�_���W��._�� �1�?j�Ïhr����^�&&KFO�[}%��ԃ1v!m���!�߻�����ɕ�yO���K.��?4�&m�r�u��CaB��G�l�?}�8(k%�X��4�����p6�,�h<Av���N>��{K��!����l�$�}� �����?��XΚ�,\��ڃ�����Ǭ�`X_Akt# e��м������Y�+��=-0�
+3��8�2��;c%_q�
+y��c����{���ѱf.����Ģ���MG��=� ���l�T����!#���c�� K�1�%K��h�}:d�˭Df���fE������Ʈ�v�z�Ap��^<jM4:p{+�FC�r����
+���*�?���q,����S������~�@����kq<�R������5^B�f^�������Iޏ�&�I���W��[��B=]`q��� �3��.�E��L�~�&�wيkj��~� ��b ����0��J�[�2ym%~���^��b����ڂ�W+� ٳ���c�JB��J쾗�>�ٓ�S�EM�؋�W���x7kt''uh��׃Y�bO���R������R s��"JN#�AU��٠��9�[����g��񽥢{6v���,���%&!� x1��s��s��
+�^��\2g� *�s�l������|�D�d=-}��� ��x����\^(5�'|�� ���n��ݎ'<�&Ly��6�E�����4{]���%�w�<oDW���ie��e��ӊ2OIQ�9��Qm��s���u�4��7g���sZ(�߇����q��u���\��Y<M��9d0�����>���7 ir���y$�09����0��Z�/c��� �I�)h�� tv�5m@��ؽB,;�'w��S�l�+
+V�6g=T,NyN��������C��ҏ�Ͱ�|,��.?���b�,8q���������O��&L�� ��w#~|��B�*v�u<�3S�ٲ��1b�����jv�ެ�f���=`txw�C��{�n�}��uf��[f��0�1���2�͌�Q)c�y���1�%ch�t��I�1K{��
+��`��E@s�.`��
+�]���d.7��[��I|��=�T^��yA���bA�g-�{�,���Ba�Gu��l ��"82Ix�uIQ�Y�`�`��\HQE����7�b>)sq�����e������Z&׿��$Un�^������Ss��kR�7�I��H������_����S�]��0��$vn�&�/��:FN���r�;��]+V��w#8�p[�qh/b�IU��~� ����k��i����o�
+��!},���+y�=�rϘG�&C�<����C��a-�m���]�I��g>��7-A�G5A�M��
+]A�ӕ�)y������"?*��WοM@ �#�C�4aN��7�T13����W�:���=�Fg��ᙕ�¬���=Ā�ޮ�������� ��٤_�"�� 폧._Y��<��^��h�K>�z-͢��Gtm�C�<_O\~��:�A<�����7?�b��xh�*�-r�8��6�xg7�t�隊����vB�P����xVrB�8e���)j�t�
+� �M� �־C@k�~`l�e9�\��&9���✺4Md}\ �mE�/�SwKr�{
+}�m�3L��I�X��tH��7�.i�0��-��au���R����Ǡ��tY� :$��Oڨ��M�O��9B��������&��h�|�6����I������K�~7\�g
+OLD�b���x"���C[��>X�� ��� ���+�0��a\ ����xR�^2�]q�ψ� ����:ho�\��ڪ��k���8�)�W�|�|�
+~>l:~A6C �| �~���au��a��OJ<��ͨ���؃a���鰈�WM���1e.�3;���oṟ�%O���V����W�/%���1n��庂�`��r�n�"�8���o{a���1&��1��c�s���� ��w�e�ذ��S{ω|sy+蓎��Y�([���IE��q<b%�y-<�1Q�k�$�ǝB��M{��}��kH��N�E��MZ�'�6�%O�m��E���<K\�E{�(��K Y�."���b�b<��f"���'���}Q�Ǖm2q�U�{_�� y�Lp6q��6����wj��z��o%��Y��߾rX6aX>Y��6��ʯL�җ�"�nB{�$�n�k�䯡�N*�4 ��Y!��8�?M�=��}���xP�Q����� �j�
+>�Swp�ՎHG�84�.�QO7b)M����}�A=v���YM\�����A��4!�u
+���{�ɷ����>�Ľ�o��q��\����tԹ��8��^����p�칈��x����w����DO������G�ۍh�
+�7bH�Ž{��N�M"�2a<����Y��짏 +\��U�#2�5�=���\<�_��m�����h��0�m�0��~��:��jYt�7�|X*�2z��~?��>t����T�I��D��Uœ ��&�fb!wVb��Ve���Y�{y7�� �u9�`۪�`Ì�`��M`���СC@߈����c
+p���z<��<� t�VF�A�_�m�ZD�?������`��~\���Tf�!<�]1�1{��Dp�r�zGr�F�l� �YFy&�EL,�F�P��IBv��[\,�6��E� Ó���>��#���W� RJ��M�]V�[���C_��V��e�2��+���g�ģO���x�1��)���c�l�6-\ ����jF�o
+
+��b_lƣ�n$����� ���
+8DA?��E �tw�e���y���"v,p� �m�������z3g%��C�G���8�=}X��o܉� 1a^��82?8��w�ؑ�߭e”�=���G��{��J�L%j�����e�I�M��`�D�P����_�h ڛ���o�-��_5�i����ӄ>��9��yÚ(߁��)����X`�ç�КWl%�rZ+��3w�YsM̜5������C���]�G���R^h kK{�I�����ӊH��e�X9*�N13��'��q]��ѳć�ƙv/���%���K����I��� �1p�U<0w)��r��hP's; �>W*��j�ijZ5D7ĝ6� wP��&�x����h;B���
+r[��K9�HϘ�X�ݵ�[�������ba���h�*p���9�(c����Cjxl�va���G����K��T448`���@�@:�H�K ��0����,�����$�;�E�T�.��$� 69ݺXV���oe�2��KX��<�DF<و�����Q[p�W��J�G\��A��^��6p���K�*���g���sփ�a.�{u�0�eI:���O���O�Ndy;A�V��ӱîck}��G�*��1h�4��QA��!�6����L0+9�� {�N�L�<���"���%�5��]���rF����K�W"�;��]Z����Cx�O�5�ףK�t�B�q��x�A � k��!��„w۰;C�حO��ز��{���&t�S�C���l?�r,�~�?�x��)ùfa��]�PAk¬���dv�w��. � `dH�l�4�R�RĦ�|����E�����Xp�m����"������k�"���䭥"�mEl��d�^Y�{�ei�X!H*�&�j���^"��2��n<�r}��@��(���t�+��D�~��C=�6���]�e����~h��y�K'�A��\�=n6��ۉ�Fh/.~��=o��.�RB��IDF�&�ӫ��b�W�\a`�r�C�2�Eu4�f�)@|�����c�vK�
+��j=\��BLy�����P��>(=L�j . aq�0 1���C�k��m�%4�B�XtH��8��S�^��ga}AB_A��fQ��3��Y���§�Ĺ��� �I�)��8��H醰:���S� ��������ǃ�I_�j��:'�t�C�xH�i3!���71\���F��V��n����(@5bF���!|c5y1}1b=��[{i��N��G���Q]Af�>4gÌB�3�='Q>� Pނ]�?D��Z�twM`-�j2�D^[�l14���9| � ��.<�8Fx�c�mu���U�%�>� �Lh�Y:(Ѿ) Gq��^���' l�t )`L����X��C�銛�VD,��g_[ƲT�㥼�t`�
+:��:��tg�r �)r�GW|�������ዳ�w˭��}�Gǚ��F����%]�̻�"�^9�*߮'Ѿ|�� �=�(�5�0�|� k��0��*�Q�qZ<��n�k�tb��)�IFH�XrR�gqVѐk ��% -�� ��U�Ӥ�C,;��DĊB�%��O:E���:�Eq[r�Zjq���x3��!���zQ0�'�~�~�K�,C {"���6��*&bk9��7��8��j�� E����\���ع�i��g�L$���s R�o�9q�𰣒�1��B
+ N2��� �X��G ��`��q�4�P�>S� �*�ˈڅtP����
+��` ���Ⱥ���nˌr��8���!�j>��X-X���jʻ���8৽' �l0��?uc�JaJ�n�1~Wd'oBB�HXˑ6�cQ !����Sy�v����ʎ��yfbvT��l�d.@1�( p�SJH��)�hϨ9H �s�Ê۹�G�d<��<��V.c�s�Ӊ�.c�1�SD!V�{�*xu9���7��ҨGdT�S���̻�{�f'��_oZ<s���3'ӛ5R� �z����7�Q,���[�%'�>=T�#�+af}�Q�1������Щh�
+wI��j#����~#�g�n��f �V�{}X�j��`. sH�-�����!&7�O#~)b��g��ay���6���
+�@�m�c�vHn6Ғ��zo=�.�K^�_�1�w��O�L�0:���+ظ���\gcG�*��
+��)!� �!���D6��%���Î:�a���2g���`~�b���cc�c�
+b��}�z3���������JGZ]#��q��T�|�
+�a���@|��j�'��9cl��jt��x��zR�t+�K�;sω���dz��E9�,�U�rK��=i�S[�`��usB�־�����H���M���O$ ��OĎz�7���l��`�Q_8*�s)X�h�]+w�=vm �崐�W�����7���'�TYa�@e�[$��̹@�'V� �Eף����BTF�b1����$aZ�^���bМx�I�%w�E�c�}�87� a�el�d�xv��0��F�'uu�@O� ��;�a3����4����wl������G,o�}�ue~<f~N�e�CH%�֤#mBvM؜UB|02�d�V���_�{�,6�J(ލg��G: ��yb��%H@\����=��z>�ӫK��8Ehq\��9HY*
+�[�tɜA"oА���m,�)��r�6`y�c���JS�O6��-���]��t�И��4�&"�}�e5O��!�R���|=��F*�C���ҕd�I2�����H Q�:���\�X�����g@|c�+{�s=XKƖ���>��� $Y�\��Z��J�!�'¹�Q䓴P�9WU���(ӤS+��m�bs2��W��X������41�dΰ!�7h��-�:)�A��ظ��K�W���#��ĥ��C�2f2;�<�K��i8��S�;!vXi�#�ު�8�l����'nm��4*�Q/w�h�B�YmZ8�Q_��k�ȸ��iϸ��#O���®w�����k����|!��3�%���럵����������!q.d⤓�
+V!߀����9�d�;_ꙶX��
+�
+�Y���wע>D�%�N�#]>d��zmij��8��z��
+)k9�\�@qi^!����B��φ+#�%��1H�P�
+�+��P�d#⨣�P�h[y�������T���t�$�A�4��������l��b˶��ni�;O�<�G��B�_I���5U�j2���j���I������G�7F������M�T��"�9�=靶
+V���f/D�gd{ig������X;�s�O�� �m!�y�1�j�6��"��E蜨��)kױH_^��p����A��a�����J��oA�ၹ+��a9���먘��Eiuڈ�Keu�"�#�ڪc˝Ǣ�������g��H
+�--�_y��5q��[k�uC���wm��̮+��'�^�@k�|�s��uLü�uIV�9��
+圬^1��E��by�؊��X6��Sc�.�W����Ύ�A�96��E�ڍY�,طig#�,���{M{��G�X� �{jg���'�al|Hp�J������B���SB�eR
+m�(��eV�1vM�l�T���"�gBLo�{�r��F:[0N�����iH���5r��r�j:�h7�X�Ay�����Z=���,��L'�&Ҷ?Yܬ�PR�^�3�4���w؝ �Y��Gc�{�.�����j|H�yNB�Q⓮jgE/ s� �� 刴����Ez&�c�N�� 酡8$�;?�O���H;�����e�:NꖾP�b��'��3���{���4��Pt ��t,%^���/q������w"kߑ/w���x8���~~�-sbV#�&OB[=q��r�JӴJ�:[7e��w��;���߹�͚�;/}�������44�n)�E^ً��ϏAk£�R�”Q�G�Y�B���� �����etT�n���.sQ�C�~�Յ1�L��h'���������t�g��c�O�64�/�]Kd�B�Dh}Q
+8�|_l�Q|�X;��v/�u/�>7��q�|4��f��=b抽 �I�t��=�w���� i��|�sA�(o�\���bٓ]���D��ֲ�m�I���u:���V�XܔC�2�&�7�R�4PN��
+P͊�Ч�_mCz�H;�����L�v���
+��T�0�h"[Z���j$D�R8��"�]��:��jר��N���3�X���>�j���N�:�$���
+p'�7,��YT���y�-����=\N��󠝥e��(�j���ƃ��jS�VS�,%����֣���g�,�?��v�a-���-%�ہy�\8����
+�@�F�Ͼ
+k�-�E�\Arrۀ>x�����Pm�|�F������ �t���� ��'���
+hsn�1��e �6簇���1R|�4h�R\I�
+-���&a��E�r�Y�{�E��qN~�,8[M��6M�N����4�pǘ�o��l|{+]�!�U����� |2�rl�T�Ĉ� c�b{@_�|�#zb�\�ej�U�{~H��BS}Kc$�kTg5O��a�=�%U������_����<?:J���T,(<�eT>�R⩹"�U����f��pҰ*C�S�/,��p
+�$n� x���
+�X���M�y߲oa4�ub�T>��l.��Rbc��̫�КU���x� E�|�
+���&Q�9����9M9��@rYԢ8{gmhm�~����rI'g����9��+�{AGk�b�ѩT���B��`t�P�F/��vu֬��!j����3����СV���a� ��փ-�<���L89vO��&�q���ڵP�d@���#DGp���m�����ľ��sc��fQ��l����@5{PC��ӧ�qE~� �$�TO���м%��b�ģӱ�>@ � ,.��Bž��򼻋����f���1�Ƥ��3�灥D�d}� /ңkBĿ+�-�g�����u����&�+��
+�+��Ea�T���&���2﹤��8��I޲xœ'���P�޿�{ϸ��M�
+�$������GA�P��6��|b�Gf�&I�5ko�/Л�|p;��{� a��G��u>�3�|�����M �3 9���.�;p�[yb���~Զ�1M�V�-��;��K����@O � �lI�{'a����ŢW�.rg�o�H���?��9��W��F�8�W�Sx�L]h:S=a�W ̧���tnQ���N���>7�꼢fBp(�8�z��A���8�s�X�����{F��'�E�A�-d3/��8������=�uR=1�Bu�ɽ��ҵR����&V<5B�E�6��F��{`
+��^����G O�v�6��)�f����&c�+t�A����_#�{ � .��ƥ�㳩&8�f>�d"�Ӹ�I�� 3�g�s^�#���a�K���OTc��M:���;��|a��a�Wu*�Oe���F�;}���80��Gh�F��M�����_���������z|=�_���������z|=�_���������z|=�_���������z|=�_���������z|=��?���wl[g��Z�ۤ��z�bK���]�:�:��sW{�Z�`���u�����r<�m�o^��\o�ko[�y��,����7m����,���NכE^:o΂Ezs�m���������������򤅍��m�K ��K�-�~��yK��}?o�9�,Z���^�p΢K��9����xz1}�{��7q����Yg���C�Lg�޴�z�#�������c������ֻ����yr�-�����4���.����z�i�%�u��&n����$_��ͣ�8o��Ƒ<�Go�<=#=Q9Oo^o�3��y���D��\?9�%�����^H�n��������;������q���l���[z5_�\�|=n���u��ll��z���H�t6Ξ��O�~.X�`a��(��O^�
+̆u持�Ș˶kX��F��.���ο����ڦ�����&�����x�X�a�r�4�9in0��u�͘ML���*�k����6�vӒ����9F�7���64�d�L�2 �����Kf���ʫ���%�l3%y f����9c��k����l���1�4v޽AҢ�I 2&Up�� @/% v�fnڴ�3a(g���M�h4U��M@ =[�{�h����_��������p��8�%�?%� _EG�~��W�G�(�����h����W���[�#b�҃|�g�0���n(郭Oo 4K+Tr�FDK M`��k�Y Ѽ�Go����yFn���{� E�������ރ��\�w��FP��ZȬ4,������������GIq�+��&���Lr�`m<�AA�=�R_����}�����;��3��*���a=�q����i�y��}p_3�-��nA)H@������D��M�9ߠI �t#>H(��(,����&�M��� ������������ĀL�M�3%�4�"2Fj�$c�k!�h���(l�=%?��s��- gAX�:D��;D��m��)� �YM���Q ��� ù��C�lܵ �f�F����޽�I��])C9���2�U�f�]Z���6�鰕H�p [���݋U��b��zK���.AEϨ!��i�� �_�.6�����s��RGH�c�!�z iP�I�IJ��7��;��p��[�����߱"7s�I�k�Ĵ ���Ic����ë�%(�JX%
+.�@ ��n}/�ծ@�&�C���� �P�� �@��w{Fcqd�D�DP����i�O�0eH��3z︧/m�AC/7�hh������]��
+��V��1g�|S��e.�i�'2��z���\p�42cC�G�G�C�����!s�F�T�b@$��-�-��X��� ���ʷi���� �\�����y��~J-|7�\-:�
+��A��fZ�M��� bwhă-�TL�2�Z_�_<D�Fa.�yKp�b|��Rᝑ�hL�V��\aw�{���M�ԧ_ B
+��������7ƃ� �q?@�n��4 �9����Ĺ��^�V�� �ٟ��E�� ���L~�`
+d� v��b�_����� @=��7M�r��^��� ��c�O�NL��v6��y�Ki�+����u ���z��1�o��&%M ~��r�V(m{�ɵ .�A��8{Q(� � ���3t)���"�<�`���qԞAzC~�����ݣ�Y
+�Q>9chs#���vCJ@p�w�.%��"�N���m�G���Al ��CYchs9�����)�J��Š�ИL4�|ż�&1o@,#R���oq��
+�7�]4�I�%�zM(�ß �1gf�t�6���A���&�=��S� ч���s3A��䎆`v8�\P�7x(��@� ��M� y�@FϹG�@��\� LJ
+��������
+0��;����$։�[��
+�!��w&�(�3��Me$WQXi��\�sc-��;k���$q�q�h�
+:���SF�KWpU� d��ޢ�sH>�l�'s��֣�/i@��U�Xħ�\�{& �o��F ���{�@�M����Br�q HT�!��������S��|b0 nǜ��ɵ F� �j+�l �#�T]dAp�qze�����,��Pl
+� 3���� ����%s�H��}�$�6#9���%c&�hP�L�<|��خ�_o�b"_��\��� � v>�1eV;{�9F|,��$��E���:D
+�ڱ)�fq��#)���� p+�1�T�Z���=�� &
+'
+NQk!�#w���%�U6��R>��"�?w4�!�����l��e��֟(Y,����rE=!�� .�v_�t�PܴV(�[ "�2FWB��!/��D �D\��K�^=���C�?=�O�8�˺���XƠ��02����Į0�����)9�㞾�"rN�?�ԍ�Mb������ H��u��{�[����퍜dU W�=3(����/�& Bz�$���!u��l4y��~�G�q[`_�&�+�C�;#i�$Ԩ��z��h)�hQ �@��v�֣�,��S�∢o����}2P�h,�|���O �3��4Q��8p�%��<'~��s`���њ>jH���z��d}�S�e@"-���Z
+�$_�j�JOS�}�G�)�J�$͡b@hxd*����)y�uנ"�+��M��k�l�l"�(A rf�7u�M�=�CQ_��D�9�?1B�4�v��9|K��x!N� gf�%/VqY �sa�".
+~c��s���+!L�G���۝<L�Hb�'�9��z�b~�j��i����G^}{)%������RG i��@��I��t@�ti�,��"Yi��,�)�?��U�:�|q��&���$�X�;}$�dl���C����9����o^O��;n�1��x�l!��T6��!�� aO�.g�������T�y=����H�stA�+�
+�Z >��E�LFrx��޷ք�1{����P���B�����I�F���޳H�a��x_�.���C�[�S-*E՛� ��S삷 ��Z b��r:ag�0�-�wF!?�ڔD쐒s�0�3��;��R�Q�
+p�B )q�R�A�������]=��r,�%� �/�T��y:͛����k �5�|�5 �g �OςOT��[ʥ^��%�æÇ(H��m��C )#ʿ>��w�� +��ȹ��9\܉��[� �4Ԯ�$�=�|@q��$��� Bnl
+�+I�)�Lrׂ�����5b�ӵAƀ�H��&q�� �+��.�&%1���7o� 'ٔ���Ƽ�sş�:0���S��T4É�y��� ��[!��<1�XO
+-�@��I ��<��@p)��B.��,>B���m$W #D�آ�?�|}1�2���E���|��9oB� 8s�'_�| 
+vb�w��3����$_��[Zw���L�e<�+`��%nB���]T� �����'���69W�r����2*v�@��6����ݴ��V�+������9@�
+�ȁfX�;h¿J��zG�$�5XG�� ˕[�hcm�G�$M��w'��O� ��]��%��HI��Q1Gԍ@�Gl
+e ٥b1�z�����ER��
+�>�Wu"���k��?�{��l��M,�4 ֳ�yjB�[�����`A�.K�<D)QOž�(�SBx9j ��� -FD�8P�$��˯_!&\�C��=c � �h_-/x�̢��G�4�.M �6޸��]�H�n���؅|֮�M�����'>��V�.i���f�vۤy5�>���������Q@�<ĺ��� ��k�.=�.et�J��:��@yw_����꟢+�_b�JרA�~�ؚ|���к�G��
+~
+B-$֣�Lݽ�ɷ����*��3�?�.J׊�7�~������viQ�A�/i$�=�.0R�?�]���]�G�*�ݨ�Id�ۗ���M� !%�;RA2�P��7��djw�q��G +/}��-�Zͦ_�O���Q��^��<�=Ct����+Q?�1�
+���9��=<ȩ!2/�+����� kE.�خibj�o1eHޯ�<�ȇ��)��/Bu�F�Y�ܐY��&Ⱘ�Z8@�,W�Ĩ�a � LIs�����z!���j���!H
+� 3��7�����Vt��y��̩���؅�f�[j�a�� �%���\��]��C�o�輸��״>�ݫ/ƛ�k��Ц_�ܴq�Dg ���?@a���!�-2�/󮯠~��N��e\\�e_[� H�)|�}~A�j�h��^��uTJ<�qf>_�l
+~G|*v�#v!��؅۟b��Y+-��I�.քI�g�j�s�-� �5��C��Gh��5J�<:�+�\��{m�(��ui1��$!�p,[յBr4��7�%�#*�1���I���#���!N
+���d��W�3b\X�q.��`1�o��%j
+�\��;5G�O�♝�C�_bѣ�B�ͅt?�� ��e�������so-�2�χ؅�Ck�`ϑ*"�;et��2��\����4%�i�u��1Ci�= ��㴆��]����w�0��Q[Q�7�sk~���I�����c3�Q{�Q��™t:aj
+/�@�."z�.��sK hA�
+ˑ<��%���% �����4?)m[�5A�O�����C����z��16g{H��>�� "�5��A��W�J,k�Ȧݞ��
+�},�RGY�� ��t)��qJ����m���C[�[w|�2�S��&����qʤ�3 �˖?_Q��e%�yk�{|�Y5��c��7cjt�k�]��'� �_�PD��#���?\
+�<�Kx�s�
+�h3��}OWC��0�C���"%�O:8��Z���}�W�P��&a�
+HQ
+B}&��tE�����i��X���PG�� �fA�\wh�Ӈ}�ػ��sT_���:��yj*�_a0ಘj}�3̇@ �&y����_���:*rJ��~9��{�� �օ�OP�X�{b͏���qc�:{��{[K�a���bD��uY�h��#O�x�ܑ`�*=!�fp�P>��f�0��t֢8l��
+�O� +QW��L� ��)�~2�,��ɧf��#g��0���UkQ �"�M����a�j=��G˄�k�i]�� ��C�Mqn��iX+������7�����"�=f 1��~Y�/`�5 ��a�n/b�_o�5-v% U�8н��)b��]�96M�/KEg|3G�VD�>]
+H�}#t��+}�&�M��?��~����w
+�;F�ݣ��{QPG�Y:�쩷q�ڒ���j������>�!�>�t<�vs��h)���H^�iA|,p1��Rq=�����B�
+�R�ԫ�{�A��Tz�؃�xq��[
+Q\���
+��>Q��I4/��� ɉ��33���S�7b_R���|��%���d���O��L��P&�����oa/|�Յ��Kb��N��)� ��46��������W���&�uGԌ#K'P�D♢��Ol��t��5jDܰ�/����z�~u!�b�y��Pa��������O�XGb`l�ه�SL  !��Nce�&YE�J.��;��CYq�
+�I����#�4.*;���כE-+�ݧ����EQ�$f-��:*ɏ��-F� ���#ŝ�ɧ��Kk��>�b�(�[��VN�"�U9�Ц��4�/�(�^���.�}��V.��B�+k�W4��:8�-{�F�h3��;�7�� 9�<��Q/ۧ�u@n{xګrh��w��QQ#��`O2|p�i�#.ͣ�#�~x"�xz�<�|.0�O���3}�"�x4z`�\]�P~��&��;c�����������o������g����φ������G_YH��ן�K7Zwp�$���F>������*��Kн��A̒�өB�y|i�Z���
+��:qky�ܺ��\̻��
+/{��P�{��RQ�x�3bʕ�ؗ�(~��F4�$؞�z���~cȕ�[ϕ<_�u< �D�\y�Jb�em?�ski]�O9?�SQٹ��+n_K
+WұF��;O�����-i_iy�a���Ƕlů��;� �+�_�C��
+���kZ��g!�z��Oo�|��%���d?�^��0�_T�OM��כQ��ON!��h6�j<��<��D����MOv��]��Lq�7���_��[�����V��n��/���1\��@���;��3�6L�o
+���c/|�K�%�J������mTM�ʂ���⧛�Ҷu����qU�^��?[%�k7���T!?� &\��\�*�p�2 e��Ψa���B֎�R!*�b��;�i�~oƟ~��;�R�V��S{��s;�`�BQ�a����Y��U��Ns��s�#c(?��D~�Wc��'3��f��N�=�ʂ?�!�'�%噦mVWkv�g����d�OV���ZM�`s\�y�K�������k��Nئ�j�Bu�^�*�6(��V��������Ě����Jy�5>�c����~e$?�a���'#űO&���*��[�^�+����7��3/��G�5��4����[��{�9j��~5����X~�g����^v�߬�W~��g�Rm�������.�ߡ<ޠ���qUo6������ h\!�Hq��R8�Zɗ���_��`�_�|��V-3�^��Z��;ު�un�ז��*�H���~�P�of��v��1_�ڀ�??b]|쉩��f H͸��E�!�<�f����@,��-{�֢��ղ��������y��W��閛�u;�������I���e���WE�/�ܻO���B�kR��9�v|~8W��4Y|�"A�՜b��z��ʧ ��>J�_�
+7_;J5;�k-����X����G.[����>W�.�|��W��^V�l�p��L�v��[�"��2��P3�:��2U�{,�>�`ky��
+�&[޹��-Ttmd�u�K�۬īO�W[\d���E~�{�J���]��ʑ��VŞ{� �;m�[����m�;�����ݹoݸ�?;(n��Vq�7Kٵ_����ܣWn�統��qb�#�� k��[�q��������0��],�S�δY�'[x������k�P��Du�������I8���G_�����c�Y�T��p鹵���㟌�#��ӝ�s����T��_m�����G];��\�����.ŕw��ؤ��VT�|!��{'N� 쭶m\s���-���� �cK����ͼ��N���n��˗���Vq��f6��P����˰�I}9����W��?�m~���
+����;u{��_ݣ,x��K97�����G3�]���_��ZT�e�,����ߖ�%7��:��'Uw��X�� ���N��͇~ҕ&g��6Q��4�Xe�ۍ��X����7L�D��7^�ߴTv�Sy�o6�۟���������/��?^� �[��_��p�EHjS�U�]�˳���3E�n�:������][���SyV���7I�ζ�I�r?ݸ��kmeU����X����fu�Q��|��p��={ꣂ��J��z[u�$K���v���N����@��[��vO�'n��'n��V�Z�{��V�j3��z孇���w��,�*^-�H8�o�״��ؿ�7��m����^|��z�(U��1U|�+�k��^�&��^�Y<�Wk���b%�������'�cK��sc�ݫ����d���{���;��D�~w�z}�"����O�xN��bgy�n���#7��z[��KթF���ܹ��J~��_�o��JW��.<s�w�ȏ�n$?���#���N����<Q�5�Z������x�˳�E�_�ʷ}w-W��8Nꨏk�����������!V��fn{{5����B���|����O�=ZK�Ug[~���}|!k�����ߌP��v� �+'(J_�d�0���7�oC쒅\�`Z�i w��v�λ�6�o����N�������z����'���������'�o��md`ɰ���t�;��S����.Ϗ{�����q�Ȳ�&q�?ڮ������}��`��ӛ���;��m�ʣ"� �����:��\n����� 9�A��'�,?�JW~��j�������d�Ð����>�vk/�Q��}u:����\����}{⶗ײ��>�g��(��(+z�qa
+��MV�v)/t9�+�e�<�����9�˿q�g��v]��w^(�|ۘ!t��I/�c�����|٘��t��n��8�7S٥�
+��3g�������ܫ�!�m//d��k��N�e�I�ㅦU����J�݆�mst��+� �-��Ol�- oJ)��^Zd��T���t��g�����o���>�������فl�w�3,�}�鱿���b"�~F����B�ٙ|꽅��\�kCsOv(�C��[V>�)K����?)r�/Q���Q���Ų�6LY[$\xc-���Yf�\yʝ���s�?ʕOj÷��Th��r���6I|�e��6swkQQ䓤�'IE%��yQO�ʔ51��绬��W�����4��d���T6���3�e��͊���N|��X��՜�����L�͛��{W��k�g�7��{�K-��v�?�n&~j��������2ƥ�@�G������.�GJ�]��ٚ�����R��wyÿ9���65�ڽ����b�}���������&{���\�����a�;��RE�)w���T�J�_�a�r#�����m����*�l+��ת΋z��М����YY�>�$ �����=)�}�o���?l�Nmx�ZK~�k�I��?�Lm`femhVrm\�[Ky����⇦�W����nq��\q��-�c�Ypgߊ⹮���O�\���/Y��o�P۵[��-Yx�ſ|�|�$M�\��~x&���z�0��m���x`q���K/��&gUۃ���T��w�aM)%�ͱe�ګ�m{y9[��^���˹�_Ϸu$ǧ#37�qD���
+�.� ˎjH�U}��bR�-��?�n��{�p�(�y�Uy�t����aM�U˽$�ΚL�n�����ZyŻ�Ru�L:��Vy�u�t���k��(��D&�'�?V�Y?��n>s����EQ�R��_6pފB[k�gkI��#�Vo�_x3��]M��ks�ק�}۲�
+����> /r�*Q���w= u�:^ޖTќ���$D}�1 �� ���8]{䯾Z�w�&(��� u^mD�c�,�SG����z�-�z�"=|�->h���cn�k��]'d����ץ�4���D�&�%�/߄���0o�v�N�S򣸂�{Q9{�Ed<�"�U\�V[�H�M��c���n#��F������.���R�$=N>���H����9|K��P�hW���J���2?��[�y��?�^�wzYK`���㹊?^����v0{��.�w���9�������̼Ć�܂��Y��"���rܛK�<�Ks۫ժ7wRl^_R+ߴ�*_�&)۟� ��ئ8�o���?lm�j�<ڪ�\۫ �_����Jֶ7�r�O���7��޾kL��:�m��ڬ��ɬ��=�ⱟ}�ɼ�����OoF�\�64��m�q… �>��L�G���7����x�2����������a�v�����ҽ��e��7ݒ��n��n��}7g������n��w{�5F�7F��%Ȩ�[ڒ�6��T�F�ݿo�j�}�7�9v�(
+|�U�UST�(,Ϸ5�L��!Qhn �v��OB�o[R<Z*��3�|�
+��>w78ӻ9����y��u6�o�ؽ:�����,�i|YHSF���\�ٮ�@�u+�uv���<���ݞ�����4�P���x�����7?�'�6���� O~\�%-o�aʁq�k�W���}��GCrL}BnyM���=��{a���L���L��C���|�_��g[���֮ ������N� Q_{�y�Nh�����oC����ޏȱ}Ib�{���� y��o��W����'�c۞�O�q����� ���}
+���mn�{����#��Z�r�y�]h�S�n��Ji�*�$�ސ�xh�����_v^�^e�2x�v7�uV�4�����0����,Y��Y�d53oя��%��yKL���@����������voP��T����ZL��Y���n�e�ߎP��J̉&����*Ox�&��U}�����.*H��+,����AX��r�"��,Z���������!�׈���~�wڱN� ��-�F>/6�VYk(23��1{�2]f3���<���3�~���F�Y�Fd6K��UaZ�W�̔�㘱��1���.3D�ft/=f\�)���9��q����W2�Mݘ5��#7]�����[���O���m�ݟݬ��F�޾�q�&0�V�_������ua99�Qy1 �Ea ���w�r��1 S�ߏ��x����E���/���P���ܦ6���=)d���.̠��dӁ?�l
+<4���b�Q� ]ä�z~�����-68۽� ��U��d����ѓ=���F2:�
+Q���y�zh�q27�Մ�O� κ[�ېX���'��'��s螎����$?ۓ�����U�񏖎̴1ӈ#�s�C�J�^�f
+��=.lz�s�nH��� �C� �Ee~�V�_�dF� �s�� �������\S�/cڛ��K�0�Gb�E�wSe��U{��R�Ə���~m9S|%.���Ȝ�7����
+-|t+���&����м3�C�JoG��2���O�"�]������h�Am��̩ ����� ��9k�Әj|�]����P���H���` ]2NÉOKb�f��>3��df��$fh�Y�h�M̌�!���7�W��˿�Dp���Ą�����Sm�凫��mj�c�._YJ�| 0�>�[o���ۼ2��ӻ=3���n� �/��`�dFk ����J��g��<�!^ �4��>3z�B�˙1ÿgF�\��[̌Йnj�3�6`3 �����$��]�L^��YjY���@�4��n�֣I.��Ҁ�N\��*$��ٝ���"+:����ͣЊ� !{�6��7��!�ZS׽d���������`�Fi�1C{�"? &���O��X�K&0#{Mc���� �7�1p3z�:�i�mf�%��2�_5���Fx}#(�Z|��K���o��=��Ww'���aP����yw�䝸�u���k����|��H���ݫg�]����?�&|D���|��/�#��|?���(��7d��_Č�]Č�3V=3~�)3f�3f�)3j�zf�w��qS9f�a�C`�Ϊ��s�W�2�$gQ�r'6���5�fٹ5j�3s�{�E� �bf=��u�^P�F��ߺ�.sJќ�p9��C��� ~�/� ���=>�g��hd03Rs43��4f�й���?1������w0ّ�3v�Ȍ��`FO�3�'�0#G�g��f��\�fE���/�7�붵i=�VW�Tx)!������5��
+I�ϻq/P��aP�����M~y�5= *&5�{�r�b��՘��S�6� z�y�{=��!����Ì�ό8�5l���ݡ���[ƌ��5|3b�O���M�b�M���s]��q̢m'������t��55�K�?u��?� z�jD��[���d��d=� *���|X��1��y���� �Kĥ�}�������k��V����0�1�0-�!�y5�̹Z�s�Ad ���>���g�k[��YB�s5�Ic�V��%n�wk}�f:_�LW3�m.j�H��ȕ���ٷ5^{n��F��Ȉ��{ϰ��u�{R��"vQ{/(vA���Xk�U� ґ�A���Rl� ņ]c��Xc�&{�[v�.�9g=�?H���u�����͙k�����˘���?�i���^wȹ���p�i�n\/���F���_4����t�Ӣ��w[=>3,�g�=n�7�{D*{�A� �Q䜆{�'��!۶�ߌ�3�,&H��j:��̰�K���9�iv,3nI3�s53ֽ��4�q��aFx�2T�̌�����q=c��xcX!���p��5���?:������;\*�|�x j� 7����4]!u�ÛytR�ÅJ�#��C�L��c�)͵�#��eJb��#��N� ���Ϗ$9��f��@r~���VNL�Q�7�G�I�@{���|ǩ���(f��8f��"fL`#3ʷ��u�إ�ՒÆ�� �$��}u�<�n熺�5��+�t���-ɹ}q������_�ɮ���ܖ7Oswܼ����Eic�oߥO�d��YO���ӗ���d���\�'c8�>�MF0��L�c5���ؠ3���Y:f� ���@f�_f�P7f�(OfЌf�2�j�Y�GM�l|d���0d�-�,�[�Ͽ�E=�^[uu}C�'�[���v����F�>�S���{�m�����A^�w��ڿ�U���M>�
+'�y�ָ�������\H�a=�q�ƌr�!��� �N|�Rf�`�?��I��kÇ,b� ]�8 re��V0�f��f��jf��L_q�xV���3�Z.8m���ˮfy�4(����8UQ~��a���M_^.�z�h�K%[�7~ S|l� :N�+��I_=/ �����a�뚫�ٌ�_ϫ'�Y��^ҒfY��C�~d���� #�x��(f�g3�%�;QŌ��q �r��T�@̛� :��
+f��5CÌsKa��0ӄ&�y�G&�꾱���a���R�� ���� ����ˣ����gkķ���m길����ڦ�'��C�����~c�͛9_�ʮk�^�����������9=��2�����9������́� ��|�ؙ�����Ne���c����8������7�\��a�ɥ� ����! 6��?o��~�oZ��<�{�/���4L\~���C��/�D�����?ܐ�e�9���5O�v�R���k�7��kx�y�混���}^����$߽��������mZ��a�Ȍ�� �7�=ُ���L೙�Q�̔���S�>3���s��e����y�tz�y�97-�j=�����k��f]�Ͳӆ���-=hpr�}:�}�a��}���C�� �b��� �w�5"g�y�%�s���m
+A��,c���x"�'~be��.�3���/�_�Ҙ����A$�� �� ��d�/Kf�q������cf��7q��g�����<�ۆ9�n���-�~�on������~�����f��o�.�z��m��×�6�"����_ !��ޥK?]-��� {W�����ƫ�c�+�/�K�|��
+���l��I��+Hs��P�쏡�W:��1�O��`�S�UC��������{X�L��=������*f����%���LU�3S�Әi�c���<3~�3a�'3e���媍楞�5?�����y����������ka�W�5?^�T��K��o�~� ����M���r���s� �R�AP�2����&J���K_�]�꣭�//l���U�p�m��s�����J���e�w6�޺����V�V��w�F;��7��U�=�<#���j 3l�\f�� f�W<�•1��|fa\����k��~j����A�4�[����b�o�r����U�?�f�~���J�_
+� *�_ :�� �_^��4�x�|2�/���+������W}����yʢ��է A�7o�c_h���HS����_i T0bD��Xn�v�C^<�J����ϴV�1�:��uؒq1ȅ7UM��5�K�E�y뾲]�nDlo�����o��� ����˞��4������Ê������,jl�U���nm��݅�����`p�:ep��i�T<1��^�ٷ��i�[+�����S���Xc���_O}����u>v.�����M��'�t���O>�6���Pzh�:w� ���^Sf)�a6c��Z�ۦ ɳH��g3f��8�/�}��o��t��)5�+�jH
+��!���� \�M���!@��ξ5�}k�S�4H�� ��M/�*ˎ:(:�sV��G����b��,� C�����*�N8��ߟ�w��-|�NRo�b&Wwn
+�z~�p�^���5���ռЇ�T�g� ���-n��5�NO>C�\��}w�Fq� �\��?�˒��>&Ù��;�Q���Ì���L�f\������zѡ��~۰��'���b��s���;,����h��|������O6�o���_�^1(�6R$�0U�J3W���o9����+�|\.=~���<:�G�aòL���c ��76�֖ �5̓�}��^|/�.]}���FF�޷K���xp{�q�w��!��:���S��9���U{�F�_B��=�H̘2�e�K��
+��Y~�����A��!���!��k���]��_J�_ޕ������o��3w�L&0)�,��+o��kE���td=i��������� �����U]r��સh ��f����8凿y�}%r�b��݇���_�b��2�>΄r���/nwZ-�����8C�^����B6q�UPV���f�E)̨!�4F���t�?�Ҍ�kB�����x����6r���P�s�)� K|�fг�}�����T���u�o�7�ޟ��Y�p�u��/��ſkū�����n<-�N��r9m�����Q-2���j��<�_^ʖk�U��l��n�<����S8�Z�n�;�-l,���]�9Nj��(x�A���!7�����O�O|���=Wq{�]�5}1G���h���ָ�fojC����X�;�1ɝ���,J:�k���>�R_����[���� +�B����3���]��B� 1�͵_�>N���b����@�2j(�`�0f�2��\�鲳�⃕��o$��Of�������^��=ѱBx�9X��o<����b��YB�Kw��'�x�e���n�ߗs�������_y)<|�����y��t�v�L��k�h�^3��}�<3O��X}���ޟ�
+�ޖ`/N����ܫ����*������i���#���%A��-re�;ef ư�^LXB�eTN����ʡ� :����ً��[����R������<�������v\��q���
+�G����AG~�P��0���̆�����ؘ3�����"�̗���dp�ފ�-��PU���|77��� ���i��g��q$6�����8���m�7��a��%����q������y���2p���A�GUw8(�Qt�wVt�@]{~"��1�O��_�n,�wr ��x��0��0*_�TJF� 5f���BI�0��+3�M��Ro�ę���lv��9��W�����W2�W��e��z����Kw�����V�y�:���E��w����y����k�W����-�3�s��!K�+L�,�6�L�ޤ u�
+ƭ�J_�'���D��J�7+R]2�A n��f���Z��۰�g'�e���
+ ��`
+�z0�s\����,��^!ʎ+����0XV�o��A�o�-ù�s�ړ�uGNjk���t=� �sG'm��@��0
+y��&��G�Կ�U3��x����9a�瓹���"��Ү0
+hy4E|�]�|� ��/�����>�R�����&p��L�U�yc'3K&�f��1!�p���B�����a�E}������Ob��|�aw�+��G/�ޗK��Nn�>'��7
+�e����b6��� �?�U[o��s�q yBn�
+D�B���h���:݉a��7�Bˋ�l�W���w��v?Uu�� ��g&� NV���?���\�m�S}e ��J�-��av���c��K̖.U0^J��4Q�o���a��3~�:��Շq���x-^ޣE#'{z2n��1>��Z�3}�IhJ�mHIǘв�� ҕ�G�����?����c_k��?��[�e�F�]?������2��W'V[��~w�]~�*}%�^�����̭=0�+�>�_�>��:�l�<��{����5ߘ���vn`���O�\��At�?tAW�C�?�����]CE[�+w�2�?��jz>[���?��}
+��ja�k���T��e���0@*h&��2�[�5�P���;��7!�O�%r�~T�������Ru�O˄S� �������q���.cS��
+i�\���և.¹����w*c�=�]���j�y�"�#�G���S
+OZ��
+�Ɓ�m}�N��5g�j��U�flH���_i���̿��R�������{�uü �����
+� ?yɟ~)����+�렎+�P��^���`�����S6��󻆂�G�R1�w$��[!��G�'�з"t�������
+-��2k�����#$�2P����#kOL��n.ڟ.|�'�Z���΃�� >�N�> ���"���Tվ7��B-�=���o����?����y!�?�UއM̷���y���z� �L���8�ꃱ�k3T��-P�u�:���+0��=~3�~4�2f:�p�,f��匏 �ܛ�6��I�o��x{*o_%� O4a����A�6X�`��|�1�"���4��q[/͕:�,�;�����%[ ����? �����U{�����`b��t�gZ���
+n��ޟ���7ߝ�k(��¯���~�Y8�*H>�"B}��^�� ؚS��\�:^/PW���7S��ƾl��2,ӔK�h�Z�g>� 3}�8f�e��R�7� 4"��׮�?A�v�S���讁C^���3A
+��z�E C��n�8���80B(�4H(mu`۞,���������}4U�i$�x�bF���+hJ��OgR������f� g� �F�U�Ǩw}��;�}�p�;%��'wn�1'�2T����X�m��VYA�A&�9��
+L=uH�8{�?�+V� v �NL�ޟ ���#���>|r�-_d����;R,;��n4�� �}8����|�V���;y;B>�H�?+Q��`�� v��E�� NDo"�ׄK_�����.h�Nm�˖t W���U��f�b���{Z�b�5 �6˜rZ�n�V��w� ;��d�.[��,�2�Y�Лإ� T�Zn�F��2i�5��k��N1�%e�Dd��Y����3S���U��0P��;8:�B#E뢳,��;G��7��6_�m_�w4��h��~�U���}�R�� � ��4#OT꽯�T\Ɵ~-h�<NМ{�B<�R����U\��I,j����z�C{�O�e��N�{�� ���F;������R~�5gvݱ�|a�u���l��nn���4g�s�?Oh}���'�=j}�1e~�歷N!.����.���N�|��u�X,g����r��m|�����3��M���P��v�T�4Lȩ�������[o/�n�8)mB�:9��$�x鮑b�!�%��8�O̵�K�(og݇������^`��5���J�"�}���I�NN��?��'�ZqF��`��%�XI�m�0_��~pWz����n����t����8���)�^�������a�u�%�y }Ɗ����I��o܄ Nwq����l���
+��,�㉯�Xg'�7��4���0  1��p����'�Xa�K�ġ�����1�2J��9U��e�yA,n���x��H s�ad� �t�(3*��C�>�·K�/@�`���xa6�.��3:|�jk6$Ƅ ���mc��Jv��yb�V{�&�8H$�Q�4��{!��MC���>��x�!������gA!+�)g���19J�Rf��d3��:e�\T?�X���a���,�N��c�I�`�F� i5����^j)�r�$�� IU�Ɛ�})������B���Ré��y�ჩ��v�v�=6��Ki��>�
+>xKOِ�gc��M���叟��W�%�O5<8�BH(�e+M��w Rj�`����65�?n�ȟ�?~�4�QEd��uI&>�vu�V�\�䐚���dC����R����T35ṁ�2��j��������o�>Gw���T�k>�Bمe-#����ɧ��g�*1x�k���q�d�M���f�J�Y��CN�k��b��N�ļ:� -���Gƙ��I�*�}� �Pˌk*�K/�+���T�< z`i6�J��$�Ò�(����tm���rA�J�I4�Nl�l�\sp2��=����ڔ5}�� } �����;r30C�nv��a�`j�<����Y�9�@䛯���6G�%tS�L���
++6"� ZRz�؄�a^*�0#ne�9�*kwVUتBH~B�ؿ��h,Ϩ�ֻ��ۉ�͔6 ���t�����thu�I��ޖ�jm!��?�0(ns�V�@yRX�l<9]���}O��q�S�tv�R&�3G<�]�'��� ��f��@���R)��\�{hʰ���s{�sB��t>��{�\�2 ��g�'�O"#Ė[q+�-�4 �\T�9�k�a棐H��θ���̟:��p�3�Hg�g�� k��k���*�Ψ����A������'��>�؏�����~�,f�R�ٶ� (��ܫP��_4\ˋ���ے�a�Gj�� �� �]���� ��'��X��[�@AF�=t���4�����qZF-���Mщy�RR��fF���J-W�Z/.�7~8v-D���&n�:_l���/��v ͵�]�Ƿ�: ���aڲ���[t
+X�|��ڽwU��o��U��lX�)�9��>Z��{2t�=�|��W~4�w=q�,���cĘ
+K1�В#�OE�\i���T���"��� Xq�QØa- l"q��^T��1�u�X�>���O��?s��_x�ڟ���� ;�\-DMV��T�1,Cp���|c��ˁ��NN7_�+�}�\�|�뼫麭���~"���4%�#tEuC5�'f��חɭ7܉m�М��6BŮQ$�M�<��*[hb�m��{��Iݯ�n�uR𠅊��4�?�f�X����F� k���;.�چ[�m�C��/g-\���P m-w����]��׈ԵJ����fШ�֟w�hi�vT���s\ m�-q�g��-C���R�l�zg�v�w�j�-ɟGP^ߑ�
+��+^��Gw!w�=��
+�J�zt���ऋk���o�v"��RT�Yp�����6G}��`|�x���
+�6N���������WI(����fm�?Yܚ�����^��עC�_,��?`3�˕L�NӶ���,�u��S=l���O��}��������=D��v��Tg(�i(��X]�����v��wԇ�����\�G;��jPm��BhSPmxʥ��3l�O�,m����˩�9��Yb[К�k��jȩ�|ZS�>�I�.��"�zA_^�|o�����|4^g�#��~ 4ë�����Ě}��ƳΚ�;��J�Ͻ�xZ/%1�r����;?����o=u'���_�P���@!��H� ��P�{$�^oG�kNL�\���pUd�)X�2���u�s�B�I���� MDm��ZAs=��^�l]$�W=�TsM<���Z{��5��P��rrm���Z�,��%�hWof�.�Ľ?��ĸr+Ƀ�� /E�:�Y�a&Rx�Xˢ���J�k���#q����V��bV�B� Loʽ�r~eqCg��i<�+�B�.8�n�vm����< ,�u����}W����<�3%�Y�1=,n�?�|k��B��k|��#S���~4���cѳ�M5>��E�Ў�&�Y�hg58�{�a}Pʀv��Q*�g�� :]���0�!m|���Y���Ey�jgE�������;�/�7NK���\mIu�r��R ��u�б�or
+kD���@=�"�%��I��[�k��ɲ�D�����{�GC���S6�os���-������ .���|��uv�[�$�'~`�v�͆�S5�M��m��#�]w<��k�`qK�vyO�I�wܐ�b PSd��+�¾��U�9
+�-T����AH[ۇ O4�ZN$f���v֎;��λ�XK�S; �V���?�Yέ��^������쿵�Jz������3E|ѧ��#��1w��׮��C��+�6���l���8�����rxv/��E^��a ^����u��|�h0��fr�M����.�Wɫ�3������]�=�=�+���v,����I�������f��q=��)��J��
+#@;��8����!�G�~ץ��M/��eSj�F9"�\�H4�$�� �.�媮1�@��];��Y˭%R����w�d6�u8B�Bn��<�9�S��M� ׶��o�!�P��J�wo.e�s�.G�$ߺ�L_�i�.��*$�qHp���홠��%��O���LɃ��|ۅjgQ�����O�v������U��,?�Em��T���n�M�v/���A?�Y%=�Y���J�S;+��c‰��Ԓ�9/�㋶;�� � �$��eT���8 �
+�����CV�p|�t��3P�����d����Kz8ǻ�hɵ��YQ}���^����m�o�d������B�r!�&�_Γj5Z'ħ��C�M�}4��'5yd~/<'P�1j}���Sc�uD��ox_�a@w�� �O��!R���Wmn?O���a��bL���C���N��/�+Iܖ�O��Kj9��j�a��󉛼�?��#=.�B�O���?���,�T;��4M�Ygmje_5j���m�+��6 ���\�>&8���[�z<w�`�co�����8]ʲ�^�&o,�l$�׾1��b�E�[B�%|�ŹЀ�ka؟Ck��8/��Y`�cߣ����jw� �7}4'8���g�_�kI��Ҷ닐�I���ї����vֽ%��o�4�O�����H*��
+z��3͸���jga} �T_iM�Xm͡���������Q�x`���cg]��)Ю�$Xc��8�Mt�m���S�z�9>v��1-�x.b�z\5'f����-�8�X�ׇŘB :�R�Y���+���=wh �߻i�6�Ξj8ǭ�Z��խ�rU��_�]?�pMŊG16�B-F��ƈ�4��?����Sd�TaFbx��.����.w�`h��'K�L�v��dܫX��>_J��E,�t�&Ju��{~H�A.�8�+hAc$�kTgk��n��4�����q6�[�5��xzttٛS}��fĝ��f���ǧkH�
+ �o�h
+����P��<���3�ߐPMh�\��&��@ �� h�zC�y���� y���q_���E�ΏXj:�Mh���X4Nn��
+��:_z�~���_�۲D�'t��O�2�:�e;Fʫ*���>�DH̷�})������s�����H`w>w�v����D�|H�{GK������T; Z!X�ZO쳲��9_hg��hgɛ?�#6]��A�[I��69�\��}h� ��u���yW����;FQ���=c��g�H[/Σ����Z�O_H�h�UuO��n����=������jOL��t>���]wj�.{�!*�L�=8k�wy�Etm��+���\��Dj,Zk�;>En��D�re�$�*����Rh�9�|�ɫm����Ͳ�e���v|���j��� D.��z(HI�u�ض�c�a�uc��`]��`T�4�RW�4�]���6hn��G�DŽ�3�t;��W�_&X��E��è �%M��ɸ�A5�Vۈ�4�G��8:^�zm�D4坣����-m!\Wԣ�/�l�j��Re� ʮ������3�r=�ۤFC�Oul���;�����z���<�����n#m86kڣ�����b��eRp�)��ܿ�5E C��tސ�ŗZ������Ϧu���rݩ�����;�Q��Q��,������J�T���I�>2�GJjg�������9���Xז�r�yߎ�Z B��z�x���T�� ���R�y���5���x� WA�|r�۠;E�XCj��;K5��������� ���ܵ�OM��&���ȇ�CO]]u�LR��Ϣ��o ]_.#���3|���Ձ�%9r��t��^7)������8Z37]X��n�֯4HNM5�Ww9BwK$�g�c� &���Q���� �1�K����K�z����Q-O�Y�5�Nз��%�IT}f���9����s �,֢��83hm�zjj?�.�|0k���bL��K6��2�k*���(�^/4�ZFBg k��%���;��<�&���$m���С��p��iӅ�ܒΣ=�t�?�
+��c��&�q�4��ڵ�yϗ��iRJ���k!���i2�`_�x�E���C�f�C��tk!���՝>1Cl�|����횽㩦94oI�Gs�����>@S�u4���gg󻞸sM����]�o���qeV4&�?8 ~��&���S�7Օ�:�{BĿ�M�p�OO����:�y�&��TS����*Z��e<� �y����2�Ś�D����e6� �D��C��^���{&�~� @��ۿ\$n�8s�K\��$�x� {=�
+b�%g��6DΊ��>��%�^B� �h�����֫n���th� �^�X���h�=X �N���L�
+��D��2�*8'��V�����V�ȫ�]�s��=z�NӬ?0k����Q�RbK5�H�F��嶺��i<7�3�
+b��i+�M��`O�_`�ɂ�%y�������h�'�[a�Rn�x4��~��� ��u0�lz���/4Ƞ�Wwd*��[ ���N�F���w_N�xZ�/�v^C�=Ԫ�n�A�o{���~g!|�f=�%���X���T�㱛v�5tbp��j}�W�ѽ'Xk�����
+��B����rǝ�l����Mf�{:�$v�v���7nF�b={��6�ɑ�G`��͝��=c��,3V���t��s@N��H�̦A2�?e췪�;V�z�0z�l�əb��%Ҧ�.�O/��+��F�
+��v:r͟������|bE��0Ǥ�.G~�� \۵\ӕ������E��,��)�gYh��K�ᰇd����JC�W[i�� �V�Z�$��wzh2l��\ָ���)MR�����V�Q�_.�$>�u8]�#5�7��p��/��S1Aj�A���.�;�$�o���J �Զ�1M����m��� y�Z����s��@O � �li˻��w�
+���5�[�v��FIu�����=GЂ��`O�=���{%>E�nMg�'����T�[��:�X�ͩ�O����p&�yŚ �C1ǥ��z��O���:WЊ�:;�c� r�J����yl��@��Əgb�
+�ϕk�{��zb���0�y�N�Yُ�+%9��4;��N�$�6��V��v�8h�Q�2ܧ�]g�: �u���:�?l8>��^w` ��B7��/��Esrm�tE�#h\�>:�j��s���M��j����d���D1���=7�{i�|��؊N2�N����%�_J�_H{���� ���A�G�n,tzH�H�#�+m������t������x�?���������x�?���������x�?���������x�?���������x�?�������ر �CSCmDo��n>s���U��R#Slm�OwKI]������
+�δ�e��~�,Eg0v�SW�4]&��ÒM5��$.�TX�]Y{l:2�=&��[R���Y�m�I��~HR�J���hEfo9j��>��V�B>?m�h$BR��"Df���M��8M�1HD�
+�f�&Dǰ�bJ���.4�DJ���4|L�9�B�1�oI�y�=U͆��0#������-�y���U�&�:F� 9Hc$�����@Ͻr�X:lW��AG(�g��~�^T��)�=J*h*�U؊����u���:{!��w�.��V)�К�2��;�)����&�(�:]L�9Ow���@>��5�c���hc�A`VE)U�F~J-ڒ] R%9�k�
+�K� �_i�o��A紸��_Px��o��,�R0�l �2�j�H����e֬�h u� }��y��;��!F��{�F�N7tI�BT��ve��.��Z�V�7��67R�[7;�Yr��;k27�k���;�b�˨��������a?R\��a��iJ��0 �[�k7]���;�+���H�v��L tP*II+��4���g��'���R2�t���A+�4�U�mA�BW��< c"�'�Q"dl���R`�NJ}�����SKl5Q��T�y����5�r\���b�9�\� ��>�`*F&�����$��^��򺪃�55Ǧ�26�� ���|K�9:�@"B���jH;�J�a�ڢ���x���yrӍE�`�
+z(Br��ZGƂ��:N%������Ѡ(P%��<K�e�]f�+n)�U��Vf��]$�x%�F;��̤�ä�+�i���K|�'��|ӥ���$V�%c�jʑ�J^i(3�~b�z�>���b"3Ȝ7Rrz�U|?�Zň�^��+�A���(�� !ڈ��9�[YJo�/E��P�RL� R��X[l"������iJGblVo��2+V�d��?�h�Y��J��q�.e��6>�J�e�.T}v�@)]���p��6�.1�2�%O�ǒ�b�q�d������*;tR�^z�
+����U쟠�pj�n���ZJq�9N��n�"k������%>��Lt���hG*+16�7:�a3���~�Z����*)�9]=�35���7�u���kS+�iR�l���^���1ϭ�]���{�����k��c@������D;��:Fj [����_�ۉ~�Ʌ�rQ�pt��N���t�#��q��S7��A�+���1�2��.59�n�&mu�o]�WA��w��d,a���!>� 2�o�.7!`W��
+��_ŀ�Ċ��y&�_ϰ2y=�I|x���2���ā��^��f6t� o��g?���Bd��Sh�->dy��i�._�-tGю�����q~�e֚��� ��څ&��D?��^ ��3֠c&�ؒ I6��PI�� �#��ٖ�#hRJ��7�2*�̳@7��r�:��`[r,�O2���p�0y�I+E���䰌���O_�{�&���2�'/h���C�Є�k��j��ߤ]s`|�.c�(XbT���"�
+����7JX#����04'��:R5�M�ݶ f� �c�pB>C)9���� ���TLF�_�����:�`�kv��YW�w�.�����a.��IN*�9�v�����ܖ���M�0W�r�s,ѥG}*� 6p�Id�VP"0|���t��z�|��FPWcH\XY` ���j*�e���O�"��1F���E1@`m�<h��'��TaM
+?)�$���"79�etpӮ��L�j� �h�(=4���$����EۆS{��;�~�>7c�@�B��P��u��#��Ɛ�S�I�U7�Ҙ���jӫ�S�� �(S�͠#>s(��} �TV���d�(mI�#:wi#���� L�c�� %9������
+:!�[���I�m�YHm ��lz��%�w�%6����B8�}�բ�~5�c��.{��Km@���bW�µ���\�~�/H|Հ��i���I�C���tn�
+W��D;��J9̓��N�,��9K�5�
+�t��&�~����T���tt��kW�s:�A���C(OƓ�2��k�_d>js�՗�_�#��0���K� <���!>���5smi�%G�A����7lt �I��Y\2?(1��BrB�:O)>
+�R��R�GI㕶�GR�1y?:Ca3�"��D��ώ||ڵLrH���������Uv��@%��� ǧ��M�U��j�6R_I�������f?
+� ���;2*���̑RfK�/����eݣA��?
+�Y.oEIU���w��9
+ ��5��#~�>�������
+$�J1�� 1I�%� 2˜'��Z�OiUu_�F�:�k]ɒZ�1�Z�B|7!u{��J�&u�Jc����C� ��a���BL&������$�/�f�_��u}(���~�Bh�)�d�F$��x����e�-�*R����L�6!$�Z�!i�J���a�z ���dz#�Œ:]��� �U��Ը�d���U� 5���":���
+6 �v�Y$�y�����������`RR?l0�q
+sYJ�?���,���[��<����A)�%���kJ�]Ubuz�����w�w"^C���G�_�u��5����^4AN�Voe��:P�4�q@I�>�#y5T (�5����Pl��ۤ>��-�}�$q��ӏ���!Yf���(�3�͠
+E�9�p�jFRゾ � y���՟o�� E �c�q
+��*�B��7aÇS���>�E|�l�Q������:�%�kO�����E�A &�z/m2�@ZA��4��ԇ���-��+�@��*U�'�����A[�}$�X�jsj��{���uCh���Ӊo�r1U=�X�뙔�P�4JS�{���9|�sw~��˨�cӵy�� �@3�c+�k�n�����"�Ua�5��g)o�`�BLnoDžm_���/�4U�k� �[{r���&�[n̗�?p����ۿt���VH�Jq�pԥ��Z%��OJ�i~L�u'&K�g������ d�e�.�؞z���U� u?�ǯ��|C����O��ѹI��<XO����ʤn��v�{�0�?�s�QӁ�����@sk9��/�2�� ����]N�� �s�n,�X�)k�j"
+z�6AvD�[UN��@i��.]�̫��:�C�@Or��Ҿ��(�$��%�����Z��p~��� dw�v������Xc�˂ƍ<׊���koWպ����ݍ���Vl��k�Y�
+����"ȍK/��
+��&l�Ф!�_���8�5��wg9(�
+�Kק@~���>&�s�6^�W��1ǟ`Ҵ��u��'�I�X� �㝳����F�Vn�]R~��(���M�<�@$ԫ�r㑼���7�<�c��sܓ����*ԩ���d\�F^����r
+��}��!`�(��:P���B��4�����>_�[V�E��&v�~,u����4�u��7A������
+����7����
+���ܹ�q�Ʊ+�
+��M���M��(��
+�0��>~J���:`����9U���̟��M���V�h��5NY��
+h���yq����G�S��E��y_7�|!��ryg��%_��(򺱂�ly&N "c�(�BS�Qk,��D�i���ط;85�����X���ERrNqh�)��؇�ل�
+����C><|(�à�H����e�[�<%��0.�:LӃ\�s�<Ԏ�/$c�w��߬�1ɐ�dpN��� �q���!�5PCgS2!0W��2?������m�@ B|�f�Ni�1�'�Ĥ��!5qt��(�I���!�Җ�߿�=&���+�,BFa����˹r��g.#b�v�}�A��%������Z&s�U��q�� ؆�N�vW�JG���M��u�ːǛN 2N���_�_�^o��
+{���O��ˡF�\�������r-㔡L�vo�Q��W�s�2�#�$�kPǮ��i�����- )t���ݾ�7r� ��1ǾK�};�En��?N��F0��(x�ZN �Z��?� �@ �wh2?��/���5sQ��&F2A�������&���q~��4�N��� w���c�<������!���}�����w&L5��ǡ17L�}�&f��3��R��#`^.�؆�ʏ���}��=��2~/�s����
+g�M���g�ȩo�� B���\�� jRdl,A�MA=�8L��8���T�� j�6�_j�WFM�|�E�vk�c�r��A��5}��⓹
+TȨ��]tP�zP+�߅�njףUDD�6P��t7�U\�p7��P3%u���L��rS�@�܊�����(�A�L��Ncn�M��x&v�O5 蕀<p~��� \�>�|Xx����r��&9OP�&�ڎE��K�3���O���Q����� ǀ�?���j��Ę����-�~��S����.�E�4��e;IM{
+rXb����@���ɳ���ab*W+?9��^MY�M��0ch�����g ԁ �)>��ۥ���D.��������� �V0�@��z�;s��}�� ��N-�g��P�H��'U�R�J�Ae�9��<��� ���{ q�W5�!5�85l72+́ی������
+��8
+�E<=��q�*J=����.����^S�_$ıe����\?��@a��Z/�j�R*����y�� $��\r
+ypȭH��4��{�8;��6��qo��#y)��9eI��=r
+LŇ)�\=��0F������l6�3�.JD`n�q��VI����(��nI ����ɟ�'�J:��b�a�;��Q>i+ �%q�^��A� �A�����7-c����9�5�S�i���L|�:�X���&u���b(ڑ����ݼ*�%ujBߏ�����.C_��0=�\M�بMl��
+`v�3�]�e��^ j\���r���SA}jC���^�k�2�W� P��0O��.�M�N�����x���P>8#\vQsA� r�Rg�|���U��K�z#`f���*=P>���r=
+�\�C�!��py�芝�3���oN ����\��}೾�Z����8F���*(J��d�K�К���A��IU{��m���K)���1�D��攚r�p�Av�J05��۠�����dī�DX�F.o�Q��O�<2�0��p (�K=o��z��z��\���L��/J�3�?\��׀r�kK1g�
+.ܤ|���W೸� w6��
+�x�m�\\O�7�uA��!f.�=��G���>�1u��h���>~�h����A�8l&u��P����1���ҕE��[
+ꍢ�~S�����5c�_E�.N��
+���
+iq�땄�"ԮἋ��[!�;�Se� ��"|�ru � ���9h:�������J.�s�#z����c�����u �(�G�꩷8=rK�ӊ�3&Nُ%[�qP(a��Ӂy���mp@y �z�����7�S��z�����})L@�ơ{:b*������:J^� Tc9>�}+�5􉚺�/�x)�P���X|=g5����K@ K╳� )P�0+�0�`%������p�q����S�O`/L`�fP������}]ʠ��j$�.F�<���P�~�$/�r�P��#��p� �32�l/�r+W�:�1TΠ�/����itP�fPS���# T8徐� ���(짹X�c��t�o��0-(L�R�׽�\�O���4��W���B�P׼jRT@�F�/Dt�QZ��֭C�6�����������p�R? uT̏�@�[�~c ��9����G�((L�l0&c�wR��q*��:vj�@�%�s�حF�l���zX頷��ˡ�i��Y����Tb�>qJ�!(�s�Fx� 8�<C��%U��ױܳ*N�I�@���Г >�/��8��rK�q�����^I��0�u�L�B��.n圹���n&n~ҡn� n~�f�0"_3%�>�r���'}"��~2m@���%�<k:,}]wV����CB�tk3�v�^�[*;i;�\�*�g�����r��� LB���Fi�Q.>�TN�'��őE��2���2���$c�wC~F��r3�e�qջA����3� �}:�O��o�u�@���sIͪ��&6�%"J��4��d=�O2�]| ׬
+���v&񼳊˥r��Y+���G���R*��z*�
+��a�Դ�Jk�g4�Di ��H�����x�DL�N��k2�] zG�=z��f>�D��?��޽��֝D�w-�y������La�I������VZt_�w�Y5�̽&��^��Z qv��&K6���6 ���U��NF���4����4����zt�����@ z 谢�������"�^�����9�0����o�'���@��>x7߬j���iV�!*�P�p�^/�q�k1u�\M���5��|�!����"�� +�.�|��_dIu��n]�A�W,��i�>�r���p�YdU����)|�CH��&%
+3��Y
+��퀠���Z�\u�F�|��*z�2}'����K]$5�������1��_"yYB������j YJ _]�)��ӡ��c߳ �� x���kU��6���֑�6-���u��\bI��g���1��5m�(jǹ�R(xB��#}��G��7a��&�E�<o? ~VwX��f)��N��Zdl�.aJ�s����o�i������Ո��ф�0a��)�~��y�"?h�Hsj���,~TiF'�k jw�]��R���l
+5 "�*�ֳO�9���ѧK��2$� �w>��>��'�2�y/�� ��y�sD��y@|�1�����$��0�Z$��N>��
+��O?SL����¿�/��D��$��W�^��h���)iV����lH����kc��@,��
+�Gd�G�(�[�$�k1��Yl�ĵi��T4��0�'�j�_h%{Q~F|��T��+��iK3ZI�zJ�Ԭ'N�6bҺ��'�A͊�~9%/V�D��~_��<�x�8�]O��A�J��d|QF���'�����j\��&����˒�Z_Q�u���i�����ѕ���,,�?��@~��v�d��O���[�Q�o�Y&?Җ#��t��QB��z@��}LR\o#{�pN��"�ݫ13�);y�U����Ⳓ�2"���0�u��f�@�Ss���K���; �9cQz��CƲ�j����C���e�7��vMl!�C���—d7��sk�IsN
+�~7 R��e�¶����c��^����h�`�ێ�y�Q��������3���Gɂ��o��
+_}���鲮3Ҷ�������ʲ+��TV����%���)���y�tP̣v�$�ɜy�����DZ��(��'{\q�[����^ M��2�nv��Q�����m����zD�GC�NAf� ��]$��'��b�u�a�:~��w��+>��+;Α/$tN ��|�+&|�����"*�� ]�rA���a��>X2��'lf��kXK���E��Æ~�{����K�j> x�49_�q)��W���o�]C��!��_�|�{I]�E�?^#��]���M_��3M<��� #zU��v��ue�-����c��"k��"�� ]��Jl%/kNH�6���&VI���F�8�$��bL�"��:_U�M��1Q�͂���(���W2X�+�������S������w��s� ��k͐�nN
+�(��
+.�q��N9𛓤�������f��咞_i{�7U�q ��3��AK���!a��}DҀ�4��YA���I�1�����A�~�%��o�2k)���6_�i>).n�YZTi--��7�ʿ*~�|A�����m�I^�9�U�%���$��c�Ii~�YIA�Y��LMR�v
+�.�G�l����&�kB���{Ⱥ�d}U��뢾���F������o悒?̈�_,�_�R>^ 6xJ?UZv=��|j�*>��^u��[�<"��*��z2�V���Q�'~�`i����,��,��4��T����4�ʜ~�&a�~�ϻ�U��8��$���i�Q�v "�!�h�O��˼j��TT\�V;ɚ*��w���{��f�·Q��^E��=%-��+�u���,�\�d��6�`on��;1g���.��F]��
+;�y�5#�t /��q��r���wC��H~�&vL[@&|P�n �1��z�� v �^,0N��B 1k`і'7�-�>��<�`��pQU���軹�CV]��b���HC=SDQ�
+b�� %�u��N�ݍ�И�|��Q�i}�'�5�n3)��h"�������fuy^��?37���w[��g��F�m��"b޻�y�x�� �j:�$�T`��H~�N��dF�S�������ag�¥�nue�m�!�����7��|F7 X�sX2㻶0�k��t��E��Y�y�ӎ�D�� ����!U�/�Ѳ�*/ˎQGڟF��V�Z\$���t� �vV���'��LO~7>�&�w�'�� šoG�:'ؓ��O��եWL���To6N�a����Q��o���ɖ���r���
+�(���1�5���b-�FH�TI>���>�������~�scB����0�'���G����A��“d��8?�-�|�� (� ؕ����b����7[Ӵ:�4�M����K��S!o|Ԗ�j=iZQ�"-�p=�1���OR���/\˗�_O<$����G><�9��"Z�Q�+�P�a:Xr�16ֽ�7έ�76��9ң�7Q�R|��k;o��N���p��zxp�KxZ��<��>�v�C^o�r�0��^�>��.�G��y����Q%������ '���H �/I�7e�7S̭f��F/� k�|��v�93�\sj���q'���K;�������%�
+k~%*�~���56�e�xI][�S?��k�x��8�`wn��s�.�<E�������$�ɘ��` ~X#�+?g����h۽���OC��=��Д�l�(���������I+w�߫� ɫ�
+,m��_TeTPaTRcPYmP��.��*)��Sj�V��W�y�!)´�u�x��ۢ멜����)�'�C@��&���ŏ;�n|4��jJntR�o���㢴��O����t~p���J>�R=.���^��� ��J9��i'x�x���ל�5��&��
+0�+w������x�9=�`�0io���G���w� �n ��v �_e'/��*h�
+|�hX�?��Y��Z>�����]b�sXr�sX|�K�G�O��S�?�����`�EĒ���]���sf%Ůf E����!ⷍg�DJ��$�I(y�vHZ�xQR�c�/ҚZw�
+�D�jy�yk�\��z����� �~���-�i�X���r�1>�D�8��"� �����C$_�vg��4����:EFԺƞiI����`:꜏vdE�6�Ƹ�{GF�:�oW�ÕUi��ӫ�+��b����aY%��R��c홡�->��&Yu�UQ~�III���}�����
+� y�Ul��a^�^�偑NU��q�n>�ޱTg���V�od���ɯ�3:��#<��-̮.�W\\`���c������oYC��P���,�퓍��|3}��2ϴ�I���g�mD�e�]k�`��zUir��>$��)�~͕���������Y�/���=�Q����g/�?9��?���
+����]��V�z�24�l}|����c�rYO��E�s���1@���W���%z��A����E/~9d�Tz�)=�tsF��Yz_��y.��~���՚��v��;�q7̢�ܤ�=n�<x��Pm{��A�s}� Ӻ���׬�Q���F�OY�M���M7�o�hR������?�y#2��52��%̲���W��a'kj��J��Y�~+��gi�A���+{��{��V��|�r'�|q0la%�Mˍ����%��6f�U��Z���W�&��_�M+s��i�L�vW������v[q]������\CJ�cUH�Med��װ�oC�꣰�~)�/��.��ʎ����]��T{�-=����*��a/�nľ�<ز;'�d[F����Ȉz�H�:�ѧf/�����-���0*b�� �0����9O��U�w~?%����Z�wDR���=��"�G�O�ɦ�ˎ[!t��S�cC��t���Lc�����h�j����N�W��B� ���u������[Gy�;��C�8��C|����|��A�_l��}VI�u�`�%���*¾έ�;B��GG��o�p��NXj�CDQ���� ����P�&�x��2_��J��情rA���_�jFv�����Q�ov^a�@����C[v�E*;��M*�hÖ=h��ڠ�C���0�+O�h��m�V�E~iwt(
+I~u-��������<ϰ�7y`�O�U�N7�G�z{<M�*���eEb\X����#2��KX&� ����?n�1/(��)��o����Z�k�
+f~4\7����g%���/F��)�E�g�h&����9�RƟ�=�����'F��+
+�2ŝ�)�l�<4�ƿ5MP��&+�A��+�y��!�i�Тy[�ʕ�h����z� ���.�*V$�����=(z���Y�;y�[������o���Km�����+w /���V��R��#�.��.�wW#��_ ?��LNt�r���u��Q�t9���?>C�ď>������:�[S��S&:ܟ���NY/����o�{��ԋ�[��?��(�G�f-F�3��5�@�84�Ac�5 ���#e�h�4e�~� �k��v��x����ZM������ڴ�e����[�8�*n���t���p'�j�oT�[�Ф|7��BW9���i�aO��o�����b,Q�(S�\��>8��%,��#����/�u&�K�u�/}?���H6��=���ݪ��f�����;5��e�h��H��������z�i�5��(.]��&��h4�F�����.E�> )���p���x�c�o��_)r�����m�$F�Ho����բ�"Wy��<�w�<�S����jhd�������|���y.�/��9�N!O^;�d�y��I���1�m���>���O��zO�OΗZ�#^7��z)0��1\��5�cz �����T��ᵍ¯J�[��8|�+��� ~������o���F ��?ND#&�f�YS֠u[��U3�8n ��G��5�o����Z�����54�K(�1��E�An~��=O�����6:�d�s�G��oK����������U��p�c�7����7�6�1@��g�5��^�H�
+�� xMӱ�Mş�����j���0nu���a��n,�{3�Y\��R�j��y�]e4�a:z<d�~-/B��d�]����� �x�cYl�������`�_���*p�� |�|�Іb���2���bo��, :XƸ�=!��Z�g�vY�)x��_����#��޳����E���:��h�s�$�.V��Tf{�$�?�Wؽ7n���ž�D<-r�z��1<7�9��K��<�Ѐw�r���R�p��kai�w���o�:�ĕ����^�*�w��[�(�_��f)L�lp �*�O�S��"g���?�a�G⟏����9�}����a�:�BSF,As�����#�$�zV���io���7��9į�+�DKZ(��3 �a�ˀWb��?�Ԅ�m˔��3�;��c�^_c4�u�ck�#-���_H�/��?{�����]�_߃�*����u����X|����I���C>H�ϵ�����ɛЪ���cwGh�f�
+�Y�C-�U&���^���tCbhM�K����:���EN1M�.�M�cj���_�u
+�����9,��#L��nT���qg�� �۷���߽������#��hn���;��S���˅h��%�Y;lO;��3ky��ε���aws��s߸D��w�)�wI(-v�{Q��S��P�.�/ �˥�/�wyx���`��
+}��jԻ<�Ȳ���B����w����N���9��c��C|?콻\��U_�^�����&����g���9?2���'�}T����4w�4o�4{�^4w�&����^,@��#���h�B]4o9����]�-�޲�%^:�� �pK���'Nr���"���g������ �b��ۇ�:�9��5� ��v�WX�y'�����u���y����C>p� ����$4Ca�=v�=e=�;k/Z�V��o?�m���q4w��]D�Y�4k�P�Ds��p?[�G�j'h~`����C����)O�y�Z��-���kLq�K ��o���J"*�"�kl#j�bkJb
+)M]�}�J4s�Z|�v��Sw#�i���i{���[a��-��E�O��z�h����;����e�+��*F�Ç�nx}��Y��Q�����.���!�\{�}R[�CB[������KxiԲ{����_���Z�Ϧ*�FS1C��j>s���-@�N�״Q�ь�k��6���U�}�c�4Bs6���*g��}�h��7Z�D��d�h�Law��3TKٍTo��K�n���^��!�1���k{��!� �q���am��]���mv�y���竣C4߲�fO��o��_� �=D��JHi�B��9����O�{����!�1+�?�{7n=��[�ܙ{тEZ��8Z��
+-�rFK5��Uk4_���i�V�C������Ԟ�+y��QW�����y!A�]��z�_��=9/�) 8��g������ˮpyH��WW��Kg�^�o��������p��)c߿) _���l�38ۜ�ߧ+���[�f�[���[�}#�&�B3�c��X)�5G��,�'В=�h�QZ���Z�U��Q;n�]v�F��q�Ii�K���I���}C�t�W�v��k+�s ~Vb��:�S�mt�m|Y�]l\�k�ɏ�k�V��=�����_�d ���5���xgs�tş�Ҥ��^)���6���`;�i�����>��]����#��ZHi�Z��9_��x��ր� ;o��U+�M��6���l�qݳ�;8:�j���1��6�\e�Yc�[g���J\w�cBG�=��-,o���k���?���x-}�_��RG �u�:����W�������� �L|��Y�7{7�;g/�����-���)�h�Q�B��&��Gr6�����<v����I?��+`7iw�<��f[ӶG�o���s���y��E��O߸� J��`�Lb~Q��
+ܞ�_�����,54s�&RZa���;��h q����o*n󫙸�;_5�O%�u_%���.��)*G�׋��Y�'o���T:q�g�4�����?a7a|��� k��1x��R��͊t|J��6�0(ZA���XT�}^�����F�俩3��0?�n�<�l.��ʞT�䷜�~'�"�DM�8]��{���6u�B��7����h�j3�x� �L��廣5:к=G��-$Z�F�X��֨��
+�3l��'�v��ݗ��EZU��^kb�˚_�;X��~wU�훕��[���I�u�^|��[��R֘W�R�
+�\�0p�i��c>T;�}n��*L��݇���g���ǘ�V7ת�؊R�
+�p������U� �T
+�%� ��� ��k�<"�t+ᗳ���ZN_��\�ܬg�^%e�Kw2W�g�3�ϝ�dR�>*�f7�l�0���4����T�ȚʼMn�]]�0W]��x6H�6{� ��3��?Xk���E�N�v��n6�]�r�d5��-92�0�a ��m#*�D=��χOٯ�����{F���
+���
+=�m_��]��SGf Ń�Z�w�v��d���,2�p����ԛ9�|"�6?�k��j�|�;s1u��}��[ߴ�m��Q����n���H��)����lCfvQ� ��-~\�V~Л���n�V��>��(���[W1��n��gwj��Fz���A�P��50x���b�M�Y�����?S6<�8��⌢Ɂӊz��hǪh߶mH�g�ȃ�F���� M�}�����_�v�s |oIϔ��<ϤeR{o%���x�*|�0�v߲��HU��fSNa���Js�O(y�A����[$� �J�?\"y�rPZY�}��w�l�{�AB����"�B�T�ϋ�,��b�H��[����3c�/eO�:�1^�!����� �|�J���)}���)�T3�k�D;TѾ������f��(���LnR�uk,�!x&�O����x�N��5�],��uMT�”&U8s��ͥ��� k���_�*x�D��`�0��<����F�4��
+� +1�jgu��x� uﲛ ��X��PU�!mc)2�^V�_ ���/F{�i })�V�Ejk� �=���hD�������}HW� x$�,���N4sI\b�vc%<$u ��827� ̳*����n|�ڇ�$�R&Tʋ7�§ N�����&�k>Og�Rܳ.61J�<3q��"�%f�0O虵�8�n�q� ��_UM�J7�RT�n|�a���l�3���Ԥ�o����w��Sg�æ�|�A���&�����DL���^
+�b,:4LMeڶtڳA�sGu ϲ�,=�%�i0��~�����?��֊��fJt�Q@e�����RN�s���}�\�J4��ѳ�k� ��o�k�f�š�ģ�|��o�􏪂_�Q�z(����(������}��^� � ��y���m���������G1Lg��q.�3z�j���1t�Q�gt�Qg�.�M6�f��ϖI�*�-lG�.7&�)��T��o=R�x���5Y�ީ�ƈ133`n1}��p�E����EI:db��0�j/�Ң3 dw����n �j�2�>�vK^
+i#�. �q>c@MW���f���a�1�KF�蒒�z͘���DN������_̿��>��8C�|���YEx~����+}Vw̴����}�=��+5�����1k��}�D[p�QZ�VOX�?�CZ4��)8f3����p���م�j�4�^�?�����؈���3����
++D�/��\�:�ӌ:j=��8=\t���� ��`,�� ��:M��y���TAr�N*�K�R�}������: ��w�EϜ�V=6{Yz�J�׆g����(y�6���J�j�2�j�wo%� +�7���Êכ؆N�;��1��],89EC�-��n ��S���,�'<�lY�-;-�0 ��<����S�Bq����L�����Ld�S�̕"����B�eLJs�A ��d�K�\&��f*��^aB�.����� �*��>�2�zHAj��Q��yM�2��:"�nW��N���κ߽Ե��Dx�V�N� ��U{K��0��[�O�(w��'\����
+�Z�R�!̹?�4�<0��K�s�HK�Q<�(��ȟ��`[��rŗ_�:xn��1�O{f-'N8�!ι���q<���`�L�Z>�#��Wqe����}ԭ}���ѭ��۾�eD=��s„���k���j�pY���^��)�{�!o����OZ�O��Cy�_.LP'R���L���2���R���~R�N�[�U�"�j����7����mK֣]6����#]#�_�6���L�gD!-��3F���V�Sa� �xFf-¬?��P ����8���7*Lb�~2�Yfvg��Q�K�MF�;b�]�3}1�9fb�n�
+�9uRQv�����#�?j_��02�z�C�s�l�;u� ���n���Y�A��ߴ���V}K�'�n3I��)�����c�Y=��a�.'�L��2r��mh�O�Ю��������0^r��
+i�;-qD�^�]�9t0��/�!�8=L����?�}y�,��Hq����+Q���qM��ۃ�D�G-2��Z�&J��̋�/�L�ɳ���ᛐ�\A��D�� d�u�G�B���Aj�^"�Lj��6&R�h��/�y|�9EuD�of=�8�9�tD�?�q3�f�#`��$�8�����Ҟ�+��Z�/���q�O�9�I����������Fe��:��P 6���ŦIr�X��F�G#idi�4�-c�q�1�w�� !�Jr����J!���ޔ۾�~�����㾵֩3#Yg�ʌ8֜���}�Z{�U�^{�-�:֞�O�: cG�6�rE�ӟ�ty�w+��Jų� ����۶ț�56���t�'�[x���5<�K>����Nó�x~-��n��������M_�3���w����w�U���ج�=���0Xâ�I��Qk�HqZv���T�9t�m��_u����S�fͼ�e}�B_��k�ؐ
+�;���}�������19���+1�F`��ɡ���dh��SL���\����^Z���KrŮo�+O��=���l��T�^��Y�E�N�X�X��c�*��'�9i�����i�m����=�6ۄ���2����������������������g7���}�^���1NA��1��
+<�Ű�����#_.��dž��_6��ǰ�T��w�FÓ�������W�k^�c�s����u����� l�y��P��?�����1�?Ǝ��`��t���spm��Пn<�s޿�ޓn�;hNY��HY8����}�/�ؔ�{_
+�<7�|�d��/u�I�����[;�Ü��>���z0&Pt��k�;��al��I1���c�R,m��=��C�_�qF�����R{?�y��[�~� ����3��|���^����;�����M|���O��������w>�"� �~�<��B���Y�����|���Ϟ(�Q�����ӂ�R:�y_̿�� [޼�a�g�.:�
+s�6�a|�����(c��#wn;�r=���S�*a><�uM��Ţ�+��0.L�e�7��1�/��V�s���f�''c�b,:�YL�]y��Ӄ��_\r����G� �xhrp�c��ׁ}�����K>;ػ�H���wn,� Ƽ��7���:'��vN�����������#�~�%���A�sv�B��b���bn&�1Z�� ��|��k"o}������˟��F��ѸvB1�xijh�~�z
+<�.��g07H
+�a�:�#�gBKw�s[,1u�Ц��@9�v����x���﹯c�{<�׹x��SC��m=;��&W�>�aѲI � l�a�dʱ� �X�ڣc ��r������?#rזs0.#�yP1wd�KWc�:�a�Z��g/�Xw���bF-�>�b���C��� P.X̧���<�]�7�H��紆ۓ��oOiy1�2�ʆ�?TB˞�\�x[xc01!Ծ�D�!�ջ�,�rF]s���u0��m��1��l�?x1��Q�E�-wN��E`��Y��|̉���:V���du�%AG��ж�`�����V�� /�8Ea�����o��<{%��7a���3��<�Ï��R̻��U�9;1w_��OZ~��������Mr׻<�ц�?P�G~�EK��L�9=��1�k��8�;� .{�������������'�E���u���ה�W+e�oZPV߶|����y`�V�R�4��$�߮k�O����b��@kf�/�hb��gR�����^�y �m
+<�������F��:�]��K/�����_6����o{������;��l�����3�j���0�,���p��V�0w^}�E�Sz@h���kN�ܜ�D�x��I�*a|aL�Z_�,ز��H7���� u�\Z��B�G�����^Aq�A��tM�xU�9=���
+�˅9�B�� �.��gjd���b|C-���b������1�F`��3B�~[��� ���k���`F_�,���GwD_�](��
+�a�M�Zb�T��\���`ǦS�z'a����G(�&�1��u� �;�N�\Bx�=�N����w�7���e;��X��G��|3���>QNW�������| #0�V���3��9�r��wql�+S)��s����ȡ�Ğ��.���9�G��Ḍ�?�3Gy|�Jh��*���r����7���tzd2�i�������`� ߾/��}G/��y�BlۼYs`>�ʂK6��c�ɷE;'���N��&ͫ ��S]&_%��R��J���2�.�:.�l����_�2�t�Y'c�R�e[Ύݽs�����kF�0��g��T�_�e�
+��c1o����}��A�~��x�������� �9�z�t�����@����?V7�����ܹ e��R[�����=8�NQ'������o���|���˛bD�W��Z~�?�;�b�? ?����{߭�<���8���I,����о�o¸_���K�֓�)����04��yal���0@��_��{�Sc�\8���ͧ7����<盞�<���k1�`���n ��|����PI��6�xe(��В5��a��C`\���w*O}v}d�2Ɗ�<j�g�����B��y.�<~�{��5.$}��x�O���ȁ?�m<������ ��͍� 1ڷ}r�ރ�b,C���� �8���Ťsl��5��ޗ"��<+r�O�6����ÿ��>��|��s�]��Ƶ;.��|� x�*���j�2�d��7={ȺiO�s��3��BG�1?|�o p��I1tp��KI�w����)�>\��% ���X�����m���+N� �'T�0����7���B�� ��c��~3��%�][W* $:&a����ɔ�w�ٔ��9�"v�Ú��?S"k�
+��i]��\Xzo9��e�=s�w(��T��q�!|�3�����7�pY�C4��u���q&�� �ke��OTC��"+�]H�����a�og�͋9�p]���6� �|��O�`����/�BO��F�}Y��$�뇹f��}S��Oo�8��&B����+�{���q����y��ƸMwm�f��g�{\s�=�&<�ae��Gu�G>F��vv`�/U����Fƺ ox�
+�{��[Ӣ��2?r��u�g�k����n ozm
+�o>zŷ{��ڦ7��}�����?��>F��3�]�����m`b����� 1���9���Hb�w��Ekn�Q�c̭�� ���4m|��p�gE���]�����On����Ο ���b!�|�x�=���9��z�,��������[�k��j���ȝ�zT ����p���Mķq��K���&�@mZ���e-��
+�[���-��M���D|fa�����21r��ɸ����7��00﴿ ����8?��[�`�
+��=NC��y e�o��ˀ�<?�����˗�J���'��[&ҷ�r������?TF����rga��T��>3w�r=wV��M�;�eot���Xf󙾆�l;��ƽ�ƕ��{���7��9���[�=���(���Ϡ| �0/ Ų�|��|�y����+Q�������g������w%�Oka�C��~�~��ƒG��ؖo_�yIc�~�0�����e� ���o�c�)`�]~���Q �-���rg)w�'7F����ѣ_܆>�hP.��u��W�X�h�$r�IF�,\_œ�_�Sb�_������$���� ?�ҵ�G~ 4ny�:�]�Z}����u��u�<�����?(o̦�<�,ʎ(����&�x�k���<|>��(�oI���0�}x���оOo��5�s�\��v
+ܿ������H�Ц��В�'�B�� �mQv���1�Wl�<N���� �ֻNh��|:ڷ�+>s� O?�ڵ�C�.�8ȸW��燻7����ߘ>���2�}~@��.�r�q��KHF�\�<��� v���z�����������2�\�]o3���q�c�Q~�5{.F�Ӽi�ضoO����9pp}S�)��l-�P�Sw�#`�7�('
+��]���w���q|� ����u���}��<����"�`�x̋�y~B;ߚNcsˬ"YtU�_ߌ�3|�_o���ءO�Ǐ�6��y�j`�����z��K#=���=}�`��Sp_*������K�;��ς �|y3��
+=��4<������5/�X�AZs��4ʝ��Bp=���N�/�κW˝y�bh�O���
+2�q��I���9[P>�=!���|��ƃ�Q���G��v�#��xW������tV��0�ߖ�S��>�������n< u=�浘��|`���ַ��+�<?��1)�����F쥏�����?���$��6�[�}]d�/n�<�� ԓj��e���LJ��O�5�؝���yPcK�Ni\�urx�������r�ܵ�\�`�V�z��`c�0�uc�G����Q��U�4��}��B�/�v�Řs#���� �3�?zE�+�_�W��s�i��QK�m�^������P�r��Q�nz������k"э�.ǜ�(�C��0���Q�럸sV�9��/h�6ʁ����7(3� ꡑ� ��FC}��ؠ^��'�'���
+�z�c=v�Wh���ق��z��W�w�Q��cƘ��#�Yh�j��iX���އ�
+��׸ބ����׮#�>���7ܽ�<�\yr��{Rt��o�_O�?-l|���賿� ��p&���5�;�&����O����}�_M9�1�-�|��n{u�"��{�B́z�{|��?T�w�L��]�o���� ��Lz��k�ϣ.��p�)w?vA�{=�'�=��Ǣ����#}0�:��h�D�_A9U@��۴}X���A�7�$#`އ��<5�9�-<��a�O���:ۍ�g�羸s
+���?�D�J{���qh��������$����p�S��g���Yˉ����0�
+�{c��;�_p�<�i�e��Ǽ��s�|���Fxi���$�����SN,�Ѩ#a�7�:����D7�����6�1-���7�'"Ա��h汄�����('���>}���~y�"�<��A�k sí|�<��iy5�/� �|y;^�@}��Vc����\6
+����s�唋g��30w�!{mU��a���?�x������.�y�P�>�zE��畱�?�a�ܫ�\_K��M�'�ֈ>@[^��z-�7�{�O�w��G74���x����,فc昖�xυ����;���5y�%�G���3ҝ"��\�o����s���
+u� Z�0șG��3��V[����� i���ﰡ}��~�]�郭w�P�c�1Ȳ �x�{~&c��_s7���{/�9�x�x���}���������E �V���1C}'G�{f
+�C�{��<r�Ў{N��=�M�U�\ڠ���=<��kqL��u�!�|SѮ��z6�]����C���^D�|`3���F�_�v~}�m>��h����tG= �[�0fÝ+N���9��f���.A_�H�Sb(�w�-������D�����W���+l�G�?q.��ȿQ����[�&�#����� �&���|��S�+v��9�)�0�+��C9�c��`�[\��k�9���x�wY��k&���?��Ə0�)�8�s��bq��Xt�n=�3�OP/�16���u���H�����a�P�?��<�N�|�Y�W
+:�g�>�x�.��m���t����0�+�}��['�����pn�?<��k�x�KW��+�M���/��t�-�Ƶ{/!����
+� 8���9��-�]x�k�ޚZ�k2�s���<��8�(�֢�I�'���?���?/ ���?�<����E�N��!��A�M�<= ��|�܃�ͧS�i^g�����~܏�q?������~܏�q?������~܏�q?������~܏�q?������~܏�q?�����gʔٝm��xy��)���f����d�� ˧4O����J�f���xw�g�B j��fyfx������L��<�3�3�r�4C�u��:x��r�gz}"��L�*��Ϟ���d'
+��mW@�Q��۳�.���w�Dj^���Nvf���**4pU��P�� ��O���9��v�y 4E�.L�%�2���
+�4��Qǰ�+�Z�;�1�{��� Л�w�^ޕ�Lt:�-���cY(���ΞL|HZK�Rs >N���1UV���)�J�[�l!�2�v�"u�dg�����Y�L��[����ӎ�����>���C��C��{�� ��vJ��ǚ��q�ū�-q�і�Cs,�� �8dGD(jD�;;"l�s�◙��dfqG"�|c��d���܏��I�.���tE��(�[�Jr�x�,Ht/J %KO%*t���.�v��Gã����QI8U�ө��Db��m���:��?���"_.`V�[���d*�|���L��m�u���-���1"%��u�;ޖ�u����NENww-N�ҋ���1[�/ws~V�ȹ۸�i#���i.OC�u�8�vڤ��X'���9�R[L/U���#���r��p,@��"8F1Z�[� &�"��%�se��$S)Gm��&�
+;U2V�I�O��whiq�7.+�>)�E�J�;(Ջ㝝��/�J��Ȗ_pԑ�w��5T$� ��8����J�[��̂xW��$�c��ɻd�.�v+]97:��G}�vġ*�[�%�������sq\�B�q���&^�o8�D���Z���Tq>�|�8?3[��^���2��w�E�� w���)U�c��;��ܧ����A�:�f��?ڳ������"�|�Y{z�=R��}�q���w�d�����Jg"��pCk<պ ��A�V�xwr2i�Gz �Lw:�Ј���v��gdg�"��[w��{�赵%3ɥ g���B��ۓ�T!>ש1�L�Ɏ���Q)��w�xq�iu�f���s�%��$���ی�c��73��+�WǙ�q�8S��-v��:��|r�����L��gZǍ��8bb���8�����:ΰ��L�j���q�
+��E>UƵ��Wj|`���J���
+�\�ڟ#%�t��� �4.�_;_���q��#�&����o%���U����mv7
+b�E��Z�]��Zk{���� K�/8^`[2���?���=���9O[2,���Av��E�� }gG�--��%g�;�Yܑ�8�JI�Eꔒ$�A�S����ǐ��=�8�v�����s�υ�,�%4w���v������&Y�;�3� �Q*{��7K�����9����<�����{���sv��-���s�-�ξ���g�)�ݦ�d{{oO�:� �w��Wn��v�L����º/�Ш#חH��˜b�J.Z���+Z1x�cs��:�� /�y<�E�5_��ąL��_�s�����72o��D�s&����dg[rQz��d:����N��Lw�;�$s�r�r��:w�.�.��).9�tI�ঠ�[��W�Lj�W$;z3�dY�O��1[���$ۿ�1�����+5��^z����������d��t%ZA���#�;�t"�^�J^K������P, ^
+E��9"nx�"sa-���z9��ߡ9�e�T2SO����b>�P�"ԍpUl"t�D��]�ѱ��J�R��nd�q٪�nu�Z �cۆqժr^�oq�-���;��z�}����,s���Pڇ��ms����!��AX���E>W������{�݉���u�q�Z��ke# �sDZ�P,�3:����/�W�F+0S���eɶ����G�w���D!>Y�㣎�ej�!����=ʨV����\= ��L�[,}���[
+���Q��Oi/(�e��9"��G Xȥ���w��������.���֙xNO�Y]�;؝i_&�id�n��� �Tg��ʌ��c7��ގ��L|i�ً�����q���xObNw���Dg�s "�Ԩ#�������gh�"h�i��j-l�ҡ*0L�u��O��� `�~�
+&5^�/��D��q��Lڹ�N�*n4%7�Ҁȹє�{��hJ#������қ��d��80%p��
+v�X��`2n����m��q��±��F�(.���#l�F���X����X �ë�x!��ӆ-^�h{�S��o���iO��TA(�hI�[���h�tW�5��Q�qO�/�|�Tz�� �R�Ss��JoJ}�8:��阤ӥ�����]5�HX��!��Fd_k�
+��t'�wn6�u{��v��[�u_v�QGn��N_�p�~�p�Bm(�u$ M?\�l<��v�� .��8�V"7���J����3���dGo[�������45F�֬$�ښB6�G(Z�,�?��"��t?W{(u�a<��!d���-��f/�Jw&
+�E� ��e��`�+���=����iO��4bʓO�ʥ�=�^֥�SP�j�jK��W8��O� 5������r��sζd,�sD�5�#"���d�'툰c�H�+�E/;�����D�3JI��Kg�T2SOf��"��7��]�:G��ņH���!�5�K1Z��q%������T�&�,b�h�YH�t�ȵ������4~S���8��5Ґ6��[�s��tu�R���z����L�Ӯ�+�L�x|�eG�r��8G�Ӭ��\(�3��`�� :j���H,F�1%ո%�u87W�!E*���S�b��%�QƩ�ks��T�q ���;f|z��;��}
+� �8&s {3 �{�}ȱ^��JP�w��c��6�J[�\<Ԟ螓�.�U�b�g��x�'oI%��jf��>�������9������T����í$���n���Jt�U���
+�Cxػ�;����<�E��!�*pM�b�d(�i)h�� ,��]9�� �ƫL���k��$C����1�mJ
+�)��X�yvg���
+A"B��;�
+
+YT��������vQ������%�*�Z���_��F&R�x*�_h^$�{���r�+�2����H
++����"� �p�(H��9)yY���gy�
+,�E�dAd endstream endobj 29 0 obj <</Length 65536>>stream
+T��U���喻S�nn��;
+'q�JVD ����p��)�� ���멀j��*^�xl�I�
+���k%h��UYI��)W�<V��/bT��^�
+���ͭ�
+�A�Q=*�໼<#JT��q*�A<:���Ud�ó^^Vw�"I
+����aM�ZUxA���F2!Y8�Z7��`E�<x��׀>0:YU"��C�0%Yd��h-�v1/Z h���&{U���
+�r��}�L�D�@<g�1�@#M�Al�wPR�^��� �
+iêH]�����(�N�"����
+;��<D��fH,M�C`jڌ
+[���06���A��ܦ4�7�<7�y(,nJs'��S+;ӝ�����D�CUy�$+C��L"�NS�@ã���0z$EE^h@��U�'^
+dթ�RI-�-XIs��m�}Z�\~0 gw�z5�\�N��������6ͬ�� �[s�j�Ӑ�L�~����L&�ٜ^
+Vb�6�5�@�Y���p��&Ƴ�8 ð({q�)t��y��~��$�((��F�7���q�k�
+�F�"�ʳ���w��N��'A���Q^�P��k�jʍת������Z����,��/�w�<0kID!��Õ�FGS��el��ᐻS
+#�1e���*r��,
+
+�G����
+��l&��!��3*�Wh5WkԔW��l�w����Y�oK&`��ӨS+T�`�v ��T-*G�D�
+�B��ʲ��x@m��$+�P��u,�q�i�f],�$)�u,�Q��y/���jU䪆9 ǔ���������
+}�e��)�M�jk��S*Un�i���'�1o�#�>lH�4�9�c_Qe9�� �zJ�e��_�Y�x��_�ne$�mx9c���6Ҭ��y���ױ8<XF�?���QŮj��������$�6�y����"_�H0��Q�Ύ�t��N�%3��xw��^,ˮڡ���W��TZx�4�5
+��<���܀��ߒ�Lfe� E ��˵o��o�"Z5�a՞�f�A��Q���:V�r�$<�A�20/�t��ͪ�0��&Z������V�B��T�m˻����i����$��d���6���F����rzm�嶗�d��
+��>4�&8XMp��)�_E"8�� �I]T���6E��(F@p ���E!��Ʊ�� N�&-�(d�K�<��ʪ������x��U9����� ��S5��HNeC"�#����`���".��fPqя��� �m��i��]\ �۠�Da�IN�C҂#��y4^��-Ia�����?1[7�65�T����6�
+Qn�SIA�DG�nH��9�i_c/)r�ЀօmQt�qe��l�
+��s,#^��
+Ί�飡yM�t�M0�C�J��7�j�P?-zt�Ƣk|q�?����V-n�g�dc�־]�o�0�eǻ��U�9���r�e��N#{k����S��x
+������J��W� ���.U��ÄC�0�`[(8�ce�n��x�f�k�x�X���鮶��c:Z[Y Θ��Y��� Dt��0QG�Ƅ
+
+��I"�f{�Cw0l���m�+��0mx�U�_�j.'��\�p"�0��65�m�k��]~2
+��s 9���˲�X���r���$�lapV�*���X��0h?�s�~�� ��cg�N%B~�#G^�"k~�
+���!�9�TDZM�~ �cؽ���ey�[�B]�N��F>���tTc���YԘ�Y���� ���� �v0@( �J�^���C�bZ
+�)���xRAD�gN�e���z'��`#Y��TA�Y@S@�,kkm�EEx0H ����?�b=�Q����z`B��{���5�si�;�h�Y
+��8Lqu��XG�y�H@
+����F(� �c͋�cp·�h B
+��j��j�<cx��� W�9/��V� @ Ъ�a����We�x��6���Bd�.� �b��H���б
+���� Ԅ�~h�Y���q���$�*ґ �*��Ê���^��� lP�%����$Ŏ��e���r;�h�3[���Q���(� �.6Zj�a����^�`�p�(J�
+��VR��2c�w� � ��g�f�&����g6�F?����^�`�/�RD?��N?;L�^����
+�������,�q�V� U�ȴXj�n��` �0BӬܤ��;�1�j�2B�1�6�� `r�\j! 9qt�A�#*�h#k��5�,�_6��u|>��y���΂����L�e�E�r�
+V,��-��gbc�,|����:�򨄤��J٤��=j����������`��0��p�WT���
+��(�X�� &�z��{�B�԰+\� ������3N�e,
+
+�E"C'2��:�Y�~o�Ȅ�$�A�em�N_㭶���̢��v����Q�u��(���9����q0l��JX�4bHQ���|A�s�_��е_uXߪ2������X���q�~܏��g � ���ǡ~��f+z�y�jz� Omw�1
+��m�!n�Pɼ������+w���C�@�v�����h[+P����a{���n�d�o�Ry�,�6K�;���~Ɂ�����`:�M*�� �u�C��m�t(�1�Qo`J��I� t�M�I��7j(�֐�j�d�fM��v fy�۰AT ߲�j����l���t�����s�C���by[:�@��:�M޶ ���Z�� �l��-������d��o��wR��O6���Ⓑ���·���1��m�l��!(��5D��7��X��P6��a��ED��7���ֱdZ�� X���M���l�p![H6��Z�:�F��`kUȦ�l%�C�c6��,`�ɦ�fv(M6�6��C�l���,�eéj9�u�;��(���E�·�,u6��Cؒ�)�YdʶT?�r��f3�!lX��,�e�ʦ�fQv(W6�6� a�z ���)[���M���uH[[6}�N�!moY*����oq��ip��N��7�,��N��7�, �N��7�,��N��7���3��j�d�[d��j'd��d�Jj'd�[e��j�c��e��\A�ӱ��4K9����4K��� 5K+�S��M�|� LɁ������r�����Ӿ%ݑ8Kd��"I� ^�j��J� 9`�<�R^�H� ��� <�Ad��A����(�!��WeY;���9���y��4/d���_��Nr�)q����Fc�QmxV�
+(=�c�-u�9����Bx���d%'֋��=����L6T�Ɯ�3'�� ���K���X�4m�'?��H�V5��3�%��(��\V< =ͺlM<1Z�ɬQXA��l���F��eT�������3VAm�k����^[s�!�U����~K�\{�|~��~F�>�Ca�U{������<��dU{��-]��Jef˚.�F�q쪆;��1]�'�S�� �Ek��M�W���$���{h ����ӯ©�G��OW� ���k�:f0'h�*��9U/�0_�O{�i��P^U�h#��YU�*�X��D<����/��W��U�:� �]�.M#<V�!ď6�h��Y�O�;����[��yYa{��W�2K7��� ��[��^�?]�#��i��,U�b�H��l�v�b�0�ɪC����x]M��hc���vD U P��TK�~���.)n4n��)5��$`���/u"��I#�R/H�N��m��bS��O(��J�6��tz�U9�g]i�0Wc�ZF#"Շwv��j�!_]�5t)���s��-f��e����Ln�X1�J�`�H�I)��`l��6�V�� �m,�ʬ_r3J�4jUÍ�`�����4�q�1UY���,�p�Ơ5.m��vƨ3F�1��9�3(���֐���ʒ]�Ҳ�!
+�38EA�r�`��0�ױ�Z�hO��kk�4vUÎ�Y���I��e�Z��(�a�9���g&C�e�v���j ���
+��`�_a�q��Aw�^r�ũ���e�`[������'��n<kv$ z�U8��r��4B8U ;N�0�e٩:G��Q�I��+�~���8O��� ���eY������
+sf�˛�w�J����P����Y� w>�CvU$��O�N�Xx�:0�2Nu��7A.�eDQB����_0by�é^�*dЖ��N���q�H�lAjLn�Ά ��.K�`~"@�*�6��/I��6��粄��QEm�E�dm7��u�hi��R�ێ�ܦ� �<|*�k[;������N��r��^�U;�������� `(�;�Q'�-'�hɸ��1�o D-���5��m#�;l���U]no����Q�E��3��x:���a�CjL'k;�5�Ŵӿ�c��Bݨ����n��ۺc
+�"����
+���M,
+�'[]F7^�@�xȽ��X�sj��Z=L{p�GPp�MY��
+_�;o�>_>#�en1�
+�0Gi�^�=$��).�<%�"y\(�I���*KNA���u �d=���>f%�xQk� ��A;WD�`���c
+�t�<�T��H�#�t��S7 �Vs�bYQ�O`S1x�Q1;K��t�ù�k9�U�Q�-��q�u2/ �����w����
+dl�O9�gp�T%Rы �/ܤ�AKe��d oL��H�@3� �7Ve@
+#�'�*���j�@�)��a�)�(�>i�����TA3NE��s�g�t�*:�a^��f�'(ZN�
+HҘ*24�ꑼN����c�x�t�1��8�1<GF~E��TC�r�U�~��NdKQg\���M��x�1%�m=��j���@�/�0�����%����p����j;C��x!��N�,��0�6�5�(��H;>8aL
+2-�@� ��2�N��Q���/��8�Z� H� B;�bqK
+*�I[ASEܚ�W�Q x�@����VD�{P0'\�4`�ڀC?>��>�
+F�`i$�$4�x�}��{M*i}����f�
+�[�ƽ�$���d�n#�ĵh���
+��qk�m��6
+� �nw�p��@U�d"�Y2.�� 2�,�b\�b�!�R���[��s�XW�i+~�`G_�iy:)� g�B�]�v1m���V!�-��:S{Ԩ�HZU�-LO�s�@*b�U4��Ur���ә��;[c�g����~K�jF�t�5�Bcߦxs��f �m!:�B8��j�q
+ڿ0����[5Z�U���I�F9��6�xՏO��CCHAe���%UB��S0'��YPǪx�T�� + .��a%��E��a��i` ��~��jf�7�·X%ڵw���0Ju�ԊwJ^����p8 �%F
+}�f�J55vCby��;onO����k���s=��0YN�D�:�'A��k]��t�1��v8+�in�ʬ'Tٿ���X�g�#�� jZ�uS��T�w�7�u�/�z%
+*��e�2:� ��d���7�]��~���Xt�
+(0'� �|C��uq��TE�b�4 ��N��YE�ǻ[���S��lM�����)�"�@<su\w.�M���O�5 ��@\_"�1}�ǫ�toV_ s��iͰ�jo;�b�tT�<���B ��y*�5WuìJ%���d L��j<)5c�4bui��%���A�*� ��chi�t��L�餕M�螶�d�+�PC�nt�h�
+�U,��� lU*��6L��N�< -<��"R>}��Dk/��~��yL��؋�?~�6���&�tvY��ޓ�L���^`^*�K�c����c�&�0őN��Y�zj������ ���df( {jmo�,A��ĬdOW*ާ�NA�n� ��5�Sk�#fTjsf��װޱ��(ī����J��6 `D��N�'�bţr�+Z\��W� h8���+��N�H&y$%S�R�=����Dw�pI��JMIp̾`�,:���-��g�a�o������]I闱(ŭ򺳱�g#�D /3��2/q"�uxNd�J,:;�A#]PV5%G��ZL�D�=;���9��SQ�N\�u����%
+�FLLu����JJ�(~��qL�����*՛�,L��3��ĸ��Ȋ,'rxJ��2'�<+`MV��׏g�l�u�H�9��, �|=%1�ϓ��lk,�'2���"f�P;��)�Y�xPv��䘮H �e�ו&!�X �֖�PS�����A�����5�Ɏ'zJ�A��&p*�.EL��dI6܍y;�x��]���l�@�à��|�"1*z�#q�z�C�T<栣�Q��H>���L3\�Z��~�d�P�yOY��Q�00yeEa�)��ωfp��lM_xLj ����w^y�XI� Β���,q��"O��� ��Gxm�� ������N^I���|&g�Hd�3�MM�3{�x���n ���g���̵����U]]]���Q��Y
+��#�>,�C�B�X$t��bz.%<��\���Z��B&��[�
+�{����)�-�ޮ7��io���U�)\�a��oK�p��`�E��D�3K������c�����ܮMo��x�����s���_?𻙻��b+�a7�5���a+�t��K�s-��OGu��xD��w��p�b�o3���@�&G��vt�mw�+��j�\d��N������)5��$ϨAgӠ�H�_������-t/!�M�D���#j@����H*H�|l E������>��'ڡ8(����aH��2�;@��1?����Y��z@���������'�����f�����vx=j�Z)���_l�j38�g`j�/�k�ؿ�Dkc��,N��;��d<�����6���@r S �� ��Y ��>��Y�-F�������1Y_�'J��0����~S\��ڞ��#��o/M`PmG��'8Y��m}4�0!ht7/��8t�~�����7�z�>lG�V����h�$�J���l(?d��s��Bn;���~��MC�A����޼����1���H)n��H6�~�����@�K#��G����)�A�&}��L�nϔ?��*���)e����+�գ��
+�$�>�q��O{QZ- �G�� $� �9ހ$�Z? ��� :�1���*�\P"�p�'�S�VI�o�bE-rQ*
+0�B/�<�V�$E����c!L���(���F�� �`��ѵ�l�
+LL���+ A �i?�10!E3�U���N
+���  �Ez�{/A��a�^X�?ꉢp�G�!��Ax�A��" H�@rAP���y��D������$��� �� ^�d!xI���q|$���*.UY�����W�P)�^���A�c’�?>T���x}~���
+Q��
+�"�Pa]�hJ�'�G��'�`!���n���F p2�x�dG`��s ���kL�֥�BD�����|$�^��
+�� ���!Ų>^�䌁KPd�dRay �
+nǷ���/X�i�eNz}X�3'�Ë�5Ff8�
+!}.6
+.k_�V��B�� �X�h%NX1ȋ���5ʢ
+k
+�bO�/�%&���,�,
+'�'] >0hO�.X^��A��\{)I�첸��ע~��Jh�}�D=.Hc ��CN;��kЕ�0�`��w/:��H�c���Ф��t�����{�H�"rJHy0TVؚ PG��*
+ ݠ��cGO�X�HL��G��HKZ�� �Cl|�[lܞ, /�&A��`�]c4�w���h�e� ڏ�� ��b�
+��p��8 t�X.�^��b�
+g�͂, v
+�QS�dr/F����_ p���%��������Y�!���G��oS��z{�ۮ����2 V�� ��>�""(�����e�)rC��i�D���^���K��((F��e9���f.\J��q��.#6ș���������� �h�;0�Q�v��ȸ�g�B��&@ha{�e�
+�h�9�
+�X��D����SeH�d`�Kd�75Z,R�r ��}����_�h(y4�����*ϋQ2o�M2���b4�����ȵ��z�v��s;.� �� A�6��D �~X���@���X|n�;a �_b��{��-yyt�yc�<�"Q�FL�q�4t}�h��,Xv��w��j����ୋ
+h~��~��a.���R�[���� NH�v�@��j��������b�ۉ�D^��a���F�;| ��S����?���x�B!�O)�v��
+Mg�5Pgt�G7p�5 o7� �x7[�3���o{G��]1���o�N�!�v"�Q ��uKf�M'<!����^�-��$զ<T۞@�h�Sˣ �����|V��_m;ڍ��nQ6�mf8����O�����ď�c���f�)p
+���8v`�c��;'��
+���0D�@s�!����dL5�w!� �����a���'�s!��r���W���=�7��r愶׀tg�!x%(����M�ޣxf�2vb��N6�٠�7��i��)���~���,��45T��
+�tj/��N]��� ���o�Eso]�a@�U^:�;q�[䷆���4qjr���N�ыX6�6�1����T� ��� Jo �?%;�Q�= P�M{���� ��b�7�E=�F��H�D��S�&�Oj���6�̑+y�QO�`s�>��*5@ÒM�,|��5��Ih�^�p�Kbw1.1?�!�/��b���0�U����k#���Җ��X��=�|��}|�[��p��6�Ŏ�ҟLT�f����-�����YQ�y�P�mٛ�v�tV�51}M3��hXۮQ
+Fi$fbAS�%��(%�!�9��;��ux� ����/X3`
+g���Ց]w� �:����1�u�?�LM�����yd_��6�E�����P.*��}D��A�C:���?������b����6QPr��?�Ba�
+���L|v��aj�8W��w�.�V��_C.:(h�<��>n��&��L%��)jZytZ��L���L��
+����m�J)a3iR�m�ъ�OD,�5p&����\���[pE�.�!X���w���g�>�=Wn���Bo��r�^,N��z��?F����r�@�v��~a5^ߞ7WU}*��m��������i=zS��t�{�Q\���/�C���*�A�q��{�Z�� ��x�Ҍ�f��s��������CGm8�)M�.U��ex3A�V��iB�6r݋�X[��z���r{��#ۖͲ�(�2fx���6����S�)@������@D3�F�$c�Z�v8:5��r�
+o{(ˏ�h7��x�#JI���`U��� eȬx��g����� ��q9��ֽ�oNI��W�J"�%�@��d���c|0�Q���C�z�.c�É�A}o �6�d� �)�� �ĭ�|\�?.,Nq�ʩ8�����1����OyVa� V�
+% )I]�jw<f^�sqsVJ���w����7嗔v�)xd@ e�4�}䋨�l��&�2���Wi�������V�gJ�
+[1Rr���`� �&�j��Z�1��qK�v�<g�H�׹���r1S�
+��?=B���t��!X+&�u�X̛�T��p�g�F��q�P���u�m�Й}�z<T�l���@�s�f͹�毿���li��n��t֢���3տ��
+$|0n��f�y�,������d|������?�z�����|
+E�5��&����Ze7�!�u��&� |��QߑD��9�O�(�ڼ1�,�>�Q#}=g��{����I�vM�����u�>�H�4�m���G�Օ��}Yч� ��Դ��_�X���_��gS��_�3��f�MB��� ��|g�&=�Z���3e3I;���e���Kzlɛҥ���I���1a�;ݔJ�*m| -���_�q���lB7]�g*�s%=�e�q�����M�㘛<������Ը��Ύw�#� ?a��R~�ώm�!4;�wxR���e0�$w�뽛�%;��D}xgNf<���|u��<�1����+�������Wg��ҹ�*��7��y��X�'�l$[��ti�J͢��#S)���Ȕ����x���g^,�����(�*� g|��M���|��ӣ��yg������S;|��|aS v�j�O8�R�0���t$]���taX�ܘ���›\�M}������vP ��Z��"@.���n�Hf�q.An]�x��O\n}z�z����JL<��\��y�/��F�tu:�0��ӥ�>��mJ��+��zn�l�7��v������v��x^��b�o�!k]���k��l�
+ՍAWr�r�����s�t53]�=�3]�P����G]���=����{t
+P^�]�a��h���~��� �6F�x+���^77y�2��ҭ���k����T^�+�z�&Yћ���:}z�;Rw�޵3}�J/�����I�� ��{�U�^�1K/��o;_�Դ��g�%���VX�˯���:������J��o5��yM,�����]�_�q�@�g���Ұy�oj�@�[i���5̾���6� ��7��N��7{����3D>�cC���lH���|����y�P{}���Q��c�Y o���Ы���Ѥ�4|R���aUOM ;sbb�W��F�351:�����>�~���|}�2�J�1�&-Ƽ7�2Vm����E�mw(g|��j�^��bWJS��cw0n�9�I>DoL&��}��8X^M�}oe�� �)ro���ĸa�M��J)j35w����L����4��Ѧ����i3,ͺa�g�̇f�y�1�}���/��,a�1�st�d�<�W��5??���1�'#��y�n����m1��.�k�y��ZonK�!�jI��>K��Zj��;K{f�X��i�2�;˲\x����;��XTgu��OV:H�����ޚɆ������a�����aqS�.�m�'Kz�%9�<)G�Ɣ�1�]w���;[�=ڞ����c�+�f�&@�}-~�)�尻�/;������}s{�k��랽�u��E��>���������6ysP���#����b�w��v�i���w&�g%�v��u��䴾�N*[�wF\�gf��9�����y�y��oƹ���.��9w�L1�� ����W�UZ�׮�����xmW\sw}�:L� �#�Rq�����n
+�����|c"�{���6lS��#*�㚡�>�Z��|�E��f ��ZTl�YP�T�C=��9
+L^��*,^[����>ۇ7��x�֘d��4ƽ��I��oW��ϳO9|�c�;���n��F�η�w~�ܾ�یޟK�L�GO���&���igh�=yGȏ<�Mzt��x�� ��
+v̌��G3A�0 �,�-=1�5g�۵�� �n�TہH>� �RI_�9��J�Ϡ���ԨT &ͭM�!3�?FFX3d�uB��^2�.ꌦ�ЬMߘ���b��r�p:mم��rx�.Z��юV�?O}�"���^m����G�u�IEc��-zߛ��-c)�)��1g���E����}�^��?W`�c���|�r��w����]uS�������v� �=՜'�`��x�j�Ň��&������,�v&���=N|ZzӤ%2�L�diCl��dΐ�l�S�}o��T9�j���Ը�k��O�a�����Ū۝~kO��G���c�L2`�e_u��̾�d-��]6�����c�_��r��-���\�vPro�A%��m�D��ʧk�y�i����Ť�l�b����Yx|�
+��ܶh;P�����(6�ӷ�5���՗])��m�����������S��S�S�aI�����g�F�Z��,��4gT�3��;���>Ag^��~���2򚮺+�p5�%����~e�5�j���C�}��?��Ƈ�@v�������A��VO���y?�z+๫/�� �����y��F�j�4u�WG3м�4k!k�9ُ���A��|)����m3<o��Q�U��*��9�ٶ%�S;1?��&}{;�e�����S�a ?M�A��ad:��~��
+<�z��shZ�{n:C��e�V~!�;�K�;� ��ث-:н�L�����&��{s�oLo��P���Q~[7L�ף ݪ�yܝ1��w��c�`%������a��9���=c��ڻ��ڽ�x��;j�p�V뷆�Zk����}��4h�ȗ��T� i��s�0 ��e��6� ��}N��p}�� ����a<ǽ/�-L� ���H����
+Ok�ek��o�3߫-<{x ��V�e�>?�ڠ��xu,?7�Bt4/��V:��w���"�y,:r��?-c�x��\v�lqe�-���|] <Dt�d��u1�m���XdCUæ�x�ج���+��� =�V�u��q�[k�ngr;�i��b'w�:�q�1�i\�,�����9Z�F[t9-#}�<�>yy���q6u"�� ���-���#W�g_*�|�Ė} ׹�_Bb�ž���4u�}x�}ʷ��na ��΢����$NA�AMO%����P�cLD>�s����6��:N�K��d�㦗ih�M�1͔�=�M��ݾ=�Bj.�֜�v���vt���n�����1�����v�&>�V���o�j������
+�X �:���{׾����iG-�ޓ��5W]��6���&+]1�sZ-�YϽ3ҏ� m�s���.T~�T��À�f�J�D�|�إ?�'a���n{<�����1��e��ب�ON��x�7j�f�� �v[&����c�YS�y��ӟoI߳˙X�˻D���:b��M������Ҿ1��D�/ٙ� �����k��r���ۅ��y�-ڹ����t�Zs�� +��1=~k3hK�)4NN��)�L
+��aN��W<rgi��
+�'�"~B>vz#�� lj��p�&;`�S�W��0�� w!&�e1P���_��rz�F��0�Τ��1z,W��É L���h�`��%1�ߘ�4pP�w��}�a`: �ţ:ŝ� �$p�K�%�>%,��өG��+� ��C�-P��iTgV�$~
+�׳�x[�!޲X�����.����%�G��*]�7��>��\�B(�;���{���]��z��pB[�����$i'����d�?I���ٶB�R�<���^U���7"�5E�mp�]�Y�좃'��Z{*��� ,%����?qN4�&�R��s��5ᬾ����X�Y��v�g%�po��<��}�TLb3�L�sW��< �H���k���-
+��:Q�|�D=j��y�>�@sW�̗�7 ���Y[��O�:䐝�h�~�.��#�Y����T��*#�Zs��
+/���I��m�s<�,0霉l���K M���1���/�J�Zv�~����G]���B���,�\?� �d��Ͼ�{���<J� .2�@�T��!sG?�R��֝�7�݋����:Lr��gr]n o{sc� s���Y��h�+I/����MbנK���Lo�c���U����!4/����&X{�D5�)��� ���0�X�[W��dr<�� �����'�<ڛE� ~n-M���Nb=�ځbBf9�K���y@���X��J1Hp��4L�������a��yC6�x�dS�I=o���D�3OH7I�?�f�����<l@��P{4�6�w�����pQm�u���'�%�[T���˃~�zwN�A�١0�pǧ9�7��ct�vׇ.\��3��O��gW)n��\��{M.A� �oYx���Ǒ�#���!���vig?��،�G���WrY��/��A�k��,�0i9�3�������-8{�x�[����GΔՕ�[Cw���n � �֜����S65��� �A�X����>g�Oӹ�i&F�fc������m8k- �ȹ|E2�)=�t��pp���.��n���p���g�J&��f������_�G3> =<*;�3{�e~W�
+�
+n��f���N�g˫����.�M�X�Өda:��:1�JCʗr]X�z"&��� ��i�iZ��g�E��O�wb���J�]���� :[:��|;�Ƞ�YF�u� �q�Y�h�ȣh��䂉�+�md�hs������\���4R~�����b�!r��<�S��L��X�<�#�>H,z#�+a@�5D��.������h)�'���C1gz� <�6� ��bc�+_/cG9<^����g[H����θ�d�"��8���Rj��2,r�-��t�ݎGY�w֐_wh ��3��P��s�,AZ�!E���P�=3C(���F����I/���$��v{����Z��V�|\�£�y c����c_KlE"�|7 ��!�o&<����C/�ޚ���X���i���0f��E`o7�����qh����N/��*�>m
+�H�X m_�`�� �w�4 BZ�^��V��o>ҭǷV��K�Sӗ�yX�x���M�J�i�X��cٞ9�=���<8��5
+c.�L��әX��j����k��g�}�wÅj�N���0�Q�3��8iQ$&0�`��
+1��k�=��Qq9�{/�D�"!�����~��5�I��r��!�&vzJ9�uz��y�Q��c�ߘt��<���?u�� }��:�!��9+Oi���P�'ڱb�~]����Q;P����wW��y�o
+��V t�6G9��;�h���ދ���� tnw�1@��K�Tp����B��4 �,�D�й�ݳ��k �J(�5n���
+%D@���h}�ߢNt�� q��.���W�}4o8�a�{��H���uH�i�\��N����p~z!�A���2o���#^�#F����M��n�X��j��z�
+�Z!�*�4@���O����D��� ��<�}Zv��(����8|~*�m�����ہ�9yܱOǖ����G��h��I}�b��bc%���ri�|+��m�{t�O_ӡ�b�?L]�(��s_��e��[T����b�y6֕{Pz�e�)_�I�b����(˽m֙ �v٧�D�?�}Z����<�:�h �<��L�~s�=u4vw�Ӕ;"^���GΞ8?��|κ�KC�K��?�z����컟=����$�c�ވ<̔�U v���l�?n�[V�L�S�O�o'�^=y�|[=e��\�<?G`�� ^ �X\ⵁ<ފ�T+ ��O�z3�GN� �Y�o��ln�@�n�7�3X���
+fu<�ǟ������K-���势�eZ҆�n橪��?����I�k���K�úDԩ�4��a� s#.Z�h��y��X�M�YG2���cs�ъ����O�E,�{I���ed�Y4q�c��YYs
+�y� B������[qR�;�G�1�AZ��%5��?�3/1>�Nv|7����<�_C�>�����I���
+��>k̟�g��X
+����gV��-�~$V�ug��J��Y�ʽ~]OyI��q��q�)O%��Ee���K(zl��������Qc��ka�'� eͬ葦]U+ ,��3�d�p�#WҴ�t�b[nU�x���:����bxp޻V��F�\���&H"�v�F��b�Q�jn37�b4PZ�$%a�w��{���� �|�a3rOi�irnȞђ�8�q�o����ӵ#z�'㠎tg��Τ��t����/�]/�u�)�:Е=��Aq. ��t�?/�&�[�d�fJR� �O(�zD_���$/y��pB���>'�Y,��� 2N���� +�rJ�_�q9%Ü��U�����b�`3��5�UK7�k�7�h���z�Z�ÜPNK��>+^��wEY]Y�s�h1�
+]�\ᓳ���$�Sn���ym�T@<���LP,A�� #)>dHA��1]���@(-ђ{ۛ�ղVP8
+Ɋ"$ˢЂ�q��C�04�B�f��0I�%T��7N^���A����
+~�� �����)��}]��r�O )m'�ռ ���[����g!oE�]����%X47�oR�YSVy7��:��a�퉳��t�����s/G�|M?�뽓�/љ`��:%*��`��iZ�)���+; )�|zcR_�� �r_��'cD�\N�&R���З@��%�nn��h��xO�D�����0�J�dzD;z��X����%ڍ�$���%�iU�Z�_�h0kR���\/�.bl??�h�����~v��I�i�sc��J��V��[��6��Y�[��sG��t��_Ɩ/y1��2K�:��3��N�Bg-�UB��$+f��� \�-�K <��(0k��&9 �ޏ6�^���~~��{�q�E;���7�5��%vpg��fu!�ρ� �6�_]?��yL���w?����Z�Y�؅�6l_e�+�`Qg?��_��t�Z ���!�K-����}��� ���p?��T/'�U���PYb ���cm(Ѕ��}b ~��t$$$�8])H�:�a���[�)�ҩa����'�jQ�:�����%���s�(���=�$�"��\�5�s���г�Q�\iH��$�8�Guy�S���PK)�G�_�A1Qɧ�lz�|暌��Q�H�aq�w��m ���ݜ�=Z�3�1\*�F�(�\gb�� ��|wk�����,��b�-�7���&�4r����42�t��,毬$= np��n�s��u�V7�s%�]T7����cOn�y _�]VЉ*��]C�\A�e�/����t�ՂW��)W��RC�\A'��~PC�\A'��A �r�B��U5t�t�Z�j��q��?���X��
+��g��:�
+:l���� �*�j����-�/_ $Jvр�d�7���m�V/����N�M��_����H�KZ����:�_Z���m:��v֊�t�UK1��s�R ����:S���6>�S���<>Q��r�h'��z�d*U"WJ(I�̡�\U4�I�dD� �ܞ�
+��W����c�� ׇ����d�ǫ:.���n4� 3!� bN�9�iĘ-v�۶zIj�n����OZf�A����U3*��u&L�"/wl�ԗZ�6���^���U)�����)�W���ڷ�ƪCu��%��}��.Cgj��y`#
+�����I��ر�ɚ]�U`<KI\�jvi��;���_Q��W�1�V�i�E0ʦ�e�%:5�!�*є�?�x�YÜ0�)9Z��[��%ff���~�Bt{����L��3u��N1a���S-�>ȳD�ń�_*��q ���z�J.m��E����:-��t�R�^NԅLs�P#Kt�AuI��Cqu�58{'�O�ٛ�5;{r�s�х��(0ϧS5���}k�� u�r4i��*qS2�(��QU��w��J5r7*e��<񀔏<��p�����"�ߚ�k 9ogD��? ׅw$\%�RR)���:�Q{Im� {��uş׻�=�Y�.�#_f'� �6��*���+!�WFd( �)���J�Ŭ����ӊ�rv�zQ�J�;ܢ�/[���"���0K ,a��� �ǧR�c ��?�������#2ЁU!��2��Dd.��Aeh���\E�Z}�愈�d����<G[q*у�������U��X.��e��q-Ʋ���a�� �5����d2�y =X~'�C YUrz���}3���_P�|t����jA�����f/3Tq]��|=ź:^�B��z��xHo��lK�T���Y��7���X�.���;�p�o��)��]��w�ᤲ�k�߮��A���pJ��W���?\���$N�-��~=� �������玲q�]�zJ���� v�4�Z~�N��m�J��W�#�k9�Е0'RζԒ�ZkʉT[�����f@
+'H����T�}��h�#�텵�p?�P�u�ɠ��.�Pq�|@�2ߙw��LƳ��~��l�R��"���<�~� ��G���O�!t�x����]����e�`�#z_�/J2�����n���#C?�R��h�b��� ,s��\������� �Ң�m��*>S>�Iա>U����&���,w��*R{�w E�+R{�����J�߯T��~�NE*��7*RQ���+RQ/�Q����v ��%���� D��ԫ��l.n�������PT
+'-�~���+f��F)���z)���B�)��W��?(��A����%�pQ�A)�t|L��Q2 ���~�R��T6WUˉ�B{,�Vq��&z����"�Ȩ3�����a.�vs�W��Ѹ��t:/�r)�w��^�,��{�=G���Q �p^���8�<n����4�h��ӆ�!� ��l3V��={ H�l���k��ϙm<����T�=H�������9�#�B�2q�bIU�!/��Qz��; <�j|����
+?����M�Z����yR*vzd��fR���T�Uzr@?��\APq-Vȱ�E���n��i�t3��LoU*v#�"�����K�
+;�`���r�n/JUgK�
+�u�) �\M�r@G���=<��ܿ�d�k\y��r@�vxVa�r�Ɵ8>il�j�F-}�eM=�l5��:˴�!z��b��B�P�b�Rn��cŎE�GT3���G=CU5����KJ�}1�ԒS��<X��7o���vD�L �%��䮊½�5�H�TC�3!���S�DN1�O;?�\"';>�{��.�:>��4]��Yj?�?N�zɍ�/"�Mw�z�r��;�tߋ�\[M'�����j:������N*&(^/?������n�|5�T,^:��'�t�pkV���U�Iu�rB�7�龩�����ڧ9��_���������SM'UK�1��j:�X���߫���]���j:)㆟;�;�tR�t2��������A�R�n5��qzc��j:���Ȇ�a5��+�;��UM'g[�n5�v����NԕxO����E����k�~��N������:
+2U�rH�P�*
+4�.'ܘ�J�b��U�.+�$�H!+a�p����DZL�ݑŝ�#����͕#s�۲�.���5w�s�4��߹�N�v���Z%����Uri+�Ӕ ���|���gs��l��2���t͝jD����q6��Ew?�掭}S��N��Ѧ� �\y�I�I�^gQ���M�lr����i�O�]tA�j��2:�<+F�5�i�h�Q�0�O��\_P��H"Cԑ � 9Y� [
+�J%\s6t��?�9
+:Ӗѭ�،e߯T>�|+�(�p87���t��T/�̮�o�@��E%�d��z-;�LSa������결����SQg�r�1�1�V�0��.YR6�H�z߫R��rKU�]fP+z�r9ԣ��W*SN'_oI\vU>�� ��&�E�y�?^uQ����x���ۋRV����)l??������N8�.W�QC!�U;�6��2li(d���� w��J�; %�+�{o�u7�)U>�`����Wn�S�'�vS�O�N7��|*�p'�K�R���{Ew�]Ý�S�Q��� k_��f������:S7sn�:��t�+�W>�?B���r��ι��|Cn^�����z�
+��S�G�VT�t�v��.��v�"&��(΋e��L������7�eLZ��,Ѯ��i1-eL�A��N�]��E��)d�T��趟VeȪeUj)b�DWb���~��UELrD��DM{�a������T~�a(qX�S���7j\Sn�SŐ�r�tW]��I)o�u~�h��}��׎��T��0��U�=�ܔ��f�+o}��04T=�׸J����j\���2# �h����|��������NF�ƍ)}�h4�� �r5\ݗ}z�)KL�f��b��'A��]�TPwc�Z�?T%��-�z������𶇏)�ɢ2<�.W�G�L��&W��* Ƣ�n��c%r��GY��B�=����vz��:��x@��i; c>�#�U9ڬw/ )�7&D`�s�2�����O�R�&�6�|��s V\��
+2�
+�����(�Zˣ}��RL�>��(V���tvQ.,er������m���0���{�w�s{}�ܴ��03
+TS���z��4
+z}���I&n����KC�����M�j�OG_��*�R��\��g�ζ�_�i��g��P2��~�nÒ�]����qzJ���oڼ״������9����o�kKF���%򷒍�qu�f��o��l��Mq�]<�<M���L�����M�N.�~|s��gn%��3�l� }���{�6���L��M��iŃt�����{�'qv�[)�yÓ8�m8]_����c�f��o���Z�m?��iLޏ/ ����o���RIb��z��X������:��~c ���񌡹��3S���+:�~S˜I�،��M��o�U���~s�����/���4�����ߌ���* w�l9�����-]�,eN}�&���]�&�r6Ӿ~S�w�{�ͺ��ԁN�lJ����X��M].��~��[�=c3�y�d]9��~��+YW�YG���7到t
+�/�S��f��H{{�������Z��VO�C��>���q��c;.������l;\*/�T^S��d��A��O��r�;鱲���#������6HM-�AيSm����4���H��-��b+�W�mb9��M��:�D:q�����+�/��}ȡm�bI�K�[-�F��d�a�*yK�"�b_�Dk��堲�a��-�}�ŭ�U�_<�hp�xv{����ikڠ���p`Sh��(���fc��}f~i���4�q��Gk�-�6=q���M�{�4V�n�w䀷�+�I�K��~�ʽ-l�TRܚO�[�L\��(`�+�g�crFV7������_2�/��뗲F �����Ŗ"����e�k�fC%�K�`~(.]8�D屳�kK�7�.`;Jw�`�-��n9s����`}��G�-��Ə�,K��l������߫���eR��qb��)���R��w���0�ˋ�R�P�1�G�,�Q.�+����h���e�DihUM�XƷ}��ln{G!���J�B߱�b����i�Վ"�K�Vm���QB��ZJ������f���_�_������]g����-e?-+X���G늌�RR �));�K�\������ݒu�8_w���0�~��|���`O���q�o�IJ��b��c������P�b����ӻnsY��]^6T�ۻ�̼���K�=v8�X�������Y���,M\����z:���ST�/\J�RYűm+�w����wm��ڲ���H�����J���|������|��e��jJ��nl۩o�pA�9���Y����g?`gl�
+�<j9��{�[��Q��s�SK6m?v���:�ݕ�HLg��8�������� c��X�/�_��v����+�wGΘ��\���Ol�7۶� V��۴��@`�\ytY���~�ų��~�U�^+�:��c�MsZ�8oO1:s��7��v>�r��ڪ��Zh��U�͕%Eu���m���ɴ����-0}|d����l!���],)>�+*>���_.�}���$��>��ْ�3{+�����9�V(����'�:�5�q����N)�"��h�M�D�I�ZBœؔB%I�>�Au>�}m�y%M�� Z���!K��G����՗�1]M���ݡ-��n:>fV�))Yy��^��R�l��y�ɧ�ѹ�����٣���M��RC�լ�τ\�~���v6��5�ƶ�\J��̥�ɚ�|�XȔ�,����n]ߠ�5�^_��n�g��oeqBV��hՂ%��
+��-�V��6���]� �,-�����𸾝�T`֏)$Qs�~'��ִq���WVe��\v=�������h� ��7򇬪���BZ�]"ķ���V�`Z*�������uY����>�ɰ�gy��ڋ��>lH��e��"�쨴�
+�/-�m���ˌ�w���n�)b��*���;K蚦�����F�o�k��j�\V ��R��B��߻������,_��C'��^ܶ��qM2���D�h�&�wg�8f{�%���mqU��u[6��=����� ��651��ڲ���ҍ��L3_��g�]_����,5/�rg�ytg�.Ki�Xwķ��s�Iߵ��ۼoy�z���l{,����評�W�����EdJ�i�[F��)���e�����# ��Q�m���]�o�Ş��>H���V�[VQ|�1��SM���c�+��.�[Giء
+;�bW���%2S�/-�Vy2��<p���8a�$W�0W�[�:�c\=�V����� �|��I��}����}I'��~�{���?i\��C�t����-�{�z�� ����V:[VZ��)�Sf�2݌yj}qE�c�K��,�L\�ڳ�6��5� f!�Z�F?�J����b��B6�����u���lY�M��饄����|��- �r��՗ڸ�:iv,I8��6,ZSRZ�YS���S���܉�m-gN�i�,]���M�������-'Nԝx������'N4�z�y�7���YYq����'<,�j��զf����<b�����2k�抓k��!q��#'K�n�L?\F]�k�.=�x���cE2}���.- ���..��r�m�I=�l�/+N�ln�,���3΍��Ek�)�ɕ{6��Y^|��cšM��+�w�*/n-9oX,��uLx��-�ċO�V��[����eŁ�ԛ_A�E�XS�]ZP^N�����m�Ƿ��`�w٦�ǩ|y�4��8Ҽ�:%���3W 3�4�=����f�kMxZɓ�Z��أ�6?�V�x��3��~�EX�2��,~�CֿMo12e-!�؁B~���8����R��L�^�q{ybۍ��e{�ݭK3&��ְ���5��F.��m�\/lnh����R.��j��妇��~�1�ͧ��poMB�6��>�/��=o&>m�0� O��d�����5����l�Ukv�]��'�*���{ 5�Pj<M��r��]��E}x�=�¢ ,���6.t�v��X�GJJ�ք Ȼ�����衲 k�e�Z=B�z���W�M����e\/�P?����g����Z�A`c�C_n��!��Fr,��Z�,��r��U��c���r����r��K롒R��<��;Rj�;�P4�tgX��+&������%]�{��6x�V�R��=���%UJ!�N\�?ɩ��:dE��Y7��A��� ��O
+��g�]4U�$����Y�����=K�>R���㽤�l��}��܃�f����tζijk.'�|��$0��~V'Nݛ�)+�7�)0l�םm2N’q>�es���oM��n����붷��+�c �y���g~��;�P��ݮ�l� ����h�� �u.�}�C7�:f��0X��qKY|�38��u�3�\�xW��񒹌ij!,����z&�-q�t�11����S��–����⩤K�R���>%����5�H�͖�T67�|��0IW}�i �q���?�1V��(��I�ؔ�8T^2�18�?�1V�T0�Ky5�K� � ��;��.���`�d c,�M(5��o����l��Ky�K�����J��j��W��i�����FY_X7��AU�ԧ�=_�:�в��� �������9���;˦ه� ť�'rhEkQ�c�M=$��p�Ta��D�r/�؇ ���q������☴zٜFıe��G#�����������F��жr������Օ��LQ&���}]��{lE���Ɔ��#J͖�U,�[V�' O�k�����[#0|���-��-�r�Cnۉ&��pvYYc��R���-�4��-R��q��z_M�%1�*T�0g�0Ü�U7�g�}�^<��q����0��t�\�Zwt\��윙����'-���%�L���4%�L��Fr��B&M I�hMCRH�d)!��4&�L�B}�iK
+�4%�KڒB
+'K !ǒ���ISB�E1mI!������L
+��Օc0��|��o��&�n;���E����l��f�}��Syİ��N/ ��A�f�eJBKtGJ��Xw��\��4+.c��,��&�6�������`�zf��� nd�� +�,_d��ذ�F�uN�P����!�3#ؽ?6@�,� ?�8_ ��r�#��c/�!��ڪ�L��U��.�Wt�� =`B�i�v��b�E^�ڰ��E2�V6V6�z*�2�f׉ֶ �V6n>q�LS͑�O�,*���J��u�ZOi�O�ʕ��J�m��E��w=����E%�M�����M-�g���9�t��i�:�UCmM}�³���A#��z��.�4��&?*�>��RO�����џ�
+��T>u�|K�����g.�9z�gˮ]�������7��#�kx��9��mQ�~p仧ɇ*��q�Փ��O�g���q��;�� �9wb��$�<r�������E�'�w�؉��fO��E�=%E�%��W��^��du隒U�OM�v횢�kK׮^�j�5��+<�V����YS�Y�b5���o����E��=���]�N�
+��%2رUi=��\钒�5�5���8
+=
+.&;kE��fa�$ד�(�ʊ�S �
+
+B
+ =�2i�������<M6^#
+
+j�LjyU]׺�C�t-"vɣQ�����5�A�Tي�e�uQ�����bo��*����
+19rC._K"�
+�F�3��)7����
+�>�?.
+J��K��fX&m�^9I��͡���
+|�a|
+a�
+Z�NJ
+uv��.��0�]S1���?�|��TE���{�
+훓�V�
+��>��5�
+cJ�\L��~�ea���"��4�2����
+����,��z�G�$p�V��i�]Ҁ��OA�����
+-2��$��f+F-�6G��c
+�d̀�� ~`�Б�V��H��2rt1Y�X/�+&0W����*:wE��K
+Ri��qD��f�$�q\<�0-�y��:4�շb4�&���GvN�����A��Ẍ�09�tQ�r$5��
+��
+�qHJ`栞;3$R���u��� wH#]��DFRU@}٣Qy+���'�Z���<`rH��q__�+[&�dӬ� L ���B� �$�]Ԍ�s[��㖢�
+���2�0Nc���Qì�����H�5/�\��y���癤���|O�<�*��� yտ������������w�F����\ѷ`ݲ�뿲�÷��W�,ď�f��J��]�| �94&�*~�Nh��>�;�=�'+�e����o��$����O�qYz��g춆��[=� ��4`2"�j�?>!>�5�ʕ'�H�k�z0�$G$w&x�����b9���R��j���YzL�{}�|k �!4&_>�Ue}�$'K�`��AOc�$iA�Y(<&�Ɗ?�C����@R��x�2SvK0�iL��]��!/Y�vey�����ri�G�E��EL��j`���J�KG=o_�x@n8�d�1E%8{�r壚��'�wgqQ���W��x��I�A��KU��A�0���U�o����]��E�'ouKГ���Gΰ&�����#�S�f�X�+��
+'#O��`��V/��`�탞gC09��rZ�v嘘T��d�I��'�L!8�:���x�I'A�������L?�� �|F"C��Ip����v�_<�(��
+��4=�ؚ����Z��Q
+� �.��r�������� ����eT�g@3��OI��'�@��4+�t��JA���rf� /6���Z�}����{=w��wP�˛�Г`J4˕�Y|�L��3Y�n�ci�
+ϳ&��}V�� \�n��
+%8����Iߕ�4�� �Qn��A+�+ �� `7t1Y��*.ުA�͖��8�y���� ��1�`��3�DL��j���h8�&�ӣ�zvk�8��I���!C��h��'A0A^/����!1�Y���� Rb�W���9����I+Y�E�����=q�X8�}2��q��S��j}��s�WBF�)9�uK���IRO�ol��xn�԰�e�{L!8|M�)>��m� ��$���3^�'�&� �jn����)&��$]�&8$�f{��XL�����Z4X�$�Xƾ�]�� ���8�h����+����dߌ#��twW��(c���� ���s>��so@|�&����&*�V5�-����J���FoDqP��8�z�cH� rG�"��#yp|� ߻�"���$�B(�G�\����>��V���=)�B-�����8�݀������� 8i9�J���W"�ϡ¹�I��h z�Y��fT�N�������Iɶ�0���YQ��L7Һ�.s�a�(�L&�M�+ܟk�ܿ,���p��EUs�\�!�?��_=��v;3`21�JA�0�
+��=v�`
+�����na�(�4�-|�U5c
+��u�_>�#�3w�L6x��
+��^M���(��ΆV��-�X'w�> �v�Ĝ?�-��P��Q�BOf�5e���!\b���Tf6]O2!��n'� u�B�~�0��dGP���^�(��=�wg:i��꿡�_;��qрI�犬 ?K4�B�r=a����;����Ѱ�"P�<׻�6a�����&$�3x�_�]/�S�L��)��1o,�*L�=Wd �OSUtg7*9�>��]����&k¸��ܿ,!1�!|�2-v�&p"y�͈&��S�'�y��D���&����փ�n n6X��j�a� E�����(G����� $W�DL~�U�P������!���I�ev�񓀳���9.�������aPCF���PBOfy��aU��9ߕ�BG攙Oe,rR� d1�2�3M�1@FE7�� �P$������/��z�<�%~�z2��&�뗏{����<f�CL:�NTDqi!�ı{p��saN��^�\'[2�1@Ӈm�Q�u&&G5������v�.LΖD60�&���L���'ú��#��;*]�s���(G��|!�@�}s3*�g�����\9���0����Z�#qd�8�:��a� �A�I��DQ:����kГ6�I09���r^|f+ʕω\0�JAB=q��d�Ӈ� hy9��j����^o���U�uEzpU�ۋJ;�$���)�����В{��9Z�U
+��t0�q�'�Vî^'A�&�Ĝ
+�G<���w���]>`U͇�U�$�0������.� &�:qzR�Г����$�M������כٲl?�|���Ұ�ʅU��DL��I�#{X�$�o�1e�nz��`��l�^Ü&t������z���_G$R�6GcГ (&٩&�_���#`2�S/CTD��� : Q=�"� �&��+ݟ:�y�2 ����=���=~���7Tʯ���ո:��J'{�M��
+�m�G}�z�*߼,�@�*I#`�gO˟��!J�i'�� =A��q:x�Q������B���p�t��i$��$Q�|�$;�DL~����i���X���W�
+�q��� ��"����B_�����Qf9��9��(�r�h�>{�ۥ `2#���mJ�'9�L��]U\1'A0��s>��=�#���$���)9<`rD��&�q�&3��ŒQaﱈ�n������n���\$��_:�}�e�ݺ�5oƜ�'��k�7���ې}�q�e�a Y=�D�vH�9 = ��Gބ�OyQ�2�y��~]g����R=��I_w ����M��"z$�2�N��תV��Q��L�N-Lk�Ț0�락|c���I0�ʯtH�;���I�o(p{�s�w ʘ;Z�^Ü���&�\fGP��3޷�����;;��e��5ۮ�HI2�j򏞔>��s�����H�z4V�bҙЍ���[ �����Π�����N��g�띕$Wm�1!��0G��w���w `2s �zMZ5N���L�뮅�B0N�`���>�ˬ%$e�N��=�˕�P寞����I�op2��`��/����8N��yyZ�'m� .
+��v�~�ׅ�� &�D��zs�� 8 z�nŭ���[A� ��(��!��Q�7$e6��'���vK��R�LL�F�<%}��V�D�d&S32q�Z/0N:�EZ �U�
+g7:�<���#޷���;�H�
+�D$��Q��
+੔�1{�%Vv2
+=�<�E� tY!���":���/�������*�1 �LJ09�ɿh�>u���l!�ġm���-�T6���U������a ��-$�j����^o$�d����BJ3`�{�� 4���L�\�Ǫh��8ʘ;d$�עL:���G��}�����*�����<`rX���Izf���ʳ�TL*�K��q�IG����j���8 ��'�����9Y�W�;����&b���_>鋱r��qg5VƼ3L#'���L�� /�G�Et<y��
+��
+rt=Y���n�'AL�� ��(3�������v19�y���(W��de̅(�āq�iH�0�x�?�qS$O�y�Na(F�zCRf&�_��
+%/WN���O�p�
+F�? A�.F���'}�>�Ĝ�#���{l������'}�0-W�4`�Q3�Pg7��N_A<]�d
+Y����Is2��B̽�9Ͼ���wQ�p��^i�xm�i����ݼ!� p�d��[��` �i9�J�G�[��;H�� ��p36'=�˕�h�7Ή�t6���՞8�N: z��J/�� �7y��WXF*f�VS ���W5'�pX��u�}� #`�zR/; 1�0p= .���>A�yv)���y�����Up��/�NO�ɟ�˟9�!�� &�0���!���#'{ȊRq�8 ����(?�_�7 �e&����P��QM����?�ͲoP�4����"쓎�^v��#r�b�Y)��Ḿ������$��L�P�o���N[r�>�@��%�_F�E�A���� � @��!"��6�5M���v>�"���'y�����7��=U4`���f5v_�71�'��vx �턥�a7� H��]��\��a"�]V9�o]�!�w�R*A�&_�?�� `�st�Ǣ�`���� �@"H�a�����m?�`V��M�<`���?)}��������ZOg�;Nc
+ ���e'�B%ك�n3���}e��JMm�3���?�:��0 ��h�e�T-�"�N�, ��A7j�� �i���n~��� |�DN�w[��*f�D�$����j��8zv; yF�n��}� !����ۤѨ��e����ȋɿ�/���B;Ep���]%DC�Uc
+�co�8A�T����D�$�H$ͽ���ʁ|�i4*�Ƌ�*I�ك�K�R�M�T4D�N�&΀��ij�^-��F�I3�A��^�W%���X=�M��{$�Ʌ���M�<�(�J��K��5x�+�6`&�L�� �*2����=�������A'������*&�_u���Jf$*����'����C� 1��?Z���� '�:(P�1�$p[t��� = ���$��(�_]�n��db��z����?�%�O��E���=TR�!�p�=���8h��rG������AǒwT��Q&ӊI.cnu�/�H��Gcc.5k򏟔>�S��t8��Mq�ZΔ$�����q���� �C.&_���ɓ҈6����I���wz�E h�����:�x�8�| *+;G�E'�Z,�mA��d�� ��!jdT�Uh����D�E[x@��J�8EuII.((N��_��Y�F�/�0=Y�;O��h���’�ɁZ��.J7�)Y&�z�(m�[cC(���\��^��V�!)HV%f�V�{q�I���ɖ�����(> ��’�I�=��$��PLr�2�����mou�� ju|�s�.)mc�B��F��2��t; z���k�;��4� ����Du�Ac&'�-O�Dy�Ǐ,��~1���v�.)�%���{��6�������y缧��M_[ ���ے�X����\%JdbDZ-ﲭ}I
+m�������#8�Sx���7W�U~& �I
+�
+;���EK��f�[�Қ��Wr��QʿyȎn��G�6/�s�����f��X��
+
+�g�'��+��]��a>۠|��V_��v�+eJ�o�}2�vV��
+��$_~�4m�]h25 �^�"W�$Qc��s��R>#��[��� ��' ��Fe��s9�����d���-n��%���}
+[ �??ye��.
+Qf��"v�[��D)�7*�=
+ƀ
+z��cB&3s �rQUFQ��xF����ɾؽÕ�L�P�܁�+�h��n���'3��ZLjy�n.��7
+�ɀ���m�A�d�.�W�b��`&Xՠ��ɾX�r8����F�����
+�x��s_.�|����%o�!ƞ�U���e�aR)E��Ll�n�K��^QTT�Fml��]�n)�9
+-D�-!EiѪA�3�i�wUy���[�X�6��in d2�"nSeS�-�֖>Z
+��d�I"!�[�xi�� ��
+N��p�<>��R?$���vM���%,U�`�5����*�� ?QʘL�� �4�d���Š�&S�A��e�^4����w}��3���SJtc� �C-Ehy����+�z "{Q�*���7j������wȇ�B
+y���p���O
+[%�r>�W���߼��ֺ��G�5Pz+�
+�zk�2�0���BWJ�0l��52����� �CEE3��'�.��4�yj,��Rnm��Hׯ�i��@/��u����k�g�*�L�+t�[E�E��jZ�싥��R6��F�9ϒ��֊hI�J���:�x=�U�r���B�+�<v���;�l�"��6j�6����
+Le�&��ODP�Rh��D�̢z��M��I�|V��M2��m�C r6@&MG�y�MB�E#�`U�L�!��
+ _���C�cJa^�r�P
+ ��M���������TF�ΐK�2 �8��X_by~��݃ty 2iz�{�8�얮�I�/q�J����!{�5�f%(����(A)*�J龕m������h� @��e���GBf�d��/c8�c �����Jy�A�����BRJ.*ͬ�L%���v �%�����h[��&7I
+e�>ɖ���->�RjU�����F+�7�*�3��AȤI!p�Y�w���.z�^�%��X�J٨|�>[�,|O���X�J!&�視7�:�E�J�}�e�M��)i2 �4%�%Ny�TK��pP��G�W�؎����9���8�D �\ V�\�#��VVp��R����]>
+�{QAas#�6�~��=�X�����*���n��WN[��aG�s>�n�W�z?*���:�;��&�
+���½��2ǀ���iG��n�����m�SY����g�����F�o��wK9�� V�H.���2YH��@<t�[� a��P/N?��'����*e�\J��� �9����΀�o x��~��JT`N ���{/"Ei��
+:�ϕrPU�����ڦ���X ʠ7�HQ�u����|�[�2����
+���Zj �z�!��`
+�%���o?�PX-��L��A,y��Ƌ�/��Ɣ���R�PGhC�'�o�F�fm]Q�C�_iU��1p(%
+�"<W[� ��¸јR��5fRJ^����.���|�\QwZ'BKVҽ |��K�~
+Q��xa7^�e��Gӱ� �� y���_8���?Y�'�����e�ˬ�2���
+@&p�쨲�t��� $/D9�- w0�A����9Wʷ���aEYy�����5�z�Z�Jf��`/%�k�er(D�Lb"I�ދq�M~qs�^���<��#�ѓ7�o���E-�d�'Z=�b9���ݢ���[Ƞ%��I��� H~*g�-y㬷��u�h�8Ӑ#��yd�U�R�&)�3�����J7"��� ����n���� �T�L�TXɓy2 ҂ �^�4^�mȱQGYo=#��ן� G�7��$V� <hv:6T�'B�-#-u�͓ ?!�<������`���H�G����+-h�8�c �ʛ�����ߊn�d=qh@& 9�s��[C>��)+o�27�C4���6ǀ
+��CGNl��C'=�t�29��c{)���J=���V� ;4��s���7�4 �2I^��Ӹ2 2f��)^���X�<’�l��PH��㎆K@�su*M��^[' 8�{�K�/a_��"Z.�|� ݀�8 ��� Q
+0�q�Y�O�>�r?��ͭ�FOqN)e�[7]�Ɓ� ޿[�C�3�6���Q �L���w��L��z/
+031�-]i�����+\)�ŔR�c6K:�ˬ*k���B�� E|wE�̦z�C�W��"0 Vj�<uy�S� ^���^���m�/��@r�O�R�H��h������ r��+�{�i.�o�
+�G%�&Mq�nި-R=V�k�9I����HI��v�Q�dq��Ae����:1މ-�)�C����a�-���loWk��.4�&9�#~u��d�=k�Ra�CSB��_��N^��\�Y 
+z/�0/�>U�7�6g/K9�m���t�=�j��{�J�����p����
+B)� �L~�>��z�
+Q�@'m�x�M�z�����p���~;1�7j!����+e��?�ǻX]J(%�2�LB&A��%o���i ~�? _
+;��� x+x�hA�}��
+`2Ȑ�:�{Q��Kޗ���md�^mv���I�$B�f)+��X�V �B��=�]U���O�c���8{�E�������2��u����g_���Q�a@D���b���������]2��Đ�=’�>�u�ǁ1���6W_�A�I���e)���&�?�L���^.c�`0�'���m�^�D��w�X(Z:f�h]J(%ȘD�� �`h!���O�����-�I� �JAD){������O"���RzD)y!�f�.���27�B��/y���.\o�>�熞��.�"���O�'�_�n*�T��YJ�"�4��~��gC��&P8\k�������IFo�C�XPͻ� >�B��
+��ɣ�hi ���S^�2
+�^�T �Z|2�� .��<��#��ҩ���K ��י 1��TP��T����.\m��
+@v!��ua�CF�E=�ˣ��{�������@d'��x+��RB)� ��`{&���c ����p!>9Ʃ ����ʍ���p7����Q�P�R"K ���d����[��)U��
+�����yA��(E?S�ã��ZP�0�H�K�|�E�;.��T9�N4PN2��'n����<v���>�;�S����_p�x���sJ�����Gl�y�����о$|O���/�Y_���8Ĩ��ۻ�!U��K
+�O"r&�O�x�VW#�%�!���8����Τ�T�dՙ;�g�x�L .ϳ�a�4܄g;
+��&HQ� (D� c�2
+�
+N���B�X�N�Ӎv��A��f^◯4����X�n�$"�u:'��ȋ�9 ��`n��e�!Fՠt��IZ�>�ȍ�6�H�]2���v�[����ǯ 7aA'�N�t�EF�۔ ҕ�ᐳ?Z|2�D��X�����"�%
+�] |2c"�
+���C�9�>y�aAQQ�'�擣��I�%&��`:z�\k�p(2 �U��`��W�h1�wvQ� ��I����ث�]� Yc ��
++f>����++�=�R��)b!�:& ��=��$/�(; �jQ0~*g /��3�Ƌ?B���F'�I���W��Â��I<��p������b�����9Ή��'���'KN����vDP)�(�
+/D)���/�A���x�Phs�|�ȂE �jkkc)J,y# ����tq�D;
+�(H
+�.�(���7v��]���'�Kag������%Om�J�,E �D���D���HN�]
+/D �LZ5(,���_�D|�a��M%�{��֮-^�)J���ҍnǺA�
+�=�K<,y#� *��_�tKHN�|���$H���7�2Ӌ��J<��ƹs��9H�]�=�BM����C �x,�ul���am��L�N�x�RH����q��D�ؑ�Z��O[&#�j��L��U�'�X�q��NqWi���)o��[�� �'Xr�/�ǻ���O��
+Q.^UA|�_�F�1m���|^gw�� �� .5�����1���U�Y�o��p1
+��Do}���v:z�K��;%�l<��3{�?�a܂;�q0q�d�1v�������'o+���n��j^�\�H|rŲ'���)������{'�� �Jߊ:�$s.y�R�D��L~� �o{f:I ������薆CRv���Ń�����䒵��sٽU�غ�g��)J2T�߼/br e�y���ؖu�U5| ���E�]�k���K��'q*1m|Э��$0�{)���=���C�*�����Ҡ;'������s�婭6�)�2�B�I>4X�k�҉�l�<��1tH���S�\SM _�K=?yF�YJ�z�ʓ= �4>�-���ˏ�֎��F9�VE ݵ2z*'��>���vN���rD^�O33U)�\%-.�w�ՠp1
++�+%y�4�*��Ƿ���׶.�|����{�l�&ڶq-�˳��9��4~gVI��@���.����3pɛ�(������>�W�o_[��Gnϼ�
+�{��|ɛɹy�[( -xO9�MN�3�d���+�<Wyz��h�(@��V���/������>U��j���d�R>Q}� �L�#ח6�>��OrU�̖���O��'$f���R��tQ\1�ٳ����C^g����ʋJ%�|�[(O78_�z'�qV�����Һ.�%o���' ��Œ�J/���<Lp��2U�@����zִ1�7•�8Ϊ��;���!���j|-!9�d� \G�����C���ˡ������aeK�����ءF�7�!o=w�ms��h��d��Q �o����C��qKe��S+�O޵a�>y�ʺ�/b e!+;9������
+��dMN��r��O�M �Rr��i��D{�L�mnN�����i��-��^_�ɞ9�i�rǦ5���KI1��d��
+�s�]��F�W[�뺅����O��wg|�;��GW��Jv՛�w��^���'ɗ��+�O�^�[��v]\zw _��'�(�
+��;�� ���=��7]�T�[;������sD;6�!�yj�[tr����46Oj�0�%����v����6�<9߽�,�!�8v;���α}��>4�{G:�l���+�x�n�\�n���$�v�N�I�(���^m�ƻ��w%
+Gd~��8!���-[���dR.��amߴ�����G7O֧?H.79�Y�hu�k=�M���H�O�#޼�7|�@�F�=�vN�>��R�A��0{�U��.G�~��ۜm����+�O��8�}���� ݸ_��^G���/h�v�����C�ګϒ��t�w���x'L�'�ݱd��?}�V8OH��q�'�M�ך]g]ee��O��u���UuZ~2��"|����NN�m�����{(
+���yk� t�w�,�
+����s�nt��$z,`��20Y]��,��s��$��u����{�n(��z9UR2��9D��s�`F��n��
+�3�$=��dR\o���w��֭D,�}v�����3�5�M�����?}�i�o�*������>��L)�4��e�m�Wm���e��O�<������?�1
+wet�3���4f�}�W�ֻ�7�[�J���2T���km҄��'/�9�H��7�����γ�#U��y&�Z�'�*�}_|jeO����sFغ�h'ͦ��6���+ͮ��/q�7-]W�b�f� �����'MEѓ8�R�$'Cne)o�J����ۧvK���ms��V޽��Op�u-��w��~����[���/EI;��v�{gR)��H� ����=Lsg,/>�㧝�|%�ҺG���/��(�“w�4/�������&��m�j��϶P�_�����Kܛ�{�<? �4s����.2�>D�I
+v���n����y�$
+K����+�����}�r��!��y�1�~jv�T<�\�R3N�r�ʇ7���(e�\a���b�\�� �]<�+���y���=~�E59��N��'#�$Ǣ�HiΎؕ�-[�K�~y�uLF��͢~r�E?bzr!_Гq�x����g���+���68��2���udshc�R������_<Ծ��F@���<~{׍W���)M�a?X�2�
+�՜}�`zr߽g����o[��y'�R��S%r��HAy������g3=y�_O
+� SOZ-��&�er��"3q
+:q
+ԓk"�I/��>Y��_��&
+)��w�:+v�[m�Xj�v
+�>ݲ-W���tk[�����y��… �'��x[��F���� ����t��UM7��� տ��-���UH�=�3�z���\��;����/�榠���d�z���7_����j�Y+��Kv ��j[��G�����-Tj�ʓ����G=��>LQO�x4v0�r�f]~� � Г�^\O���� >-� �HR2i����4/� iK�H�� CuAk����s�}`~�=���Ϋn�麋F���i�.B���k^�J#D)�'-l� ��M�j,�8�>ޛ����URX�R alϕ��d���`�GB_~J]�z��E���'�b�8N\|�m�Ǝ�oyp2^/�
+��!mYH�yϸ:�(�g_i���䤾����~�`�O����.����+̳�y=���97��۳�Vʟ/qU��-Ov�r�xHy��R�9��>A,�a���d�l���a's ���DfJ��T���'���.�|���/V� 8 @�b��)o��Ե��-R����귛T*w/��
+�/�9;�^P����[|�m7]�pQ���x��n��_K�er�Z��f�@I�_�Xц��f]9>�p�Qs���3�Q�v�=8Ɉ���t�:-��I��bΓ\��]���J�?S
+o,?;
+�؅�(`j�>�G�SHU�^�6�m�� M&)�W���b a�x�2;�:�ՆIN\O��X�-\�zҩ�'O�j�`���
+CR�VT�?ג�PUt�R&,�r�6�M��2�]i���
+�A����4��$¯���&�jޖM��]~�b���v���/��|�0
+{3q�'�x��dAj?�D4
+ER�!�]y����%|!�ԓ-YLOj� zҁ����`=
+��(�����|�%lɌd�2��1��>�Ȧ��Za�����=��Xⶓ�r�
+���-�O�`�
+����E
+�f��� )ÅI��,y,S�/���]����F� �x��vyR��,�N�I�/�<U��c&
+a%�oH���G��]?�����d�06�_��c�=��.*�w�|��d_�r�D> �6
+Im�2�C���8�-Fʹ��[��h���Vp.�/ГvZ<8�ei2���d7
+�?�L
+�(�с� �>~:w��4�ۭ4����V������Hv
+��/v >�N
+'���X2� =�t�cHʘ�U)/���t�5Г�,��G�3��Q'
+208� ���Zv�c���q;P{�ܖhH�NH�|�Q�.P{�$�5ۡ'�X|��,���w
+N�����ka��ޜ wt�ӑG{*"�JH� �ڨ���=��7]!�~�Q�|�
+w��|�����@��D)�ྔ� �EXa/n��_���w�w+
+]�Œ�,
+�c"P@m��H:���!'��|��d�o���<a~+o2�j�Х2��*�Yr�*�9jFZ-��H���00�K�Ν�
+g'��U:�Rn�۔���x;0�����.&��0��D6��5gS��=��}�Q�O|����'{�<�I����P�5�_��o��[��
+�6XH
+7����>�psߐ�����Z_��[���w�7�po��t �F���.�+�������$��%���3a)Z‡�س?��Ii��&a�Ϧ�z&�����JGN
+R�
+oɦ�b=��2��eGȹo!;�=ֿf�|D��܂s��ڱ8�$%G�|��[��'���ћc Uk0]DCXf(M�jK�ڑ��&j��
+q�$�AE)ic�l.��KR�[��93��v:�(�09�=N�(a�� a�5�=A�1:��!)}|�7�]z�`�E)u��M��Г
+#�[��=����J����I�痔�E�s��˧+m�<ٍ�7
+B�
+N��/�k�<8���V;�H��;-b��o��x;c�M�9\R�,�{��Cs*)�rȈ�g
+�RZ�:�@���ʗ�2i3'R��ܢ��l��'�
+���� J��&>�(��ٝ��<���7
+���d�jx0yM,��^C�
+�Z51z���l���x�MYjO����2I�0� n<�����stQB�jp#� ��L�G�ǗI�i00 ��nu�e�G�������D��`���i�_���I�b�6���]�Y���z��C��%�3_��r�l�r�ʗG侇IJ'�lFJ|�(~�� I)^'�n��P�7|9
+o2�ѣ3̱����%��R� �~4���+���,>Bқ-}�J~���wKi7'�}i���%��I�uz��3��<�4�̙$#���� ���'�q� C��LU�Y9�kR`D �=H��%Sp2�� 
+[@��*�m�,!��!)�k�2�)ɮ�ty`=�V�^9��z�==��$
+��:�����XYy����<���(a�T�YUT�C�>]a����a�m�������oL
+����x�;З���׌<^g���
+3�-%'+�b���I� �Ocz�7/z
+��eC��e�ܙO�CBR�X�7��'�(47+A��A�R���R��4��)D���
+�� � �����9{�����JOk��Qt�p��[{�o�t�S�9�Q�Kѥ�%W�m��n������c|a�1�}������~I�?.�R�(h|ӈ1���q�M ��T⨢q��zr*zR�m�Q����dg>�It�
+I ��ѵnrKII����t$�A2�}�f��.���1�~ϐ����}��?�����V?��jk�J�y�b���U-���7Js�:��#Ì�*�'''&]I�b$& �J}.;k�rSPE �е굱.��^�6��H�w��wk~��i�H)i&)%}C�T�����<@Y��z��y���8�?�o>W��K���*1g�RF뵜��GOF��|�%R޾ �)S5���n
+uy�����Z]Z�M��//_!!8 �ĈӢc��J'��u��֞�E�F�/L.\L~����r)�?�[���+��T��ݤ���b�}��B�/��:F�3�;��n� �'C�II�̙V�I���!S9��Ҩ�Hy� �&�Q�w׮��m�D!�ne�hiӾ{� �1f�C����ڇo��O�����Q�6w�ŕ{-��凶3h���
+F�}7׊�����1�2`��r�'Gד<8i��ԍ�w���(�
+&t��禇ڥgP�ˆ�^>��b�e������R��/��]R�{��^)�f�ϗ����k�ݣ8x#%��@O�ɘ{N��x��}�$#J1����
+=�I[��g���i�)R�
+N��p���6fǴ᫓L�� g��O�d41� ܌��uȏ�b���ƚ'�:����̗ݛ+���Њd߽��@�Q2}�T"Ӎ��Λ�?���"��t#D#H4�' ��I�xWN�����WK+
+Zr
+�fk=�]��Q|�fd�
+N
+2S����9�<�?�����l���K�~{�D=���}e,��`�o
+
+:C���H_s�T%[�dz��wogb���_���W>�O���=�>ܷ���/~��.�����
+>��β��9K>]>]񺵆tͷn��٨�tv�5��5m���ww���]L[ncb����?:����^�`��û�?�{���}������q
+t���a�s۶m��z��J*��x�o���^�O�����$/?9�"�����mv�fƙ�,��
+]r�˽�߰
+ٴ.�_�5dB\B\#톶m=���B+
+�ʏ�$ ҏ�-,��%����17���r��!�o�
+�ƣ�F6e�TK�#2I����'��Β;yF;Q� SYk��4��Ŷ�����^�#��������xeI9j�%Ӗ];����|�]�PO��c2S�LC�(�8c�ӧ�v�w��_�O?=y�,M�榦���̿�����-�c��mOn��ܓ;�������/�M��T܊� .��n#�ݜ����� ͫ3�ty���`<��D{Q�2#=�+x����˄�����7H�XX�(��=���_��:z`��s�VO�ik��fR��3�8��N��������LR�}V� ο�ҋo���_�莕��6/m哥��<�ػ��{}�%���;�8��o���kݢ{e�ƹ�>ۖ�%�;�Wq�M]��Q�A2�
+#��@'EbFFt� ��p���A�Vn��j�Azx�Ɬb�������0Q�y�@O����O�"m}��駟~�}����/�*�s�5�_rǍ�����W��7���X����M��>��A��|��˟����^d� �����~E:�{�k/=c�5ײ�Գ{ks&���8������,/o��wk�,�{g�N6w�� }� ��g+]�� �_EU3Q�k��mg��4�<���Q�\0��VD\O]f�LҌ��<��~�L��șӧ�N�.����t�o~��u�W�^�xQֳ��|��7^|�)���$����Tί9GFg맯���ޭ#�x �xW�O�����AO�"�����A�Q��H�[��P}n�)�\r�/�8С!c��;����IU�������6�G����ӧ�[���C&�y��N
+
+�W?Y��ҟ���^��̻;�cH���.��P���z�0'�J7���g�?�������:����k~c����{g��.�r�#n?�y[6F���>]i��}��C�θ�_��5� �=��sGv=oW��{ ���{Ã�l����R��ݢ��8ό��
+%@B�c�܀�GI�@������dl5wcl�q�{�l��|3�w�S��I73��=�!������}�m#:e�N��}�129!��1��w�Y�\t��W]��=��>��k/L�z�f��x�{K�G���l�!�\G��L 7s�ǥ��k��b�ny~��D˨��OoD�r�7�D�-��V�+�_�~�gR���D 0�-��$n��X�s��H��= �,zY����,7��.6)'^3'ŬƊy�n��n,��� ��XX[5�I���Y��.�+�G�:��՛���u���s���G?�᧿��O?r��޿L���s�y�\�����W!_̇\V�U���z��9顱�&%DBV��aU���OQ�𧼇Uxѕ�%�
+�cT�� �F���Jb��S�i }�E3�s �����F+��?(\4�T���2�i�!�n�x�K��XXm���$� E|r����Mƭxt<0������μ��v�������ʼnO��g����̷x���*�Z0�}����1��#5v�+�1g2�hNf�eх;�<5��s��%����;��z�Q���'qkJ�.�i՞�
+#U�րt�uy���9�{�gQΛ�r�L�����o��� ]�Q���틼����i��d������4�_�`^{tB¸ λ庫�ͯS{��R�����ud?Y4�]�.2ﱞZǚ�cx�������N��&����S1�K�2�g�����&W0��������>9,�)F�v��^�?=��ܿ�rVΛY�7�p�}ˀ�������nqw���yḎ�o����%t���y�o���k~u��O=���O������:�&s�0��.��x��Н��t��ֱ�M������J�9oP'i`pPaƚ[�;XQ�����x�L������x y���ʋ$kz�Y�FjN��K򘿗.��L�a�\>>ǒ�?�Ǧ�n�A���⹛��0D +,����i�9n?��&X^�Ͷ�l1�q����~��f�u$��Z�{���0EcOw]�%?uN���� �6]!��//�<�o�ndJ܎��j>�^��QH��Ks�S�k�]�`���.�a3%�fn:?C QwC��-����6,�7#p�U��: Q��^��Ŝ��ܬH} ʊ8+g�����S��Ob��J��!]�]��I�ޤ�< � AB�J��zk�8v���L7���pF˛w�v/Ʈ��^ȇ��C��̴Df ��b{�U�g��`�ʒ�{��|�l[���*'G|=�C�����{��@���XZ�`�7�m^N���27r[J� �_{�>��0s~@-D��Z�eq���2f������s��ֳ)�9q����Z9o��Es�IDu Q���Š��T�϶`�Ğ��=�P�<!2��^̜I�{�p����'ѕ��2x��Ԥ�b���X7%n�䑟?�3�q���
+�V��')��'��s�j�
+a��z��y�� �S�Xa_��{�����ɉ܍��� �ww=3��'�K��@2�E�u�EiAb)�*k Hok��^���-.���n.�u,�������l/��'��ֱ-�����RqVs�]9XQ�x+MЇ s���ȸ�ޡ�LJ粃��P�����^.U›w2jH��
+Q�eUGO�[ +��޾��4��'Y*���2JgN��A�림���w2\�(^���]���}�����Ըm�����>9,����,��@u�X�M �O�fGf�Ood�%8 �-+-��-�%���%��K.?��3�Y�X�]��^�M �rҍN˝� �&���Nn�&B�;�/�L�G��&|� ?J�}�"E�_�M�=��s�O��_7hF��̠�=๙U҃>^D}ˠgg�e��CԱZi},�n��a�}���� g�_�校�����ۼ�^n�W��AX /w�Ojմ����kDCV�o���Q��� �5@s��Ζ8+<t@z�•!�e��K�zxZ���/8�U�X-\�����5�f�Ծ]s�2�ds��G��G#����SC�!��r@��+!wOL�79�m�r��~N��\k#�.jwt����#���^9o&�
+��h��������������g�=�2� �Z�{��l�e�M�3��nKr�G��F+ݸ��ً��
+F�{?��"���� NH8�\\�����m
+1 }ypܐ��=�۷�Q��C�W���.1D]�垙�fќe�Y�Z�J�X���*��(���$FM������#�&WD�_ªkm ~�›�NMb>�6Ѹ]!j_w����U��,�g�Ç�թYc���^i^��oY���ܳ�fD|�P���U��^�������D/�]�1��7��\��� f3a��j}"R:��?{�K������$wOJ<�\s&>s#yad���}ț�� 2-~����䧕�*W͟��(g�;�Nz#^R���T �d��=[|Sq�!�X�/����Vf�U���n�җ�U(��������~��Y�K�x�'#���[����&�H~̺7�#�sR|��5��$�H
+/�`FzcV �ryA6s�?,�˜��E����+xf��3K���&t�}\�t �����Cx#t[�[��A�r#_�{R�h$?J;i�7n����!�B��H
++�>���y��X�g,\�?j2�&�wt��I �R��Mq���WQ�B�k������`[j�v/F|z�;x{+
+�
+�̙'�{?q�Dqx s2yF;�����q
+�b���s�݊J�n�^0��yG��-�J�u��'8�2$�y0��9ϫо]���iy�/qI�N��6A|�!ݒƒ����y
+#�y`J�aq�� �ćFN���g�^<��&Bw
+�kW�$PDž�
+ �s��M�g�]4G��Y�����A��%�yKjw���o�qqsk���K6�x��D>L��Dm}vs��LJ�5���[�Cn�iy6Y��I��ȝ���x�8
+o�,g�}Z>"ҟ�v #+�J��o|���uk#
+#
+�ObԤ����Cd�āܖZu ⮉|���)I�0��b��;4t��s�YWÍ
+GYb�e����wi^V�S�Exn[SZ���{j�ߓ�9��_�VEJ��T^�%%�˿&�xa�7�0
+��
+��o)�Xf�����Kϙ�����{ۄ��J�Τ�4x�ѣp/wz�zj�;���M�
+��}O��i:��t���(��+�u#E���I�{'��Ή "P��}"��u艇�@s &�
+#����
+(}�/L.^�_7
+p���H=���e"���.e�{ )��v�n,�9��ŀM^�����W��v��R�.���f_�ծod�88�]�y�nj�,?�ԗY��V�7��pFQ���rrZrQ��bU k5��S��
+���M_�{oUNNa�&�?�_T��Q�
+nA�L
+b&
+�ڏ@p� �ý�(z>�[�ɞ�GJ����k�Q�Z������#8>�u_��J������� �����>���ܨ�@f����.m16]�� ��a�w��
+?a��Q�P2�=`��ܸ঵��+
+N�a�S��ǩ_OG��b�<�݋��r�¡t�ᢞ�~��q�Ϯ�t�f[t��(�0�3�%��`S�Vx�Q ߯ M��<�����l�a<+J�I0�M��7�{υ������n���^�5DZ� (��ϢEn���Hn\p�1�<
+ ��H�����|P<
+LjU�^�n��.I��:5\ub���⺂ �'���c����������S�x!*�I��ՊJ��K�EŅ���##/���O�G���d�}��(�{ ���� ����RF��ڐ+}{��aq�6�.�����K>m�
+�n��_�(�0=�Gj�yOf����e���Q}Z�Ʈ�5�[�U'6�d,�1�[8���߽�~��S��Z�Gbߏ��{����r�f��@pz�/�7�y��� �U6�@U�S�M=�, ��f�W ��1�{^)?��j�1��#O�n޸ܜ��M\��R�a� ��]��K����l�V �~�����!���_�\6=�s8]���H��;_/���j����C��������9��L�=���0c�P��I��c�����6b�V��w�.�N�m��:�����r٤�Y����+��ubӯ���yȀ9��\VG�/���k���������M���*����}3I�mY�U�Ev�d͝v]qC����x탯�ʹ�j��M|(��Ο�&SԶ5\ub���Bo��߯�NC�{a�֣�F6y�V�AX�W_�&�I���w�p
+a��=����`���.�o:����{k-�;S[�LփE?N��� ؘ�q�Ms*��g��1r���H��V����vD0P���
+�I�د%���Oŝ�j�n1���EW�Ʈۍhex.T�ql�/�#S�د��WM���1~�*[��>��ycr�S"�����h���m��2����w�7��B��c�-�v��w����pՉM��
+����ɗ�9{�{��j�n1���������,w-,�u,'�!�$�3>v�S}��-š���i�<$�u���W6
+�~"��DC}�M�����=��>:ȓ���m-��}go�M2���L��~~����׿W����h�V��YC�����J����!v���������q�[+�݈����4�{7�<$����?r�f�^:��5c�=o,�!.{k�Ģ34+Wg�w�q)�n5��$����?����WW�� ��ת�P�>�n9�[��Y��XtqoX�V�0�‘~cn�[�!2���b��Fje�L��*r��poy �0l����_���{�#��C��*Hf��o+#7Qؕ����4�C�H�]�^�U\�Lf7�C+���2I����P�~{�N7 ���k�|�ߗ~΃�|�&��6ݠS��CF���P�n?W� t�0c�U�1��g��s� H�_��^H=d�b)��5��
+���`.����N����Z:!�Up�s�6��0�Y���Mt׷��&�5U�٧�򙜯�+��ɰ�BmZ��.j��{6^���hC�!B^��o3w[4d����c��� �P���؃r�.���0�q�:���;��C�:�vcv�qh�.{u&�������M^��}h �đ.q�<1g�(K�x�Hc�����pd�G���T��3>���F�e���}2� ��E�п�0G�=Ƽ2��{XMg�Ţ {¥l�`cv�+��֋��D�п�Xt�(-�� ^��J�}�����^��B���O�� N���0kA,���-6����D�� )����8𼇲�����P�6Ʀ�ޠ��!]_U]n�n� [�����=0m��Z�W8�l�������]��ƽ�/0�:��Z�+�?A��Zuث�? <4C���P:T#< �c�{��e���:���_��������U(ׇc��X��H8�����8��w?�#
+G�ۯ�����A{H|��%�u���D <��D�Ͼ�?��C�+5��6}T��kx�ūeY� ��]�T���>HK����~��rWk�bA��p�ѳOv�{��m�X7�M���ҘIUc�ٿ}�d�"���ݵhf'��{�?٪rQI�tC4v��2b��[�- �!���m���ycN�G�L�b��(�r�/�7�$���k 'R�^іa�ONS����~�w�Y7*>_&Jߘ&l��w�����;�hf��T��J{�&1���On"H���q��2n������7��~�:��v�?E=ĘBu��(�T�[�C�I�/^^�x�j'�¢�)�!�!�^�Tn�D��5�����x�:���J����uܯU���WvZbH�L=j��Ħ��Sp��잣���耸���4��H]�yHWMJ&�Ʊ�4�b&���3o����S[w��Ǧk:({C=$n��r��$�ݏ��k�o�<G��d2��������$ :�pՉM+oS����O���~"N;l��#�C�=]� �IƬVq�dӰ��sT�C�� �� �����Ő�د��������4L�
+]��Xt�H�'r�ܰu��'fl��+�?(�Ħ��y/���юh�ܜ�<ͨ&�����x�6�oH���cӯ�TRo|���ߡ>�v�����g��gXZ�����d��=|������|m�M������%�������
+��G��<� ��2^
+{rR���$#6��(�C')� ���&���4��Z��b�7�*�M1�v3��@Ul�9A�d�A:f¼U��/+-9�;D'��8���Z��r�RI���eކ�Bt��E���yc ˜ �*6��c����
+��*-U*Z�!�Z0o@Qؓ�t�%� ♃9
+@Ul�?^%w2�\� �P��Tj `��_ؽUa��
+ɍ��N�@2
+SI�ԉ��d�J�7�.�QǼ�z亁�0w2^�fO.�ơ3�q' r�Q��@]���Q!��7aހ�8��A�l� ��#q����yu�I��G?
+#j�Tq'=d�w�N�����T����ro@a�f�ie̛I������du��t��Ms�I��ǧp'��8���*rc���6�P�nW&�f��"$��8��2\����0��U��-�r���ʁ���C���TƢ�U�&����P�Gb"-���!#�Bp��E�vVž�n亁���qUj�Lҩr*c�/�P%Zb��,� � s'��&�,'��8���*��$�C2
+�$?Fy ��:�Ppr�Q�߀~�M����ߣ�����s)c�$�K���(��wz"�����Np쵼�t7���p��? tŦ�Ñ�X(&V�t
+r�G�q�MY�xnk�Vm\l1�Y���=�����Jթ��J��?��}߳Ak ��d�+��+o�n3L��]�o[س�h��*i����rg�.��� � D33V�OI*��;C&B�$�J��{��vE^��Ξc��h�a���o~�B����v����� Ozyt�9�< ��ٽ�Ɓ�?�_OM�l�2W܅Y�b�2�F���"�wۨ�c��í+a�@�b�}��?�k�s��6�gj�Qo :�,z���ӛ�.��a�`D%��m�7�8��r��
+��J!��4|�d\�ǿDn
+h{�S#-�:��W�>��
+m��@p@IZy�j֍��tw�p���$�P ��y#\p(�E7&��y�����џ*j�8P ��?)0��~LbBp@���+ ��2�!�@Z6DaoR`��3!8�
+:����y�Ǒ
+� 2I�!$��ش������#&ewp��O�-�cӣō<�w�N��T5pi�C��� �+��C��չS��E�&��(��Ǣ���#��յs�e �Aބ܀�t���QC����GQg���P� ���nOL6�o��]b=�v x��H�pl���<lp�ݺtfzS���G�P����8r耞ݺvn����!�}�d
+�
+fj� 8 t�q�қI�~ �tš����O�g�-��Н2鍹��p'���tc�D�\9�%@_l��@��f��p'��شh�<z3Hϕ��Ţ���w{�m�aހ�X�uC��������הForƗ��
+���֛I�a �
+lzl\���!��@T`ӣ�GXo��n�t���Đ_�D6��5�z3H�4�*������Gv|��|�����$���F�D ̲��DУ4I��75�
+���A�Fm �"���w)�1w2r��/�#%8� G�2�.l�<���<���2,z���A:���D�#1�^pr�Q�7uT��G` g��P[��n>��������0��Bb�Vo&�����qe�IzBo :ql�p@�
+�C��1x Za���І�3y�����g��mXJi�[�N��ٚ�]e�A�; �fm�h+�1w2� D56�m��.���Re�X���6��� wD7�][x���� �辋� +C~�N
+ML��o
+
+
+����Wp^cL���`�
+}Mb�F�F���|�7�v�n%P����<���ܨ�]�98�sp��0߆�Ș܍��1y2ǧ�$�ಾE�S\�_�7�ް����zw7$��#龻7@;�c�7��� =�����w�@
+�%?��}sYȖ`�J�O#�6%LI��7��\@wդ�� ]K�O��u|p��B9�B �� c�׀�� p�\<���h<�<ޘo]����𬨣�N�{K�Xi�c4�p�m�t�d�mz��6�|�}Gǜ!&p���h�g�lB�1������4�\H����m�>��U ��F���p��_��{��%̏���y���ȏ�� ��l���ⴓC.(Y��P�Q,|9�w���`b�����@m��16�t=��9�J����|��ppΐ_
+ �c���t,���+�
+_l}�8rr�'�_�j-�A�U��oi�f~��t�n=��R�����]��,�
+GUV!prׂ��u��/�cp0?r�讵�`2��z�+y,*����|W�m%` ��H���N��~a�!dl4L)\9�,�֌�[�ȃ��x7 8��g�1!���O�t��9��z�K�?�f����
+����oH��5 � X��b=-�%�=������}�h�6-�e��P�s�X��>{ 0��1r�lB�7�Vڟ����B�C:d�X
+?��gO��B���P涋�mL=C�)
+����~К��VQ�GK�f �yt���E��T�mTd�E8��Y�?��^��������M��Փ$���8�qJ��\�02&�VQG_��<�26O��G��ݴ�������o�X &��9&Lz�<���9p�(dl^K������/�r3�"]�0^�2����܋�|�%��� ���?~�Л���N�-��"ŖΟ�c�#��Ǣ�
+G&ǀ��x47��L:0{�[i�x�gy��rl�K�s4?yx9�r4.��|��
+ل 3�9�x�S��p"��'T�n�덷�� �j�8f)��ްl�(����D
+o�H���}+�����OnS�u��R?��]
+�u_p��]�kW ��0, k&��3%��߼�n}�)�R�� �R��<�P��`�^����W];��Ƣ��)�Bk� ܥ���K�(� o�SMv�&?�Վ�4:dC� �)�_n��.��+�8y����]gB�����pz���C�m��C���������]
+��Q�*���(�-������Z_�۲rh2���r��>
+�W���E�>!pr�@͍��˿<��s��u���,�o=zI;�a���������f��E57�7�t�1f����6ŃGѫl�
+�5Ĵ0����9)���0���ɯ���C���7vl�v]gOYVvbt����Ox�T$A��Yw\w��w)��L)���Fmlx�G'O��?��>r��׮1�H^��ҋ/�P6�d��d2�T\ ���6�#ܥ����*�#F�ƏI]ç����/���঍?�����/��0i�ml���3R
+��Mڐ��r#��rM7A�Աc��}��m߸᧫�V�2����(�&C��@�S
+_Zv׿����Xnt�8<]���>x��G~~݆���9���_u��!�ԍd~Z�@�.]Z��az�1�M †�8���/�xs�3����ݵ �1qK]17|��s��|��@
+����G#�����_���o/���-m5YQ��g�M��� ���ңK��f���}]��\�{Ւ��>X"� L�ƈ��0��y��0��psDB�9z|(1/�� �b����JS_������JCqZ3��V��6 /�+�Ն�������g�F��/-�)6*t���5��fMsRs�"Kc(N�4S_�>�U$P�&)�+m�E <���LQ>����G�����c��eQ��k��\~'�]�6Tg�m��m6��Լ��^Wc5g*c��b�E ��Ćx��:)�>n�%ӶZפmЬ7g袲�Y����zG���sW�`�.�#�-��ɘ���7+��F��kmj}|���֛�#W�?��k����¦�FCAQ]�rCF˺���ڼ�x}A��`��lN6��}[�M�b�[fLQe��5E����&;Ő�ܬ.]ї��9ی���M�ٵm%re|v�`-���Ԣj-�2���R�樾�
+C�2��l27k�ʲ�B]_�zuEk�F�V\L�6ڠQ����w����>�j0�#�ݽ˴5EZ��r%}n���\bj������{R��u�D�9���3rx ����G^�r0&Ϥꯏ��fΡ�@ݗѮ�h �� ��r�fENMݘS��T4���
+�mI���T:��V�Q���
+}Vow��ö^5ݍ��{c��s�"�fj���Z��L}w�Qc��0�2c;����ӝ�>�R�l��[�)qW�6������z]���P��"��~���`���s�+��[EbZBDQn��SM�C���(�ΑX�ߝ��:؝[���d�2��c���sb�m��֖� ߥ,��m��j0Q�o��Ӓ�X3@�ggT��*�+����� �kk����ʛu9����jg�����8^n�g�2R'� ���)�UUҟ�ѕnHo���o��.�p����4�$G�M�Π�F�h2�s\^m���1��e���^����#<���tN��Z�`�Ti���mYP�G>�t ~�TP:��-J��ԓ����+�\e�6Z���U��*���SS��uԷv����)���6Z,EI����}v^��ұ�/М�ߝ�C4���0�w�#�d��*��]�Ѣn�+ ڢWe�O1��6U�e�F��V��k�]U�ݥ+Փ�f�!r�؃&ܙs͚�5��GP�F[�SRB�Y�.�Ĥk�Y�-I�m�e)�U����&��92ͨn.�6��W-3�[Z�cu ���Z��m�k��IF[\e��'�y��P'�+��RB������兆���h���&+ٸ�^��Z�ҥ�5e)��v}JS��T��ȭ�����v��9Q��Nhl�N�X�Ʃ�]ָ��3R�a6%�S��J�][i[�M9�ef���BJw���ŕJ�
+�����"��'9�h�,��d����R�L�QZJ�ӔjcIAǪ|�٘֘��ڣ�c��Ii�)-��2�IUV:�<���Q��A�}Ue�!}��&�k ���#5`������\S<�G�ԍ�i�v�U��)_�e�e��L��d��0S舰F��TsVS��s͊��e�i��φ5mQ��V��nP�Nc5�l
+p*��E���wm���l�عU�{�
+x�T���s4>�
+��L�L<m�*���9�|yd.T�����,�����u<Ʋ
+x�_T���s4��Ur����>���*��\����q�3����<Wn��wv�K�-����=�
+p(�����m�C�鱙T�k��e_�m�o*�b��C"������Om�Z�U �r�7;ʖ
+��cި
+p'�H��c<W��R6zlf�X.����x�V�����9U r��}<�s��`�ǦS�
+�\���r����n��v�����l
+k__��괭�>Q��������5� ���J���,��(�I endstream endobj 15 0 obj [/ICCBased 19 0 R] endobj 6 0 obj [5 0 R] endobj 32 0 obj <</CreationDate(D:20160615142312-04'00')/Creator(Adobe Illustrator CC 2015 \(Macintosh\))/ModDate(D:20160615142312-04'00')/Producer(Adobe PDF library 15.00)/Title(metamask_icon)>> endobj xref 0 33 0000000000 65535 f
+0000000016 00000 n
+0000000144 00000 n
+0000047649 00000 n
+0000000000 00000 f
+0000163121 00000 n
+0000593503 00000 n
+0000047700 00000 n
+0000048109 00000 n
+0000048283 00000 n
+0000163420 00000 n
+0000139682 00000 n
+0000163307 00000 n
+0000049181 00000 n
+0000048344 00000 n
+0000593468 00000 n
+0000048620 00000 n
+0000048668 00000 n
+0000139717 00000 n
+0000160473 00000 n
+0000163191 00000 n
+0000163222 00000 n
+0000163494 00000 n
+0000163800 00000 n
+0000165099 00000 n
+0000187851 00000 n
+0000253439 00000 n
+0000319027 00000 n
+0000384615 00000 n
+0000450203 00000 n
+0000515791 00000 n
+0000581379 00000 n
+0000593526 00000 n
+trailer <</Size 33/Root 1 0 R/Info 32 0 R/ID[<858D18969ABF4CF88593CFB9A20C1759><B33F39DA517C42B9A50D10EC91C85574>]>> startxref 593722 %%EOF \ No newline at end of file
diff --git a/ui/responsive/design/chromeStorePics/promo1400560.png b/ui/responsive/design/chromeStorePics/promo1400560.png
new file mode 100644
index 000000000..d3637ecc8
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/promo1400560.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/promo440280.png b/ui/responsive/design/chromeStorePics/promo440280.png
new file mode 100644
index 000000000..c1f92b1c0
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/promo440280.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/promo920680.png b/ui/responsive/design/chromeStorePics/promo920680.png
new file mode 100644
index 000000000..726bd810a
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/promo920680.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/screen_dao_accounts.png b/ui/responsive/design/chromeStorePics/screen_dao_accounts.png
new file mode 100644
index 000000000..1a2e8052c
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/screen_dao_accounts.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/screen_dao_locked.png b/ui/responsive/design/chromeStorePics/screen_dao_locked.png
new file mode 100644
index 000000000..6592c17e4
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/screen_dao_locked.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/screen_dao_notification.png b/ui/responsive/design/chromeStorePics/screen_dao_notification.png
new file mode 100644
index 000000000..baeb2ec39
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/screen_dao_notification.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/screen_wei_account.png b/ui/responsive/design/chromeStorePics/screen_wei_account.png
new file mode 100644
index 000000000..23301e4bf
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/screen_wei_account.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/screen_wei_notification.png b/ui/responsive/design/chromeStorePics/screen_wei_notification.png
new file mode 100644
index 000000000..7a763e5df
--- /dev/null
+++ b/ui/responsive/design/chromeStorePics/screen_wei_notification.png
Binary files differ
diff --git a/ui/responsive/design/metamask-logo-eyes.png b/ui/responsive/design/metamask-logo-eyes.png
new file mode 100644
index 000000000..c29331b28
--- /dev/null
+++ b/ui/responsive/design/metamask-logo-eyes.png
Binary files differ
diff --git a/ui/responsive/design/wireframes/1st_time_use.png b/ui/responsive/design/wireframes/1st_time_use.png
new file mode 100644
index 000000000..c18ced5e2
--- /dev/null
+++ b/ui/responsive/design/wireframes/1st_time_use.png
Binary files differ
diff --git a/ui/responsive/design/wireframes/metamask_wfs_jan_13.pdf b/ui/responsive/design/wireframes/metamask_wfs_jan_13.pdf
new file mode 100644
index 000000000..c77c9274a
--- /dev/null
+++ b/ui/responsive/design/wireframes/metamask_wfs_jan_13.pdf
Binary files differ
diff --git a/ui/responsive/design/wireframes/metamask_wfs_jan_13.png b/ui/responsive/design/wireframes/metamask_wfs_jan_13.png
new file mode 100644
index 000000000..d71d7bdb4
--- /dev/null
+++ b/ui/responsive/design/wireframes/metamask_wfs_jan_13.png
Binary files differ
diff --git a/ui/responsive/design/wireframes/metamask_wfs_jan_18.pdf b/ui/responsive/design/wireframes/metamask_wfs_jan_18.pdf
new file mode 100644
index 000000000..592ba8532
--- /dev/null
+++ b/ui/responsive/design/wireframes/metamask_wfs_jan_18.pdf
Binary files differ
diff --git a/ui/responsive/example.js b/ui/responsive/example.js
new file mode 100644
index 000000000..4627c0e9c
--- /dev/null
+++ b/ui/responsive/example.js
@@ -0,0 +1,123 @@
+const injectCss = require('inject-css')
+const MetaMaskUi = require('./index.js')
+const MetaMaskUiCss = require('./css.js')
+const EventEmitter = require('events').EventEmitter
+
+// account management
+
+var identities = {
+ '0x1113462427bcc9133bb46e88bcbe39cd7ef0e111': {
+ name: 'Walrus',
+ img: 'QmW6hcwYzXrNkuHrpvo58YeZvbZxUddv69ATSHY3BHpPdd',
+ address: '0x1113462427bcc9133bb46e88bcbe39cd7ef0e111',
+ balance: 220,
+ txCount: 4,
+ },
+ '0x222462427bcc9133bb46e88bcbe39cd7ef0e7222': {
+ name: 'Tardus',
+ img: 'QmQYaRdrf2EhRhJWaHnts8Meu1mZiXrNib5W1P6cYmXWRL',
+ address: '0x222462427bcc9133bb46e88bcbe39cd7ef0e7222',
+ balance: 10.005,
+ txCount: 16,
+ },
+ '0x333462427bcc9133bb46e88bcbe39cd7ef0e7333': {
+ name: 'Gambler',
+ img: 'QmW6hcwYzXrNkuHrpvo58YeZvbZxUddv69ATSHY3BHpPdd',
+ address: '0x333462427bcc9133bb46e88bcbe39cd7ef0e7333',
+ balance: 0.000001,
+ txCount: 1,
+ },
+}
+
+var unapprovedTxs = {}
+addUnconfTx({
+ from: '0x222462427bcc9133bb46e88bcbe39cd7ef0e7222',
+ to: '0x1113462427bcc9133bb46e88bcbe39cd7ef0e111',
+ value: '0x123',
+})
+addUnconfTx({
+ from: '0x1113462427bcc9133bb46e88bcbe39cd7ef0e111',
+ to: '0x333462427bcc9133bb46e88bcbe39cd7ef0e7333',
+ value: '0x0000',
+ data: '0x000462427bcc9133bb46e88bcbe39cd7ef0e7000',
+})
+
+function addUnconfTx (txParams) {
+ var time = (new Date()).getTime()
+ var id = createRandomId()
+ unapprovedTxs[id] = {
+ id: id,
+ txParams: txParams,
+ time: time,
+ }
+}
+
+var isUnlocked = false
+var selectedAccount = null
+
+function getState () {
+ return {
+ isUnlocked: isUnlocked,
+ identities: isUnlocked ? identities : {},
+ unapprovedTxs: isUnlocked ? unapprovedTxs : {},
+ selectedAccount: selectedAccount,
+ }
+}
+
+var accountManager = new EventEmitter()
+
+accountManager.getState = function (cb) {
+ cb(null, getState())
+}
+
+accountManager.setLocked = function () {
+ isUnlocked = false
+ this._didUpdate()
+}
+
+accountManager.submitPassword = function (password, cb) {
+ if (password === 'test') {
+ isUnlocked = true
+ cb(null, getState())
+ this._didUpdate()
+ } else {
+ cb(new Error('Bad password -- try "test"'))
+ }
+}
+
+accountManager.setSelectedAccount = function (address, cb) {
+ selectedAccount = address
+ cb(null, getState())
+ this._didUpdate()
+}
+
+accountManager.signTransaction = function (txParams, cb) {
+ alert('signing tx....')
+}
+
+accountManager._didUpdate = function () {
+ this.emit('update', getState())
+}
+
+// start app
+
+var container = document.getElementById('app-content')
+
+var css = MetaMaskUiCss()
+injectCss(css)
+
+MetaMaskUi({
+ container: container,
+ accountManager: accountManager,
+})
+
+// util
+
+function createRandomId () {
+ // 13 time digits
+ var datePart = new Date().getTime() * Math.pow(10, 3)
+ // 3 random digits
+ var extraPart = Math.floor(Math.random() * Math.pow(10, 3))
+ // 16 digits
+ return datePart + extraPart
+}
diff --git a/ui/responsive/index.html b/ui/responsive/index.html
new file mode 100644
index 000000000..9dfaefbb3
--- /dev/null
+++ b/ui/responsive/index.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>MetaMask</title>
+ </head>
+ <body>
+
+ <!-- app content -->
+ <div id="app-content"></div>
+ <script src="./bundle.js" type="text/javascript" charset="utf-8"></script>
+
+ <!-- design reference -->
+ <link rel="stylesheet" type="text/css" href="./app/css/debug.css">
+ <div id="design-container">
+ <img id="design-img" src="./design/metamask_wfs_jan_13.png">
+ </div>
+
+ </body>
+</html>
diff --git a/ui/responsive/index.js b/ui/responsive/index.js
new file mode 100644
index 000000000..a729138d3
--- /dev/null
+++ b/ui/responsive/index.js
@@ -0,0 +1,58 @@
+const render = require('react-dom').render
+const h = require('react-hyperscript')
+const Root = require('./app/root')
+const actions = require('./app/actions')
+const configureStore = require('./app/store')
+const txHelper = require('./lib/tx-helper')
+global.log = require('loglevel')
+
+module.exports = launchMetamaskUi
+
+
+log.setLevel(global.METAMASK_DEBUG ? 'debug' : 'warn')
+
+function launchMetamaskUi (opts, cb) {
+ var accountManager = opts.accountManager
+ actions._setBackgroundConnection(accountManager)
+ // check if we are unlocked first
+ accountManager.getState(function (err, metamaskState) {
+ if (err) return cb(err)
+ const store = startApp(metamaskState, accountManager, opts)
+ cb(null, store)
+ })
+}
+
+function startApp (metamaskState, accountManager, opts) {
+ // parse opts
+ const store = configureStore({
+
+ // metamaskState represents the cross-tab state
+ metamask: metamaskState,
+
+ // appState represents the current tab's popup state
+ appState: {},
+
+ // Which blockchain we are using:
+ networkVersion: opts.networkVersion,
+ })
+
+ // if unconfirmed txs, start on txConf page
+ const unapprovedTxsAll = txHelper(metamaskState.unapprovedTxs, metamaskState.unapprovedMsgs, metamaskState.unapprovedPersonalMsgs, metamaskState.network)
+ if (unapprovedTxsAll.length > 0) {
+ store.dispatch(actions.showConfTxPage())
+ }
+
+ accountManager.on('update', function (metamaskState) {
+ store.dispatch(actions.updateMetamaskState(metamaskState))
+ })
+
+ // start app
+ render(
+ h(Root, {
+ // inject initial state
+ store: store,
+ }
+ ), opts.container)
+
+ return store
+}
diff --git a/ui/responsive/lib/account-link.js b/ui/responsive/lib/account-link.js
new file mode 100644
index 000000000..d061d0ad1
--- /dev/null
+++ b/ui/responsive/lib/account-link.js
@@ -0,0 +1,26 @@
+module.exports = function (address, network) {
+ const net = parseInt(network)
+ let link
+ switch (net) {
+ case 1: // main net
+ link = `http://etherscan.io/address/${address}`
+ break
+ case 2: // morden test net
+ link = `http://morden.etherscan.io/address/${address}`
+ break
+ case 3: // ropsten test net
+ link = `http://ropsten.etherscan.io/address/${address}`
+ break
+ case 4: // rinkeby test net
+ link = `http://rinkeby.etherscan.io/address/${address}`
+ break
+ case 42: // kovan test net
+ link = `http://kovan.etherscan.io/address/${address}`
+ break
+ default:
+ link = ''
+ break
+ }
+
+ return link
+}
diff --git a/ui/responsive/lib/contract-namer.js b/ui/responsive/lib/contract-namer.js
new file mode 100644
index 000000000..f05e770cc
--- /dev/null
+++ b/ui/responsive/lib/contract-namer.js
@@ -0,0 +1,33 @@
+/* CONTRACT NAMER
+ *
+ * Takes an address,
+ * Returns a nicname if we have one stored,
+ * otherwise returns null.
+ */
+
+const contractMap = require('eth-contract-metadata')
+const ethUtil = require('ethereumjs-util')
+
+module.exports = function (addr, identities = {}) {
+ const checksummed = ethUtil.toChecksumAddress(addr)
+ if (contractMap[checksummed] && contractMap[checksummed].name) {
+ return contractMap[checksummed].name
+ }
+
+ const address = addr.toLowerCase()
+ const ids = hashFromIdentities(identities)
+ return addrFromHash(address, ids)
+}
+
+function hashFromIdentities (identities) {
+ const result = {}
+ for (const key in identities) {
+ result[key] = identities[key].name
+ }
+ return result
+}
+
+function addrFromHash (addr, hash) {
+ const address = addr.toLowerCase()
+ return hash[address] || null
+}
diff --git a/ui/responsive/lib/etherscan-prefix-for-network.js b/ui/responsive/lib/etherscan-prefix-for-network.js
new file mode 100644
index 000000000..2c1904f1c
--- /dev/null
+++ b/ui/responsive/lib/etherscan-prefix-for-network.js
@@ -0,0 +1,21 @@
+module.exports = function (network) {
+ const net = parseInt(network)
+ let prefix
+ switch (net) {
+ case 1: // main net
+ prefix = ''
+ break
+ case 3: // ropsten test net
+ prefix = 'ropsten.'
+ break
+ case 4: // rinkeby test net
+ prefix = 'rinkeby.'
+ break
+ case 42: // kovan test net
+ prefix = 'kovan.'
+ break
+ default:
+ prefix = ''
+ }
+ return prefix
+}
diff --git a/ui/responsive/lib/explorer-link.js b/ui/responsive/lib/explorer-link.js
new file mode 100644
index 000000000..3b82ecd5f
--- /dev/null
+++ b/ui/responsive/lib/explorer-link.js
@@ -0,0 +1,6 @@
+const prefixForNetwork = require('./etherscan-prefix-for-network')
+
+module.exports = function (hash, network) {
+ const prefix = prefixForNetwork(network)
+ return `http://${prefix}etherscan.io/tx/${hash}`
+}
diff --git a/ui/responsive/lib/icon-factory.js b/ui/responsive/lib/icon-factory.js
new file mode 100644
index 000000000..27a74de66
--- /dev/null
+++ b/ui/responsive/lib/icon-factory.js
@@ -0,0 +1,65 @@
+var iconFactory
+const isValidAddress = require('ethereumjs-util').isValidAddress
+const toChecksumAddress = require('ethereumjs-util').toChecksumAddress
+const contractMap = require('eth-contract-metadata')
+
+module.exports = function (jazzicon) {
+ if (!iconFactory) {
+ iconFactory = new IconFactory(jazzicon)
+ }
+ return iconFactory
+}
+
+function IconFactory (jazzicon) {
+ this.jazzicon = jazzicon
+ this.cache = {}
+}
+
+IconFactory.prototype.iconForAddress = function (address, diameter) {
+ const addr = toChecksumAddress(address)
+ if (iconExistsFor(addr)) {
+ return imageElFor(addr)
+ }
+
+ return this.generateIdenticonSvg(address, diameter)
+}
+
+// returns svg dom element
+IconFactory.prototype.generateIdenticonSvg = function (address, diameter) {
+ var cacheId = `${address}:${diameter}`
+ // check cache, lazily generate and populate cache
+ var identicon = this.cache[cacheId] || (this.cache[cacheId] = this.generateNewIdenticon(address, diameter))
+ // create a clean copy so you can modify it
+ var cleanCopy = identicon.cloneNode(true)
+ return cleanCopy
+}
+
+// creates a new identicon
+IconFactory.prototype.generateNewIdenticon = function (address, diameter) {
+ var numericRepresentation = jsNumberForAddress(address)
+ var identicon = this.jazzicon(diameter, numericRepresentation)
+ return identicon
+}
+
+// util
+
+function iconExistsFor (address) {
+ return contractMap[address] && isValidAddress(address) && contractMap[address].logo
+}
+
+function imageElFor (address) {
+ const contract = contractMap[address]
+ const fileName = contract.logo
+ const path = `images/contract/${fileName}`
+ const img = document.createElement('img')
+ img.src = path
+ img.style.width = '75%'
+ return img
+}
+
+function jsNumberForAddress (address) {
+ var addr = address.slice(2, 10)
+ var seed = parseInt(addr, 16)
+ return seed
+}
+
diff --git a/ui/responsive/lib/lost-accounts-notice.js b/ui/responsive/lib/lost-accounts-notice.js
new file mode 100644
index 000000000..948b13db6
--- /dev/null
+++ b/ui/responsive/lib/lost-accounts-notice.js
@@ -0,0 +1,23 @@
+const summary = require('../app/util').addressSummary
+
+module.exports = function (lostAccounts) {
+ return {
+ date: new Date().toDateString(),
+ title: 'Account Problem Caught',
+ body: `MetaMask has fixed a bug where some accounts were previously mis-generated. This was a rare issue, but you were affected!
+
+We have successfully imported the accounts that were mis-generated, but they will no longer be recovered with your normal seed phrase.
+
+We have marked the affected accounts as "Loose", and recommend you transfer ether and tokens away from those accounts, or export & back them up elsewhere.
+
+Your affected accounts are:
+${lostAccounts.map(acct => ` - ${summary(acct)}`).join('\n')}
+
+These accounts have been marked as "Loose" so they will be easy to recognize in the account list.
+
+For more information, please read [our blog post.][1]
+
+[1]: https://medium.com/metamask/metamask-3-migration-guide-914b79533cdd#.7d8ktj4h3
+ `,
+ }
+}
diff --git a/ui/responsive/lib/persistent-form.js b/ui/responsive/lib/persistent-form.js
new file mode 100644
index 000000000..d4dc20b03
--- /dev/null
+++ b/ui/responsive/lib/persistent-form.js
@@ -0,0 +1,61 @@
+const inherits = require('util').inherits
+const Component = require('react').Component
+const defaultKey = 'persistent-form-default'
+const eventName = 'keyup'
+
+module.exports = PersistentForm
+
+function PersistentForm () {
+ Component.call(this)
+}
+
+inherits(PersistentForm, Component)
+
+PersistentForm.prototype.componentDidMount = function () {
+ const fields = document.querySelectorAll('[data-persistent-formid]')
+ const store = this.getPersistentStore()
+
+ for (var i = 0; i < fields.length; i++) {
+ const field = fields[i]
+ const key = field.getAttribute('data-persistent-formid')
+ const cached = store[key]
+ if (cached !== undefined) {
+ field.value = cached
+ }
+
+ field.addEventListener(eventName, this.persistentFieldDidUpdate.bind(this))
+ }
+}
+
+PersistentForm.prototype.getPersistentStore = function () {
+ let store = window.localStorage[this.persistentFormParentId || defaultKey]
+ if (store && store !== 'null') {
+ store = JSON.parse(store)
+ } else {
+ store = {}
+ }
+ return store
+}
+
+PersistentForm.prototype.setPersistentStore = function (newStore) {
+ window.localStorage[this.persistentFormParentId || defaultKey] = JSON.stringify(newStore)
+}
+
+PersistentForm.prototype.persistentFieldDidUpdate = function (event) {
+ const field = event.target
+ const store = this.getPersistentStore()
+ const key = field.getAttribute('data-persistent-formid')
+ const val = field.value
+ store[key] = val
+ this.setPersistentStore(store)
+}
+
+PersistentForm.prototype.componentWillUnmount = function () {
+ const fields = document.querySelectorAll('[data-persistent-formid]')
+ for (var i = 0; i < fields.length; i++) {
+ const field = fields[i]
+ field.removeEventListener(eventName, this.persistentFieldDidUpdate.bind(this))
+ }
+ this.setPersistentStore({})
+}
+
diff --git a/ui/responsive/lib/tx-helper.js b/ui/responsive/lib/tx-helper.js
new file mode 100644
index 000000000..ec19daf64
--- /dev/null
+++ b/ui/responsive/lib/tx-helper.js
@@ -0,0 +1,17 @@
+const valuesFor = require('../app/util').valuesFor
+
+module.exports = function (unapprovedTxs, unapprovedMsgs, personalMsgs, network) {
+ log.debug('tx-helper called with params:')
+ log.debug({ unapprovedTxs, unapprovedMsgs, personalMsgs, network })
+
+ const txValues = network ? valuesFor(unapprovedTxs).filter(txMeta => txMeta.metamaskNetworkId === network) : valuesFor(unapprovedTxs)
+ log.debug(`tx helper found ${txValues.length} unapproved txs`)
+ const msgValues = valuesFor(unapprovedMsgs)
+ log.debug(`tx helper found ${msgValues.length} unsigned messages`)
+ let allValues = txValues.concat(msgValues)
+ const personalValues = valuesFor(personalMsgs)
+ log.debug(`tx helper found ${personalValues.length} unsigned personal messages`)
+ allValues = allValues.concat(personalValues)
+
+ return allValues.sort(txMeta => txMeta.time)
+}