Built motion from commit a61a4a20.|2.5.46
[motion2.git] / server / api / chatMessage / chatMessage.controller.js
index 101122f..4300ae3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x142d=['AcceptMessage','SELECT\x20*\x20FROM\x20cm_contacts\x20WHERE\x20id\x20=\x20','ContactId','QueryTypes','SELECT','contact','User','email','internal','manual','SIP/%s','channel','motionChannel','event','EventManager','parse','ChatInteractionId','[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','sequelize','fullname','interface','rejectmessage','formData','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','fs-extra','lodash','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./chatMessage.socket','register','jayson/promise','client','http','request','then','info','ChatMessage,\x20%s,\x20%s','request\x20sent','ChatMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','end','json','undefined','limit','count','offset','status','Content-Range','apply','save','update','destroy','stack','name','send','index','rawAttributes','fieldName','type','model','map','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','VIRTUAL','options','ChatMessage','includeAll','include','findAll','rows','show','params','create','body','find','describe','chat-interactions','accept','chat','read','readAt','YYYY-MM-DD\x20HH:mm:ss','UserId','user','agent','get','ChatInteraction','format','[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','interaction','null'];(function(_0x495b99,_0x70fc01){var _0x5b69fb=function(_0x490649){while(--_0x490649){_0x495b99['push'](_0x495b99['shift']());}};_0x5b69fb(++_0x70fc01);}(_0x142d,0x12a));var _0xd142=function(_0x47aa64,_0xfb8a07){_0x47aa64=_0x47aa64-0x0;var _0x549c7a=_0x142d[_0x47aa64];return _0x549c7a;};'use strict';var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xd142('0x0'));var jsonpatch=require(_0xd142('0x1'));var rp=require(_0xd142('0x2'));var moment=require(_0xd142('0x3'));var BPromise=require(_0xd142('0x4'));var Mustache=require(_0xd142('0x5'));var util=require(_0xd142('0x6'));var path=require(_0xd142('0x7'));var sox=require(_0xd142('0x8'));var csv=require(_0xd142('0x9'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0xd142('0xa'));var _=require(_0xd142('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xd142('0xc'));var deskjs=require(_0xd142('0xd'));var toCsv=require(_0xd142('0x9'));var querystring=require(_0xd142('0xe'));var Papa=require('papaparse');var Redis=require(_0xd142('0xf'));var authService=require(_0xd142('0x10'));var qs=require(_0xd142('0x11'));var as=require(_0xd142('0x12'));var hardwareService=require(_0xd142('0x13'));var logger=require(_0xd142('0x14'))(_0xd142('0x15'));var utils=require(_0xd142('0x16'));var config=require(_0xd142('0x17'));var licenseUtil=require(_0xd142('0x18'));var db=require(_0xd142('0x19'))['db'];config[_0xd142('0x1a')]=_[_0xd142('0x1b')](config[_0xd142('0x1a')],{'host':_0xd142('0x1c'),'port':0x18eb});var socket=require(_0xd142('0x1d'))(new Redis(config[_0xd142('0x1a')]));require(_0xd142('0x1e'))[_0xd142('0x1f')](socket);var jayson=require(_0xd142('0x20'));var client=jayson[_0xd142('0x21')][_0xd142('0x22')]({'port':0x232c});var client9002=jayson[_0xd142('0x21')][_0xd142('0x22')]({'port':0x232a});function respondWithRpcPromise(_0x2b6a83,_0x140b0f,_0x592457,_0x3039d7){return new BPromise(function(_0x157be5,_0x322caf){var _0x49fbfc=_0x3039d7||client;return _0x49fbfc[_0xd142('0x23')](_0x2b6a83,_0x592457)[_0xd142('0x24')](function(_0x4bba11){logger[_0xd142('0x25')](_0xd142('0x26'),_0x140b0f,_0xd142('0x27'));logger['debug'](_0xd142('0x28'),_0x140b0f,'request\x20sent',JSON[_0xd142('0x29')](_0x4bba11));if(_0x4bba11[_0xd142('0x2a')]){if(_0x4bba11[_0xd142('0x2a')][_0xd142('0x2b')]===0x1f4){logger['error'](_0xd142('0x26'),_0x140b0f,_0x4bba11[_0xd142('0x2a')][_0xd142('0x2c')]);return _0x322caf(_0x4bba11['error'][_0xd142('0x2c')]);}logger[_0xd142('0x2a')]('ChatMessage,\x20%s,\x20%s',_0x140b0f,_0x4bba11[_0xd142('0x2a')][_0xd142('0x2c')]);return _0x157be5(_0x4bba11[_0xd142('0x2a')][_0xd142('0x2c')]);}else{logger[_0xd142('0x25')](_0xd142('0x26'),_0x140b0f,'request\x20sent');_0x157be5(_0x4bba11[_0xd142('0x2d')]['message']);}})[_0xd142('0x2e')](function(_0x578888){logger[_0xd142('0x2a')](_0xd142('0x26'),_0x140b0f,_0x578888);_0x322caf(_0x578888);});});}function respondWithStatusCode(_0x544d84,_0x4d9e10){_0x4d9e10=_0x4d9e10||0xcc;return function(_0x2f2fa3){if(_0x2f2fa3){return _0x544d84[_0xd142('0x2f')](_0x4d9e10);}return _0x544d84['status'](_0x4d9e10)[_0xd142('0x30')]();};}function respondWithResult(_0x10b40c,_0x256147){_0x256147=_0x256147||0xc8;return function(_0x4fe423){if(_0x4fe423){return _0x10b40c['status'](_0x256147)[_0xd142('0x31')](_0x4fe423);}};}function respondWithFilteredResult(_0x591728,_0x2fdb42){return function(_0x3d990b){if(_0x3d990b){var _0x3f0bf7=typeof _0x2fdb42['offset']===_0xd142('0x32')&&typeof _0x2fdb42[_0xd142('0x33')]==='undefined';var _0xe873a8=_0x3d990b[_0xd142('0x34')];var _0x2f2619=_0x3f0bf7?0x0:_0x2fdb42[_0xd142('0x35')];var _0x52392f=_0x3f0bf7?_0x3d990b['count']:_0x2fdb42['offset']+_0x2fdb42['limit'];var _0x29e434;if(_0x52392f>=_0xe873a8){_0x52392f=_0xe873a8;_0x29e434=0xc8;}else{_0x29e434=0xce;}_0x591728[_0xd142('0x36')](_0x29e434);return _0x591728['set'](_0xd142('0x37'),_0x2f2619+'-'+_0x52392f+'/'+_0xe873a8)[_0xd142('0x31')](_0x3d990b);}return null;};}function patchUpdates(_0x317bb3){return function(_0x5cfc87){try{jsonpatch[_0xd142('0x38')](_0x5cfc87,_0x317bb3,!![]);}catch(_0x5f125d){return BPromise['reject'](_0x5f125d);}return _0x5cfc87[_0xd142('0x39')]();};}function saveUpdates(_0x32ba37,_0x2bac73){return function(_0x54f246){if(_0x54f246){return _0x54f246[_0xd142('0x3a')](_0x32ba37)['then'](function(_0x4554b4){return _0x4554b4;});}return null;};}function removeEntity(_0x4ba8eb,_0x4495dd){return function(_0x261f53){if(_0x261f53){return _0x261f53[_0xd142('0x3b')]()['then'](function(){_0x4ba8eb['status'](0xcc)[_0xd142('0x30')]();});}};}function handleEntityNotFound(_0xc41249,_0xd06f86){return function(_0x418c86){if(!_0x418c86){_0xc41249[_0xd142('0x2f')](0x194);}return _0x418c86;};}function handleError(_0x477b08,_0x24c04c){_0x24c04c=_0x24c04c||0x1f4;return function(_0x5bfd3c){logger[_0xd142('0x2a')](_0x5bfd3c[_0xd142('0x3c')]);if(_0x5bfd3c[_0xd142('0x3d')]){delete _0x5bfd3c['name'];}_0x477b08['status'](_0x24c04c)[_0xd142('0x3e')](_0x5bfd3c);};}exports[_0xd142('0x3f')]=function(_0x18a10c,_0x7e6c2e){var _0x1c3c8a={},_0x49f7d3={},_0x48bced={'count':0x0,'rows':[]};var _0x1cd13d=_['map'](db['ChatMessage'][_0xd142('0x40')],function(_0x4d8a7a){return{'name':_0x4d8a7a[_0xd142('0x41')],'type':_0x4d8a7a[_0xd142('0x42')]['key']};});_0x49f7d3[_0xd142('0x43')]=_[_0xd142('0x44')](_0x1cd13d,_0xd142('0x3d'));_0x49f7d3[_0xd142('0x45')]=_[_0xd142('0x46')](_0x18a10c[_0xd142('0x45')]);_0x49f7d3[_0xd142('0x47')]=_[_0xd142('0x48')](_0x49f7d3[_0xd142('0x43')],_0x49f7d3[_0xd142('0x45')]);_0x1c3c8a[_0xd142('0x49')]=_['intersection'](_0x49f7d3[_0xd142('0x43')],qs[_0xd142('0x4a')](_0x18a10c['query']['fields']));_0x1c3c8a['attributes']=_0x1c3c8a[_0xd142('0x49')][_0xd142('0x4b')]?_0x1c3c8a['attributes']:_0x49f7d3[_0xd142('0x43')];if(!_0x18a10c[_0xd142('0x45')][_0xd142('0x4c')](_0xd142('0x4d'))){_0x1c3c8a[_0xd142('0x33')]=qs[_0xd142('0x33')](_0x18a10c[_0xd142('0x45')]['limit']);_0x1c3c8a[_0xd142('0x35')]=qs[_0xd142('0x35')](_0x18a10c['query'][_0xd142('0x35')]);}_0x1c3c8a[_0xd142('0x4e')]=qs[_0xd142('0x4f')](_0x18a10c[_0xd142('0x45')]['sort']);_0x1c3c8a[_0xd142('0x50')]=qs[_0xd142('0x47')](_[_0xd142('0x51')](_0x18a10c[_0xd142('0x45')],_0x49f7d3['filters']),_0x1cd13d);if(_0x18a10c['query'][_0xd142('0x52')]){_0x1c3c8a[_0xd142('0x50')]=_[_0xd142('0x53')](_0x1c3c8a[_0xd142('0x50')],{'$or':_[_0xd142('0x44')](_0x1cd13d,function(_0x419894){if(_0x419894['type']!==_0xd142('0x54')){var _0x289669={};_0x289669[_0x419894[_0xd142('0x3d')]]={'$like':'%'+_0x18a10c[_0xd142('0x45')][_0xd142('0x52')]+'%'};return _0x289669;}})});}_0x1c3c8a=_[_0xd142('0x53')]({},_0x1c3c8a,_0x18a10c[_0xd142('0x55')]);var _0x311ace={'where':_0x1c3c8a['where']};return db[_0xd142('0x56')][_0xd142('0x34')](_0x311ace)[_0xd142('0x24')](function(_0x114d3c){_0x48bced[_0xd142('0x34')]=_0x114d3c;if(_0x18a10c[_0xd142('0x45')][_0xd142('0x57')]){_0x1c3c8a[_0xd142('0x58')]=[{'all':!![]}];}return db['ChatMessage'][_0xd142('0x59')](_0x1c3c8a);})[_0xd142('0x24')](function(_0x4d88d5){_0x48bced[_0xd142('0x5a')]=_0x4d88d5;return _0x48bced;})[_0xd142('0x24')](respondWithFilteredResult(_0x7e6c2e,_0x1c3c8a))[_0xd142('0x2e')](handleError(_0x7e6c2e,null));};exports[_0xd142('0x5b')]=function(_0x15eb78,_0x2beadd){var _0x56987a={'raw':!![],'where':{'id':_0x15eb78[_0xd142('0x5c')]['id']}},_0xa29d59={};_0xa29d59['model']=_[_0xd142('0x46')](db['ChatMessage']['rawAttributes']);_0xa29d59[_0xd142('0x45')]=_[_0xd142('0x46')](_0x15eb78['query']);_0xa29d59[_0xd142('0x47')]=_[_0xd142('0x48')](_0xa29d59['model'],_0xa29d59[_0xd142('0x45')]);_0x56987a[_0xd142('0x49')]=_[_0xd142('0x48')](_0xa29d59[_0xd142('0x43')],qs[_0xd142('0x4a')](_0x15eb78[_0xd142('0x45')][_0xd142('0x4a')]));_0x56987a[_0xd142('0x49')]=_0x56987a[_0xd142('0x49')][_0xd142('0x4b')]?_0x56987a['attributes']:_0xa29d59[_0xd142('0x43')];if(_0x15eb78[_0xd142('0x45')][_0xd142('0x57')]){_0x56987a[_0xd142('0x58')]=[{'all':!![]}];}_0x56987a=_[_0xd142('0x53')]({},_0x56987a,_0x15eb78['options']);return db[_0xd142('0x56')]['find'](_0x56987a)[_0xd142('0x24')](handleEntityNotFound(_0x2beadd,null))[_0xd142('0x24')](respondWithResult(_0x2beadd,null))[_0xd142('0x2e')](handleError(_0x2beadd,null));};exports[_0xd142('0x5d')]=function(_0x1586a9,_0x1b7e30){return db['ChatMessage'][_0xd142('0x5d')](_0x1586a9['body'],{})['then'](respondWithResult(_0x1b7e30,0xc9))[_0xd142('0x2e')](handleError(_0x1b7e30,null));};exports['update']=function(_0x5b4067,_0x52fbd5){if(_0x5b4067[_0xd142('0x5e')]['id']){delete _0x5b4067[_0xd142('0x5e')]['id'];}return db['ChatMessage'][_0xd142('0x5f')]({'where':{'id':_0x5b4067['params']['id']}})['then'](handleEntityNotFound(_0x52fbd5,null))['then'](saveUpdates(_0x5b4067[_0xd142('0x5e')],null))[_0xd142('0x24')](respondWithResult(_0x52fbd5,null))[_0xd142('0x2e')](handleError(_0x52fbd5,null));};exports['destroy']=function(_0x35b9ab,_0x4753fe){return db[_0xd142('0x56')][_0xd142('0x5f')]({'where':{'id':_0x35b9ab[_0xd142('0x5c')]['id']}})[_0xd142('0x24')](handleEntityNotFound(_0x4753fe,null))['then'](removeEntity(_0x4753fe,null))[_0xd142('0x2e')](handleError(_0x4753fe,null));};exports[_0xd142('0x60')]=function(_0x1ae5e9,_0x396dff){return db[_0xd142('0x56')][_0xd142('0x60')]()[_0xd142('0x24')](respondWithResult(_0x396dff,null))[_0xd142('0x2e')](handleError(_0x396dff,null));};var interaction_log=require('../../config/logger')(_0xd142('0x61'));exports[_0xd142('0x62')]=function(_0x3d7810,_0x51d160,_0x2fb72e){var _0x40124e={'agent':{},'channel':_0xd142('0x63')};if(_0x3d7810[_0xd142('0x5e')]['id']){delete _0x3d7810['body']['id'];}_0x3d7810[_0xd142('0x5e')][_0xd142('0x64')]=!![];_0x3d7810[_0xd142('0x5e')][_0xd142('0x65')]=moment()['format'](_0xd142('0x66'));_0x3d7810[_0xd142('0x5e')][_0xd142('0x67')]=_0x3d7810[_0xd142('0x5e')][_0xd142('0x67')]||_0x3d7810[_0xd142('0x68')]['id'];_0x40124e[_0xd142('0x69')]['id']=_0x3d7810[_0xd142('0x5e')][_0xd142('0x67')];return db[_0xd142('0x56')]['find']({'where':{'id':_0x3d7810[_0xd142('0x5c')]['id'],'UserId':null}})[_0xd142('0x24')](handleEntityNotFound(_0x51d160,null))[_0xd142('0x24')](saveUpdates(_0x3d7810[_0xd142('0x5e')],null))['then'](function(_0x5338ec){if(_0x5338ec){_0x40124e[_0xd142('0x2c')]=_0x5338ec[_0xd142('0x6a')]({'plain':!![]});return db[_0xd142('0x6b')][_0xd142('0x5f')]({'where':{'id':_0x5338ec['ChatInteractionId']}});}return null;})[_0xd142('0x24')](handleEntityNotFound(_0x51d160,null))['then'](function(_0x59e068){if(_0x59e068){return _0x59e068[_0xd142('0x3a')]({'UserId':_0x3d7810[_0xd142('0x5e')][_0xd142('0x67')],'read1stAt':_['isNil'](_0x59e068['read1stAt'])?moment()[_0xd142('0x6c')](_0xd142('0x66')):undefined});}return null;})[_0xd142('0x24')](function(_0x3caf1d){if(_0x3caf1d){_0x40124e['interaction']=_0x3caf1d[_0xd142('0x6a')]({'plain':!![]});interaction_log[_0xd142('0x25')](_0xd142('0x6d'),_0x3d7810[_0xd142('0x68')]['id'],_0x3d7810[_0xd142('0x68')]['name'],_0x3d7810[_0xd142('0x68')][_0xd142('0x6e')],_0x40124e[_0xd142('0x6f')]['id'],_0x3d7810[_0xd142('0x5e')]?JSON['stringify'](_0x3d7810[_0xd142('0x5e')]):_0xd142('0x70'));return respondWithRpcPromise(_0xd142('0x71'),'acceptMessage',_0x40124e);}return null;})[_0xd142('0x24')](function(_0xf0c860){var _0x480492=_0xd142('0x72')+_0xf0c860['message'][_0xd142('0x73')];return db['sequelize'][_0xd142('0x45')](_0x480492,{'type':db['Sequelize'][_0xd142('0x74')][_0xd142('0x75')],'raw':!![]})[_0xd142('0x24')](function(_0x4a4b69){return _0x4a4b69;});})[_0xd142('0x24')](function(_0x256057){if(_0x256057){_0x40124e['message'][_0xd142('0x76')]=_0x256057[0x0];if(!_0x3d7810[_0xd142('0x5e')][_0xd142('0x67')])return;return db[_0xd142('0x77')][_0xd142('0x5f')]({'where':{'id':_0x3d7810['body']['UserId'],'role':'agent'},'attributes':['id',_0xd142('0x3d'),'fullname',_0xd142('0x78'),_0xd142('0x79')],'raw':!![]});}return null;})[_0xd142('0x24')](function(_0x2eddc1){if(!_0x2eddc1)return null;_0x40124e[_0xd142('0x2c')][_0xd142('0x69')]=_0x2eddc1;return _0x40124e;})[_0xd142('0x24')](function(_0x4d0c82){if(_0x4d0c82){if(_0x3d7810[_0xd142('0x5e')][_0xd142('0x7a')]){_0x40124e[_0xd142('0x2c')]['interface']=util[_0xd142('0x6c')](_0xd142('0x7b'),_0x3d7810[_0xd142('0x68')][_0xd142('0x3d')]);_0x40124e['message'][_0xd142('0x7c')]=_0x40124e[_0xd142('0x7c')];_0x40124e[_0xd142('0x2c')][_0xd142('0x7d')]=_0x40124e[_0xd142('0x7c')];_0x40124e[_0xd142('0x2c')][_0xd142('0x7e')]=_0xd142('0x62');return respondWithRpcPromise(_0xd142('0x7f'),'EventManager',{'event':'acceptmessage','message':_['merge'](_0x40124e[_0xd142('0x2c')],JSON[_0xd142('0x80')](_0x40124e[_0xd142('0x6f')]['formData']))},client9002)[_0xd142('0x24')](function(){return _0x40124e;});}return _0x40124e;}return null;})['then'](respondWithResult(_0x51d160,null))['catch'](handleError(_0x51d160,null));};var interaction_log=require('../../config/logger')(_0xd142('0x61'));exports['reject']=function(_0x81a0b9,_0x584518,_0x5c5bcf){var _0x308c6d={'agent':{},'channel':_0xd142('0x63')};if(_0x81a0b9['body']['id']){delete _0x81a0b9[_0xd142('0x5e')]['id'];}_0x81a0b9[_0xd142('0x5e')][_0xd142('0x67')]=_0x81a0b9[_0xd142('0x5e')]['UserId']||_0x81a0b9[_0xd142('0x68')]['id'];_0x308c6d['agent']['id']=_0x81a0b9[_0xd142('0x5e')][_0xd142('0x67')];return db[_0xd142('0x56')][_0xd142('0x5f')]({'where':{'id':_0x81a0b9[_0xd142('0x5c')]['id'],'UserId':null}})[_0xd142('0x24')](handleEntityNotFound(_0x584518,null))['then'](function(_0x1f56fd){if(_0x1f56fd){_0x308c6d[_0xd142('0x2c')]=_0x1f56fd['get']({'plain':!![]});return db[_0xd142('0x6b')][_0xd142('0x5f')]({'where':{'id':_0x1f56fd[_0xd142('0x81')]}});}return null;})[_0xd142('0x24')](handleEntityNotFound(_0x584518,null))[_0xd142('0x24')](function(_0x16948b){if(_0x16948b){_0x308c6d[_0xd142('0x6f')]=_0x16948b[_0xd142('0x6a')]({'plain':!![]});interaction_log[_0xd142('0x25')](_0xd142('0x82'),_0x81a0b9[_0xd142('0x68')]['id'],_0x81a0b9[_0xd142('0x68')][_0xd142('0x3d')],_0x81a0b9[_0xd142('0x68')]['role'],_0x308c6d[_0xd142('0x6f')]['id'],_0x81a0b9[_0xd142('0x5e')]?JSON['stringify'](_0x81a0b9['body']):_0xd142('0x70'));return respondWithRpcPromise(_0xd142('0x83'),'rejectMessage',_0x308c6d);}return null;})[_0xd142('0x24')](function(_0x1878d9){var _0x3c20e0=_0xd142('0x72')+_0x1878d9[_0xd142('0x2c')][_0xd142('0x73')];return db[_0xd142('0x84')][_0xd142('0x45')](_0x3c20e0,{'type':db['Sequelize']['QueryTypes'][_0xd142('0x75')],'raw':!![]})[_0xd142('0x24')](function(_0x16059b){return _0x16059b;});})[_0xd142('0x24')](function(_0x4fa2a4){if(_0x4fa2a4){_0x308c6d[_0xd142('0x2c')][_0xd142('0x76')]=_0x4fa2a4[0x0];if(!_0x81a0b9[_0xd142('0x5e')][_0xd142('0x67')])return;return db['User'][_0xd142('0x5f')]({'where':{'id':_0x81a0b9[_0xd142('0x5e')][_0xd142('0x67')],'role':_0xd142('0x69')},'attributes':['id',_0xd142('0x3d'),_0xd142('0x85'),'email','internal'],'raw':!![]});}return null;})[_0xd142('0x24')](function(_0x741c50){if(!_0x741c50)return null;_0x308c6d[_0xd142('0x2c')][_0xd142('0x69')]=_0x741c50;return _0x308c6d;})[_0xd142('0x24')](function(_0x3de26d){if(_0x3de26d){_0x3de26d[_0xd142('0x2c')][_0xd142('0x86')]=util[_0xd142('0x6c')](_0xd142('0x7b'),_0x81a0b9['user'][_0xd142('0x3d')]);_0x3de26d[_0xd142('0x2c')]['channel']=_0x308c6d[_0xd142('0x7c')];_0x3de26d[_0xd142('0x2c')][_0xd142('0x7d')]=_0x308c6d[_0xd142('0x7c')];_0x3de26d[_0xd142('0x2c')]['event']='reject';respondWithRpcPromise('EventManager',_0xd142('0x7f'),{'event':_0xd142('0x87'),'message':_[_0xd142('0x53')](_0x308c6d[_0xd142('0x2c')],JSON[_0xd142('0x80')](_0x308c6d[_0xd142('0x6f')][_0xd142('0x88')]))},client9002);return _0x308c6d;}return null;})[_0xd142('0x24')](respondWithResult(_0x584518,null))[_0xd142('0x2e')](handleError(_0x584518,null));};
\ No newline at end of file
+var _0x85c6=['accept','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','ChatInteractionId','read1stAt','interaction','get','role','null','acceptMessage','SELECT\x20*\x20FROM\x20cm_contacts\x20WHERE\x20id\x20=\x20','sequelize','Sequelize','QueryTypes','SELECT','contact','User','agent','internal','SIP/%s','channel','motionChannel','event','EventManager','formData','chat','RejectMessage','ContactId','fullname','email','interface','reject','parse','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','fs-extra','lodash','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/environment','../../config/license/util','redis','defaults','localhost','socket.io-emitter','./chatMessage.socket','register','client','http','request','then','info','ChatMessage,\x20%s,\x20%s','ChatMessage,\x20%s,\x20%s,\x20%s','request\x20sent','error','message','result','status','end','json','offset','limit','undefined','count','set','Content-Range','apply','save','sendStatus','stack','name','send','index','map','ChatMessage','fieldName','type','key','model','query','keys','filters','intersection','attributes','fields','length','nolimit','sort','where','filter','merge','VIRTUAL','include','findAll','catch','show','rawAttributes','options','find','create','update','body','params','destroy','describe','chat-interactions'];(function(_0x37de6e,_0x2d81e7){var _0x2c63a3=function(_0x4ba309){while(--_0x4ba309){_0x37de6e['push'](_0x37de6e['shift']());}};_0x2c63a3(++_0x2d81e7);}(_0x85c6,0x19f));var _0x685c=function(_0x506b1b,_0x4888d6){_0x506b1b=_0x506b1b-0x0;var _0x489d65=_0x85c6[_0x506b1b];return _0x489d65;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x685c('0x0'));var zipdir=require(_0x685c('0x1'));var jsonpatch=require(_0x685c('0x2'));var rp=require(_0x685c('0x3'));var moment=require(_0x685c('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x685c('0x5'));var util=require(_0x685c('0x6'));var path=require(_0x685c('0x7'));var sox=require(_0x685c('0x8'));var csv=require(_0x685c('0x9'));var ejs=require(_0x685c('0xa'));var fs=require('fs');var fs_extra=require(_0x685c('0xb'));var _=require(_0x685c('0xc'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x685c('0xd'));var toCsv=require(_0x685c('0x9'));var querystring=require(_0x685c('0xe'));var Papa=require(_0x685c('0xf'));var Redis=require(_0x685c('0x10'));var authService=require(_0x685c('0x11'));var qs=require('../../components/parsers/qs');var as=require(_0x685c('0x12'));var hardwareService=require(_0x685c('0x13'));var logger=require('../../config/logger')(_0x685c('0x14'));var utils=require('../../config/utils');var config=require(_0x685c('0x15'));var licenseUtil=require(_0x685c('0x16'));var db=require('../../mysqldb')['db'];config[_0x685c('0x17')]=_[_0x685c('0x18')](config['redis'],{'host':_0x685c('0x19'),'port':0x18eb});var socket=require(_0x685c('0x1a'))(new Redis(config[_0x685c('0x17')]));require(_0x685c('0x1b'))[_0x685c('0x1c')](socket);var jayson=require('jayson/promise');var client=jayson[_0x685c('0x1d')][_0x685c('0x1e')]({'port':0x232c});var client9002=jayson[_0x685c('0x1d')]['http']({'port':0x232a});function respondWithRpcPromise(_0x408a41,_0x3da04e,_0x102010,_0x4c6a0c){return new BPromise(function(_0x198390,_0x474204){var _0x23997c=_0x4c6a0c||client;return _0x23997c[_0x685c('0x1f')](_0x408a41,_0x102010)[_0x685c('0x20')](function(_0x51058f){logger[_0x685c('0x21')](_0x685c('0x22'),_0x3da04e,'request\x20sent');logger['debug'](_0x685c('0x23'),_0x3da04e,_0x685c('0x24'),JSON['stringify'](_0x51058f));if(_0x51058f['error']){if(_0x51058f[_0x685c('0x25')]['code']===0x1f4){logger['error'](_0x685c('0x22'),_0x3da04e,_0x51058f['error'][_0x685c('0x26')]);return _0x474204(_0x51058f[_0x685c('0x25')][_0x685c('0x26')]);}logger[_0x685c('0x25')]('ChatMessage,\x20%s,\x20%s',_0x3da04e,_0x51058f[_0x685c('0x25')][_0x685c('0x26')]);return _0x198390(_0x51058f[_0x685c('0x25')][_0x685c('0x26')]);}else{logger['info'](_0x685c('0x22'),_0x3da04e,_0x685c('0x24'));_0x198390(_0x51058f[_0x685c('0x27')][_0x685c('0x26')]);}})['catch'](function(_0x2280b0){logger[_0x685c('0x25')](_0x685c('0x22'),_0x3da04e,_0x2280b0);_0x474204(_0x2280b0);});});}function respondWithStatusCode(_0x3d7590,_0x227ed0){_0x227ed0=_0x227ed0||0xcc;return function(_0x2b84bd){if(_0x2b84bd){return _0x3d7590['sendStatus'](_0x227ed0);}return _0x3d7590[_0x685c('0x28')](_0x227ed0)[_0x685c('0x29')]();};}function respondWithResult(_0x3a74c8,_0x4b3e1d){_0x4b3e1d=_0x4b3e1d||0xc8;return function(_0x4a1d6b){if(_0x4a1d6b){return _0x3a74c8[_0x685c('0x28')](_0x4b3e1d)[_0x685c('0x2a')](_0x4a1d6b);}};}function respondWithFilteredResult(_0x4158a5,_0x27c514){return function(_0x1f7a1a){if(_0x1f7a1a){var _0x51fe76=typeof _0x27c514[_0x685c('0x2b')]==='undefined'&&typeof _0x27c514[_0x685c('0x2c')]===_0x685c('0x2d');var _0x4810b8=_0x1f7a1a[_0x685c('0x2e')];var _0x27833f=_0x51fe76?0x0:_0x27c514['offset'];var _0x27f2c7=_0x51fe76?_0x1f7a1a[_0x685c('0x2e')]:_0x27c514['offset']+_0x27c514[_0x685c('0x2c')];var _0x183962;if(_0x27f2c7>=_0x4810b8){_0x27f2c7=_0x4810b8;_0x183962=0xc8;}else{_0x183962=0xce;}_0x4158a5[_0x685c('0x28')](_0x183962);return _0x4158a5[_0x685c('0x2f')](_0x685c('0x30'),_0x27833f+'-'+_0x27f2c7+'/'+_0x4810b8)[_0x685c('0x2a')](_0x1f7a1a);}return null;};}function patchUpdates(_0x59169d){return function(_0x3b6358){try{jsonpatch[_0x685c('0x31')](_0x3b6358,_0x59169d,!![]);}catch(_0x416e6d){return BPromise['reject'](_0x416e6d);}return _0x3b6358[_0x685c('0x32')]();};}function saveUpdates(_0x8e7123,_0x25c731){return function(_0x4caa74){if(_0x4caa74){return _0x4caa74['update'](_0x8e7123)[_0x685c('0x20')](function(_0x3dc3ef){return _0x3dc3ef;});}return null;};}function removeEntity(_0x47f8af,_0x9670aa){return function(_0x206086){if(_0x206086){return _0x206086['destroy']()[_0x685c('0x20')](function(){_0x47f8af[_0x685c('0x28')](0xcc)[_0x685c('0x29')]();});}};}function handleEntityNotFound(_0x569ea2,_0x27527f){return function(_0x497d4a){if(!_0x497d4a){_0x569ea2[_0x685c('0x33')](0x194);}return _0x497d4a;};}function handleError(_0x450e36,_0x28f3b1){_0x28f3b1=_0x28f3b1||0x1f4;return function(_0x4df849){logger[_0x685c('0x25')](_0x4df849[_0x685c('0x34')]);if(_0x4df849[_0x685c('0x35')]){delete _0x4df849[_0x685c('0x35')];}_0x450e36['status'](_0x28f3b1)[_0x685c('0x36')](_0x4df849);};}exports[_0x685c('0x37')]=function(_0x4567e9,_0x9eafbb){var _0x3719db={},_0x2c5dfe={},_0x2947d1={'count':0x0,'rows':[]};var _0x4856f7=_[_0x685c('0x38')](db[_0x685c('0x39')]['rawAttributes'],function(_0x277c41){return{'name':_0x277c41[_0x685c('0x3a')],'type':_0x277c41[_0x685c('0x3b')][_0x685c('0x3c')]};});_0x2c5dfe[_0x685c('0x3d')]=_['map'](_0x4856f7,_0x685c('0x35'));_0x2c5dfe[_0x685c('0x3e')]=_[_0x685c('0x3f')](_0x4567e9[_0x685c('0x3e')]);_0x2c5dfe[_0x685c('0x40')]=_[_0x685c('0x41')](_0x2c5dfe[_0x685c('0x3d')],_0x2c5dfe['query']);_0x3719db[_0x685c('0x42')]=_['intersection'](_0x2c5dfe[_0x685c('0x3d')],qs[_0x685c('0x43')](_0x4567e9[_0x685c('0x3e')][_0x685c('0x43')]));_0x3719db[_0x685c('0x42')]=_0x3719db[_0x685c('0x42')][_0x685c('0x44')]?_0x3719db[_0x685c('0x42')]:_0x2c5dfe[_0x685c('0x3d')];if(!_0x4567e9[_0x685c('0x3e')]['hasOwnProperty'](_0x685c('0x45'))){_0x3719db['limit']=qs[_0x685c('0x2c')](_0x4567e9['query']['limit']);_0x3719db[_0x685c('0x2b')]=qs[_0x685c('0x2b')](_0x4567e9[_0x685c('0x3e')][_0x685c('0x2b')]);}_0x3719db['order']=qs[_0x685c('0x46')](_0x4567e9[_0x685c('0x3e')][_0x685c('0x46')]);_0x3719db[_0x685c('0x47')]=qs[_0x685c('0x40')](_['pick'](_0x4567e9['query'],_0x2c5dfe[_0x685c('0x40')]),_0x4856f7);if(_0x4567e9[_0x685c('0x3e')][_0x685c('0x48')]){_0x3719db['where']=_[_0x685c('0x49')](_0x3719db[_0x685c('0x47')],{'$or':_['map'](_0x4856f7,function(_0x5abe96){if(_0x5abe96[_0x685c('0x3b')]!==_0x685c('0x4a')){var _0x490608={};_0x490608[_0x5abe96[_0x685c('0x35')]]={'$like':'%'+_0x4567e9[_0x685c('0x3e')]['filter']+'%'};return _0x490608;}})});}_0x3719db=_[_0x685c('0x49')]({},_0x3719db,_0x4567e9['options']);var _0x2279e4={'where':_0x3719db[_0x685c('0x47')]};return db[_0x685c('0x39')][_0x685c('0x2e')](_0x2279e4)[_0x685c('0x20')](function(_0x58bc9a){_0x2947d1[_0x685c('0x2e')]=_0x58bc9a;if(_0x4567e9['query']['includeAll']){_0x3719db[_0x685c('0x4b')]=[{'all':!![]}];}return db[_0x685c('0x39')][_0x685c('0x4c')](_0x3719db);})[_0x685c('0x20')](function(_0x3e94f8){_0x2947d1['rows']=_0x3e94f8;return _0x2947d1;})[_0x685c('0x20')](respondWithFilteredResult(_0x9eafbb,_0x3719db))[_0x685c('0x4d')](handleError(_0x9eafbb,null));};exports[_0x685c('0x4e')]=function(_0x1f7334,_0x4a2706){var _0x136065={'raw':!![],'where':{'id':_0x1f7334['params']['id']}},_0x22675e={};_0x22675e[_0x685c('0x3d')]=_[_0x685c('0x3f')](db[_0x685c('0x39')][_0x685c('0x4f')]);_0x22675e[_0x685c('0x3e')]=_['keys'](_0x1f7334[_0x685c('0x3e')]);_0x22675e[_0x685c('0x40')]=_['intersection'](_0x22675e['model'],_0x22675e[_0x685c('0x3e')]);_0x136065[_0x685c('0x42')]=_[_0x685c('0x41')](_0x22675e[_0x685c('0x3d')],qs[_0x685c('0x43')](_0x1f7334[_0x685c('0x3e')][_0x685c('0x43')]));_0x136065[_0x685c('0x42')]=_0x136065[_0x685c('0x42')][_0x685c('0x44')]?_0x136065[_0x685c('0x42')]:_0x22675e[_0x685c('0x3d')];if(_0x1f7334[_0x685c('0x3e')]['includeAll']){_0x136065[_0x685c('0x4b')]=[{'all':!![]}];}_0x136065=_['merge']({},_0x136065,_0x1f7334[_0x685c('0x50')]);return db[_0x685c('0x39')][_0x685c('0x51')](_0x136065)[_0x685c('0x20')](handleEntityNotFound(_0x4a2706,null))[_0x685c('0x20')](respondWithResult(_0x4a2706,null))[_0x685c('0x4d')](handleError(_0x4a2706,null));};exports[_0x685c('0x52')]=function(_0x4525c1,_0x36524f){return db[_0x685c('0x39')]['create'](_0x4525c1['body'],{})[_0x685c('0x20')](respondWithResult(_0x36524f,0xc9))[_0x685c('0x4d')](handleError(_0x36524f,null));};exports[_0x685c('0x53')]=function(_0x5821f1,_0x1629f1){if(_0x5821f1[_0x685c('0x54')]['id']){delete _0x5821f1['body']['id'];}return db[_0x685c('0x39')][_0x685c('0x51')]({'where':{'id':_0x5821f1[_0x685c('0x55')]['id']}})['then'](handleEntityNotFound(_0x1629f1,null))['then'](saveUpdates(_0x5821f1[_0x685c('0x54')],null))[_0x685c('0x20')](respondWithResult(_0x1629f1,null))[_0x685c('0x4d')](handleError(_0x1629f1,null));};exports[_0x685c('0x56')]=function(_0x50c18d,_0x2f55a4){return db[_0x685c('0x39')][_0x685c('0x51')]({'where':{'id':_0x50c18d[_0x685c('0x55')]['id']}})['then'](handleEntityNotFound(_0x2f55a4,null))[_0x685c('0x20')](removeEntity(_0x2f55a4,null))[_0x685c('0x4d')](handleError(_0x2f55a4,null));};exports[_0x685c('0x57')]=function(_0xc61836,_0xc0ed2b){return db['ChatMessage']['describe']()[_0x685c('0x20')](respondWithResult(_0xc0ed2b,null))[_0x685c('0x4d')](handleError(_0xc0ed2b,null));};var interaction_log=require('../../config/logger')(_0x685c('0x58'));exports[_0x685c('0x59')]=function(_0x1c266e,_0x2de12a,_0x608c9b){var _0x4faa60={'agent':{},'channel':'chat'};if(_0x1c266e[_0x685c('0x54')]['id']){delete _0x1c266e[_0x685c('0x54')]['id'];}_0x1c266e[_0x685c('0x54')][_0x685c('0x5a')]=!![];_0x1c266e[_0x685c('0x54')][_0x685c('0x5b')]=moment()[_0x685c('0x5c')](_0x685c('0x5d'));_0x1c266e['body'][_0x685c('0x5e')]=_0x1c266e[_0x685c('0x54')][_0x685c('0x5e')]||_0x1c266e[_0x685c('0x5f')]['id'];_0x4faa60['agent']['id']=_0x1c266e[_0x685c('0x54')][_0x685c('0x5e')];return db[_0x685c('0x39')][_0x685c('0x51')]({'where':{'id':_0x1c266e[_0x685c('0x55')]['id'],'UserId':null}})[_0x685c('0x20')](handleEntityNotFound(_0x2de12a,null))[_0x685c('0x20')](saveUpdates(_0x1c266e[_0x685c('0x54')],null))[_0x685c('0x20')](function(_0x440bd9){if(_0x440bd9){_0x4faa60[_0x685c('0x26')]=_0x440bd9['get']({'plain':!![]});return db['ChatInteraction']['find']({'where':{'id':_0x440bd9[_0x685c('0x60')]}});}return null;})['then'](handleEntityNotFound(_0x2de12a,null))[_0x685c('0x20')](function(_0xa4f302){if(_0xa4f302){return _0xa4f302[_0x685c('0x53')]({'UserId':_0x1c266e[_0x685c('0x54')]['UserId'],'read1stAt':_['isNil'](_0xa4f302[_0x685c('0x61')])?moment()[_0x685c('0x5c')](_0x685c('0x5d')):undefined});}return null;})[_0x685c('0x20')](function(_0x141e1c){if(_0x141e1c){_0x4faa60[_0x685c('0x62')]=_0x141e1c[_0x685c('0x63')]({'plain':!![]});interaction_log[_0x685c('0x21')]('[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x1c266e[_0x685c('0x5f')]['id'],_0x1c266e['user'][_0x685c('0x35')],_0x1c266e[_0x685c('0x5f')][_0x685c('0x64')],_0x4faa60[_0x685c('0x62')]['id'],_0x1c266e[_0x685c('0x54')]?JSON['stringify'](_0x1c266e[_0x685c('0x54')]):_0x685c('0x65'));return respondWithRpcPromise('AcceptMessage',_0x685c('0x66'),_0x4faa60);}return null;})[_0x685c('0x20')](function(_0x2875d5){var _0x37285e=_0x685c('0x67')+_0x2875d5['message']['ContactId'];return db[_0x685c('0x68')][_0x685c('0x3e')](_0x37285e,{'type':db[_0x685c('0x69')][_0x685c('0x6a')][_0x685c('0x6b')],'raw':!![]})[_0x685c('0x20')](function(_0x1837d7){return _0x1837d7;});})['then'](function(_0xa6f4cf){if(_0xa6f4cf){_0x4faa60['message'][_0x685c('0x6c')]=_0xa6f4cf[0x0];if(!_0x1c266e[_0x685c('0x54')]['UserId'])return;return db[_0x685c('0x6d')][_0x685c('0x51')]({'where':{'id':_0x1c266e[_0x685c('0x54')][_0x685c('0x5e')],'role':_0x685c('0x6e')},'attributes':['id',_0x685c('0x35'),'fullname','email',_0x685c('0x6f')],'raw':!![]});}return null;})[_0x685c('0x20')](function(_0x5a7eae){if(!_0x5a7eae)return null;_0x4faa60['message'][_0x685c('0x6e')]=_0x5a7eae;return _0x4faa60;})[_0x685c('0x20')](function(_0x5a2bf3){if(_0x5a2bf3){if(_0x1c266e[_0x685c('0x54')]['manual']){_0x4faa60[_0x685c('0x26')]['interface']=util['format'](_0x685c('0x70'),_0x1c266e['user'][_0x685c('0x35')]);_0x4faa60['message'][_0x685c('0x71')]=_0x4faa60[_0x685c('0x71')];_0x4faa60[_0x685c('0x26')][_0x685c('0x72')]=_0x4faa60[_0x685c('0x71')];_0x4faa60[_0x685c('0x26')][_0x685c('0x73')]='accept';return respondWithRpcPromise('EventManager',_0x685c('0x74'),{'event':'acceptmessage','message':_[_0x685c('0x49')](_0x4faa60[_0x685c('0x26')],JSON['parse'](_0x4faa60[_0x685c('0x62')][_0x685c('0x75')]))},client9002)[_0x685c('0x20')](function(){return _0x4faa60;});}return _0x4faa60;}return null;})[_0x685c('0x20')](respondWithResult(_0x2de12a,null))[_0x685c('0x4d')](handleError(_0x2de12a,null));};var interaction_log=require('../../config/logger')(_0x685c('0x58'));exports['reject']=function(_0x1de38d,_0x52e294,_0x29deb1){var _0x5ddbfd={'agent':{},'channel':_0x685c('0x76')};if(_0x1de38d[_0x685c('0x54')]['id']){delete _0x1de38d['body']['id'];}_0x1de38d[_0x685c('0x54')][_0x685c('0x5e')]=_0x1de38d[_0x685c('0x54')][_0x685c('0x5e')]||_0x1de38d[_0x685c('0x5f')]['id'];_0x5ddbfd['agent']['id']=_0x1de38d[_0x685c('0x54')][_0x685c('0x5e')];return db[_0x685c('0x39')][_0x685c('0x51')]({'where':{'id':_0x1de38d['params']['id'],'UserId':null}})[_0x685c('0x20')](handleEntityNotFound(_0x52e294,null))['then'](function(_0x5303ca){if(_0x5303ca){_0x5ddbfd[_0x685c('0x26')]=_0x5303ca[_0x685c('0x63')]({'plain':!![]});return db['ChatInteraction']['find']({'where':{'id':_0x5303ca[_0x685c('0x60')]}});}return null;})[_0x685c('0x20')](handleEntityNotFound(_0x52e294,null))[_0x685c('0x20')](function(_0x595940){if(_0x595940){_0x5ddbfd[_0x685c('0x62')]=_0x595940['get']({'plain':!![]});interaction_log[_0x685c('0x21')]('[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x1de38d[_0x685c('0x5f')]['id'],_0x1de38d[_0x685c('0x5f')][_0x685c('0x35')],_0x1de38d[_0x685c('0x5f')][_0x685c('0x64')],_0x5ddbfd['interaction']['id'],_0x1de38d[_0x685c('0x54')]?JSON['stringify'](_0x1de38d[_0x685c('0x54')]):_0x685c('0x65'));return respondWithRpcPromise(_0x685c('0x77'),'rejectMessage',_0x5ddbfd);}return null;})[_0x685c('0x20')](function(_0x28ec1c){var _0x4bd1e9=_0x685c('0x67')+_0x28ec1c['message'][_0x685c('0x78')];return db[_0x685c('0x68')][_0x685c('0x3e')](_0x4bd1e9,{'type':db[_0x685c('0x69')][_0x685c('0x6a')]['SELECT'],'raw':!![]})['then'](function(_0x570eff){return _0x570eff;});})[_0x685c('0x20')](function(_0x5da422){if(_0x5da422){_0x5ddbfd['message'][_0x685c('0x6c')]=_0x5da422[0x0];if(!_0x1de38d[_0x685c('0x54')][_0x685c('0x5e')])return;return db[_0x685c('0x6d')][_0x685c('0x51')]({'where':{'id':_0x1de38d[_0x685c('0x54')][_0x685c('0x5e')],'role':_0x685c('0x6e')},'attributes':['id',_0x685c('0x35'),_0x685c('0x79'),_0x685c('0x7a'),_0x685c('0x6f')],'raw':!![]});}return null;})['then'](function(_0x3369a2){if(!_0x3369a2)return null;_0x5ddbfd[_0x685c('0x26')][_0x685c('0x6e')]=_0x3369a2;return _0x5ddbfd;})[_0x685c('0x20')](function(_0x535f1a){if(_0x535f1a){_0x535f1a['message'][_0x685c('0x7b')]=util[_0x685c('0x5c')](_0x685c('0x70'),_0x1de38d[_0x685c('0x5f')][_0x685c('0x35')]);_0x535f1a[_0x685c('0x26')]['channel']=_0x5ddbfd[_0x685c('0x71')];_0x535f1a[_0x685c('0x26')][_0x685c('0x72')]=_0x5ddbfd[_0x685c('0x71')];_0x535f1a[_0x685c('0x26')][_0x685c('0x73')]=_0x685c('0x7c');respondWithRpcPromise('EventManager',_0x685c('0x74'),{'event':'rejectmessage','message':_['merge'](_0x5ddbfd[_0x685c('0x26')],JSON[_0x685c('0x7d')](_0x5ddbfd[_0x685c('0x62')][_0x685c('0x75')]))},client9002);return _0x5ddbfd;}return null;})['then'](respondWithResult(_0x52e294,null))[_0x685c('0x4d')](handleError(_0x52e294,null));};
\ No newline at end of file