Built motion from commit 97153652.|2.6.26
[motion2.git] / server / api / faxApplication / faxApplication.controller.js
index d68cfe0..a2f9947 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4005=['set','Content-Range','apply','reject','update','then','destroy','error','stack','name','send','index','map','fieldName','type','model','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','sort','where','pick','filter','merge','VIRTUAL','FaxApplication','count','includeAll','include','findAll','params','rawAttributes','length','options','catch','create','body','find','rimraf','fast-json-patch','request-promise','moment','util','path','to-csv','ejs','fs-extra','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','offset','undefined','limit'];(function(_0x5628d5,_0x390bbe){var _0x5c8a2e=function(_0x84386){while(--_0x84386){_0x5628d5['push'](_0x5628d5['shift']());}};_0x5c8a2e(++_0x390bbe);}(_0x4005,0xb6));var _0x5400=function(_0x538401,_0x82d2ac){_0x538401=_0x538401-0x0;var _0x5c796c=_0x4005[_0x538401];return _0x5c796c;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x5400('0x0'));var zipdir=require('zip-dir');var jsonpatch=require(_0x5400('0x1'));var rp=require(_0x5400('0x2'));var moment=require(_0x5400('0x3'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x5400('0x4'));var path=require(_0x5400('0x5'));var sox=require('sox');var csv=require(_0x5400('0x6'));var ejs=require(_0x5400('0x7'));var fs=require('fs');var fs_extra=require(_0x5400('0x8'));var _=require('lodash');var squel=require(_0x5400('0x9'));var crypto=require(_0x5400('0xa'));var jsforce=require(_0x5400('0xb'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x5400('0xc'));var Papa=require(_0x5400('0xd'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x5400('0xe'));var as=require(_0x5400('0xf'));var hardwareService=require(_0x5400('0x10'));var logger=require(_0x5400('0x11'))(_0x5400('0x12'));var utils=require(_0x5400('0x13'));var config=require(_0x5400('0x14'));var licenseUtil=require('../../config/license/util');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x52670e,_0x3450ce){_0x3450ce=_0x3450ce||0xcc;return function(_0x51d179){if(_0x51d179){return _0x52670e[_0x5400('0x15')](_0x3450ce);}return _0x52670e[_0x5400('0x16')](_0x3450ce)[_0x5400('0x17')]();};}function respondWithResult(_0x10df6c,_0x5b8396){_0x5b8396=_0x5b8396||0xc8;return function(_0x262b2d){if(_0x262b2d){return _0x10df6c[_0x5400('0x16')](_0x5b8396)[_0x5400('0x18')](_0x262b2d);}};}function respondWithFilteredResult(_0x15581a,_0x12ee64){return function(_0x6df825){if(_0x6df825){var _0x20fdc1=typeof _0x12ee64[_0x5400('0x19')]===_0x5400('0x1a')&&typeof _0x12ee64[_0x5400('0x1b')]===_0x5400('0x1a');var _0x216084=_0x6df825['count'];var _0x55b34e=_0x20fdc1?0x0:_0x12ee64[_0x5400('0x19')];var _0x38d764=_0x20fdc1?_0x6df825['count']:_0x12ee64[_0x5400('0x19')]+_0x12ee64[_0x5400('0x1b')];var _0x3a3d59;if(_0x38d764>=_0x216084){_0x38d764=_0x216084;_0x3a3d59=0xc8;}else{_0x3a3d59=0xce;}_0x15581a[_0x5400('0x16')](_0x3a3d59);return _0x15581a[_0x5400('0x1c')](_0x5400('0x1d'),_0x55b34e+'-'+_0x38d764+'/'+_0x216084)[_0x5400('0x18')](_0x6df825);}return null;};}function patchUpdates(_0x4f190b){return function(_0x319c45){try{jsonpatch[_0x5400('0x1e')](_0x319c45,_0x4f190b,!![]);}catch(_0x13f485){return BPromise[_0x5400('0x1f')](_0x13f485);}return _0x319c45['save']();};}function saveUpdates(_0x4c997a,_0x4c8c69){return function(_0x4e1e24){if(_0x4e1e24){return _0x4e1e24[_0x5400('0x20')](_0x4c997a)[_0x5400('0x21')](function(_0x2adf97){return _0x2adf97;});}return null;};}function removeEntity(_0x557640,_0x48adcb){return function(_0x3dde63){if(_0x3dde63){return _0x3dde63[_0x5400('0x22')]()[_0x5400('0x21')](function(){_0x557640[_0x5400('0x16')](0xcc)[_0x5400('0x17')]();});}};}function handleEntityNotFound(_0x235bc7,_0x3689e5){return function(_0x25122e){if(!_0x25122e){_0x235bc7[_0x5400('0x15')](0x194);}return _0x25122e;};}function handleError(_0x825c63,_0x29076b){_0x29076b=_0x29076b||0x1f4;return function(_0x472826){logger[_0x5400('0x23')](_0x472826[_0x5400('0x24')]);if(_0x472826[_0x5400('0x25')]){delete _0x472826['name'];}_0x825c63[_0x5400('0x16')](_0x29076b)[_0x5400('0x26')](_0x472826);};}exports[_0x5400('0x27')]=function(_0x451f97,_0x1d97c9){var _0x449732={},_0x3fbeaa={},_0x37d35a={'count':0x0,'rows':[]};var _0x37e757=_[_0x5400('0x28')](db['FaxApplication']['rawAttributes'],function(_0x622072){return{'name':_0x622072[_0x5400('0x29')],'type':_0x622072[_0x5400('0x2a')]['key']};});_0x3fbeaa[_0x5400('0x2b')]=_[_0x5400('0x28')](_0x37e757,'name');_0x3fbeaa[_0x5400('0x2c')]=_['keys'](_0x451f97[_0x5400('0x2c')]);_0x3fbeaa[_0x5400('0x2d')]=_['intersection'](_0x3fbeaa[_0x5400('0x2b')],_0x3fbeaa['query']);_0x449732['attributes']=_[_0x5400('0x2e')](_0x3fbeaa[_0x5400('0x2b')],qs[_0x5400('0x2f')](_0x451f97['query']['fields']));_0x449732[_0x5400('0x30')]=_0x449732[_0x5400('0x30')]['length']?_0x449732['attributes']:_0x3fbeaa['model'];if(!_0x451f97[_0x5400('0x2c')][_0x5400('0x31')](_0x5400('0x32'))){_0x449732['limit']=qs[_0x5400('0x1b')](_0x451f97[_0x5400('0x2c')][_0x5400('0x1b')]);_0x449732[_0x5400('0x19')]=qs[_0x5400('0x19')](_0x451f97[_0x5400('0x2c')]['offset']);}_0x449732['order']=qs['sort'](_0x451f97['query'][_0x5400('0x33')]);_0x449732[_0x5400('0x34')]=qs['filters'](_[_0x5400('0x35')](_0x451f97[_0x5400('0x2c')],_0x3fbeaa[_0x5400('0x2d')]),_0x37e757);if(_0x451f97[_0x5400('0x2c')][_0x5400('0x36')]){_0x449732[_0x5400('0x34')]=_[_0x5400('0x37')](_0x449732[_0x5400('0x34')],{'$or':_[_0x5400('0x28')](_0x37e757,function(_0x47eb40){if(_0x47eb40['type']!==_0x5400('0x38')){var _0x562fb3={};_0x562fb3[_0x47eb40[_0x5400('0x25')]]={'$like':'%'+_0x451f97[_0x5400('0x2c')]['filter']+'%'};return _0x562fb3;}})});}_0x449732=_['merge']({},_0x449732,_0x451f97['options']);var _0x20c2fe={'where':_0x449732[_0x5400('0x34')]};return db[_0x5400('0x39')][_0x5400('0x3a')](_0x20c2fe)['then'](function(_0x3c5f5f){_0x37d35a[_0x5400('0x3a')]=_0x3c5f5f;if(_0x451f97[_0x5400('0x2c')][_0x5400('0x3b')]){_0x449732[_0x5400('0x3c')]=[{'all':!![]}];}return db['FaxApplication'][_0x5400('0x3d')](_0x449732);})[_0x5400('0x21')](function(_0x2ab639){_0x37d35a['rows']=_0x2ab639;return _0x37d35a;})[_0x5400('0x21')](respondWithFilteredResult(_0x1d97c9,_0x449732))['catch'](handleError(_0x1d97c9,null));};exports['show']=function(_0x227a12,_0x322068){var _0x2995ab={'raw':!![],'where':{'id':_0x227a12[_0x5400('0x3e')]['id']}},_0x54bd4b={};_0x54bd4b[_0x5400('0x2b')]=_['keys'](db[_0x5400('0x39')][_0x5400('0x3f')]);_0x54bd4b['query']=_['keys'](_0x227a12[_0x5400('0x2c')]);_0x54bd4b[_0x5400('0x2d')]=_[_0x5400('0x2e')](_0x54bd4b[_0x5400('0x2b')],_0x54bd4b[_0x5400('0x2c')]);_0x2995ab[_0x5400('0x30')]=_[_0x5400('0x2e')](_0x54bd4b[_0x5400('0x2b')],qs['fields'](_0x227a12['query'][_0x5400('0x2f')]));_0x2995ab[_0x5400('0x30')]=_0x2995ab['attributes'][_0x5400('0x40')]?_0x2995ab['attributes']:_0x54bd4b[_0x5400('0x2b')];if(_0x227a12['query'][_0x5400('0x3b')]){_0x2995ab['include']=[{'all':!![]}];}_0x2995ab=_['merge']({},_0x2995ab,_0x227a12[_0x5400('0x41')]);return db[_0x5400('0x39')]['find'](_0x2995ab)[_0x5400('0x21')](handleEntityNotFound(_0x322068,null))[_0x5400('0x21')](respondWithResult(_0x322068,null))[_0x5400('0x42')](handleError(_0x322068,null));};exports['create']=function(_0x4687c2,_0x84e2ca){return db[_0x5400('0x39')][_0x5400('0x43')](_0x4687c2[_0x5400('0x44')],{})[_0x5400('0x21')](respondWithResult(_0x84e2ca,0xc9))[_0x5400('0x42')](handleError(_0x84e2ca,null));};exports['update']=function(_0x19d0e7,_0x3ee3cd){if(_0x19d0e7[_0x5400('0x44')]['id']){delete _0x19d0e7[_0x5400('0x44')]['id'];}return db[_0x5400('0x39')]['find']({'where':{'id':_0x19d0e7[_0x5400('0x3e')]['id']}})['then'](handleEntityNotFound(_0x3ee3cd,null))[_0x5400('0x21')](saveUpdates(_0x19d0e7[_0x5400('0x44')],null))[_0x5400('0x21')](respondWithResult(_0x3ee3cd,null))['catch'](handleError(_0x3ee3cd,null));};exports['destroy']=function(_0x2b2455,_0x4da3be){return db['FaxApplication'][_0x5400('0x45')]({'where':{'id':_0x2b2455['params']['id']}})[_0x5400('0x21')](handleEntityNotFound(_0x4da3be,null))['then'](removeEntity(_0x4da3be,null))[_0x5400('0x42')](handleError(_0x4da3be,null));};
\ No newline at end of file
+var _0xfbcb=['sox','to-csv','ejs','fs-extra','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','end','status','json','offset','undefined','count','set','apply','reject','save','destroy','error','name','map','fieldName','type','key','query','keys','filters','intersection','model','attributes','fields','length','hasOwnProperty','limit','order','sort','pick','filter','where','merge','options','FaxApplication','then','includeAll','include','findAll','rows','catch','show','params','rawAttributes','create','body','update','find','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','util','path'];(function(_0x3e55f7,_0x232df0){var _0x48db30=function(_0x58220c){while(--_0x58220c){_0x3e55f7['push'](_0x3e55f7['shift']());}};_0x48db30(++_0x232df0);}(_0xfbcb,0x12c));var _0xbfbc=function(_0x398545,_0x3dfca4){_0x398545=_0x398545-0x0;var _0x214189=_0xfbcb[_0x398545];return _0x214189;};'use strict';var emlformat=require(_0xbfbc('0x0'));var rimraf=require(_0xbfbc('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xbfbc('0x2'));var rp=require(_0xbfbc('0x3'));var moment=require(_0xbfbc('0x4'));var BPromise=require(_0xbfbc('0x5'));var Mustache=require('mustache');var util=require(_0xbfbc('0x6'));var path=require(_0xbfbc('0x7'));var sox=require(_0xbfbc('0x8'));var csv=require(_0xbfbc('0x9'));var ejs=require(_0xbfbc('0xa'));var fs=require('fs');var fs_extra=require(_0xbfbc('0xb'));var _=require(_0xbfbc('0xc'));var squel=require(_0xbfbc('0xd'));var crypto=require(_0xbfbc('0xe'));var jsforce=require(_0xbfbc('0xf'));var deskjs=require(_0xbfbc('0x10'));var toCsv=require('to-csv');var querystring=require(_0xbfbc('0x11'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xbfbc('0x12'));var qs=require(_0xbfbc('0x13'));var as=require(_0xbfbc('0x14'));var hardwareService=require(_0xbfbc('0x15'));var logger=require(_0xbfbc('0x16'))(_0xbfbc('0x17'));var utils=require(_0xbfbc('0x18'));var config=require(_0xbfbc('0x19'));var licenseUtil=require(_0xbfbc('0x1a'));var db=require(_0xbfbc('0x1b'))['db'];function respondWithStatusCode(_0x4de160,_0x10c1a9){_0x10c1a9=_0x10c1a9||0xcc;return function(_0x5e5a92){if(_0x5e5a92){return _0x4de160[_0xbfbc('0x1c')](_0x10c1a9);}return _0x4de160['status'](_0x10c1a9)[_0xbfbc('0x1d')]();};}function respondWithResult(_0x1f5eb3,_0x5f1765){_0x5f1765=_0x5f1765||0xc8;return function(_0x2838b8){if(_0x2838b8){return _0x1f5eb3[_0xbfbc('0x1e')](_0x5f1765)[_0xbfbc('0x1f')](_0x2838b8);}};}function respondWithFilteredResult(_0xe5848c,_0x4c3d8d){return function(_0x3720a8){if(_0x3720a8){var _0x329f18=typeof _0x4c3d8d[_0xbfbc('0x20')]===_0xbfbc('0x21')&&typeof _0x4c3d8d['limit']===_0xbfbc('0x21');var _0x23341e=_0x3720a8['count'];var _0x591def=_0x329f18?0x0:_0x4c3d8d[_0xbfbc('0x20')];var _0x3f55e1=_0x329f18?_0x3720a8[_0xbfbc('0x22')]:_0x4c3d8d[_0xbfbc('0x20')]+_0x4c3d8d['limit'];var _0x4c8192;if(_0x3f55e1>=_0x23341e){_0x3f55e1=_0x23341e;_0x4c8192=0xc8;}else{_0x4c8192=0xce;}_0xe5848c[_0xbfbc('0x1e')](_0x4c8192);return _0xe5848c[_0xbfbc('0x23')]('Content-Range',_0x591def+'-'+_0x3f55e1+'/'+_0x23341e)[_0xbfbc('0x1f')](_0x3720a8);}return null;};}function patchUpdates(_0x214a14){return function(_0x4d5737){try{jsonpatch[_0xbfbc('0x24')](_0x4d5737,_0x214a14,!![]);}catch(_0x1e62b9){return BPromise[_0xbfbc('0x25')](_0x1e62b9);}return _0x4d5737[_0xbfbc('0x26')]();};}function saveUpdates(_0x561512,_0x459bdb){return function(_0x3fb012){if(_0x3fb012){return _0x3fb012['update'](_0x561512)['then'](function(_0x52c681){return _0x52c681;});}return null;};}function removeEntity(_0x148b7d,_0x4cc15b){return function(_0x2f893b){if(_0x2f893b){return _0x2f893b[_0xbfbc('0x27')]()['then'](function(){_0x148b7d[_0xbfbc('0x1e')](0xcc)[_0xbfbc('0x1d')]();});}};}function handleEntityNotFound(_0x349384,_0x47686d){return function(_0x33d825){if(!_0x33d825){_0x349384[_0xbfbc('0x1c')](0x194);}return _0x33d825;};}function handleError(_0x3577b0,_0x284b9e){_0x284b9e=_0x284b9e||0x1f4;return function(_0x1332f0){logger[_0xbfbc('0x28')](_0x1332f0['stack']);if(_0x1332f0[_0xbfbc('0x29')]){delete _0x1332f0[_0xbfbc('0x29')];}_0x3577b0[_0xbfbc('0x1e')](_0x284b9e)['send'](_0x1332f0);};}exports['index']=function(_0x207ae0,_0x16abe5){var _0xbfa43c={},_0x1f0d60={},_0x9d7991={'count':0x0,'rows':[]};var _0x41699e=_[_0xbfbc('0x2a')](db['FaxApplication']['rawAttributes'],function(_0x1c4929){return{'name':_0x1c4929[_0xbfbc('0x2b')],'type':_0x1c4929[_0xbfbc('0x2c')][_0xbfbc('0x2d')]};});_0x1f0d60['model']=_[_0xbfbc('0x2a')](_0x41699e,_0xbfbc('0x29'));_0x1f0d60[_0xbfbc('0x2e')]=_[_0xbfbc('0x2f')](_0x207ae0[_0xbfbc('0x2e')]);_0x1f0d60[_0xbfbc('0x30')]=_[_0xbfbc('0x31')](_0x1f0d60[_0xbfbc('0x32')],_0x1f0d60[_0xbfbc('0x2e')]);_0xbfa43c[_0xbfbc('0x33')]=_[_0xbfbc('0x31')](_0x1f0d60['model'],qs[_0xbfbc('0x34')](_0x207ae0['query'][_0xbfbc('0x34')]));_0xbfa43c[_0xbfbc('0x33')]=_0xbfa43c[_0xbfbc('0x33')][_0xbfbc('0x35')]?_0xbfa43c[_0xbfbc('0x33')]:_0x1f0d60[_0xbfbc('0x32')];if(!_0x207ae0[_0xbfbc('0x2e')][_0xbfbc('0x36')]('nolimit')){_0xbfa43c[_0xbfbc('0x37')]=qs[_0xbfbc('0x37')](_0x207ae0[_0xbfbc('0x2e')][_0xbfbc('0x37')]);_0xbfa43c['offset']=qs[_0xbfbc('0x20')](_0x207ae0[_0xbfbc('0x2e')]['offset']);}_0xbfa43c[_0xbfbc('0x38')]=qs['sort'](_0x207ae0[_0xbfbc('0x2e')][_0xbfbc('0x39')]);_0xbfa43c['where']=qs[_0xbfbc('0x30')](_[_0xbfbc('0x3a')](_0x207ae0[_0xbfbc('0x2e')],_0x1f0d60[_0xbfbc('0x30')]),_0x41699e);if(_0x207ae0['query'][_0xbfbc('0x3b')]){_0xbfa43c[_0xbfbc('0x3c')]=_[_0xbfbc('0x3d')](_0xbfa43c['where'],{'$or':_[_0xbfbc('0x2a')](_0x41699e,function(_0x30bd9a){if(_0x30bd9a[_0xbfbc('0x2c')]!=='VIRTUAL'){var _0x28736f={};_0x28736f[_0x30bd9a[_0xbfbc('0x29')]]={'$like':'%'+_0x207ae0[_0xbfbc('0x2e')][_0xbfbc('0x3b')]+'%'};return _0x28736f;}})});}_0xbfa43c=_[_0xbfbc('0x3d')]({},_0xbfa43c,_0x207ae0[_0xbfbc('0x3e')]);var _0x430cff={'where':_0xbfa43c['where']};return db[_0xbfbc('0x3f')]['count'](_0x430cff)[_0xbfbc('0x40')](function(_0x2f5f4e){_0x9d7991['count']=_0x2f5f4e;if(_0x207ae0[_0xbfbc('0x2e')][_0xbfbc('0x41')]){_0xbfa43c[_0xbfbc('0x42')]=[{'all':!![]}];}return db[_0xbfbc('0x3f')][_0xbfbc('0x43')](_0xbfa43c);})[_0xbfbc('0x40')](function(_0x51c561){_0x9d7991[_0xbfbc('0x44')]=_0x51c561;return _0x9d7991;})[_0xbfbc('0x40')](respondWithFilteredResult(_0x16abe5,_0xbfa43c))[_0xbfbc('0x45')](handleError(_0x16abe5,null));};exports[_0xbfbc('0x46')]=function(_0x164305,_0x2a681b){var _0x18e7d6={'raw':!![],'where':{'id':_0x164305[_0xbfbc('0x47')]['id']}},_0x169bd7={};_0x169bd7[_0xbfbc('0x32')]=_[_0xbfbc('0x2f')](db[_0xbfbc('0x3f')][_0xbfbc('0x48')]);_0x169bd7[_0xbfbc('0x2e')]=_[_0xbfbc('0x2f')](_0x164305[_0xbfbc('0x2e')]);_0x169bd7[_0xbfbc('0x30')]=_[_0xbfbc('0x31')](_0x169bd7[_0xbfbc('0x32')],_0x169bd7[_0xbfbc('0x2e')]);_0x18e7d6[_0xbfbc('0x33')]=_[_0xbfbc('0x31')](_0x169bd7[_0xbfbc('0x32')],qs[_0xbfbc('0x34')](_0x164305[_0xbfbc('0x2e')][_0xbfbc('0x34')]));_0x18e7d6[_0xbfbc('0x33')]=_0x18e7d6[_0xbfbc('0x33')][_0xbfbc('0x35')]?_0x18e7d6[_0xbfbc('0x33')]:_0x169bd7[_0xbfbc('0x32')];if(_0x164305[_0xbfbc('0x2e')]['includeAll']){_0x18e7d6['include']=[{'all':!![]}];}_0x18e7d6=_[_0xbfbc('0x3d')]({},_0x18e7d6,_0x164305['options']);return db[_0xbfbc('0x3f')]['find'](_0x18e7d6)[_0xbfbc('0x40')](handleEntityNotFound(_0x2a681b,null))['then'](respondWithResult(_0x2a681b,null))[_0xbfbc('0x45')](handleError(_0x2a681b,null));};exports[_0xbfbc('0x49')]=function(_0x309ba4,_0x407208){return db[_0xbfbc('0x3f')][_0xbfbc('0x49')](_0x309ba4[_0xbfbc('0x4a')],{})[_0xbfbc('0x40')](respondWithResult(_0x407208,0xc9))[_0xbfbc('0x45')](handleError(_0x407208,null));};exports[_0xbfbc('0x4b')]=function(_0x16b091,_0x41d89f){if(_0x16b091[_0xbfbc('0x4a')]['id']){delete _0x16b091[_0xbfbc('0x4a')]['id'];}return db[_0xbfbc('0x3f')]['find']({'where':{'id':_0x16b091['params']['id']}})[_0xbfbc('0x40')](handleEntityNotFound(_0x41d89f,null))[_0xbfbc('0x40')](saveUpdates(_0x16b091['body'],null))[_0xbfbc('0x40')](respondWithResult(_0x41d89f,null))[_0xbfbc('0x45')](handleError(_0x41d89f,null));};exports[_0xbfbc('0x27')]=function(_0x1467eb,_0x307fc3){return db[_0xbfbc('0x3f')][_0xbfbc('0x4c')]({'where':{'id':_0x1467eb[_0xbfbc('0x47')]['id']}})[_0xbfbc('0x40')](handleEntityNotFound(_0x307fc3,null))[_0xbfbc('0x40')](removeEntity(_0x307fc3,null))['catch'](handleError(_0x307fc3,null));};
\ No newline at end of file