Built motion from commit da617fac.|2.6.6
[motion2.git] / server / api / voiceDialReport / voiceDialReport.controller.js
index d4ec9fa..260ee62 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b66=['send','index','VoiceDialReport','key','model','map','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filter','merge','type','includeAll','findAll','rows','catch','show','params','rawAttributes','include','options','find','create','body','describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','api','../../config/environment','../../config/license/util','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','sendStatus','stack','name'];(function(_0x765d2,_0xc3fd7c){var _0x3c6658=function(_0x1ab7b2){while(--_0x1ab7b2){_0x765d2['push'](_0x765d2['shift']());}};_0x3c6658(++_0xc3fd7c);}(_0x6b66,0x199));var _0x66b6=function(_0x2e06b4,_0x4c967a){_0x2e06b4=_0x2e06b4-0x0;var _0x1b5d38=_0x6b66[_0x2e06b4];return _0x1b5d38;};'use strict';var pdf=require(_0x66b6('0x0'));var emlformat=require(_0x66b6('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x66b6('0x2'));var jsonpatch=require(_0x66b6('0x3'));var rp=require(_0x66b6('0x4'));var moment=require(_0x66b6('0x5'));var BPromise=require(_0x66b6('0x6'));var Mustache=require(_0x66b6('0x7'));var util=require(_0x66b6('0x8'));var path=require(_0x66b6('0x9'));var sox=require('sox');var csv=require(_0x66b6('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x66b6('0xb'));var squel=require(_0x66b6('0xc'));var crypto=require(_0x66b6('0xd'));var jsforce=require(_0x66b6('0xe'));var deskjs=require(_0x66b6('0xf'));var toCsv=require(_0x66b6('0xa'));var querystring=require(_0x66b6('0x10'));var Papa=require(_0x66b6('0x11'));var Redis=require(_0x66b6('0x12'));var authService=require(_0x66b6('0x13'));var qs=require(_0x66b6('0x14'));var as=require(_0x66b6('0x15'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x66b6('0x16'));var utils=require('../../config/utils');var config=require(_0x66b6('0x17'));var licenseUtil=require(_0x66b6('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x89d908,_0x10e0d3){_0x10e0d3=_0x10e0d3||0xcc;return function(_0x35ebe4){if(_0x35ebe4){return _0x89d908['sendStatus'](_0x10e0d3);}return _0x89d908[_0x66b6('0x19')](_0x10e0d3)[_0x66b6('0x1a')]();};}function respondWithResult(_0x2c5e83,_0xa3f5bc){_0xa3f5bc=_0xa3f5bc||0xc8;return function(_0x4af53a){if(_0x4af53a){return _0x2c5e83[_0x66b6('0x19')](_0xa3f5bc)[_0x66b6('0x1b')](_0x4af53a);}};}function respondWithFilteredResult(_0x1ced02,_0x3f80c4){return function(_0x44f094){if(_0x44f094){var _0x361188=_0x44f094[_0x66b6('0x1c')],_0xada849=_0x3f80c4[_0x66b6('0x1d')],_0x133814=_0x3f80c4['offset']+_0x3f80c4[_0x66b6('0x1e')],_0x3760b9;if(_0x133814>=_0x361188){_0x133814=_0x361188;_0x3760b9=0xc8;}else{_0x3760b9=0xce;}_0x1ced02[_0x66b6('0x19')](_0x3760b9);return _0x1ced02[_0x66b6('0x1f')](_0x66b6('0x20'),_0xada849+'-'+_0x133814+'/'+_0x361188)['json'](_0x44f094);}return null;};}function patchUpdates(_0x823e3c){return function(_0x46bec5){try{jsonpatch[_0x66b6('0x21')](_0x46bec5,_0x823e3c,!![]);}catch(_0x300114){return BPromise['reject'](_0x300114);}return _0x46bec5[_0x66b6('0x22')]();};}function saveUpdates(_0x2e8cd,_0x10afac){return function(_0x44d617){if(_0x44d617){return _0x44d617[_0x66b6('0x23')](_0x2e8cd)[_0x66b6('0x24')](function(_0x10968a){return _0x10968a;});}return null;};}function removeEntity(_0x5e9b16,_0x10b32c){return function(_0x1fb58e){if(_0x1fb58e){return _0x1fb58e[_0x66b6('0x25')]()[_0x66b6('0x24')](function(){_0x5e9b16['status'](0xcc)[_0x66b6('0x1a')]();});}};}function handleEntityNotFound(_0x53e988,_0x3c5646){return function(_0x44b4fb){if(!_0x44b4fb){_0x53e988[_0x66b6('0x26')](0x194);}return _0x44b4fb;};}function handleError(_0x40e20d,_0x40ffba){_0x40ffba=_0x40ffba||0x1f4;return function(_0x3d6658){logger['error'](_0x3d6658[_0x66b6('0x27')]);if(_0x3d6658[_0x66b6('0x28')]){delete _0x3d6658[_0x66b6('0x28')];}_0x40e20d[_0x66b6('0x19')](_0x40ffba)[_0x66b6('0x29')](_0x3d6658);};}exports[_0x66b6('0x2a')]=function(_0x55961e,_0x277d9d){var _0x556973={},_0x49fdeb={},_0x39a655={'count':0x0,'rows':[]};var _0x461635=_['map'](db[_0x66b6('0x2b')]['rawAttributes'],function(_0x51b866){return{'name':_0x51b866['fieldName'],'type':_0x51b866['type'][_0x66b6('0x2c')]};});_0x49fdeb[_0x66b6('0x2d')]=_[_0x66b6('0x2e')](_0x461635,'name');_0x49fdeb[_0x66b6('0x2f')]=_[_0x66b6('0x30')](_0x55961e['query']);_0x49fdeb[_0x66b6('0x31')]=_[_0x66b6('0x32')](_0x49fdeb[_0x66b6('0x2d')],_0x49fdeb[_0x66b6('0x2f')]);_0x556973[_0x66b6('0x33')]=_[_0x66b6('0x32')](_0x49fdeb['model'],qs[_0x66b6('0x34')](_0x55961e['query'][_0x66b6('0x34')]));_0x556973[_0x66b6('0x33')]=_0x556973[_0x66b6('0x33')][_0x66b6('0x35')]?_0x556973[_0x66b6('0x33')]:_0x49fdeb['model'];if(!_0x55961e[_0x66b6('0x2f')][_0x66b6('0x36')](_0x66b6('0x37'))){_0x556973[_0x66b6('0x1e')]=qs[_0x66b6('0x1e')](_0x55961e[_0x66b6('0x2f')]['limit']);_0x556973[_0x66b6('0x1d')]=qs[_0x66b6('0x1d')](_0x55961e[_0x66b6('0x2f')][_0x66b6('0x1d')]);}_0x556973['order']=qs['sort'](_0x55961e['query'][_0x66b6('0x38')]);_0x556973[_0x66b6('0x39')]=qs[_0x66b6('0x31')](_[_0x66b6('0x3a')](_0x55961e[_0x66b6('0x2f')],_0x49fdeb['filters']),_0x461635);if(_0x55961e['query'][_0x66b6('0x3b')]){_0x556973['where']=_[_0x66b6('0x3c')](_0x556973[_0x66b6('0x39')],{'$or':_[_0x66b6('0x2e')](_0x461635,function(_0x2ce7eb){if(_0x2ce7eb[_0x66b6('0x3d')]!=='VIRTUAL'){var _0x3572c1={};_0x3572c1[_0x2ce7eb[_0x66b6('0x28')]]={'$like':'%'+_0x55961e[_0x66b6('0x2f')][_0x66b6('0x3b')]+'%'};return _0x3572c1;}})});}_0x556973=_[_0x66b6('0x3c')]({},_0x556973,_0x55961e['options']);var _0x339670={'where':_0x556973[_0x66b6('0x39')]};return db[_0x66b6('0x2b')][_0x66b6('0x1c')](_0x339670)['then'](function(_0x299d7c){_0x39a655[_0x66b6('0x1c')]=_0x299d7c;if(_0x55961e[_0x66b6('0x2f')][_0x66b6('0x3e')]){_0x556973['include']=[{'all':!![]}];}return db[_0x66b6('0x2b')][_0x66b6('0x3f')](_0x556973);})[_0x66b6('0x24')](function(_0x2f06e1){_0x39a655[_0x66b6('0x40')]=_0x2f06e1;return _0x39a655;})[_0x66b6('0x24')](respondWithFilteredResult(_0x277d9d,_0x556973))[_0x66b6('0x41')](handleError(_0x277d9d,null));};exports[_0x66b6('0x42')]=function(_0x1b7800,_0x32221e){var _0xef0180={'raw':!![],'where':{'id':_0x1b7800[_0x66b6('0x43')]['id']}},_0x11533a={};_0x11533a[_0x66b6('0x2d')]=_[_0x66b6('0x30')](db[_0x66b6('0x2b')][_0x66b6('0x44')]);_0x11533a[_0x66b6('0x2f')]=_[_0x66b6('0x30')](_0x1b7800['query']);_0x11533a[_0x66b6('0x31')]=_[_0x66b6('0x32')](_0x11533a[_0x66b6('0x2d')],_0x11533a[_0x66b6('0x2f')]);_0xef0180[_0x66b6('0x33')]=_[_0x66b6('0x32')](_0x11533a[_0x66b6('0x2d')],qs[_0x66b6('0x34')](_0x1b7800[_0x66b6('0x2f')][_0x66b6('0x34')]));_0xef0180[_0x66b6('0x33')]=_0xef0180[_0x66b6('0x33')]['length']?_0xef0180['attributes']:_0x11533a['model'];if(_0x1b7800['query'][_0x66b6('0x3e')]){_0xef0180[_0x66b6('0x45')]=[{'all':!![]}];}_0xef0180=_['merge']({},_0xef0180,_0x1b7800[_0x66b6('0x46')]);return db[_0x66b6('0x2b')][_0x66b6('0x47')](_0xef0180)[_0x66b6('0x24')](handleEntityNotFound(_0x32221e,null))['then'](respondWithResult(_0x32221e,null))[_0x66b6('0x41')](handleError(_0x32221e,null));};exports[_0x66b6('0x48')]=function(_0x3b9b1c,_0x3de000){return db[_0x66b6('0x2b')]['create'](_0x3b9b1c['body'],{})['then'](respondWithResult(_0x3de000,0xc9))[_0x66b6('0x41')](handleError(_0x3de000,null));};exports[_0x66b6('0x23')]=function(_0x237021,_0x442828){if(_0x237021[_0x66b6('0x49')]['id']){delete _0x237021[_0x66b6('0x49')]['id'];}return db['VoiceDialReport'][_0x66b6('0x47')]({'where':{'id':_0x237021[_0x66b6('0x43')]['id']}})[_0x66b6('0x24')](handleEntityNotFound(_0x442828,null))[_0x66b6('0x24')](saveUpdates(_0x237021['body'],null))[_0x66b6('0x24')](respondWithResult(_0x442828,null))['catch'](handleError(_0x442828,null));};exports[_0x66b6('0x25')]=function(_0x4f6df8,_0x405f8b){return db['VoiceDialReport'][_0x66b6('0x47')]({'where':{'id':_0x4f6df8[_0x66b6('0x43')]['id']}})['then'](handleEntityNotFound(_0x405f8b,null))[_0x66b6('0x24')](removeEntity(_0x405f8b,null))['catch'](handleError(_0x405f8b,null));};exports[_0x66b6('0x4a')]=function(_0x4752aa,_0x330dea){return db[_0x66b6('0x2b')][_0x66b6('0x4a')]()[_0x66b6('0x24')](respondWithResult(_0x330dea,null))['catch'](handleError(_0x330dea,null));};
\ No newline at end of file
+var _0x7110=['map','rawAttributes','fieldName','query','filters','intersection','model','attributes','fields','length','nolimit','order','sort','filter','where','merge','type','VIRTUAL','options','includeAll','include','VoiceDialReport','findAll','rows','catch','show','params','keys','find','create','body','describe','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','fs-extra','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/license/util','sendStatus','status','end','json','undefined','limit','count','offset','set','Content-Range','apply','reject','update','then','destroy','error','stack','name','index'];(function(_0x152ca2,_0x5abd1b){var _0x58fbd2=function(_0x128b08){while(--_0x128b08){_0x152ca2['push'](_0x152ca2['shift']());}};_0x58fbd2(++_0x5abd1b);}(_0x7110,0x104));var _0x0711=function(_0x2bcb3a,_0x533554){_0x2bcb3a=_0x2bcb3a-0x0;var _0x51688a=_0x7110[_0x2bcb3a];return _0x51688a;};'use strict';var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x0711('0x0'));var jsonpatch=require(_0x0711('0x1'));var rp=require(_0x0711('0x2'));var moment=require(_0x0711('0x3'));var BPromise=require(_0x0711('0x4'));var Mustache=require(_0x0711('0x5'));var util=require(_0x0711('0x6'));var path=require(_0x0711('0x7'));var sox=require('sox');var csv=require(_0x0711('0x8'));var ejs=require(_0x0711('0x9'));var fs=require('fs');var fs_extra=require(_0x0711('0xa'));var _=require('lodash');var squel=require('squel');var crypto=require(_0x0711('0xb'));var jsforce=require(_0x0711('0xc'));var deskjs=require(_0x0711('0xd'));var toCsv=require(_0x0711('0x8'));var querystring=require(_0x0711('0xe'));var Papa=require(_0x0711('0xf'));var Redis=require(_0x0711('0x10'));var authService=require(_0x0711('0x11'));var qs=require(_0x0711('0x12'));var as=require(_0x0711('0x13'));var hardwareService=require(_0x0711('0x14'));var logger=require(_0x0711('0x15'))(_0x0711('0x16'));var utils=require(_0x0711('0x17'));var config=require('../../config/environment');var licenseUtil=require(_0x0711('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x8fea0a,_0x20a585){_0x20a585=_0x20a585||0xcc;return function(_0x2b8c81){if(_0x2b8c81){return _0x8fea0a[_0x0711('0x19')](_0x20a585);}return _0x8fea0a[_0x0711('0x1a')](_0x20a585)[_0x0711('0x1b')]();};}function respondWithResult(_0x1c97b4,_0x39c808){_0x39c808=_0x39c808||0xc8;return function(_0x25a75a){if(_0x25a75a){return _0x1c97b4[_0x0711('0x1a')](_0x39c808)[_0x0711('0x1c')](_0x25a75a);}};}function respondWithFilteredResult(_0x1271b2,_0x66cb3d){return function(_0x33d98d){if(_0x33d98d){var _0x514dc8=typeof _0x66cb3d['offset']===_0x0711('0x1d')&&typeof _0x66cb3d[_0x0711('0x1e')]===_0x0711('0x1d');var _0x34e678=_0x33d98d[_0x0711('0x1f')];var _0x389649=_0x514dc8?0x0:_0x66cb3d[_0x0711('0x20')];var _0x14c320=_0x514dc8?_0x33d98d[_0x0711('0x1f')]:_0x66cb3d[_0x0711('0x20')]+_0x66cb3d[_0x0711('0x1e')];var _0x40102d;if(_0x14c320>=_0x34e678){_0x14c320=_0x34e678;_0x40102d=0xc8;}else{_0x40102d=0xce;}_0x1271b2[_0x0711('0x1a')](_0x40102d);return _0x1271b2[_0x0711('0x21')](_0x0711('0x22'),_0x389649+'-'+_0x14c320+'/'+_0x34e678)[_0x0711('0x1c')](_0x33d98d);}return null;};}function patchUpdates(_0x1c98d3){return function(_0x3fc6b1){try{jsonpatch[_0x0711('0x23')](_0x3fc6b1,_0x1c98d3,!![]);}catch(_0x32e0d0){return BPromise[_0x0711('0x24')](_0x32e0d0);}return _0x3fc6b1['save']();};}function saveUpdates(_0xac7828,_0x236e39){return function(_0x11d492){if(_0x11d492){return _0x11d492[_0x0711('0x25')](_0xac7828)[_0x0711('0x26')](function(_0x2baf9b){return _0x2baf9b;});}return null;};}function removeEntity(_0x3afb40,_0x46e986){return function(_0x212a1f){if(_0x212a1f){return _0x212a1f[_0x0711('0x27')]()[_0x0711('0x26')](function(){_0x3afb40[_0x0711('0x1a')](0xcc)[_0x0711('0x1b')]();});}};}function handleEntityNotFound(_0x3c6fdb,_0x3950bb){return function(_0xa791d0){if(!_0xa791d0){_0x3c6fdb[_0x0711('0x19')](0x194);}return _0xa791d0;};}function handleError(_0x4412b0,_0x385a53){_0x385a53=_0x385a53||0x1f4;return function(_0x372341){logger[_0x0711('0x28')](_0x372341[_0x0711('0x29')]);if(_0x372341['name']){delete _0x372341[_0x0711('0x2a')];}_0x4412b0['status'](_0x385a53)['send'](_0x372341);};}exports[_0x0711('0x2b')]=function(_0x2b6a1d,_0x39c323){var _0x49e71b={},_0x12937e={},_0x5898f9={'count':0x0,'rows':[]};var _0x5dd43d=_[_0x0711('0x2c')](db['VoiceDialReport'][_0x0711('0x2d')],function(_0x123168){return{'name':_0x123168[_0x0711('0x2e')],'type':_0x123168['type']['key']};});_0x12937e['model']=_[_0x0711('0x2c')](_0x5dd43d,_0x0711('0x2a'));_0x12937e[_0x0711('0x2f')]=_['keys'](_0x2b6a1d[_0x0711('0x2f')]);_0x12937e[_0x0711('0x30')]=_[_0x0711('0x31')](_0x12937e[_0x0711('0x32')],_0x12937e['query']);_0x49e71b[_0x0711('0x33')]=_[_0x0711('0x31')](_0x12937e[_0x0711('0x32')],qs[_0x0711('0x34')](_0x2b6a1d[_0x0711('0x2f')][_0x0711('0x34')]));_0x49e71b[_0x0711('0x33')]=_0x49e71b[_0x0711('0x33')][_0x0711('0x35')]?_0x49e71b[_0x0711('0x33')]:_0x12937e[_0x0711('0x32')];if(!_0x2b6a1d[_0x0711('0x2f')]['hasOwnProperty'](_0x0711('0x36'))){_0x49e71b[_0x0711('0x1e')]=qs[_0x0711('0x1e')](_0x2b6a1d[_0x0711('0x2f')][_0x0711('0x1e')]);_0x49e71b[_0x0711('0x20')]=qs[_0x0711('0x20')](_0x2b6a1d[_0x0711('0x2f')]['offset']);}_0x49e71b[_0x0711('0x37')]=qs['sort'](_0x2b6a1d['query'][_0x0711('0x38')]);_0x49e71b['where']=qs[_0x0711('0x30')](_['pick'](_0x2b6a1d[_0x0711('0x2f')],_0x12937e['filters']),_0x5dd43d);if(_0x2b6a1d[_0x0711('0x2f')][_0x0711('0x39')]){_0x49e71b[_0x0711('0x3a')]=_[_0x0711('0x3b')](_0x49e71b[_0x0711('0x3a')],{'$or':_[_0x0711('0x2c')](_0x5dd43d,function(_0x1860d8){if(_0x1860d8[_0x0711('0x3c')]!==_0x0711('0x3d')){var _0x2aedf2={};_0x2aedf2[_0x1860d8['name']]={'$like':'%'+_0x2b6a1d[_0x0711('0x2f')]['filter']+'%'};return _0x2aedf2;}})});}_0x49e71b=_[_0x0711('0x3b')]({},_0x49e71b,_0x2b6a1d[_0x0711('0x3e')]);var _0x4a9624={'where':_0x49e71b[_0x0711('0x3a')]};return db['VoiceDialReport'][_0x0711('0x1f')](_0x4a9624)[_0x0711('0x26')](function(_0x3031e0){_0x5898f9['count']=_0x3031e0;if(_0x2b6a1d['query'][_0x0711('0x3f')]){_0x49e71b[_0x0711('0x40')]=[{'all':!![]}];}return db[_0x0711('0x41')][_0x0711('0x42')](_0x49e71b);})[_0x0711('0x26')](function(_0x47a1ec){_0x5898f9[_0x0711('0x43')]=_0x47a1ec;return _0x5898f9;})[_0x0711('0x26')](respondWithFilteredResult(_0x39c323,_0x49e71b))[_0x0711('0x44')](handleError(_0x39c323,null));};exports[_0x0711('0x45')]=function(_0x459186,_0x4bf483){var _0x460eaa={'raw':!![],'where':{'id':_0x459186[_0x0711('0x46')]['id']}},_0x25d1da={};_0x25d1da['model']=_[_0x0711('0x47')](db[_0x0711('0x41')][_0x0711('0x2d')]);_0x25d1da[_0x0711('0x2f')]=_[_0x0711('0x47')](_0x459186[_0x0711('0x2f')]);_0x25d1da[_0x0711('0x30')]=_['intersection'](_0x25d1da[_0x0711('0x32')],_0x25d1da[_0x0711('0x2f')]);_0x460eaa[_0x0711('0x33')]=_[_0x0711('0x31')](_0x25d1da[_0x0711('0x32')],qs['fields'](_0x459186[_0x0711('0x2f')][_0x0711('0x34')]));_0x460eaa['attributes']=_0x460eaa['attributes'][_0x0711('0x35')]?_0x460eaa[_0x0711('0x33')]:_0x25d1da[_0x0711('0x32')];if(_0x459186[_0x0711('0x2f')][_0x0711('0x3f')]){_0x460eaa[_0x0711('0x40')]=[{'all':!![]}];}_0x460eaa=_[_0x0711('0x3b')]({},_0x460eaa,_0x459186['options']);return db['VoiceDialReport'][_0x0711('0x48')](_0x460eaa)['then'](handleEntityNotFound(_0x4bf483,null))[_0x0711('0x26')](respondWithResult(_0x4bf483,null))[_0x0711('0x44')](handleError(_0x4bf483,null));};exports[_0x0711('0x49')]=function(_0x22926e,_0x1d07c1){return db['VoiceDialReport'][_0x0711('0x49')](_0x22926e[_0x0711('0x4a')],{})['then'](respondWithResult(_0x1d07c1,0xc9))[_0x0711('0x44')](handleError(_0x1d07c1,null));};exports['update']=function(_0x32e9e2,_0x4ac483){if(_0x32e9e2[_0x0711('0x4a')]['id']){delete _0x32e9e2['body']['id'];}return db[_0x0711('0x41')][_0x0711('0x48')]({'where':{'id':_0x32e9e2['params']['id']}})[_0x0711('0x26')](handleEntityNotFound(_0x4ac483,null))['then'](saveUpdates(_0x32e9e2[_0x0711('0x4a')],null))[_0x0711('0x26')](respondWithResult(_0x4ac483,null))['catch'](handleError(_0x4ac483,null));};exports[_0x0711('0x27')]=function(_0x4052b8,_0x392efe){return db[_0x0711('0x41')]['find']({'where':{'id':_0x4052b8[_0x0711('0x46')]['id']}})[_0x0711('0x26')](handleEntityNotFound(_0x392efe,null))['then'](removeEntity(_0x392efe,null))['catch'](handleError(_0x392efe,null));};exports[_0x0711('0x4b')]=function(_0x570615,_0x4363ca){return db[_0x0711('0x41')][_0x0711('0x4b')]()['then'](respondWithResult(_0x4363ca,null))[_0x0711('0x44')](handleError(_0x4363ca,null));};
\ No newline at end of file