From ebc77b7a07756a6a390b7871d141d81126ae4345 Mon Sep 17 00:00:00 2001 From: turt2live Date: Sun, 28 May 2017 14:33:57 -0600 Subject: [PATCH] Backend support for the RSS bot. Part of #13 --- config/integrations/rssbot.yaml | 9 +++ docs/scalar_server_api.md | 61 ++++++++++++++++++ src/Dimension.js | 49 +++++++++++--- src/integration/impl/StubbedFactory.js | 11 ++++ src/integration/impl/index.js | 7 ++ src/integration/impl/rss/RSSBot.js | 35 ++++++++++ src/integration/impl/rss/RSSFactory.js | 12 ++++ .../impl/rss/StubbedRssBackbone.js | 29 +++++++++ src/integration/impl/rss/VectorRssBackbone.js | 45 +++++++++++++ src/integration/type/ComplexBot.js | 18 ++++++ src/integration/type/IntegrationStub.js | 26 ++++++++ src/scalar/VectorScalarClient.js | 36 +++++++++++ src/storage/DimensionStore.js | 2 +- web/app/riot/riot.component.ts | 2 +- web/app/shared/api.service.ts | 14 ++-- web/public/img/avatars/rssbot.png | Bin 0 -> 4037 bytes web/public/img/avatars/travisci.png | Bin 0 -> 45667 bytes 17 files changed, 341 insertions(+), 15 deletions(-) create mode 100644 config/integrations/rssbot.yaml create mode 100644 src/integration/impl/StubbedFactory.js create mode 100644 src/integration/impl/index.js create mode 100644 src/integration/impl/rss/RSSBot.js create mode 100644 src/integration/impl/rss/RSSFactory.js create mode 100644 src/integration/impl/rss/StubbedRssBackbone.js create mode 100644 src/integration/impl/rss/VectorRssBackbone.js create mode 100644 src/integration/type/ComplexBot.js create mode 100644 src/integration/type/IntegrationStub.js create mode 100644 web/public/img/avatars/rssbot.png create mode 100644 web/public/img/avatars/travisci.png diff --git a/config/integrations/rssbot.yaml b/config/integrations/rssbot.yaml new file mode 100644 index 0000000..194ce8b --- /dev/null +++ b/config/integrations/rssbot.yaml @@ -0,0 +1,9 @@ +type: "complex-bot" +integrationType: "rss" +enabled: true +name: "RSS Bot" +about: "Tracks any Atom/RSS feed and sends new items into this room" +avatar: "/img/avatars/rssbot.png" +upstream: + type: "vector" + id: "rssbot" \ No newline at end of file diff --git a/docs/scalar_server_api.md b/docs/scalar_server_api.md index 3318e84..2b0f88f 100644 --- a/docs/scalar_server_api.md +++ b/docs/scalar_server_api.md @@ -4,6 +4,67 @@ Scalar has a server-side component to assist in managing integrations. The known None of these are officially documented, and are subject to change. +## POST `/api/integrations?scalar_token=...` + +**Body**: +``` +{ + "RoomID": "!JmvocvDuPTYUfuvKgs:t2l.io" +} +``` +*Note*: Case difference appears to be intentional. + +**Response**: +``` +{ + "integrations": [{ + "type": "rssbot", + "user_id": "@travis:t2l.io", + "config": { + "feeds": { + "https://ci.t2l.io/view/all/rssAll": { + "poll_interval_mins": 0, + "is_failing": false, + "last_updated_ts_secs": 1495995601, + "rooms": ["!JmvocvDuPTYUfuvKgs:t2l.io"] + } + } + }, + "self": false + },{ + "type": "rssbot", + "user_id": "@travis:tang.ents.ca", + "config": { + "feeds": { + "https://ci.t2l.io/job/java-simple-eventemitter/rssAll": { + "poll_interval_mins": 0, + "is_failing": false, + "last_updated_ts_secs": 1495995618, + "rooms": ["!JmvocvDuPTYUfuvKgs:t2l.io"] + } + } + }, + "self": true + },{ + "type": "travis-ci", + "user_id": "@travis:t2l.io", + "config": { + "webhook_url": "https://scalar.vector.im/api/neb/services/hooks/some_long_string", + "rooms": { + "!JmvocvDuPTYUfuvKgs:t2l.io": { + "repos": { + "turt2live/matrix-dimension": { + "template": "%{repository}#%{build_number} (%{branch} - %{commit} : %{author}): %{message}\n Change view : %{compare_url}\n Build details : %{build_url}\n" + } + } + } + } + }, + "self": false + }] +} +``` + ## POST `/api/integrations/{type}?scalar_token=...` **Params**: diff --git a/src/Dimension.js b/src/Dimension.js index e59745b..b9711c1 100644 --- a/src/Dimension.js +++ b/src/Dimension.js @@ -12,6 +12,7 @@ var integrations = require("./integration"); var _ = require("lodash"); var UpstreamIntegration = require("./integration/UpstreamIntegration"); var HostedIntegration = require("./integration/HostedIntegration"); +var IntegrationImpl = require("./integration/impl"); /** * Primary entry point for Dimension @@ -52,7 +53,7 @@ class Dimension { this._app.post("/api/v1/scalar/register", this._scalarRegister.bind(this)); this._app.get("/api/v1/scalar/checkToken", this._checkScalarToken.bind(this)); - this._app.get("/api/v1/dimension/integrations", this._getIntegrations.bind(this)); + this._app.get("/api/v1/dimension/integrations/:roomId", this._getIntegrations.bind(this)); this._app.post("/api/v1/dimension/removeIntegration", this._removeIntegration.bind(this)); } @@ -89,14 +90,46 @@ class Dimension { _getIntegrations(req, res) { res.setHeader("Content-Type", "application/json"); - var results = _.map(integrations.all, i => { - var integration = JSON.parse(JSON.stringify(i)); - integration.upstream = undefined; - integration.hosted = undefined; - return integration; - }); + var scalarToken = req.query.scalar_token; + this._db.checkToken(scalarToken).then(() => { + var roomId = req.params.roomId; + if (!roomId) { + res.status(400).send({error: 'Missing room ID'}); + return; + } - res.send(results); + var results = _.map(integrations.all, i => JSON.parse(JSON.stringify(i))); + + var promises = []; + _.forEach(results, i => { + if (IntegrationImpl[i.type]) { + var confs = IntegrationImpl[i.type]; + if (confs[i.integrationType]) { + log.info("Dimension", "Using special configuration for " + i.type + " (" + i.integrationType + ")"); + + promises.push(confs[i.integrationType](this._db, i, roomId, scalarToken).then(integration => { + return integration.getUserId().then(userId=> { + i.userId = userId; + return integration.getState(); + }).then(state=> { + for (var key in state) { + i[key] = state[key]; + } + }); + })) + } else log.verbose("Dimension", "No special configuration needs for " + i.type + " (" + i.integrationType + ")"); + } else log.verbose("Dimension", "No special implementation type for " + i.type); + }); + + Promise.all(promises).then(() => res.send(_.map(results, integration => { + integration.upstream = undefined; + integration.hosted = undefined; + return integration; + }))); + }).catch(err => { + log.error("Dimension", err); + res.status(500).send({error: err}); + }); } _checkScalarToken(req, res) { diff --git a/src/integration/impl/StubbedFactory.js b/src/integration/impl/StubbedFactory.js new file mode 100644 index 0000000..b1476d1 --- /dev/null +++ b/src/integration/impl/StubbedFactory.js @@ -0,0 +1,11 @@ +/** + * Creates an integration using the given + * @param {DimensionStore} db the database + * @param {*} integrationConfig the integration configuration + * @param {string} roomId the room ID + * @param {string} scalarToken the scalar token + * @returns {Promise<*>} resolves to the configured integration + */ +module.exports = (db, integrationConfig, roomId, scalarToken) => { + throw new Error("Not implemented"); +}; \ No newline at end of file diff --git a/src/integration/impl/index.js b/src/integration/impl/index.js new file mode 100644 index 0000000..510bfce --- /dev/null +++ b/src/integration/impl/index.js @@ -0,0 +1,7 @@ +var RSSFactory = require("./rss/RSSFactory"); + +module.exports = { + "complex-bot": { + "rss": RSSFactory + } +}; \ No newline at end of file diff --git a/src/integration/impl/rss/RSSBot.js b/src/integration/impl/rss/RSSBot.js new file mode 100644 index 0000000..ae2461e --- /dev/null +++ b/src/integration/impl/rss/RSSBot.js @@ -0,0 +1,35 @@ +var ComplexBot = require("../../type/ComplexBot"); + +/** + * Represents an RSS bot + */ +class RSSBot extends ComplexBot { + + /** + * Creates a new RSS bot + * @param botConfig the bot configuration + * @param backbone the backbone powering this bot + */ + constructor(botConfig, backbone) { + super(botConfig); + this._backbone = backbone; + } + + /*override*/ + getUserId() { + return this._backbone.getUserId(); + } + + getFeeds() { + return this._backbone.getFeeds(); + } + + /*override*/ + getState() { + return this.getFeeds().then(feeds => { + return {feeds: feeds}; + }); + } +} + +module.exports = RSSBot; \ No newline at end of file diff --git a/src/integration/impl/rss/RSSFactory.js b/src/integration/impl/rss/RSSFactory.js new file mode 100644 index 0000000..95f808f --- /dev/null +++ b/src/integration/impl/rss/RSSFactory.js @@ -0,0 +1,12 @@ +var RSSBot = require("./RSSBot"); +var VectorRssBackbone = require("./VectorRssBackbone"); + +module.exports = (db, integrationConfig, roomId, scalarToken) => { + if (integrationConfig.upstream) { + if (integrationConfig.upstream.type !== "vector") throw new Error("Unsupported upstream"); + return db.getUpstreamToken(scalarToken).then(upstreamToken => { + var backbone = new VectorRssBackbone(roomId, upstreamToken); + return new RSSBot(integrationConfig, backbone); + }); + } else throw new Error("Unsupported config"); +}; \ No newline at end of file diff --git a/src/integration/impl/rss/StubbedRssBackbone.js b/src/integration/impl/rss/StubbedRssBackbone.js new file mode 100644 index 0000000..6111272 --- /dev/null +++ b/src/integration/impl/rss/StubbedRssBackbone.js @@ -0,0 +1,29 @@ +/** + * Stubbed/placeholder RSS backbone + */ +class StubbedRssBackbone { + + /** + * Creates a new stubbed RSS backbone + */ + constructor() { + } + + /** + * Gets the user ID for this backbone + * @returns {Promise} resolves to the user ID + */ + getUserId() { + throw new Error("Not implemented"); + } + + /** + * Gets the feeds for this backbone + * @returns {Promise} resolves to the collection of feeds + */ + getFeeds() { + throw new Error("Not implemented"); + } +} + +module.exports = StubbedRssBackbone; \ No newline at end of file diff --git a/src/integration/impl/rss/VectorRssBackbone.js b/src/integration/impl/rss/VectorRssBackbone.js new file mode 100644 index 0000000..0155e75 --- /dev/null +++ b/src/integration/impl/rss/VectorRssBackbone.js @@ -0,0 +1,45 @@ +var StubbedRssBackbone = require("./StubbedRssBackbone"); +var VectorScalarClient = require("../../../scalar/VectorScalarClient"); +var _ = require("lodash"); + +/** + * Backbone for RSS bots running on vector.im through scalar + */ +class VectorRssBackbone extends StubbedRssBackbone { + + /** + * Creates a new Vector RSS backbone + * @param {string} roomId the room ID to manage + * @param {string} upstreamScalarToken the vector scalar token + */ + constructor(roomId, upstreamScalarToken) { + super(); + this._roomId = roomId; + this._scalarToken = upstreamScalarToken; + this._info = null; + } + + /*override*/ + getUserId() { + return (this._info ? Promise.resolve() : this._getInfo()).then(() => { + return this._info.bot_user_id; + }); + } + + /*override*/ + getFeeds() { + return (this._info ? Promise.resolve() : this._getInfo()).then(() => { + if (this._info.integrations.length == 0) return []; + return _.keys(this._info.integrations[0].config.feeds); + }); + } + + _getInfo() { + return VectorScalarClient.getIntegration("rssbot", this._roomId, this._scalarToken).then(info => { + this._info = info; + }); + } + +} + +module.exports = VectorRssBackbone; \ No newline at end of file diff --git a/src/integration/type/ComplexBot.js b/src/integration/type/ComplexBot.js new file mode 100644 index 0000000..fd96b46 --- /dev/null +++ b/src/integration/type/ComplexBot.js @@ -0,0 +1,18 @@ +var IntegrationStub = require("./IntegrationStub"); + +/** + * Represents a bot with additional configuration or setup needs. Normally indicates a bot needs + * more than a simple invite to the room. + */ +class ComplexBot extends IntegrationStub { + + /** + * Creates a new complex bot + * @param botConfig the configuration for the bot + */ + constructor(botConfig) { + super(botConfig); + } +} + +module.exports = ComplexBot; \ No newline at end of file diff --git a/src/integration/type/IntegrationStub.js b/src/integration/type/IntegrationStub.js new file mode 100644 index 0000000..93d30fb --- /dev/null +++ b/src/integration/type/IntegrationStub.js @@ -0,0 +1,26 @@ +/** + * Stub for an Integration + */ +class IntegrationStub { + constructor(botConfig) { + this._config = botConfig; + } + + /** + * Gets the user ID for this bot + * @return {Promise} resolves to the user ID + */ + getUserId() { + return Promise.resolve(this._config.userId); + } + + /** + * Gets state information that represents how this bot is operating. + * @return {Promise<*>} resolves to the state information + */ + getState() { + return Promise.resolve({}); + } +} + +module.exports = IntegrationStub; diff --git a/src/scalar/VectorScalarClient.js b/src/scalar/VectorScalarClient.js index 5c1d329..4c1f05d 100644 --- a/src/scalar/VectorScalarClient.js +++ b/src/scalar/VectorScalarClient.js @@ -46,6 +46,42 @@ class VectorScalarClient { }); } + /** + * Configures an Integration on Vector + * @param {string} type the integration tpye + * @param {string} scalarToken the scalar token + * @param {*} config the config to POST to the service + * @return {Promise<>} resolves when completed + */ + configureIntegration(type, scalarToken, config) { + return this._do("POST", "/integrations/"+type+"/configureService", {scalar_token:scalarToken}, config).then((response, body) => { + if (response.statusCode !== 200) { + log.error("VectorScalarClient", response.body); + return Promise.reject(response.body); + } + + // no success processing + }); + } + + /** + * Gets information on + * @param {string} type the type to lookup + * @param {string} roomId the room ID to look in + * @param {string} scalarToken the scalar token + * @return {Promise<{bot_user_id:string,integrations:[]}>} resolves to the integration information + */ + getIntegration(type, roomId, scalarToken) { + return this._do("POST", "/integrations/"+type,{scalar_token:scalarToken}, {room_id:roomId}).then((response, body) => { + if (response.statusCode !== 200) { + log.error("VectorScalarClient", response.body); + return Promise.reject(response.body); + } + + return response.body; + }); + } + _do(method, endpoint, qs = null, body = null) { var url = config.get("upstreams.vector") + endpoint; diff --git a/src/storage/DimensionStore.js b/src/storage/DimensionStore.js index dac969d..4221902 100644 --- a/src/storage/DimensionStore.js +++ b/src/storage/DimensionStore.js @@ -86,7 +86,7 @@ class DimensionStore { */ checkToken(scalarToken) { return this.__Tokens.find({where: {scalarToken: scalarToken}}).then(token => { - if (!token) return Promise.reject(); + if (!token) return Promise.reject(new Error("Token not found")); //if (moment().isAfter(moment(token.expires))) return this.__Tokens.destroy({where: {id: token.id}}).then(() => Promise.reject()); return Promise.resolve(); }); diff --git a/web/app/riot/riot.component.ts b/web/app/riot/riot.component.ts index 531c458..693ae01 100644 --- a/web/app/riot/riot.component.ts +++ b/web/app/riot/riot.component.ts @@ -40,7 +40,7 @@ export class RiotComponent { } private init() { - this.api.getIntegrations().then(integrations => { + this.api.getIntegrations(this.roomId, this.scalarToken).then(integrations => { this.integrations = integrations; let promises = integrations.map(b => this.updateIntegrationState(b)); return Promise.all(promises); diff --git a/web/app/shared/api.service.ts b/web/app/shared/api.service.ts index 9d82be4..b85af90 100644 --- a/web/app/shared/api.service.ts +++ b/web/app/shared/api.service.ts @@ -7,18 +7,22 @@ export class ApiService { constructor(private http: Http) { } - checkScalarToken(token): Promise { - return this.http.get("/api/v1/scalar/checkToken", {params: {scalar_token: token}}) + checkScalarToken(scalarToken): Promise { + return this.http.get("/api/v1/scalar/checkToken", {params: {scalar_token: scalarToken}}) .map(res => res.status === 200).toPromise(); } - getIntegrations(): Promise { - return this.http.get("/api/v1/dimension/integrations") + getIntegrations(roomId, scalarToken): Promise { + return this.http.get("/api/v1/dimension/integrations/" + roomId, {params: {scalar_token: scalarToken}}) .map(res => res.json()).toPromise(); } removeIntegration(roomId: string, userId: string, scalarToken: string): Promise { - return this.http.post("/api/v1/dimension/removeIntegration", {roomId: roomId, userId: userId, scalarToken: scalarToken}) + return this.http.post("/api/v1/dimension/removeIntegration", { + roomId: roomId, + userId: userId, + scalarToken: scalarToken + }) .map(res => res.json()).toPromise(); } } diff --git a/web/public/img/avatars/rssbot.png b/web/public/img/avatars/rssbot.png new file mode 100644 index 0000000000000000000000000000000000000000..f7dc7cae6207080b6b4d70746165e7bbe93130cb GIT binary patch literal 4037 zcmV;$4?6IPP)utlmJs-u82Y+$_?HyZTrTK{pQd8;l=o$EBUcp`^%R3tyKE5V)?UP{_NQKqB8r$i2A;K z`Ke6&+`9YCoBFkH{MD}cs#N%$FZr%t{o~I2!-W0czWmd!{v1uv000i~Nkl( zYh&U%4u%uo>NG%rhWn*ZnAx7`w)_A8-6lX=z?Ll=o1|yn&(P)}wj|54oTQPJ7iG6U zoa~-^**y8wJnKF0Cc}QWEb`b7ki`4bc{%Nj-nNu6LOGX0B;OK3a!v_jbo(~yOv{Lz zkqC=vXPrq#DzL5W;P27o40BkuAFs-eqXQa=509N(Z=a z$?BWyVHx;|f)Z|)D?uYo)EXH?m@n#7&b~CC@gwr`~n6DO{JH_KJgu_Nms478RMydnhu1OPfDYlD1IOw%u zgno+l2B8TzqFEbyEiSO>DkR~DQ}**75*)dv!V$K`#+(alZ%~Aj_Sl$nu}LVxQ9A)E z#8DW+(fwCSSP=xGop9Y=zzT7FJ7KENpmHCvI>+`63!tu|Vgh$aap76&_ z!lU$4QAhY>EhucKgw$=@=m=Lo$rGN7uW*Dvbd1*0jZ>Ad{JDS?qPk105-w0$;&1`+nr@tO-^H77e+#9DBT*ty$3C)}ccYB$2e zi==mC6k9#v3?Fhk6IPyfcSozk&MN%R2z&To#DlOhI}>@Y2`SIgr{9Dw=`}CHYC`^g zyi*SEEb;bDIChvQo`e9~ zaO3EP0}-ZW%;PC^b4Ivy4m4gyqnG8f?%h$ME3S2##0yo)@{G{UlGfstXx+Ml$@zZ$ z{yOzNA2>^5jntDhJrI^R#lu2MPKf-o=yWn!!@DP!U-$M=+2=FORqlNanZpbJ_LOnHmwL_8=5Z(vd6@7 zLH%N7YLay1V`xNOC!{ufv`Dhw2*g!DL_Vqr-#q4_*#37mdmS#{$N%)^v~B>2{36@i zXJg^831*XgOOqVGFZwOwbNY<7mRVN4{-zCpJ?iE9rrh^yLmObrR-eQndoqSGu zKI0unSZ|;ioCoij-{Rmgz*H2y#A|hkC9GWJ9v*CbZ{E~#+j)ncG@08!rTZS1uuf=$ zqmAy(Z!yFvPcJ?m$;Z19kv6JeV6!8UeuVMLrYcF@z2FfI4cqml>X7ay8J zbS114g}{I_M>m6}&ZxK(rZZ?|W$yX#+R!;O55ly}0L#dXiAKjNkx=p>ObZ~#Bofnl zansC9^dbcN5}JL+u8~vMo`lfGgwdc5Ze2%3k7+Ih)I=~-6XfMh<8k5IZ}AvaTy9v@zR{?zikk0+ zF1H!!2P#_{zH&o&TCESg*7z3^oUm+!zszW+D)^LN{uh#fpc^XB6v+W35dZBe1 zatnXKD=&W(pZMk4bP|MZk);<4-TyR=(^qeEN{4>=Qb2-<4yG0}*LG;4us!u(D3ZQk z&Kr~<38wTyyZ6EkEf9bEz6aLz+qW=CpzbixreGL+r%d7dl&tjIdooI}o_(+Px8{+> z9RB=^=VQ{sZ~xFDNlo7EDBZ>cgLnF${Dx`0f9SObY?b{E16?*$NO%q}ydJaO1NPg; zw~ABSZ2ZuSQwq1S)O{TB7^8@_7}hq%59&`V1h^P3yk^s(79(0c4O^J~MxiO=pm1Kw zs|xl|PZO^u%GUf|x0lVquehFiIp|Om6|t_3Kbq~0#-0+`3VRg#9_!j-)+S0}M10b` z76OL09%m+wwTV&7zNGmrYWz3>3pEGs2IEv;8ns4P&P{VslV!T-hj1zPvrDHM;fQtK zm1JUCQE4J-0!F9q!}L_=9j#XXC{2U0Z{@1T;Q9uSspEnATA#K09%u8MWNay}$ue=! z>$?uquk#k+&&*tk8LGTBbu$EvzkfTvimx*>x1M{dZxOEqPiJB3^Mj zy6x;5VaeO><>lo+8HEZj;AhsFQwF8999MeZXV-2xe<%oj*_^`9eDJyl3fhRF^}U+T zgjbg?-AOLaA9|l5<>Knl&t|1R*Gu6{qdN2i*n<0)(}SL!A@%U32eF0f&WBR>w@g`k zwdfffrpT6nr~i3&4%pLQ=&xPa%yozcd#WZw;bH2s(?-wFa(k^zpcL*P(I5&6hBmqK zVkFo@-en?QoX7XsEr*LJN}b~{7#nr5FCnMzko>;vso>fdBQgEXK;t(FhTv-Q6x=a& zn21+>G2HXQCNHiXOmLP-jcYix?d=epT=h0_5BZFFrY8*{)D>R$gNO|JEc!XG`_njA zI-0hnbbDx@iZEjJmVT0i)ZIlFh zeYK910iP^zxldisJ-5Dz)(h#hu9-piG7VHhXprDGlC*sjoqAtdYofG-@Gw>EoZ4Ic zB+YJzDt+%ur~ai|FG4YghN&_|z~CE|$pHG7Iuz#EN2%Vbg9b{e2$9dgCo%5<>Ot$! zN7xW#o}_m^V3JAM9Rx=S#$14XgdGy6)OLbUKdHf7s2UdwU_k2v!YjeOpdBvDgEM|d zscXLDV{ZX3lPf<6lr0fY{?7#m$;2(HZr|X^0O&w14mixWjf5F}A>7Xqa zZz3cFocl8*J~vI>VCXEt4LKE4Y8Rh+Ygh!@53v#c6oYE+J7G@G>kqWHOvWR`Ho|C4 z{R7Haplc^=KcWrLN*J~!YHc6CQOTQ6 zcfU48fwKUwLg)Xu?W)cbN%7oHDF}6C$#u*X8UMMIfwIOgrmL*4GBw zIECbd$!y)hw_0{nB*I#GIqi(zwv;jTD#*H1_Mufa-M)=FQDSpc%ge_%go%RSV0;*@<8`b^{o1wpiZpUhNpc1;$A&ai%f|HijI%=`Uc08AksiPolZBPPfG4-XFH7II7CEoaE8hJCT+_}{tD?YhheMLo}aD(fq=wqfkWQcFg zhFs(@|MYJNKQ6Q4!bFieLj(9tMJw~$xIklMM3$d? zhQ-qc)1eQa6KJJX$e`asDN1Y>Tl0PAE_gBu4hRs1FY-;&0Tp{4h@V z94bPPE`<>l#RW$zWup|D${C|)LRG$=#D5c*cJYNj0b40!rI=MNM(N|S#R>pqo{2-^ zn^E|9h)p}&U+Y7hgERalkw5UX3{!lWWb~x)go_sl6qB;Yh$czKa5f!?W|70!NZ{SL zEw)h4<`+l+fqFWOuu<8m`*)k~@~2rW22b;8Ujs%LB$Z=g>?-ac0Rh^35Yo^4Hs8K6 zAD$dxVE5qsCjkwqY+4Fuy`3ma%R=6r9rMO)uVuObL%LZ}kDCyb7r%je_Sn|Ju(*1* zFhbq5ioX~h+(dSE#ztzfM0V(0Bylpf3TLB3$p48ZOL|vBD1JTZ*hc=c*gckMSkP%g zXU7j`02jCBozOnlCLrX@MG}MTn`DmVw|9i%x8x$@ zw8_pcEn@bPn$l^UY0V^0L?#N1+Pnf>F9(rb{w}vBxFzbQsf=CDUw!>=6T<5E*fgl| zNB@2w|A@e$5Wd_~dOw-{3y_hgu`jYte0Vv9k22Z(CW=-XnSO$@e=P~rCt|&J88Dmu~9Dy zYdRXW6&@R|K@^Ur;c;vjP1C`9KB7WlRGzFzI zA#0bb%;9mm*(KwE?EZkDQvd7G>ItZ-^UL36^P^lK+7R)V%h6#7;7x>ciTuu^scG`N zaPdak+|)T^hf-$*)4vlRIVe2dRESJ@H_FT0Ug0d$Shwr`$K`LS?KQHyJtLj<*5cDN zon5^Dy@nY!R(97veRffS;-2ZH>9vKfHOW9t+QJJ<`jqq9SYzIA!yPTpe=c?UpM@#q zcsWtI25D^fsElWRESTdAf{~gQeg3`tY_o96(<_AGEGxFk(K-u#IVg3gJwc1-M*_e4 z{jtkH!A@{##Xr96Y6!Zx@6W=)_Q>whwe23IhG z>OKDmAt_sPkZ>fn9%IcFdfQiz-PhQ6j*54^Y#LmZzEZubMqO+Yoz6j6-yzQt#fw~> z_ctj_!GA~c!pBWZRo|4YIdBS(6G^syQm`t|WSAIFiY^FbjAWegy5&Mz|8zee1COLt z)fSg)Ebumc?pOPgb)uIGo2sloE`R!GC8c%|%FY%SZ3IdEUCrYH{XGz7naKm*6lCKg z$K+P>y@5=^eavDuAw>XxkM#D-2bEK9SC5Ff0~X9d!G7?@+*w0p6$Zz>~L=@tEUh=zjJ+*db>ikaVO}?b{v1=v-*dbvH^= zf7_X{mW0vRd&J%YO>&f=w&xVDPQuD;X@E=6QQ$?L=+pf=0by(djl!u4hvb1n!7_9s zAtA$11KUHDZtQh<5nX@r?fW3^DCoiKXl=cg6>;_5Aac*ha8Tc+UrA3tO8muLYKS$j z-Tjt4)E>4+LZZsl$QqmcYAAeVK$fI6yX7@ZOX?VV{$(k#EPTo!mbfj>nUGfyCI!4` z^x%z2_!prQsezQI*2S4#*Z?XHag1EEbM4`MCaSI5VplS0yZ$Of z3q#uAOY;cNVlaDH3^Px2IKBKv*{S)S1-FAZB_>on!ERHWgsK*}c5PAjOx# z{b+j?Ma7ecWvx%H&*!&IAtz}rvDi7X1iGIiTW^uhvT7pgD69WHZ$TV(SJVW$;BaiI z)3>1VL!g%!+^kNR#$TOa`4v;ub$9(cIAC-gi?Ia^vM}WwCjnnht=0!cj~lD10^G`!~+7uLgpU5tXn}?vTS1VcW5z@ z3@RQWIj9;-pDh;hgmb)N2vEs}+61$N(Mac0 z`t(21un5ek*u>J`s0<(_$Xc**x|hc|;IH)WQSgn{%N1!Z;+~2??j@tW>7FP0{U4|d zPH8WN{PC(r17f9j!Lkmhf?!y*u}am0?)$yyLh+3+g)D0;{IKCF_Xi!RxMYTiPK*Mb zaG#n9F6#c0s?((W%ACRn?Yc8D-1*S5`)p0G z2e-Uew z=}e<_9WRgWhZhkp{$w2?)0VcVqv7sslB2H#|2x0rGoeK-2fXA~UPtEW4@ZWdA`fA* z_9JuYv;M5o15lmFQr=hjM(tWKL)N;A+Op>yZqUrALO84{6q!2zK%0^Qy)*Xq*Mr0~ z5X$o+^JC*EIs6g-H&A+C(Mw_x;chZsVXI)@onGj6gtq7wb;o2PM`USTCAc^EGtp;b zh7nOGX~>FSQdE;8hq1UMt}LkETGcjEVHE17h$Qw$@rmhe&T=R}52CwG_gmRYGIWF> z{TP%dPRTII6#3E~niy!xEik)QgjMslTJe2etLLl@QIAnSzWytJ0mNZ1;u+)G%4dT#rv7T@YvKSN@<0M?TmZSZ7HEkQ}I+BkdazAG0w4 zOhBSAjHf*E>vGtZx5`3rmS4b(FE@RPM4auA+y(KUTR4-iXSR<3CydpPVwgBMxIoFIgZn$b7AhvxiVk?ShHdu(K*2}wG zK^CEX(sF1$<8So02Sb7on%w2o5v~sevWGY$VOlsJ4|@c2Kft3r{}uHNy+2{COchq4 zV|`qGd{OE<#r$~>`iYsFZ&0c$AsfP$RHe3@Y#J!@wQfa1WJ(t6%urg0H(Jg2D6OiR zp@i9pX)b2*&Jw|tR!s=1RHz}bC?55S8j|~G%98j`lTD(KG#_k-z-(2LqMl8Y_g6Q5 z645#bS%Nari)+rYM#Kf3xiWqZo_!;jZ-=C>w69CCl8drC33gP!jPgX|lJ3O$;c)Ro z&))ctlY*k=Mq}nK$D4DV4=f|Qd2{;HX%{kmfC4}@XKug=BU)=cra%%5MKEaYjw1WO zk3hNu$5a(-(0QxiiifLOJUS|cCFt%wa4mcZ>N%i?oVIS??45E*$4du87id$NHp~ac zRBjJ#$$OgPDWj8;IAhtop9g&nLQYw6f`tYkM;e*`T3Xmd@=}+;1x(N#141erehAJi ziX8*wO%nCewjO39=7eKVop`(foISnNH!YJ{!*-qAI`jypDvI+!*SzT55f`Wv?nU(j z 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 Ai2wiq literal 0 HcmV?d00001