Built motion from commit 639a1a7f.|2.6.19
[motion2.git] / server / api / smsTransferReport / smsTransferReport.controller.js
index 4722cb2..c1cc0fc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1b43=['send','index','map','rawAttributes','fieldName','type','key','model','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','VIRTUAL','SmsTransferReport','includeAll','include','rows','catch','show','params','keys','options','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/environment','sendStatus','end','json','count','offset','status','set','reject','save','update','then','destroy','error','stack','name'];(function(_0x588a5f,_0x511419){var _0x2d64af=function(_0x3f2458){while(--_0x3f2458){_0x588a5f['push'](_0x588a5f['shift']());}};_0x2d64af(++_0x511419);}(_0x1b43,0x10f));var _0x31b4=function(_0x24237f,_0x4cf32c){_0x24237f=_0x24237f-0x0;var _0x48298e=_0x1b43[_0x24237f];return _0x48298e;};'use strict';var pdf=require(_0x31b4('0x0'));var emlformat=require(_0x31b4('0x1'));var rimraf=require(_0x31b4('0x2'));var zipdir=require(_0x31b4('0x3'));var jsonpatch=require(_0x31b4('0x4'));var rp=require('request-promise');var moment=require(_0x31b4('0x5'));var BPromise=require(_0x31b4('0x6'));var Mustache=require(_0x31b4('0x7'));var util=require(_0x31b4('0x8'));var path=require(_0x31b4('0x9'));var sox=require(_0x31b4('0xa'));var csv=require(_0x31b4('0xb'));var ejs=require(_0x31b4('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0x31b4('0xd'));var crypto=require(_0x31b4('0xe'));var jsforce=require(_0x31b4('0xf'));var deskjs=require(_0x31b4('0x10'));var toCsv=require('to-csv');var querystring=require(_0x31b4('0x11'));var Papa=require('papaparse');var Redis=require(_0x31b4('0x12'));var authService=require(_0x31b4('0x13'));var qs=require(_0x31b4('0x14'));var as=require(_0x31b4('0x15'));var hardwareService=require(_0x31b4('0x16'));var logger=require(_0x31b4('0x17'))(_0x31b4('0x18'));var utils=require('../../config/utils');var config=require(_0x31b4('0x19'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4a7501,_0x341295){_0x341295=_0x341295||0xcc;return function(_0x39751b){if(_0x39751b){return _0x4a7501[_0x31b4('0x1a')](_0x341295);}return _0x4a7501['status'](_0x341295)[_0x31b4('0x1b')]();};}function respondWithResult(_0x94cde9,_0x248d3c){_0x248d3c=_0x248d3c||0xc8;return function(_0x1a1db2){if(_0x1a1db2){return _0x94cde9['status'](_0x248d3c)[_0x31b4('0x1c')](_0x1a1db2);}};}function respondWithFilteredResult(_0x30baf3,_0x1c61be){return function(_0x33190c){if(_0x33190c){var _0x341fa1=_0x33190c[_0x31b4('0x1d')],_0x486ed3=_0x1c61be[_0x31b4('0x1e')],_0x3af487=_0x1c61be['offset']+_0x1c61be['limit'],_0x3d8949;if(_0x3af487>=_0x341fa1){_0x3af487=_0x341fa1;_0x3d8949=0xc8;}else{_0x3d8949=0xce;}_0x30baf3[_0x31b4('0x1f')](_0x3d8949);return _0x30baf3[_0x31b4('0x20')]('Content-Range',_0x486ed3+'-'+_0x3af487+'/'+_0x341fa1)['json'](_0x33190c);}return null;};}function patchUpdates(_0xab5f3){return function(_0x1e6e25){try{jsonpatch['apply'](_0x1e6e25,_0xab5f3,!![]);}catch(_0x14eb6c){return BPromise[_0x31b4('0x21')](_0x14eb6c);}return _0x1e6e25[_0x31b4('0x22')]();};}function saveUpdates(_0xb32f41,_0x37db7d){return function(_0x1ab2e0){if(_0x1ab2e0){return _0x1ab2e0[_0x31b4('0x23')](_0xb32f41)[_0x31b4('0x24')](function(_0x344113){return _0x344113;});}return null;};}function removeEntity(_0x4082ec,_0x2884a){return function(_0x29be4d){if(_0x29be4d){return _0x29be4d[_0x31b4('0x25')]()[_0x31b4('0x24')](function(){_0x4082ec['status'](0xcc)[_0x31b4('0x1b')]();});}};}function handleEntityNotFound(_0x535061,_0x51d70c){return function(_0x773ac5){if(!_0x773ac5){_0x535061[_0x31b4('0x1a')](0x194);}return _0x773ac5;};}function handleError(_0x4f8757,_0x4c89be){_0x4c89be=_0x4c89be||0x1f4;return function(_0x5ce838){logger[_0x31b4('0x26')](_0x5ce838[_0x31b4('0x27')]);if(_0x5ce838[_0x31b4('0x28')]){delete _0x5ce838['name'];}_0x4f8757[_0x31b4('0x1f')](_0x4c89be)[_0x31b4('0x29')](_0x5ce838);};}exports[_0x31b4('0x2a')]=function(_0x36dd75,_0x4cd5b8){var _0x342dc5={},_0x35801f={},_0x4d009a={'count':0x0,'rows':[]};var _0x12dbaf=_[_0x31b4('0x2b')](db['SmsTransferReport'][_0x31b4('0x2c')],function(_0x522ced){return{'name':_0x522ced[_0x31b4('0x2d')],'type':_0x522ced[_0x31b4('0x2e')][_0x31b4('0x2f')]};});_0x35801f[_0x31b4('0x30')]=_[_0x31b4('0x2b')](_0x12dbaf,_0x31b4('0x28'));_0x35801f[_0x31b4('0x31')]=_['keys'](_0x36dd75[_0x31b4('0x31')]);_0x35801f[_0x31b4('0x32')]=_[_0x31b4('0x33')](_0x35801f[_0x31b4('0x30')],_0x35801f[_0x31b4('0x31')]);_0x342dc5[_0x31b4('0x34')]=_[_0x31b4('0x33')](_0x35801f[_0x31b4('0x30')],qs[_0x31b4('0x35')](_0x36dd75[_0x31b4('0x31')]['fields']));_0x342dc5[_0x31b4('0x34')]=_0x342dc5[_0x31b4('0x34')][_0x31b4('0x36')]?_0x342dc5[_0x31b4('0x34')]:_0x35801f[_0x31b4('0x30')];if(!_0x36dd75['query'][_0x31b4('0x37')](_0x31b4('0x38'))){_0x342dc5['limit']=qs[_0x31b4('0x39')](_0x36dd75[_0x31b4('0x31')][_0x31b4('0x39')]);_0x342dc5['offset']=qs[_0x31b4('0x1e')](_0x36dd75[_0x31b4('0x31')][_0x31b4('0x1e')]);}_0x342dc5[_0x31b4('0x3a')]=qs[_0x31b4('0x3b')](_0x36dd75['query'][_0x31b4('0x3b')]);_0x342dc5[_0x31b4('0x3c')]=qs[_0x31b4('0x32')](_[_0x31b4('0x3d')](_0x36dd75[_0x31b4('0x31')],_0x35801f[_0x31b4('0x32')]));if(_0x36dd75['query'][_0x31b4('0x3e')]){_0x342dc5[_0x31b4('0x3c')]=_[_0x31b4('0x3f')](_0x342dc5[_0x31b4('0x3c')],{'$or':_[_0x31b4('0x2b')](_0x12dbaf,function(_0xd5335f){if(_0xd5335f[_0x31b4('0x2e')]!==_0x31b4('0x40')){var _0xcacf4={};_0xcacf4[_0xd5335f[_0x31b4('0x28')]]={'$like':'%'+_0x36dd75[_0x31b4('0x31')][_0x31b4('0x3e')]+'%'};return _0xcacf4;}})});}_0x342dc5=_['merge']({},_0x342dc5,_0x36dd75['options']);var _0x1091dc={'where':_0x342dc5[_0x31b4('0x3c')]};return db[_0x31b4('0x41')][_0x31b4('0x1d')](_0x1091dc)[_0x31b4('0x24')](function(_0x4fbe32){_0x4d009a['count']=_0x4fbe32;if(_0x36dd75['query'][_0x31b4('0x42')]){_0x342dc5[_0x31b4('0x43')]=[{'all':!![]}];}return db['SmsTransferReport']['findAll'](_0x342dc5);})[_0x31b4('0x24')](function(_0x25e1dd){_0x4d009a[_0x31b4('0x44')]=_0x25e1dd;return _0x4d009a;})[_0x31b4('0x24')](respondWithFilteredResult(_0x4cd5b8,_0x342dc5))[_0x31b4('0x45')](handleError(_0x4cd5b8,null));};exports[_0x31b4('0x46')]=function(_0x40b531,_0x2772e3){var _0x895251={'raw':!![],'where':{'id':_0x40b531[_0x31b4('0x47')]['id']}},_0x46b605={};_0x46b605['model']=_[_0x31b4('0x48')](db[_0x31b4('0x41')][_0x31b4('0x2c')]);_0x46b605[_0x31b4('0x31')]=_[_0x31b4('0x48')](_0x40b531['query']);_0x46b605[_0x31b4('0x32')]=_[_0x31b4('0x33')](_0x46b605[_0x31b4('0x30')],_0x46b605['query']);_0x895251['attributes']=_['intersection'](_0x46b605['model'],qs['fields'](_0x40b531['query'][_0x31b4('0x35')]));_0x895251['attributes']=_0x895251[_0x31b4('0x34')][_0x31b4('0x36')]?_0x895251[_0x31b4('0x34')]:_0x46b605[_0x31b4('0x30')];if(_0x40b531[_0x31b4('0x31')]['includeAll']){_0x895251['include']=[{'all':!![]}];}_0x895251=_[_0x31b4('0x3f')]({},_0x895251,_0x40b531[_0x31b4('0x49')]);return db['SmsTransferReport'][_0x31b4('0x4a')](_0x895251)[_0x31b4('0x24')](handleEntityNotFound(_0x2772e3,null))['then'](respondWithResult(_0x2772e3,null))['catch'](handleError(_0x2772e3,null));};exports[_0x31b4('0x4b')]=function(_0x544ff9,_0x554497){return db['SmsTransferReport'][_0x31b4('0x4b')](_0x544ff9[_0x31b4('0x4c')],{})[_0x31b4('0x24')](respondWithResult(_0x554497,0xc9))['catch'](handleError(_0x554497,null));};exports[_0x31b4('0x23')]=function(_0x3f7ea1,_0x37156a){if(_0x3f7ea1[_0x31b4('0x4c')]['id']){delete _0x3f7ea1[_0x31b4('0x4c')]['id'];}return db[_0x31b4('0x41')][_0x31b4('0x4a')]({'where':{'id':_0x3f7ea1[_0x31b4('0x47')]['id']}})['then'](handleEntityNotFound(_0x37156a,null))[_0x31b4('0x24')](saveUpdates(_0x3f7ea1[_0x31b4('0x4c')],null))['then'](respondWithResult(_0x37156a,null))[_0x31b4('0x45')](handleError(_0x37156a,null));};exports[_0x31b4('0x25')]=function(_0x2de3a9,_0x36b0c3){return db[_0x31b4('0x41')][_0x31b4('0x4a')]({'where':{'id':_0x2de3a9[_0x31b4('0x47')]['id']}})['then'](handleEntityNotFound(_0x36b0c3,null))[_0x31b4('0x24')](removeEntity(_0x36b0c3,null))[_0x31b4('0x45')](handleError(_0x36b0c3,null));};exports['describe']=function(_0x37a715,_0x1c0b40){return db[_0x31b4('0x41')][_0x31b4('0x4d')]()['then'](respondWithResult(_0x1c0b40,null))[_0x31b4('0x45')](handleError(_0x1c0b40,null));};
\ No newline at end of file
+var _0x61a7=['intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','options','includeAll','include','rows','catch','show','keys','create','body','find','params','describe','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','path','sox','fs-extra','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','undefined','limit','count','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','index','map','SmsTransferReport','rawAttributes','fieldName','type','key','model','query','filters'];(function(_0x5b66ca,_0x132e14){var _0x1dcc64=function(_0x4fd0a3){while(--_0x4fd0a3){_0x5b66ca['push'](_0x5b66ca['shift']());}};_0x1dcc64(++_0x132e14);}(_0x61a7,0xb2));var _0x761a=function(_0x17304b,_0x3cf1fe){_0x17304b=_0x17304b-0x0;var _0x2e4071=_0x61a7[_0x17304b];return _0x2e4071;};'use strict';var emlformat=require(_0x761a('0x0'));var rimraf=require(_0x761a('0x1'));var zipdir=require(_0x761a('0x2'));var jsonpatch=require(_0x761a('0x3'));var rp=require(_0x761a('0x4'));var moment=require('moment');var BPromise=require(_0x761a('0x5'));var Mustache=require(_0x761a('0x6'));var util=require('util');var path=require(_0x761a('0x7'));var sox=require(_0x761a('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0x761a('0x9'));var _=require(_0x761a('0xa'));var squel=require('squel');var crypto=require(_0x761a('0xb'));var jsforce=require(_0x761a('0xc'));var deskjs=require(_0x761a('0xd'));var toCsv=require(_0x761a('0xe'));var querystring=require(_0x761a('0xf'));var Papa=require(_0x761a('0x10'));var Redis=require(_0x761a('0x11'));var authService=require(_0x761a('0x12'));var qs=require(_0x761a('0x13'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require('../../config/license/hardware');var logger=require(_0x761a('0x14'))('api');var utils=require(_0x761a('0x15'));var config=require(_0x761a('0x16'));var licenseUtil=require('../../config/license/util');var db=require(_0x761a('0x17'))['db'];function respondWithStatusCode(_0x1b63ac,_0x5d9a74){_0x5d9a74=_0x5d9a74||0xcc;return function(_0x552c12){if(_0x552c12){return _0x1b63ac[_0x761a('0x18')](_0x5d9a74);}return _0x1b63ac[_0x761a('0x19')](_0x5d9a74)[_0x761a('0x1a')]();};}function respondWithResult(_0x28ad22,_0x4663e2){_0x4663e2=_0x4663e2||0xc8;return function(_0x2026b9){if(_0x2026b9){return _0x28ad22['status'](_0x4663e2)[_0x761a('0x1b')](_0x2026b9);}};}function respondWithFilteredResult(_0x564619,_0x4c9e54){return function(_0x287f7e){if(_0x287f7e){var _0x43c378=typeof _0x4c9e54[_0x761a('0x1c')]===_0x761a('0x1d')&&typeof _0x4c9e54[_0x761a('0x1e')]==='undefined';var _0x2167df=_0x287f7e[_0x761a('0x1f')];var _0x75ad11=_0x43c378?0x0:_0x4c9e54[_0x761a('0x1c')];var _0x5f35b4=_0x43c378?_0x287f7e[_0x761a('0x1f')]:_0x4c9e54[_0x761a('0x1c')]+_0x4c9e54[_0x761a('0x1e')];var _0x53af2c;if(_0x5f35b4>=_0x2167df){_0x5f35b4=_0x2167df;_0x53af2c=0xc8;}else{_0x53af2c=0xce;}_0x564619[_0x761a('0x19')](_0x53af2c);return _0x564619[_0x761a('0x20')](_0x761a('0x21'),_0x75ad11+'-'+_0x5f35b4+'/'+_0x2167df)[_0x761a('0x1b')](_0x287f7e);}return null;};}function patchUpdates(_0x38ed2c){return function(_0xb85353){try{jsonpatch[_0x761a('0x22')](_0xb85353,_0x38ed2c,!![]);}catch(_0x51341c){return BPromise[_0x761a('0x23')](_0x51341c);}return _0xb85353[_0x761a('0x24')]();};}function saveUpdates(_0x1eb452,_0x27bf78){return function(_0x39e474){if(_0x39e474){return _0x39e474[_0x761a('0x25')](_0x1eb452)[_0x761a('0x26')](function(_0x35de8a){return _0x35de8a;});}return null;};}function removeEntity(_0x549cf2,_0x2852e0){return function(_0x538046){if(_0x538046){return _0x538046[_0x761a('0x27')]()[_0x761a('0x26')](function(){_0x549cf2[_0x761a('0x19')](0xcc)[_0x761a('0x1a')]();});}};}function handleEntityNotFound(_0x5566c0,_0x446967){return function(_0x51302a){if(!_0x51302a){_0x5566c0[_0x761a('0x18')](0x194);}return _0x51302a;};}function handleError(_0x2f9d4f,_0x274d37){_0x274d37=_0x274d37||0x1f4;return function(_0x3f234c){logger[_0x761a('0x28')](_0x3f234c[_0x761a('0x29')]);if(_0x3f234c[_0x761a('0x2a')]){delete _0x3f234c[_0x761a('0x2a')];}_0x2f9d4f['status'](_0x274d37)['send'](_0x3f234c);};}exports[_0x761a('0x2b')]=function(_0x1effff,_0x887b1d){var _0x16b2fa={},_0x5376a2={},_0x38826c={'count':0x0,'rows':[]};var _0x422341=_[_0x761a('0x2c')](db[_0x761a('0x2d')][_0x761a('0x2e')],function(_0x215715){return{'name':_0x215715[_0x761a('0x2f')],'type':_0x215715[_0x761a('0x30')][_0x761a('0x31')]};});_0x5376a2[_0x761a('0x32')]=_['map'](_0x422341,'name');_0x5376a2[_0x761a('0x33')]=_['keys'](_0x1effff['query']);_0x5376a2[_0x761a('0x34')]=_[_0x761a('0x35')](_0x5376a2[_0x761a('0x32')],_0x5376a2[_0x761a('0x33')]);_0x16b2fa[_0x761a('0x36')]=_[_0x761a('0x35')](_0x5376a2[_0x761a('0x32')],qs[_0x761a('0x37')](_0x1effff[_0x761a('0x33')][_0x761a('0x37')]));_0x16b2fa[_0x761a('0x36')]=_0x16b2fa[_0x761a('0x36')][_0x761a('0x38')]?_0x16b2fa[_0x761a('0x36')]:_0x5376a2['model'];if(!_0x1effff[_0x761a('0x33')][_0x761a('0x39')](_0x761a('0x3a'))){_0x16b2fa['limit']=qs[_0x761a('0x1e')](_0x1effff['query'][_0x761a('0x1e')]);_0x16b2fa['offset']=qs[_0x761a('0x1c')](_0x1effff[_0x761a('0x33')][_0x761a('0x1c')]);}_0x16b2fa[_0x761a('0x3b')]=qs[_0x761a('0x3c')](_0x1effff[_0x761a('0x33')][_0x761a('0x3c')]);_0x16b2fa[_0x761a('0x3d')]=qs['filters'](_[_0x761a('0x3e')](_0x1effff[_0x761a('0x33')],_0x5376a2[_0x761a('0x34')]),_0x422341);if(_0x1effff['query'][_0x761a('0x3f')]){_0x16b2fa[_0x761a('0x3d')]=_[_0x761a('0x40')](_0x16b2fa[_0x761a('0x3d')],{'$or':_[_0x761a('0x2c')](_0x422341,function(_0x206c79){if(_0x206c79['type']!=='VIRTUAL'){var _0xb4815b={};_0xb4815b[_0x206c79[_0x761a('0x2a')]]={'$like':'%'+_0x1effff['query'][_0x761a('0x3f')]+'%'};return _0xb4815b;}})});}_0x16b2fa=_[_0x761a('0x40')]({},_0x16b2fa,_0x1effff[_0x761a('0x41')]);var _0x2e0005={'where':_0x16b2fa[_0x761a('0x3d')]};return db[_0x761a('0x2d')][_0x761a('0x1f')](_0x2e0005)[_0x761a('0x26')](function(_0x2d0228){_0x38826c[_0x761a('0x1f')]=_0x2d0228;if(_0x1effff['query'][_0x761a('0x42')]){_0x16b2fa[_0x761a('0x43')]=[{'all':!![]}];}return db['SmsTransferReport']['findAll'](_0x16b2fa);})['then'](function(_0x3ac8d2){_0x38826c[_0x761a('0x44')]=_0x3ac8d2;return _0x38826c;})['then'](respondWithFilteredResult(_0x887b1d,_0x16b2fa))[_0x761a('0x45')](handleError(_0x887b1d,null));};exports[_0x761a('0x46')]=function(_0x5c960d,_0x5d84f4){var _0x3dc68c={'raw':!![],'where':{'id':_0x5c960d['params']['id']}},_0x132b55={};_0x132b55['model']=_[_0x761a('0x47')](db[_0x761a('0x2d')][_0x761a('0x2e')]);_0x132b55[_0x761a('0x33')]=_[_0x761a('0x47')](_0x5c960d[_0x761a('0x33')]);_0x132b55['filters']=_['intersection'](_0x132b55[_0x761a('0x32')],_0x132b55[_0x761a('0x33')]);_0x3dc68c['attributes']=_[_0x761a('0x35')](_0x132b55[_0x761a('0x32')],qs[_0x761a('0x37')](_0x5c960d[_0x761a('0x33')]['fields']));_0x3dc68c['attributes']=_0x3dc68c[_0x761a('0x36')][_0x761a('0x38')]?_0x3dc68c['attributes']:_0x132b55['model'];if(_0x5c960d[_0x761a('0x33')][_0x761a('0x42')]){_0x3dc68c['include']=[{'all':!![]}];}_0x3dc68c=_[_0x761a('0x40')]({},_0x3dc68c,_0x5c960d['options']);return db[_0x761a('0x2d')]['find'](_0x3dc68c)[_0x761a('0x26')](handleEntityNotFound(_0x5d84f4,null))[_0x761a('0x26')](respondWithResult(_0x5d84f4,null))['catch'](handleError(_0x5d84f4,null));};exports[_0x761a('0x48')]=function(_0x54ba43,_0x3a118a){return db[_0x761a('0x2d')][_0x761a('0x48')](_0x54ba43[_0x761a('0x49')],{})['then'](respondWithResult(_0x3a118a,0xc9))['catch'](handleError(_0x3a118a,null));};exports['update']=function(_0x33fa6c,_0x53c1ce){if(_0x33fa6c[_0x761a('0x49')]['id']){delete _0x33fa6c[_0x761a('0x49')]['id'];}return db[_0x761a('0x2d')][_0x761a('0x4a')]({'where':{'id':_0x33fa6c[_0x761a('0x4b')]['id']}})['then'](handleEntityNotFound(_0x53c1ce,null))[_0x761a('0x26')](saveUpdates(_0x33fa6c[_0x761a('0x49')],null))[_0x761a('0x26')](respondWithResult(_0x53c1ce,null))[_0x761a('0x45')](handleError(_0x53c1ce,null));};exports[_0x761a('0x27')]=function(_0x224007,_0x1c05e5){return db[_0x761a('0x2d')][_0x761a('0x4a')]({'where':{'id':_0x224007[_0x761a('0x4b')]['id']}})[_0x761a('0x26')](handleEntityNotFound(_0x1c05e5,null))['then'](removeEntity(_0x1c05e5,null))['catch'](handleError(_0x1c05e5,null));};exports[_0x761a('0x4c')]=function(_0x219043,_0x3411ea){return db[_0x761a('0x2d')][_0x761a('0x4c')]()[_0x761a('0x26')](respondWithResult(_0x3411ea,null))[_0x761a('0x45')](handleError(_0x3411ea,null));};
\ No newline at end of file