Built motion from commit b5413ace.|2.6.9
[motion2.git] / server / api / smsQueueReport / smsQueueReport.controller.js
index 0b02090..4ce8f75 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x881e=['key','map','query','keys','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','VIRTUAL','options','count','includeAll','include','findAll','rows','catch','show','params','find','create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','util','sox','ejs','lodash','squel','crypto','desk.js','to-csv','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','offset','Content-Range','reject','save','update','then','destroy','end','error','stack','name','send','index','SmsQueueReport','fieldName','type'];(function(_0x42930c,_0x566508){var _0x458254=function(_0x44c00e){while(--_0x44c00e){_0x42930c['push'](_0x42930c['shift']());}};_0x458254(++_0x566508);}(_0x881e,0x1a1));var _0xe881=function(_0x450f19,_0x49ed4c){_0x450f19=_0x450f19-0x0;var _0x5ab707=_0x881e[_0x450f19];return _0x5ab707;};'use strict';var pdf=require(_0xe881('0x0'));var emlformat=require(_0xe881('0x1'));var rimraf=require(_0xe881('0x2'));var zipdir=require(_0xe881('0x3'));var jsonpatch=require(_0xe881('0x4'));var rp=require(_0xe881('0x5'));var moment=require('moment');var BPromise=require(_0xe881('0x6'));var Mustache=require('mustache');var util=require(_0xe881('0x7'));var path=require('path');var sox=require(_0xe881('0x8'));var csv=require('to-csv');var ejs=require(_0xe881('0x9'));var fs=require('fs');var _=require(_0xe881('0xa'));var squel=require(_0xe881('0xb'));var crypto=require(_0xe881('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xe881('0xd'));var toCsv=require(_0xe881('0xe'));var querystring=require('querystring');var Papa=require(_0xe881('0xf'));var Redis=require(_0xe881('0x10'));var authService=require(_0xe881('0x11'));var qs=require(_0xe881('0x12'));var as=require(_0xe881('0x13'));var hardwareService=require(_0xe881('0x14'));var logger=require(_0xe881('0x15'))(_0xe881('0x16'));var utils=require(_0xe881('0x17'));var config=require(_0xe881('0x18'));var db=require(_0xe881('0x19'))['db'];function respondWithStatusCode(_0x13264f,_0x52d58e){_0x52d58e=_0x52d58e||0xcc;return function(_0x1f69c1){if(_0x1f69c1){return _0x13264f[_0xe881('0x1a')](_0x52d58e);}return _0x13264f[_0xe881('0x1b')](_0x52d58e)['end']();};}function respondWithResult(_0x469e8f,_0x5e2a4a){_0x5e2a4a=_0x5e2a4a||0xc8;return function(_0xdde90d){if(_0xdde90d){return _0x469e8f[_0xe881('0x1b')](_0x5e2a4a)[_0xe881('0x1c')](_0xdde90d);}};}function respondWithFilteredResult(_0x13f1ed,_0x1a5afe){return function(_0x545de8){if(_0x545de8){var _0x398bfc=_0x545de8['count'],_0x47cc09=_0x1a5afe[_0xe881('0x1d')],_0x35f83c=_0x1a5afe['offset']+_0x1a5afe['limit'],_0x3ec696;if(_0x35f83c>=_0x398bfc){_0x35f83c=_0x398bfc;_0x3ec696=0xc8;}else{_0x3ec696=0xce;}_0x13f1ed[_0xe881('0x1b')](_0x3ec696);return _0x13f1ed['set'](_0xe881('0x1e'),_0x47cc09+'-'+_0x35f83c+'/'+_0x398bfc)[_0xe881('0x1c')](_0x545de8);}return null;};}function patchUpdates(_0x176bc7){return function(_0x1cc44b){try{jsonpatch['apply'](_0x1cc44b,_0x176bc7,!![]);}catch(_0x447389){return BPromise[_0xe881('0x1f')](_0x447389);}return _0x1cc44b[_0xe881('0x20')]();};}function saveUpdates(_0x212d28,_0x2ab08d){return function(_0x7da341){if(_0x7da341){return _0x7da341[_0xe881('0x21')](_0x212d28)[_0xe881('0x22')](function(_0x43124f){return _0x43124f;});}return null;};}function removeEntity(_0x38ea6a,_0x5c67c4){return function(_0xa29dfd){if(_0xa29dfd){return _0xa29dfd[_0xe881('0x23')]()[_0xe881('0x22')](function(){_0x38ea6a['status'](0xcc)[_0xe881('0x24')]();});}};}function handleEntityNotFound(_0x272110,_0x532960){return function(_0x4636cb){if(!_0x4636cb){_0x272110[_0xe881('0x1a')](0x194);}return _0x4636cb;};}function handleError(_0x3ec386,_0x25fce3){_0x25fce3=_0x25fce3||0x1f4;return function(_0x1126f7){logger[_0xe881('0x25')](_0x1126f7[_0xe881('0x26')]);if(_0x1126f7['name']){delete _0x1126f7[_0xe881('0x27')];}_0x3ec386[_0xe881('0x1b')](_0x25fce3)[_0xe881('0x28')](_0x1126f7);};}exports[_0xe881('0x29')]=function(_0x55341a,_0x5a8974){var _0x401161={},_0xbbe2dc={},_0x18bc42={'count':0x0,'rows':[]};var _0x57c472=_['map'](db[_0xe881('0x2a')]['rawAttributes'],function(_0x31ee42){return{'name':_0x31ee42[_0xe881('0x2b')],'type':_0x31ee42[_0xe881('0x2c')][_0xe881('0x2d')]};});_0xbbe2dc['model']=_[_0xe881('0x2e')](_0x57c472,_0xe881('0x27'));_0xbbe2dc[_0xe881('0x2f')]=_[_0xe881('0x30')](_0x55341a[_0xe881('0x2f')]);_0xbbe2dc[_0xe881('0x31')]=_[_0xe881('0x32')](_0xbbe2dc[_0xe881('0x33')],_0xbbe2dc['query']);_0x401161[_0xe881('0x34')]=_[_0xe881('0x32')](_0xbbe2dc[_0xe881('0x33')],qs[_0xe881('0x35')](_0x55341a[_0xe881('0x2f')][_0xe881('0x35')]));_0x401161[_0xe881('0x34')]=_0x401161['attributes'][_0xe881('0x36')]?_0x401161[_0xe881('0x34')]:_0xbbe2dc[_0xe881('0x33')];if(!_0x55341a['query'][_0xe881('0x37')](_0xe881('0x38'))){_0x401161[_0xe881('0x39')]=qs['limit'](_0x55341a['query'][_0xe881('0x39')]);_0x401161[_0xe881('0x1d')]=qs[_0xe881('0x1d')](_0x55341a['query'][_0xe881('0x1d')]);}_0x401161[_0xe881('0x3a')]=qs[_0xe881('0x3b')](_0x55341a[_0xe881('0x2f')][_0xe881('0x3b')]);_0x401161[_0xe881('0x3c')]=qs[_0xe881('0x31')](_[_0xe881('0x3d')](_0x55341a[_0xe881('0x2f')],_0xbbe2dc[_0xe881('0x31')]));if(_0x55341a[_0xe881('0x2f')][_0xe881('0x3e')]){_0x401161[_0xe881('0x3c')]=_[_0xe881('0x3f')](_0x401161[_0xe881('0x3c')],{'$or':_[_0xe881('0x2e')](_0x57c472,function(_0x2ebd2c){if(_0x2ebd2c[_0xe881('0x2c')]!==_0xe881('0x40')){var _0x4a82ca={};_0x4a82ca[_0x2ebd2c[_0xe881('0x27')]]={'$like':'%'+_0x55341a[_0xe881('0x2f')][_0xe881('0x3e')]+'%'};return _0x4a82ca;}})});}_0x401161=_[_0xe881('0x3f')]({},_0x401161,_0x55341a[_0xe881('0x41')]);var _0x385c21={'where':_0x401161['where']};return db['SmsQueueReport'][_0xe881('0x42')](_0x385c21)[_0xe881('0x22')](function(_0x10369d){_0x18bc42[_0xe881('0x42')]=_0x10369d;if(_0x55341a[_0xe881('0x2f')][_0xe881('0x43')]){_0x401161[_0xe881('0x44')]=[{'all':!![]}];}return db[_0xe881('0x2a')][_0xe881('0x45')](_0x401161);})[_0xe881('0x22')](function(_0x3d4aad){_0x18bc42[_0xe881('0x46')]=_0x3d4aad;return _0x18bc42;})[_0xe881('0x22')](respondWithFilteredResult(_0x5a8974,_0x401161))[_0xe881('0x47')](handleError(_0x5a8974,null));};exports[_0xe881('0x48')]=function(_0x147e2b,_0x365066){var _0x1a1e07={'raw':!![],'where':{'id':_0x147e2b[_0xe881('0x49')]['id']}},_0x436a95={};_0x436a95[_0xe881('0x33')]=_['keys'](db[_0xe881('0x2a')]['rawAttributes']);_0x436a95[_0xe881('0x2f')]=_[_0xe881('0x30')](_0x147e2b[_0xe881('0x2f')]);_0x436a95[_0xe881('0x31')]=_[_0xe881('0x32')](_0x436a95[_0xe881('0x33')],_0x436a95[_0xe881('0x2f')]);_0x1a1e07['attributes']=_['intersection'](_0x436a95[_0xe881('0x33')],qs[_0xe881('0x35')](_0x147e2b['query'][_0xe881('0x35')]));_0x1a1e07[_0xe881('0x34')]=_0x1a1e07[_0xe881('0x34')]['length']?_0x1a1e07[_0xe881('0x34')]:_0x436a95[_0xe881('0x33')];if(_0x147e2b[_0xe881('0x2f')][_0xe881('0x43')]){_0x1a1e07[_0xe881('0x44')]=[{'all':!![]}];}_0x1a1e07=_[_0xe881('0x3f')]({},_0x1a1e07,_0x147e2b['options']);return db[_0xe881('0x2a')][_0xe881('0x4a')](_0x1a1e07)['then'](handleEntityNotFound(_0x365066,null))[_0xe881('0x22')](respondWithResult(_0x365066,null))['catch'](handleError(_0x365066,null));};exports[_0xe881('0x4b')]=function(_0x38f0f1,_0x37b6cd){return db[_0xe881('0x2a')][_0xe881('0x4b')](_0x38f0f1[_0xe881('0x4c')],{})[_0xe881('0x22')](respondWithResult(_0x37b6cd,0xc9))[_0xe881('0x47')](handleError(_0x37b6cd,null));};exports[_0xe881('0x21')]=function(_0x4d6ab1,_0x442e5a){if(_0x4d6ab1['body']['id']){delete _0x4d6ab1[_0xe881('0x4c')]['id'];}return db[_0xe881('0x2a')][_0xe881('0x4a')]({'where':{'id':_0x4d6ab1[_0xe881('0x49')]['id']}})[_0xe881('0x22')](handleEntityNotFound(_0x442e5a,null))['then'](saveUpdates(_0x4d6ab1['body'],null))[_0xe881('0x22')](respondWithResult(_0x442e5a,null))[_0xe881('0x47')](handleError(_0x442e5a,null));};exports['destroy']=function(_0x1a3533,_0x339f3d){return db[_0xe881('0x2a')][_0xe881('0x4a')]({'where':{'id':_0x1a3533[_0xe881('0x49')]['id']}})['then'](handleEntityNotFound(_0x339f3d,null))[_0xe881('0x22')](removeEntity(_0x339f3d,null))['catch'](handleError(_0x339f3d,null));};exports['describe']=function(_0x276355,_0x402537){return db[_0xe881('0x2a')]['describe']()[_0xe881('0x22')](respondWithResult(_0x402537,null))[_0xe881('0x47')](handleError(_0x402537,null));};
\ No newline at end of file
+var _0xa86f=['fields','length','attributes','hasOwnProperty','nolimit','order','sort','where','pick','merge','VIRTUAL','filter','options','include','findAll','rows','catch','show','params','intersection','includeAll','create','body','update','find','describe','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','sox','to-csv','fs-extra','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','undefined','count','offset','limit','Content-Range','apply','reject','save','then','error','stack','name','send','index','SmsQueueReport','rawAttributes','fieldName','type','key','model','map','query','keys','filters'];(function(_0x4e8b44,_0x474654){var _0x531bfc=function(_0x334bd9){while(--_0x334bd9){_0x4e8b44['push'](_0x4e8b44['shift']());}};_0x531bfc(++_0x474654);}(_0xa86f,0x146));var _0xfa86=function(_0x3da7ab,_0x2e00dc){_0x3da7ab=_0x3da7ab-0x0;var _0x4819ed=_0xa86f[_0x3da7ab];return _0x4819ed;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0xfa86('0x0'));var zipdir=require(_0xfa86('0x1'));var jsonpatch=require(_0xfa86('0x2'));var rp=require(_0xfa86('0x3'));var moment=require('moment');var BPromise=require(_0xfa86('0x4'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0xfa86('0x5'));var csv=require(_0xfa86('0x6'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0xfa86('0x7'));var _=require(_0xfa86('0x8'));var squel=require('squel');var crypto=require(_0xfa86('0x9'));var jsforce=require(_0xfa86('0xa'));var deskjs=require(_0xfa86('0xb'));var toCsv=require(_0xfa86('0x6'));var querystring=require(_0xfa86('0xc'));var Papa=require(_0xfa86('0xd'));var Redis=require('ioredis');var authService=require(_0xfa86('0xe'));var qs=require(_0xfa86('0xf'));var as=require(_0xfa86('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xfa86('0x11'))(_0xfa86('0x12'));var utils=require(_0xfa86('0x13'));var config=require('../../config/environment');var licenseUtil=require('../../config/license/util');var db=require(_0xfa86('0x14'))['db'];function respondWithStatusCode(_0x502aa1,_0x244d0f){_0x244d0f=_0x244d0f||0xcc;return function(_0x8ba86f){if(_0x8ba86f){return _0x502aa1[_0xfa86('0x15')](_0x244d0f);}return _0x502aa1[_0xfa86('0x16')](_0x244d0f)[_0xfa86('0x17')]();};}function respondWithResult(_0x517c27,_0x4b300e){_0x4b300e=_0x4b300e||0xc8;return function(_0x3bdb1c){if(_0x3bdb1c){return _0x517c27['status'](_0x4b300e)[_0xfa86('0x18')](_0x3bdb1c);}};}function respondWithFilteredResult(_0x3031f9,_0x5a6234){return function(_0x5613a9){if(_0x5613a9){var _0x32cfe7=typeof _0x5a6234['offset']===_0xfa86('0x19')&&typeof _0x5a6234['limit']==='undefined';var _0xca7d05=_0x5613a9[_0xfa86('0x1a')];var _0x18de55=_0x32cfe7?0x0:_0x5a6234['offset'];var _0x47bddc=_0x32cfe7?_0x5613a9['count']:_0x5a6234[_0xfa86('0x1b')]+_0x5a6234[_0xfa86('0x1c')];var _0x211dfd;if(_0x47bddc>=_0xca7d05){_0x47bddc=_0xca7d05;_0x211dfd=0xc8;}else{_0x211dfd=0xce;}_0x3031f9[_0xfa86('0x16')](_0x211dfd);return _0x3031f9['set'](_0xfa86('0x1d'),_0x18de55+'-'+_0x47bddc+'/'+_0xca7d05)[_0xfa86('0x18')](_0x5613a9);}return null;};}function patchUpdates(_0x4f137e){return function(_0x56cebe){try{jsonpatch[_0xfa86('0x1e')](_0x56cebe,_0x4f137e,!![]);}catch(_0x947dd0){return BPromise[_0xfa86('0x1f')](_0x947dd0);}return _0x56cebe[_0xfa86('0x20')]();};}function saveUpdates(_0x4c2d16,_0x539b5f){return function(_0x5e802f){if(_0x5e802f){return _0x5e802f['update'](_0x4c2d16)[_0xfa86('0x21')](function(_0x39db6b){return _0x39db6b;});}return null;};}function removeEntity(_0x4eadd0,_0x3017af){return function(_0x4a8046){if(_0x4a8046){return _0x4a8046['destroy']()[_0xfa86('0x21')](function(){_0x4eadd0['status'](0xcc)[_0xfa86('0x17')]();});}};}function handleEntityNotFound(_0x14be22,_0xcbcaff){return function(_0x5b6616){if(!_0x5b6616){_0x14be22[_0xfa86('0x15')](0x194);}return _0x5b6616;};}function handleError(_0x3f1e71,_0xd8f34f){_0xd8f34f=_0xd8f34f||0x1f4;return function(_0x2df4ae){logger[_0xfa86('0x22')](_0x2df4ae[_0xfa86('0x23')]);if(_0x2df4ae[_0xfa86('0x24')]){delete _0x2df4ae[_0xfa86('0x24')];}_0x3f1e71[_0xfa86('0x16')](_0xd8f34f)[_0xfa86('0x25')](_0x2df4ae);};}exports[_0xfa86('0x26')]=function(_0x523988,_0x179a80){var _0x55818b={},_0x329c0e={},_0x469eef={'count':0x0,'rows':[]};var _0x35d3fa=_['map'](db[_0xfa86('0x27')][_0xfa86('0x28')],function(_0x500f55){return{'name':_0x500f55[_0xfa86('0x29')],'type':_0x500f55[_0xfa86('0x2a')][_0xfa86('0x2b')]};});_0x329c0e[_0xfa86('0x2c')]=_[_0xfa86('0x2d')](_0x35d3fa,_0xfa86('0x24'));_0x329c0e[_0xfa86('0x2e')]=_[_0xfa86('0x2f')](_0x523988['query']);_0x329c0e[_0xfa86('0x30')]=_['intersection'](_0x329c0e[_0xfa86('0x2c')],_0x329c0e[_0xfa86('0x2e')]);_0x55818b['attributes']=_['intersection'](_0x329c0e['model'],qs[_0xfa86('0x31')](_0x523988[_0xfa86('0x2e')][_0xfa86('0x31')]));_0x55818b['attributes']=_0x55818b['attributes'][_0xfa86('0x32')]?_0x55818b[_0xfa86('0x33')]:_0x329c0e[_0xfa86('0x2c')];if(!_0x523988[_0xfa86('0x2e')][_0xfa86('0x34')](_0xfa86('0x35'))){_0x55818b[_0xfa86('0x1c')]=qs[_0xfa86('0x1c')](_0x523988[_0xfa86('0x2e')]['limit']);_0x55818b[_0xfa86('0x1b')]=qs['offset'](_0x523988['query'][_0xfa86('0x1b')]);}_0x55818b[_0xfa86('0x36')]=qs[_0xfa86('0x37')](_0x523988[_0xfa86('0x2e')][_0xfa86('0x37')]);_0x55818b[_0xfa86('0x38')]=qs[_0xfa86('0x30')](_[_0xfa86('0x39')](_0x523988[_0xfa86('0x2e')],_0x329c0e[_0xfa86('0x30')]),_0x35d3fa);if(_0x523988[_0xfa86('0x2e')]['filter']){_0x55818b['where']=_[_0xfa86('0x3a')](_0x55818b[_0xfa86('0x38')],{'$or':_['map'](_0x35d3fa,function(_0x59a28){if(_0x59a28[_0xfa86('0x2a')]!==_0xfa86('0x3b')){var _0x395f72={};_0x395f72[_0x59a28['name']]={'$like':'%'+_0x523988[_0xfa86('0x2e')][_0xfa86('0x3c')]+'%'};return _0x395f72;}})});}_0x55818b=_[_0xfa86('0x3a')]({},_0x55818b,_0x523988[_0xfa86('0x3d')]);var _0x297473={'where':_0x55818b[_0xfa86('0x38')]};return db[_0xfa86('0x27')][_0xfa86('0x1a')](_0x297473)['then'](function(_0x2cb538){_0x469eef[_0xfa86('0x1a')]=_0x2cb538;if(_0x523988[_0xfa86('0x2e')]['includeAll']){_0x55818b[_0xfa86('0x3e')]=[{'all':!![]}];}return db[_0xfa86('0x27')][_0xfa86('0x3f')](_0x55818b);})['then'](function(_0x2c281e){_0x469eef[_0xfa86('0x40')]=_0x2c281e;return _0x469eef;})['then'](respondWithFilteredResult(_0x179a80,_0x55818b))[_0xfa86('0x41')](handleError(_0x179a80,null));};exports[_0xfa86('0x42')]=function(_0x3d9bbe,_0x25b8e2){var _0x24b435={'raw':!![],'where':{'id':_0x3d9bbe[_0xfa86('0x43')]['id']}},_0x1ed920={};_0x1ed920[_0xfa86('0x2c')]=_[_0xfa86('0x2f')](db[_0xfa86('0x27')][_0xfa86('0x28')]);_0x1ed920[_0xfa86('0x2e')]=_[_0xfa86('0x2f')](_0x3d9bbe[_0xfa86('0x2e')]);_0x1ed920['filters']=_[_0xfa86('0x44')](_0x1ed920[_0xfa86('0x2c')],_0x1ed920[_0xfa86('0x2e')]);_0x24b435[_0xfa86('0x33')]=_[_0xfa86('0x44')](_0x1ed920['model'],qs[_0xfa86('0x31')](_0x3d9bbe[_0xfa86('0x2e')][_0xfa86('0x31')]));_0x24b435['attributes']=_0x24b435[_0xfa86('0x33')]['length']?_0x24b435[_0xfa86('0x33')]:_0x1ed920['model'];if(_0x3d9bbe[_0xfa86('0x2e')][_0xfa86('0x45')]){_0x24b435[_0xfa86('0x3e')]=[{'all':!![]}];}_0x24b435=_['merge']({},_0x24b435,_0x3d9bbe[_0xfa86('0x3d')]);return db[_0xfa86('0x27')]['find'](_0x24b435)[_0xfa86('0x21')](handleEntityNotFound(_0x25b8e2,null))['then'](respondWithResult(_0x25b8e2,null))[_0xfa86('0x41')](handleError(_0x25b8e2,null));};exports[_0xfa86('0x46')]=function(_0x443850,_0x17116c){return db[_0xfa86('0x27')][_0xfa86('0x46')](_0x443850[_0xfa86('0x47')],{})[_0xfa86('0x21')](respondWithResult(_0x17116c,0xc9))[_0xfa86('0x41')](handleError(_0x17116c,null));};exports[_0xfa86('0x48')]=function(_0x41e8b5,_0x2d9f27){if(_0x41e8b5[_0xfa86('0x47')]['id']){delete _0x41e8b5['body']['id'];}return db[_0xfa86('0x27')]['find']({'where':{'id':_0x41e8b5['params']['id']}})['then'](handleEntityNotFound(_0x2d9f27,null))[_0xfa86('0x21')](saveUpdates(_0x41e8b5[_0xfa86('0x47')],null))[_0xfa86('0x21')](respondWithResult(_0x2d9f27,null))['catch'](handleError(_0x2d9f27,null));};exports['destroy']=function(_0x2ce700,_0x2d5614){return db[_0xfa86('0x27')][_0xfa86('0x49')]({'where':{'id':_0x2ce700[_0xfa86('0x43')]['id']}})[_0xfa86('0x21')](handleEntityNotFound(_0x2d5614,null))['then'](removeEntity(_0x2d5614,null))[_0xfa86('0x41')](handleError(_0x2d5614,null));};exports[_0xfa86('0x4a')]=function(_0x8be4f9,_0x38d97a){return db['SmsQueueReport'][_0xfa86('0x4a')]()[_0xfa86('0x21')](respondWithResult(_0x38d97a,null))[_0xfa86('0x41')](handleError(_0x38d97a,null));};
\ No newline at end of file