Built motion from commit e1760111.|2.6.18
[motion2.git] / server / api / faxQueueReport / faxQueueReport.controller.js
index 3f31389..1581997 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x05b0=['stack','name','send','index','map','FaxQueueReport','rawAttributes','type','key','keys','query','filters','attributes','intersection','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','VIRTUAL','options','includeAll','include','rows','catch','show','params','model','length','body','find','destroy','describe','zip-dir','fast-json-patch','moment','bluebird','util','path','to-csv','ejs','fs-extra','lodash','squel','crypto','jsforce','querystring','../../components/auth/service','../../config/logger','api','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','offset','limit','undefined','count','Content-Range','json','apply','save','update','then','end','error'];(function(_0x476bf4,_0x2a3755){var _0x788ffe=function(_0x13fa11){while(--_0x13fa11){_0x476bf4['push'](_0x476bf4['shift']());}};_0x788ffe(++_0x2a3755);}(_0x05b0,0x188));var _0x005b=function(_0x43a86f,_0x3b4337){_0x43a86f=_0x43a86f-0x0;var _0x3aef8a=_0x05b0[_0x43a86f];return _0x3aef8a;};'use strict';var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x005b('0x0'));var jsonpatch=require(_0x005b('0x1'));var rp=require('request-promise');var moment=require(_0x005b('0x2'));var BPromise=require(_0x005b('0x3'));var Mustache=require('mustache');var util=require(_0x005b('0x4'));var path=require(_0x005b('0x5'));var sox=require('sox');var csv=require(_0x005b('0x6'));var ejs=require(_0x005b('0x7'));var fs=require('fs');var fs_extra=require(_0x005b('0x8'));var _=require(_0x005b('0x9'));var squel=require(_0x005b('0xa'));var crypto=require(_0x005b('0xb'));var jsforce=require(_0x005b('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x005b('0x6'));var querystring=require(_0x005b('0xd'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x005b('0xe'));var qs=require('../../components/parsers/qs');var as=require('../../components/parsers/advancedSearch');var hardwareService=require('../../config/license/hardware');var logger=require(_0x005b('0xf'))(_0x005b('0x10'));var utils=require('../../config/utils');var config=require(_0x005b('0x11'));var licenseUtil=require(_0x005b('0x12'));var db=require(_0x005b('0x13'))['db'];function respondWithStatusCode(_0x10f9bb,_0xce7212){_0xce7212=_0xce7212||0xcc;return function(_0xe2674e){if(_0xe2674e){return _0x10f9bb[_0x005b('0x14')](_0xce7212);}return _0x10f9bb['status'](_0xce7212)['end']();};}function respondWithResult(_0x52ad9c,_0x309c8f){_0x309c8f=_0x309c8f||0xc8;return function(_0x50b7ce){if(_0x50b7ce){return _0x52ad9c[_0x005b('0x15')](_0x309c8f)['json'](_0x50b7ce);}};}function respondWithFilteredResult(_0x1c8eed,_0x1f7743){return function(_0x2ce01e){if(_0x2ce01e){var _0x1991e8=typeof _0x1f7743[_0x005b('0x16')]==='undefined'&&typeof _0x1f7743[_0x005b('0x17')]===_0x005b('0x18');var _0xf3cf84=_0x2ce01e['count'];var _0x206c0a=_0x1991e8?0x0:_0x1f7743[_0x005b('0x16')];var _0x50a6eb=_0x1991e8?_0x2ce01e[_0x005b('0x19')]:_0x1f7743[_0x005b('0x16')]+_0x1f7743[_0x005b('0x17')];var _0x434874;if(_0x50a6eb>=_0xf3cf84){_0x50a6eb=_0xf3cf84;_0x434874=0xc8;}else{_0x434874=0xce;}_0x1c8eed[_0x005b('0x15')](_0x434874);return _0x1c8eed['set'](_0x005b('0x1a'),_0x206c0a+'-'+_0x50a6eb+'/'+_0xf3cf84)[_0x005b('0x1b')](_0x2ce01e);}return null;};}function patchUpdates(_0x4ae164){return function(_0x24637d){try{jsonpatch[_0x005b('0x1c')](_0x24637d,_0x4ae164,!![]);}catch(_0xd97375){return BPromise['reject'](_0xd97375);}return _0x24637d[_0x005b('0x1d')]();};}function saveUpdates(_0x145c36,_0x319981){return function(_0x3521c9){if(_0x3521c9){return _0x3521c9[_0x005b('0x1e')](_0x145c36)[_0x005b('0x1f')](function(_0x4f632f){return _0x4f632f;});}return null;};}function removeEntity(_0x322229,_0x169428){return function(_0x1fef26){if(_0x1fef26){return _0x1fef26['destroy']()[_0x005b('0x1f')](function(){_0x322229['status'](0xcc)[_0x005b('0x20')]();});}};}function handleEntityNotFound(_0x527294,_0x542fa2){return function(_0x2dc341){if(!_0x2dc341){_0x527294[_0x005b('0x14')](0x194);}return _0x2dc341;};}function handleError(_0x3effd5,_0x267f10){_0x267f10=_0x267f10||0x1f4;return function(_0x6730d4){logger[_0x005b('0x21')](_0x6730d4[_0x005b('0x22')]);if(_0x6730d4[_0x005b('0x23')]){delete _0x6730d4['name'];}_0x3effd5[_0x005b('0x15')](_0x267f10)[_0x005b('0x24')](_0x6730d4);};}exports[_0x005b('0x25')]=function(_0x13e834,_0x2e92d1){var _0x1d8f93={},_0x4775a2={},_0x49561a={'count':0x0,'rows':[]};var _0xaf7c71=_[_0x005b('0x26')](db[_0x005b('0x27')][_0x005b('0x28')],function(_0x545a2b){return{'name':_0x545a2b['fieldName'],'type':_0x545a2b[_0x005b('0x29')][_0x005b('0x2a')]};});_0x4775a2['model']=_['map'](_0xaf7c71,_0x005b('0x23'));_0x4775a2['query']=_[_0x005b('0x2b')](_0x13e834[_0x005b('0x2c')]);_0x4775a2[_0x005b('0x2d')]=_['intersection'](_0x4775a2['model'],_0x4775a2[_0x005b('0x2c')]);_0x1d8f93[_0x005b('0x2e')]=_[_0x005b('0x2f')](_0x4775a2['model'],qs['fields'](_0x13e834[_0x005b('0x2c')][_0x005b('0x30')]));_0x1d8f93['attributes']=_0x1d8f93[_0x005b('0x2e')]['length']?_0x1d8f93[_0x005b('0x2e')]:_0x4775a2['model'];if(!_0x13e834['query'][_0x005b('0x31')](_0x005b('0x32'))){_0x1d8f93[_0x005b('0x17')]=qs[_0x005b('0x17')](_0x13e834[_0x005b('0x2c')]['limit']);_0x1d8f93['offset']=qs[_0x005b('0x16')](_0x13e834[_0x005b('0x2c')][_0x005b('0x16')]);}_0x1d8f93[_0x005b('0x33')]=qs[_0x005b('0x34')](_0x13e834[_0x005b('0x2c')]['sort']);_0x1d8f93[_0x005b('0x35')]=qs[_0x005b('0x2d')](_[_0x005b('0x36')](_0x13e834['query'],_0x4775a2[_0x005b('0x2d')]),_0xaf7c71);if(_0x13e834[_0x005b('0x2c')][_0x005b('0x37')]){_0x1d8f93[_0x005b('0x35')]=_[_0x005b('0x38')](_0x1d8f93[_0x005b('0x35')],{'$or':_[_0x005b('0x26')](_0xaf7c71,function(_0x9f4d6){if(_0x9f4d6[_0x005b('0x29')]!==_0x005b('0x39')){var _0x4d6064={};_0x4d6064[_0x9f4d6[_0x005b('0x23')]]={'$like':'%'+_0x13e834[_0x005b('0x2c')]['filter']+'%'};return _0x4d6064;}})});}_0x1d8f93=_[_0x005b('0x38')]({},_0x1d8f93,_0x13e834[_0x005b('0x3a')]);var _0x1f29de={'where':_0x1d8f93[_0x005b('0x35')]};return db['FaxQueueReport'][_0x005b('0x19')](_0x1f29de)[_0x005b('0x1f')](function(_0x4b0a10){_0x49561a[_0x005b('0x19')]=_0x4b0a10;if(_0x13e834[_0x005b('0x2c')][_0x005b('0x3b')]){_0x1d8f93[_0x005b('0x3c')]=[{'all':!![]}];}return db[_0x005b('0x27')]['findAll'](_0x1d8f93);})['then'](function(_0x1dfe28){_0x49561a[_0x005b('0x3d')]=_0x1dfe28;return _0x49561a;})[_0x005b('0x1f')](respondWithFilteredResult(_0x2e92d1,_0x1d8f93))[_0x005b('0x3e')](handleError(_0x2e92d1,null));};exports[_0x005b('0x3f')]=function(_0x59fefd,_0x182e3a){var _0x14bd15={'raw':!![],'where':{'id':_0x59fefd[_0x005b('0x40')]['id']}},_0x2bbb8a={};_0x2bbb8a[_0x005b('0x41')]=_[_0x005b('0x2b')](db['FaxQueueReport'][_0x005b('0x28')]);_0x2bbb8a['query']=_[_0x005b('0x2b')](_0x59fefd[_0x005b('0x2c')]);_0x2bbb8a['filters']=_[_0x005b('0x2f')](_0x2bbb8a[_0x005b('0x41')],_0x2bbb8a[_0x005b('0x2c')]);_0x14bd15[_0x005b('0x2e')]=_['intersection'](_0x2bbb8a[_0x005b('0x41')],qs[_0x005b('0x30')](_0x59fefd[_0x005b('0x2c')][_0x005b('0x30')]));_0x14bd15[_0x005b('0x2e')]=_0x14bd15[_0x005b('0x2e')][_0x005b('0x42')]?_0x14bd15[_0x005b('0x2e')]:_0x2bbb8a[_0x005b('0x41')];if(_0x59fefd['query'][_0x005b('0x3b')]){_0x14bd15[_0x005b('0x3c')]=[{'all':!![]}];}_0x14bd15=_[_0x005b('0x38')]({},_0x14bd15,_0x59fefd[_0x005b('0x3a')]);return db[_0x005b('0x27')]['find'](_0x14bd15)[_0x005b('0x1f')](handleEntityNotFound(_0x182e3a,null))[_0x005b('0x1f')](respondWithResult(_0x182e3a,null))[_0x005b('0x3e')](handleError(_0x182e3a,null));};exports['create']=function(_0x10a141,_0x50d178){return db['FaxQueueReport']['create'](_0x10a141['body'],{})[_0x005b('0x1f')](respondWithResult(_0x50d178,0xc9))[_0x005b('0x3e')](handleError(_0x50d178,null));};exports[_0x005b('0x1e')]=function(_0xb1898,_0x4e19cd){if(_0xb1898[_0x005b('0x43')]['id']){delete _0xb1898[_0x005b('0x43')]['id'];}return db['FaxQueueReport'][_0x005b('0x44')]({'where':{'id':_0xb1898[_0x005b('0x40')]['id']}})[_0x005b('0x1f')](handleEntityNotFound(_0x4e19cd,null))[_0x005b('0x1f')](saveUpdates(_0xb1898[_0x005b('0x43')],null))['then'](respondWithResult(_0x4e19cd,null))[_0x005b('0x3e')](handleError(_0x4e19cd,null));};exports[_0x005b('0x45')]=function(_0x2aebe9,_0x11dc21){return db[_0x005b('0x27')][_0x005b('0x44')]({'where':{'id':_0x2aebe9['params']['id']}})[_0x005b('0x1f')](handleEntityNotFound(_0x11dc21,null))[_0x005b('0x1f')](removeEntity(_0x11dc21,null))[_0x005b('0x3e')](handleError(_0x11dc21,null));};exports[_0x005b('0x46')]=function(_0x288935,_0x1be7c2){return db['FaxQueueReport'][_0x005b('0x46')]()[_0x005b('0x1f')](respondWithResult(_0x1be7c2,null))['catch'](handleError(_0x1be7c2,null));};
\ No newline at end of file
+var _0x87f8=['offset','set','Content-Range','apply','reject','save','update','then','destroy','end','stack','send','index','map','FaxQueueReport','type','model','name','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','filter','where','VIRTUAL','merge','includeAll','include','findAll','catch','show','rawAttributes','options','find','create','body','params','describe','fast-json-patch','request-promise','bluebird','util','path','sox','to-csv','fs-extra','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','../../mysqldb','sendStatus','status','json','undefined','limit','count'];(function(_0x352b44,_0x4a91a1){var _0x3e8baa=function(_0xed4bc3){while(--_0xed4bc3){_0x352b44['push'](_0x352b44['shift']());}};_0x3e8baa(++_0x4a91a1);}(_0x87f8,0x152));var _0x887f=function(_0x593121,_0x3a4ecf){_0x593121=_0x593121-0x0;var _0x35c6e4=_0x87f8[_0x593121];return _0x35c6e4;};'use strict';var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x887f('0x0'));var rp=require(_0x887f('0x1'));var moment=require('moment');var BPromise=require(_0x887f('0x2'));var Mustache=require('mustache');var util=require(_0x887f('0x3'));var path=require(_0x887f('0x4'));var sox=require(_0x887f('0x5'));var csv=require(_0x887f('0x6'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0x887f('0x7'));var _=require(_0x887f('0x8'));var squel=require(_0x887f('0x9'));var crypto=require(_0x887f('0xa'));var jsforce=require(_0x887f('0xb'));var deskjs=require(_0x887f('0xc'));var toCsv=require(_0x887f('0x6'));var querystring=require('querystring');var Papa=require(_0x887f('0xd'));var Redis=require('ioredis');var authService=require(_0x887f('0xe'));var qs=require(_0x887f('0xf'));var as=require(_0x887f('0x10'));var hardwareService=require(_0x887f('0x11'));var logger=require('../../config/logger')(_0x887f('0x12'));var utils=require(_0x887f('0x13'));var config=require('../../config/environment');var licenseUtil=require('../../config/license/util');var db=require(_0x887f('0x14'))['db'];function respondWithStatusCode(_0x32b6c4,_0x32e050){_0x32e050=_0x32e050||0xcc;return function(_0x589e92){if(_0x589e92){return _0x32b6c4[_0x887f('0x15')](_0x32e050);}return _0x32b6c4[_0x887f('0x16')](_0x32e050)['end']();};}function respondWithResult(_0x16bbc4,_0x58152e){_0x58152e=_0x58152e||0xc8;return function(_0x59b7ab){if(_0x59b7ab){return _0x16bbc4[_0x887f('0x16')](_0x58152e)[_0x887f('0x17')](_0x59b7ab);}};}function respondWithFilteredResult(_0x59ed6c,_0x3f189a){return function(_0xf69779){if(_0xf69779){var _0x9f5d78=typeof _0x3f189a['offset']===_0x887f('0x18')&&typeof _0x3f189a[_0x887f('0x19')]==='undefined';var _0x2e8999=_0xf69779[_0x887f('0x1a')];var _0x3ab397=_0x9f5d78?0x0:_0x3f189a[_0x887f('0x1b')];var _0x2399a5=_0x9f5d78?_0xf69779[_0x887f('0x1a')]:_0x3f189a[_0x887f('0x1b')]+_0x3f189a[_0x887f('0x19')];var _0x342e8e;if(_0x2399a5>=_0x2e8999){_0x2399a5=_0x2e8999;_0x342e8e=0xc8;}else{_0x342e8e=0xce;}_0x59ed6c[_0x887f('0x16')](_0x342e8e);return _0x59ed6c[_0x887f('0x1c')](_0x887f('0x1d'),_0x3ab397+'-'+_0x2399a5+'/'+_0x2e8999)[_0x887f('0x17')](_0xf69779);}return null;};}function patchUpdates(_0x4deddd){return function(_0x129106){try{jsonpatch[_0x887f('0x1e')](_0x129106,_0x4deddd,!![]);}catch(_0x49af51){return BPromise[_0x887f('0x1f')](_0x49af51);}return _0x129106[_0x887f('0x20')]();};}function saveUpdates(_0x48fd49,_0xc09608){return function(_0x56beaa){if(_0x56beaa){return _0x56beaa[_0x887f('0x21')](_0x48fd49)[_0x887f('0x22')](function(_0x566fb9){return _0x566fb9;});}return null;};}function removeEntity(_0x338777,_0x3af68e){return function(_0x3d6948){if(_0x3d6948){return _0x3d6948[_0x887f('0x23')]()['then'](function(){_0x338777[_0x887f('0x16')](0xcc)[_0x887f('0x24')]();});}};}function handleEntityNotFound(_0x5c7f41,_0x1a1657){return function(_0x42c8bd){if(!_0x42c8bd){_0x5c7f41['sendStatus'](0x194);}return _0x42c8bd;};}function handleError(_0x1811e6,_0x7eef96){_0x7eef96=_0x7eef96||0x1f4;return function(_0x108890){logger['error'](_0x108890[_0x887f('0x25')]);if(_0x108890['name']){delete _0x108890['name'];}_0x1811e6[_0x887f('0x16')](_0x7eef96)[_0x887f('0x26')](_0x108890);};}exports[_0x887f('0x27')]=function(_0x2f20ce,_0x1c5ce3){var _0x4e1fe1={},_0x59d489={},_0x4238e0={'count':0x0,'rows':[]};var _0xca31ec=_[_0x887f('0x28')](db[_0x887f('0x29')]['rawAttributes'],function(_0x39a9ce){return{'name':_0x39a9ce['fieldName'],'type':_0x39a9ce[_0x887f('0x2a')]['key']};});_0x59d489[_0x887f('0x2b')]=_[_0x887f('0x28')](_0xca31ec,_0x887f('0x2c'));_0x59d489[_0x887f('0x2d')]=_[_0x887f('0x2e')](_0x2f20ce[_0x887f('0x2d')]);_0x59d489[_0x887f('0x2f')]=_[_0x887f('0x30')](_0x59d489['model'],_0x59d489[_0x887f('0x2d')]);_0x4e1fe1[_0x887f('0x31')]=_[_0x887f('0x30')](_0x59d489[_0x887f('0x2b')],qs[_0x887f('0x32')](_0x2f20ce[_0x887f('0x2d')]['fields']));_0x4e1fe1[_0x887f('0x31')]=_0x4e1fe1[_0x887f('0x31')][_0x887f('0x33')]?_0x4e1fe1[_0x887f('0x31')]:_0x59d489[_0x887f('0x2b')];if(!_0x2f20ce['query'][_0x887f('0x34')](_0x887f('0x35'))){_0x4e1fe1['limit']=qs[_0x887f('0x19')](_0x2f20ce[_0x887f('0x2d')][_0x887f('0x19')]);_0x4e1fe1['offset']=qs[_0x887f('0x1b')](_0x2f20ce[_0x887f('0x2d')][_0x887f('0x1b')]);}_0x4e1fe1[_0x887f('0x36')]=qs['sort'](_0x2f20ce[_0x887f('0x2d')][_0x887f('0x37')]);_0x4e1fe1['where']=qs['filters'](_[_0x887f('0x38')](_0x2f20ce[_0x887f('0x2d')],_0x59d489[_0x887f('0x2f')]),_0xca31ec);if(_0x2f20ce['query'][_0x887f('0x39')]){_0x4e1fe1['where']=_['merge'](_0x4e1fe1[_0x887f('0x3a')],{'$or':_[_0x887f('0x28')](_0xca31ec,function(_0x436486){if(_0x436486['type']!==_0x887f('0x3b')){var _0xc2df3b={};_0xc2df3b[_0x436486[_0x887f('0x2c')]]={'$like':'%'+_0x2f20ce['query'][_0x887f('0x39')]+'%'};return _0xc2df3b;}})});}_0x4e1fe1=_[_0x887f('0x3c')]({},_0x4e1fe1,_0x2f20ce['options']);var _0x4022fa={'where':_0x4e1fe1[_0x887f('0x3a')]};return db[_0x887f('0x29')][_0x887f('0x1a')](_0x4022fa)[_0x887f('0x22')](function(_0xd6bf57){_0x4238e0['count']=_0xd6bf57;if(_0x2f20ce[_0x887f('0x2d')][_0x887f('0x3d')]){_0x4e1fe1[_0x887f('0x3e')]=[{'all':!![]}];}return db[_0x887f('0x29')][_0x887f('0x3f')](_0x4e1fe1);})[_0x887f('0x22')](function(_0x2be724){_0x4238e0['rows']=_0x2be724;return _0x4238e0;})[_0x887f('0x22')](respondWithFilteredResult(_0x1c5ce3,_0x4e1fe1))[_0x887f('0x40')](handleError(_0x1c5ce3,null));};exports[_0x887f('0x41')]=function(_0x34594a,_0x55e700){var _0x134f2e={'raw':!![],'where':{'id':_0x34594a['params']['id']}},_0x79cf46={};_0x79cf46[_0x887f('0x2b')]=_['keys'](db['FaxQueueReport'][_0x887f('0x42')]);_0x79cf46[_0x887f('0x2d')]=_[_0x887f('0x2e')](_0x34594a[_0x887f('0x2d')]);_0x79cf46[_0x887f('0x2f')]=_[_0x887f('0x30')](_0x79cf46['model'],_0x79cf46[_0x887f('0x2d')]);_0x134f2e[_0x887f('0x31')]=_[_0x887f('0x30')](_0x79cf46[_0x887f('0x2b')],qs[_0x887f('0x32')](_0x34594a[_0x887f('0x2d')][_0x887f('0x32')]));_0x134f2e[_0x887f('0x31')]=_0x134f2e[_0x887f('0x31')][_0x887f('0x33')]?_0x134f2e['attributes']:_0x79cf46[_0x887f('0x2b')];if(_0x34594a[_0x887f('0x2d')][_0x887f('0x3d')]){_0x134f2e['include']=[{'all':!![]}];}_0x134f2e=_[_0x887f('0x3c')]({},_0x134f2e,_0x34594a[_0x887f('0x43')]);return db['FaxQueueReport'][_0x887f('0x44')](_0x134f2e)[_0x887f('0x22')](handleEntityNotFound(_0x55e700,null))[_0x887f('0x22')](respondWithResult(_0x55e700,null))[_0x887f('0x40')](handleError(_0x55e700,null));};exports[_0x887f('0x45')]=function(_0xbd961e,_0x22b11f){return db['FaxQueueReport']['create'](_0xbd961e[_0x887f('0x46')],{})[_0x887f('0x22')](respondWithResult(_0x22b11f,0xc9))['catch'](handleError(_0x22b11f,null));};exports[_0x887f('0x21')]=function(_0x3fcd12,_0x2bdd65){if(_0x3fcd12[_0x887f('0x46')]['id']){delete _0x3fcd12[_0x887f('0x46')]['id'];}return db[_0x887f('0x29')]['find']({'where':{'id':_0x3fcd12['params']['id']}})[_0x887f('0x22')](handleEntityNotFound(_0x2bdd65,null))['then'](saveUpdates(_0x3fcd12[_0x887f('0x46')],null))['then'](respondWithResult(_0x2bdd65,null))[_0x887f('0x40')](handleError(_0x2bdd65,null));};exports[_0x887f('0x23')]=function(_0x32e630,_0x417c8d){return db[_0x887f('0x29')]['find']({'where':{'id':_0x32e630[_0x887f('0x47')]['id']}})[_0x887f('0x22')](handleEntityNotFound(_0x417c8d,null))[_0x887f('0x22')](removeEntity(_0x417c8d,null))[_0x887f('0x40')](handleError(_0x417c8d,null));};exports[_0x887f('0x48')]=function(_0x809211,_0x320f54){return db[_0x887f('0x29')]['describe']()[_0x887f('0x22')](respondWithResult(_0x320f54,null))[_0x887f('0x40')](handleError(_0x320f54,null));};
\ No newline at end of file