Built motion from commit eddce310.|2.6.12
[motion2.git] / server / api / smsQueueReport / smsQueueReport.controller.js
index 2a6897b..6a1a66c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x87f4=['set','Content-Range','json','apply','reject','save','update','then','destroy','error','stack','name','index','SmsQueueReport','type','key','model','map','query','keys','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','where','filter','merge','VIRTUAL','options','includeAll','include','catch','show','rawAttributes','find','create','body','params','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','../../config/environment','sendStatus','status','end','count','offset','limit'];(function(_0x1cc519,_0x4fd527){var _0x5418c5=function(_0x4d0639){while(--_0x4d0639){_0x1cc519['push'](_0x1cc519['shift']());}};_0x5418c5(++_0x4fd527);}(_0x87f4,0x73));var _0x487f=function(_0x4ae32d,_0x256489){_0x4ae32d=_0x4ae32d-0x0;var _0x550537=_0x87f4[_0x4ae32d];return _0x550537;};'use strict';var pdf=require(_0x487f('0x0'));var emlformat=require(_0x487f('0x1'));var rimraf=require(_0x487f('0x2'));var zipdir=require(_0x487f('0x3'));var jsonpatch=require(_0x487f('0x4'));var rp=require('request-promise');var moment=require(_0x487f('0x5'));var BPromise=require(_0x487f('0x6'));var Mustache=require(_0x487f('0x7'));var util=require(_0x487f('0x8'));var path=require('path');var sox=require(_0x487f('0x9'));var csv=require(_0x487f('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x487f('0xb'));var squel=require(_0x487f('0xc'));var crypto=require(_0x487f('0xd'));var jsforce=require(_0x487f('0xe'));var deskjs=require(_0x487f('0xf'));var toCsv=require(_0x487f('0xa'));var querystring=require(_0x487f('0x10'));var Papa=require(_0x487f('0x11'));var Redis=require('ioredis');var authService=require(_0x487f('0x12'));var qs=require(_0x487f('0x13'));var as=require(_0x487f('0x14'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x487f('0x15'))('api');var utils=require('../../config/utils');var config=require(_0x487f('0x16'));var licenseUtil=require('../../config/license/util');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xcbb1ef,_0x52cc81){_0x52cc81=_0x52cc81||0xcc;return function(_0x54998d){if(_0x54998d){return _0xcbb1ef[_0x487f('0x17')](_0x52cc81);}return _0xcbb1ef[_0x487f('0x18')](_0x52cc81)[_0x487f('0x19')]();};}function respondWithResult(_0x3218ac,_0x19d67b){_0x19d67b=_0x19d67b||0xc8;return function(_0x5c399e){if(_0x5c399e){return _0x3218ac[_0x487f('0x18')](_0x19d67b)['json'](_0x5c399e);}};}function respondWithFilteredResult(_0x440efd,_0x272de2){return function(_0x214611){if(_0x214611){var _0x54475e=_0x214611[_0x487f('0x1a')],_0x4e502e=_0x272de2[_0x487f('0x1b')],_0x2b18af=_0x272de2['offset']+_0x272de2[_0x487f('0x1c')],_0xdf45e6;if(_0x2b18af>=_0x54475e){_0x2b18af=_0x54475e;_0xdf45e6=0xc8;}else{_0xdf45e6=0xce;}_0x440efd[_0x487f('0x18')](_0xdf45e6);return _0x440efd[_0x487f('0x1d')](_0x487f('0x1e'),_0x4e502e+'-'+_0x2b18af+'/'+_0x54475e)[_0x487f('0x1f')](_0x214611);}return null;};}function patchUpdates(_0x53f05e){return function(_0x147011){try{jsonpatch[_0x487f('0x20')](_0x147011,_0x53f05e,!![]);}catch(_0x273d0e){return BPromise[_0x487f('0x21')](_0x273d0e);}return _0x147011[_0x487f('0x22')]();};}function saveUpdates(_0x493115,_0x38a3a0){return function(_0x3a6cbf){if(_0x3a6cbf){return _0x3a6cbf[_0x487f('0x23')](_0x493115)[_0x487f('0x24')](function(_0x52139c){return _0x52139c;});}return null;};}function removeEntity(_0x216d4e,_0x1c8dc8){return function(_0x278b80){if(_0x278b80){return _0x278b80[_0x487f('0x25')]()[_0x487f('0x24')](function(){_0x216d4e[_0x487f('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1e2d47,_0x2caf25){return function(_0x178e6b){if(!_0x178e6b){_0x1e2d47[_0x487f('0x17')](0x194);}return _0x178e6b;};}function handleError(_0x4c917f,_0x32fa0a){_0x32fa0a=_0x32fa0a||0x1f4;return function(_0x58e9e6){logger[_0x487f('0x26')](_0x58e9e6[_0x487f('0x27')]);if(_0x58e9e6[_0x487f('0x28')]){delete _0x58e9e6['name'];}_0x4c917f[_0x487f('0x18')](_0x32fa0a)['send'](_0x58e9e6);};}exports[_0x487f('0x29')]=function(_0x498006,_0x1e2f64){var _0x105e74={},_0x3ab3cf={},_0xece87a={'count':0x0,'rows':[]};var _0x28f3ca=_['map'](db[_0x487f('0x2a')]['rawAttributes'],function(_0x10475d){return{'name':_0x10475d['fieldName'],'type':_0x10475d[_0x487f('0x2b')][_0x487f('0x2c')]};});_0x3ab3cf[_0x487f('0x2d')]=_[_0x487f('0x2e')](_0x28f3ca,'name');_0x3ab3cf[_0x487f('0x2f')]=_[_0x487f('0x30')](_0x498006[_0x487f('0x2f')]);_0x3ab3cf[_0x487f('0x31')]=_['intersection'](_0x3ab3cf[_0x487f('0x2d')],_0x3ab3cf['query']);_0x105e74[_0x487f('0x32')]=_[_0x487f('0x33')](_0x3ab3cf[_0x487f('0x2d')],qs[_0x487f('0x34')](_0x498006['query'][_0x487f('0x34')]));_0x105e74[_0x487f('0x32')]=_0x105e74[_0x487f('0x32')][_0x487f('0x35')]?_0x105e74[_0x487f('0x32')]:_0x3ab3cf[_0x487f('0x2d')];if(!_0x498006[_0x487f('0x2f')][_0x487f('0x36')](_0x487f('0x37'))){_0x105e74['limit']=qs['limit'](_0x498006[_0x487f('0x2f')][_0x487f('0x1c')]);_0x105e74[_0x487f('0x1b')]=qs[_0x487f('0x1b')](_0x498006['query']['offset']);}_0x105e74[_0x487f('0x38')]=qs['sort'](_0x498006[_0x487f('0x2f')]['sort']);_0x105e74[_0x487f('0x39')]=qs['filters'](_['pick'](_0x498006[_0x487f('0x2f')],_0x3ab3cf[_0x487f('0x31')]),_0x28f3ca);if(_0x498006[_0x487f('0x2f')][_0x487f('0x3a')]){_0x105e74['where']=_[_0x487f('0x3b')](_0x105e74[_0x487f('0x39')],{'$or':_[_0x487f('0x2e')](_0x28f3ca,function(_0x136108){if(_0x136108[_0x487f('0x2b')]!==_0x487f('0x3c')){var _0x32dec0={};_0x32dec0[_0x136108[_0x487f('0x28')]]={'$like':'%'+_0x498006['query'][_0x487f('0x3a')]+'%'};return _0x32dec0;}})});}_0x105e74=_[_0x487f('0x3b')]({},_0x105e74,_0x498006[_0x487f('0x3d')]);var _0x5a56ee={'where':_0x105e74['where']};return db[_0x487f('0x2a')][_0x487f('0x1a')](_0x5a56ee)[_0x487f('0x24')](function(_0x21533b){_0xece87a['count']=_0x21533b;if(_0x498006[_0x487f('0x2f')][_0x487f('0x3e')]){_0x105e74[_0x487f('0x3f')]=[{'all':!![]}];}return db[_0x487f('0x2a')]['findAll'](_0x105e74);})[_0x487f('0x24')](function(_0xa7ebfc){_0xece87a['rows']=_0xa7ebfc;return _0xece87a;})[_0x487f('0x24')](respondWithFilteredResult(_0x1e2f64,_0x105e74))[_0x487f('0x40')](handleError(_0x1e2f64,null));};exports[_0x487f('0x41')]=function(_0x28496a,_0x49d3ab){var _0x1a8689={'raw':!![],'where':{'id':_0x28496a['params']['id']}},_0x3ef12e={};_0x3ef12e[_0x487f('0x2d')]=_[_0x487f('0x30')](db[_0x487f('0x2a')][_0x487f('0x42')]);_0x3ef12e[_0x487f('0x2f')]=_[_0x487f('0x30')](_0x28496a[_0x487f('0x2f')]);_0x3ef12e[_0x487f('0x31')]=_['intersection'](_0x3ef12e[_0x487f('0x2d')],_0x3ef12e[_0x487f('0x2f')]);_0x1a8689[_0x487f('0x32')]=_[_0x487f('0x33')](_0x3ef12e['model'],qs[_0x487f('0x34')](_0x28496a[_0x487f('0x2f')][_0x487f('0x34')]));_0x1a8689[_0x487f('0x32')]=_0x1a8689['attributes']['length']?_0x1a8689['attributes']:_0x3ef12e[_0x487f('0x2d')];if(_0x28496a['query'][_0x487f('0x3e')]){_0x1a8689['include']=[{'all':!![]}];}_0x1a8689=_['merge']({},_0x1a8689,_0x28496a['options']);return db[_0x487f('0x2a')][_0x487f('0x43')](_0x1a8689)[_0x487f('0x24')](handleEntityNotFound(_0x49d3ab,null))[_0x487f('0x24')](respondWithResult(_0x49d3ab,null))[_0x487f('0x40')](handleError(_0x49d3ab,null));};exports['create']=function(_0x352c3c,_0x119525){return db['SmsQueueReport'][_0x487f('0x44')](_0x352c3c[_0x487f('0x45')],{})[_0x487f('0x24')](respondWithResult(_0x119525,0xc9))[_0x487f('0x40')](handleError(_0x119525,null));};exports[_0x487f('0x23')]=function(_0x2168e4,_0xb69f3a){if(_0x2168e4[_0x487f('0x45')]['id']){delete _0x2168e4[_0x487f('0x45')]['id'];}return db[_0x487f('0x2a')][_0x487f('0x43')]({'where':{'id':_0x2168e4[_0x487f('0x46')]['id']}})[_0x487f('0x24')](handleEntityNotFound(_0xb69f3a,null))[_0x487f('0x24')](saveUpdates(_0x2168e4[_0x487f('0x45')],null))[_0x487f('0x24')](respondWithResult(_0xb69f3a,null))[_0x487f('0x40')](handleError(_0xb69f3a,null));};exports[_0x487f('0x25')]=function(_0x5e276d,_0x3d31b3){return db[_0x487f('0x2a')]['find']({'where':{'id':_0x5e276d[_0x487f('0x46')]['id']}})[_0x487f('0x24')](handleEntityNotFound(_0x3d31b3,null))[_0x487f('0x24')](removeEntity(_0x3d31b3,null))[_0x487f('0x40')](handleError(_0x3d31b3,null));};exports[_0x487f('0x47')]=function(_0x156c6b,_0x232a29){return db[_0x487f('0x2a')][_0x487f('0x47')]()[_0x487f('0x24')](respondWithResult(_0x232a29,null))['catch'](handleError(_0x232a29,null));};
\ No newline at end of file
+var _0xe541=['../../config/utils','../../config/environment','../../config/license/util','sendStatus','status','json','undefined','limit','count','offset','Content-Range','apply','save','update','then','destroy','end','stack','name','send','map','SmsQueueReport','fieldName','key','query','attributes','intersection','fields','model','nolimit','sort','where','filters','pick','filter','merge','type','VIRTUAL','include','findAll','rows','catch','show','keys','length','includeAll','find','create','body','params','describe','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','ejs','fs-extra','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api'];(function(_0x493c97,_0x3dcbc7){var _0x38f6fb=function(_0x23e68d){while(--_0x23e68d){_0x493c97['push'](_0x493c97['shift']());}};_0x38f6fb(++_0x3dcbc7);}(_0xe541,0x7d));var _0x1e54=function(_0x5774be,_0x2259d3){_0x5774be=_0x5774be-0x0;var _0x4914b4=_0xe541[_0x5774be];return _0x4914b4;};'use strict';var emlformat=require(_0x1e54('0x0'));var rimraf=require(_0x1e54('0x1'));var zipdir=require(_0x1e54('0x2'));var jsonpatch=require(_0x1e54('0x3'));var rp=require('request-promise');var moment=require(_0x1e54('0x4'));var BPromise=require(_0x1e54('0x5'));var Mustache=require(_0x1e54('0x6'));var util=require(_0x1e54('0x7'));var path=require('path');var sox=require(_0x1e54('0x8'));var csv=require(_0x1e54('0x9'));var ejs=require(_0x1e54('0xa'));var fs=require('fs');var fs_extra=require(_0x1e54('0xb'));var _=require(_0x1e54('0xc'));var squel=require(_0x1e54('0xd'));var crypto=require(_0x1e54('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x1e54('0xf'));var toCsv=require('to-csv');var querystring=require(_0x1e54('0x10'));var Papa=require(_0x1e54('0x11'));var Redis=require('ioredis');var authService=require(_0x1e54('0x12'));var qs=require('../../components/parsers/qs');var as=require(_0x1e54('0x13'));var hardwareService=require(_0x1e54('0x14'));var logger=require(_0x1e54('0x15'))(_0x1e54('0x16'));var utils=require(_0x1e54('0x17'));var config=require(_0x1e54('0x18'));var licenseUtil=require(_0x1e54('0x19'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4b063e,_0x1e1ee4){_0x1e1ee4=_0x1e1ee4||0xcc;return function(_0x60ae06){if(_0x60ae06){return _0x4b063e[_0x1e54('0x1a')](_0x1e1ee4);}return _0x4b063e[_0x1e54('0x1b')](_0x1e1ee4)['end']();};}function respondWithResult(_0x4bdfdf,_0x52785f){_0x52785f=_0x52785f||0xc8;return function(_0x172790){if(_0x172790){return _0x4bdfdf[_0x1e54('0x1b')](_0x52785f)[_0x1e54('0x1c')](_0x172790);}};}function respondWithFilteredResult(_0x4baa31,_0x21c4f0){return function(_0x2b3ac2){if(_0x2b3ac2){var _0x4144e7=typeof _0x21c4f0['offset']===_0x1e54('0x1d')&&typeof _0x21c4f0[_0x1e54('0x1e')]==='undefined';var _0x564d3c=_0x2b3ac2['count'];var _0x49f835=_0x4144e7?0x0:_0x21c4f0['offset'];var _0x291365=_0x4144e7?_0x2b3ac2[_0x1e54('0x1f')]:_0x21c4f0[_0x1e54('0x20')]+_0x21c4f0[_0x1e54('0x1e')];var _0x6a878f;if(_0x291365>=_0x564d3c){_0x291365=_0x564d3c;_0x6a878f=0xc8;}else{_0x6a878f=0xce;}_0x4baa31[_0x1e54('0x1b')](_0x6a878f);return _0x4baa31['set'](_0x1e54('0x21'),_0x49f835+'-'+_0x291365+'/'+_0x564d3c)[_0x1e54('0x1c')](_0x2b3ac2);}return null;};}function patchUpdates(_0x1dde39){return function(_0x102e27){try{jsonpatch[_0x1e54('0x22')](_0x102e27,_0x1dde39,!![]);}catch(_0x33890f){return BPromise['reject'](_0x33890f);}return _0x102e27[_0x1e54('0x23')]();};}function saveUpdates(_0x563b30,_0x2acf41){return function(_0x252174){if(_0x252174){return _0x252174[_0x1e54('0x24')](_0x563b30)[_0x1e54('0x25')](function(_0x406ad9){return _0x406ad9;});}return null;};}function removeEntity(_0x5c95d6,_0x545255){return function(_0x492efa){if(_0x492efa){return _0x492efa[_0x1e54('0x26')]()[_0x1e54('0x25')](function(){_0x5c95d6[_0x1e54('0x1b')](0xcc)[_0x1e54('0x27')]();});}};}function handleEntityNotFound(_0x3d4e04,_0x496294){return function(_0x3efe52){if(!_0x3efe52){_0x3d4e04[_0x1e54('0x1a')](0x194);}return _0x3efe52;};}function handleError(_0x5b5574,_0x3e1f67){_0x3e1f67=_0x3e1f67||0x1f4;return function(_0x86f023){logger['error'](_0x86f023[_0x1e54('0x28')]);if(_0x86f023['name']){delete _0x86f023[_0x1e54('0x29')];}_0x5b5574[_0x1e54('0x1b')](_0x3e1f67)[_0x1e54('0x2a')](_0x86f023);};}exports['index']=function(_0x282865,_0x3812a2){var _0x328eac={},_0x5e509c={},_0x25dd3f={'count':0x0,'rows':[]};var _0x1ddab2=_[_0x1e54('0x2b')](db[_0x1e54('0x2c')]['rawAttributes'],function(_0x589d95){return{'name':_0x589d95[_0x1e54('0x2d')],'type':_0x589d95['type'][_0x1e54('0x2e')]};});_0x5e509c['model']=_[_0x1e54('0x2b')](_0x1ddab2,_0x1e54('0x29'));_0x5e509c[_0x1e54('0x2f')]=_['keys'](_0x282865[_0x1e54('0x2f')]);_0x5e509c['filters']=_['intersection'](_0x5e509c['model'],_0x5e509c[_0x1e54('0x2f')]);_0x328eac[_0x1e54('0x30')]=_[_0x1e54('0x31')](_0x5e509c['model'],qs['fields'](_0x282865[_0x1e54('0x2f')][_0x1e54('0x32')]));_0x328eac[_0x1e54('0x30')]=_0x328eac[_0x1e54('0x30')]['length']?_0x328eac[_0x1e54('0x30')]:_0x5e509c[_0x1e54('0x33')];if(!_0x282865[_0x1e54('0x2f')]['hasOwnProperty'](_0x1e54('0x34'))){_0x328eac[_0x1e54('0x1e')]=qs[_0x1e54('0x1e')](_0x282865[_0x1e54('0x2f')][_0x1e54('0x1e')]);_0x328eac[_0x1e54('0x20')]=qs[_0x1e54('0x20')](_0x282865['query'][_0x1e54('0x20')]);}_0x328eac['order']=qs['sort'](_0x282865['query'][_0x1e54('0x35')]);_0x328eac[_0x1e54('0x36')]=qs[_0x1e54('0x37')](_[_0x1e54('0x38')](_0x282865[_0x1e54('0x2f')],_0x5e509c[_0x1e54('0x37')]),_0x1ddab2);if(_0x282865['query'][_0x1e54('0x39')]){_0x328eac['where']=_[_0x1e54('0x3a')](_0x328eac[_0x1e54('0x36')],{'$or':_[_0x1e54('0x2b')](_0x1ddab2,function(_0x26fa95){if(_0x26fa95[_0x1e54('0x3b')]!==_0x1e54('0x3c')){var _0x14aff6={};_0x14aff6[_0x26fa95[_0x1e54('0x29')]]={'$like':'%'+_0x282865[_0x1e54('0x2f')][_0x1e54('0x39')]+'%'};return _0x14aff6;}})});}_0x328eac=_[_0x1e54('0x3a')]({},_0x328eac,_0x282865['options']);var _0x2ec18b={'where':_0x328eac[_0x1e54('0x36')]};return db[_0x1e54('0x2c')]['count'](_0x2ec18b)[_0x1e54('0x25')](function(_0x49dfcb){_0x25dd3f[_0x1e54('0x1f')]=_0x49dfcb;if(_0x282865[_0x1e54('0x2f')]['includeAll']){_0x328eac[_0x1e54('0x3d')]=[{'all':!![]}];}return db[_0x1e54('0x2c')][_0x1e54('0x3e')](_0x328eac);})[_0x1e54('0x25')](function(_0x3abe91){_0x25dd3f[_0x1e54('0x3f')]=_0x3abe91;return _0x25dd3f;})['then'](respondWithFilteredResult(_0x3812a2,_0x328eac))[_0x1e54('0x40')](handleError(_0x3812a2,null));};exports[_0x1e54('0x41')]=function(_0xa4edf5,_0x2a3ea7){var _0x5b17ee={'raw':!![],'where':{'id':_0xa4edf5['params']['id']}},_0x32cee4={};_0x32cee4['model']=_[_0x1e54('0x42')](db[_0x1e54('0x2c')]['rawAttributes']);_0x32cee4[_0x1e54('0x2f')]=_[_0x1e54('0x42')](_0xa4edf5[_0x1e54('0x2f')]);_0x32cee4[_0x1e54('0x37')]=_['intersection'](_0x32cee4[_0x1e54('0x33')],_0x32cee4['query']);_0x5b17ee[_0x1e54('0x30')]=_[_0x1e54('0x31')](_0x32cee4['model'],qs[_0x1e54('0x32')](_0xa4edf5[_0x1e54('0x2f')][_0x1e54('0x32')]));_0x5b17ee[_0x1e54('0x30')]=_0x5b17ee[_0x1e54('0x30')][_0x1e54('0x43')]?_0x5b17ee[_0x1e54('0x30')]:_0x32cee4['model'];if(_0xa4edf5['query'][_0x1e54('0x44')]){_0x5b17ee[_0x1e54('0x3d')]=[{'all':!![]}];}_0x5b17ee=_[_0x1e54('0x3a')]({},_0x5b17ee,_0xa4edf5['options']);return db[_0x1e54('0x2c')][_0x1e54('0x45')](_0x5b17ee)['then'](handleEntityNotFound(_0x2a3ea7,null))[_0x1e54('0x25')](respondWithResult(_0x2a3ea7,null))[_0x1e54('0x40')](handleError(_0x2a3ea7,null));};exports[_0x1e54('0x46')]=function(_0x293f8f,_0x2b062b){return db[_0x1e54('0x2c')][_0x1e54('0x46')](_0x293f8f[_0x1e54('0x47')],{})[_0x1e54('0x25')](respondWithResult(_0x2b062b,0xc9))[_0x1e54('0x40')](handleError(_0x2b062b,null));};exports[_0x1e54('0x24')]=function(_0x14cbe9,_0xd05676){if(_0x14cbe9[_0x1e54('0x47')]['id']){delete _0x14cbe9[_0x1e54('0x47')]['id'];}return db[_0x1e54('0x2c')][_0x1e54('0x45')]({'where':{'id':_0x14cbe9[_0x1e54('0x48')]['id']}})[_0x1e54('0x25')](handleEntityNotFound(_0xd05676,null))[_0x1e54('0x25')](saveUpdates(_0x14cbe9['body'],null))[_0x1e54('0x25')](respondWithResult(_0xd05676,null))[_0x1e54('0x40')](handleError(_0xd05676,null));};exports[_0x1e54('0x26')]=function(_0x20e831,_0x572e5){return db['SmsQueueReport'][_0x1e54('0x45')]({'where':{'id':_0x20e831[_0x1e54('0x48')]['id']}})[_0x1e54('0x25')](handleEntityNotFound(_0x572e5,null))[_0x1e54('0x25')](removeEntity(_0x572e5,null))[_0x1e54('0x40')](handleError(_0x572e5,null));};exports[_0x1e54('0x49')]=function(_0x449ee4,_0x185272){return db[_0x1e54('0x2c')][_0x1e54('0x49')]()[_0x1e54('0x25')](respondWithResult(_0x185272,null))['catch'](handleError(_0x185272,null));};
\ No newline at end of file