Built motion from commit d127c62.|0.0.151
[motion.git] / server / config / fax.js
index a7f1c72..c9d6764 100644 (file)
@@ -1 +1 @@
-var _0x47a0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6E\x6F\x64\x65\x2D\x75\x75\x69\x64","\x74\x69\x66\x66\x2D\x74\x6F\x2D\x70\x6E\x67","\x65\x78\x65\x63","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x66\x73","\x70\x61\x74\x68","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x43\x6F\x6E\x74\x61\x63\x74","\x45\x76\x65\x6E\x74","\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x72\x65\x67\x69\x73\x74\x65\x72","\x72\x65\x63\x65\x69\x76\x65\x66\x61\x78","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x73\x74\x61\x74\x75\x73","\x52\x45\x43\x45\x49\x56\x45\x44","\x46\x61\x78\x52\x6F\x6F\x6D\x49\x64","\x69\x64","\x49\x4E\x43\x4F\x4D\x49\x4E\x47","\x46\x41\x58","\x63\x72\x65\x61\x74\x65","\x73\x65\x74\x46\x72\x6F\x6D","\x73\x70\x72\x65\x61\x64","\x72\x65\x6D\x6F\x74\x65\x73\x74\x61\x74\x69\x6F\x6E\x69\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x74\x54\x6F","\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64","\x76\x34","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x66\x61\x78","\x69\x6E\x62\x6F\x75\x6E\x64","\x2E\x70\x64\x66","\x6A\x6F\x69\x6E","\x63\x6F\x6E\x76\x65\x72\x74\x20","\x20","\x54\x68\x65\x20\x66\x69\x6C\x65\x20","\x20\x65\x78\x69\x74\x73","\x20\x77\x61\x73\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x20\x69\x6E\x20\x50\x44\x46","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x74\x73","\x65\x78\x69\x73\x74\x73","\x4E\x45\x57","\x6F\x6E","\x73\x65\x6E\x64\x66\x61\x78","\x2A\x2A\x2A\x53\x65\x6E\x64\x46\x41\x58\x2A\x2A\x2A","\x6C\x6F\x67","\x75\x6E\x69\x71\x75\x65\x69\x64","\x66\x69\x6E\x64\x4F\x6E\x65","\x76\x61\x72\x73\x65\x74","\x66\x61\x78\x73\x74\x61\x74\x75\x73","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x76\x61\x72\x69\x61\x62\x6C\x65","\x56\x61\x72\x53\x65\x74\x3A\x20","\x76\x61\x6C\x75\x65","\x46\x41\x49\x4C\x45\x44","\x53\x45\x4E\x54","\x66\x61\x78\x65\x72\x72\x6F\x72","\x66\x61\x78\x73\x74\x61\x74\x75\x73\x73\x74\x72\x69\x6E\x67","\x6C\x61\x73\x74\x73\x74\x61\x74\x75\x73","\x75\x73\x65\x72\x65\x76\x65\x6E\x74","\x46\x61\x78","\x53\x45\x4E\x44\x49\x4E\x47","\x75\x75\x69\x64","\x46\x41\x58\x53\x74\x61\x74\x75\x73\x3A\x20","\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x61\x6D\x69"];_0x47a0[0];var _=require(_0x47a0[1]);var uuidLib=require(_0x47a0[2]);var ConvertTiff=require(_0x47a0[3]);var exec=require(_0x47a0[5])[_0x47a0[4]];var fs=require(_0x47a0[6]);var path=require(_0x47a0[7]);var FaxMessage=require(_0x47a0[9])[_0x47a0[8]];var FaxRoom=require(_0x47a0[9])[_0x47a0[10]];var Contact=require(_0x47a0[9])[_0x47a0[11]];var Event=require(_0x47a0[9])[_0x47a0[12]];var config=require(_0x47a0[13]);exports[_0x47a0[14]]=function(_0x2c78xc){_0x2c78xc[_0x47a0[50]](_0x47a0[15],function(_0x2c78xd){FaxRoom[_0x47a0[24]]({status:_0x47a0[49],from:_0x2c78xd[_0x47a0[27]],FaxAccountId:1})[_0x47a0[45]](function(_0x2c78xf){_0x2c78xd[_0x47a0[18]]=_0x47a0[19];_0x2c78xd[_0x47a0[20]]=_0x2c78xf[_0x47a0[21]];FaxMessage[_0x47a0[24]](_0x2c78xd)[_0x47a0[45]](function(_0x2c78x10){Event[_0x47a0[24]]({name:_0x47a0[22],channel:_0x47a0[23],FaxRoomId:_0x2c78xf[_0x47a0[21]],FaxAccountId:1})[_0x47a0[17]](function(_0x2c78xe){console[_0x47a0[16]](_0x2c78xe)});Contact[_0x47a0[28]]({where:{phone:_0x2c78xd[_0x47a0[27]]},defaults:{phone:_0x2c78xd[_0x47a0[27]],fullname:_0x2c78xd[_0x47a0[27]]}})[_0x47a0[26]](function(_0x2c78x11,_0x2c78x12){_0x2c78x10[_0x47a0[25]](_0x2c78x11)});Contact[_0x47a0[28]]({where:{phone:_0x2c78xd[_0x47a0[30]]},defaults:{phone:_0x2c78xd[_0x47a0[30]],fullname:_0x2c78xd[_0x47a0[30]]}})[_0x47a0[26]](function(_0x2c78x11,_0x2c78x12){_0x2c78x10[_0x47a0[29]](_0x2c78x11)});var _0x2c78x13=uuidLib[_0x47a0[31]]();var _0x2c78x14=_0x2c78xd[_0x47a0[32]];var _0x2c78x15=path[_0x47a0[39]](config[_0x47a0[33]],_0x47a0[34],_0x47a0[35],_0x47a0[36],_0x47a0[37],_0x2c78x13+_0x47a0[38]);var _0x2c78x16=_0x47a0[40]+_0x2c78x14+_0x47a0[41]+_0x2c78x15;fs[_0x47a0[48]](_0x2c78x14,function(_0x2c78x17){if(_0x2c78x17){console[_0x47a0[16]](_0x47a0[42]+_0x2c78x14+_0x47a0[43]);exec(_0x2c78x16,function(_0x2c78xe){if(_0x2c78xe){console[_0x47a0[16]](_0x2c78xe)}else {_0x2c78x10[_0x47a0[46]]({filenamePDF:_0x2c78x13+_0x47a0[38]})[_0x47a0[45]](function(){console[_0x47a0[16]](_0x47a0[42]+_0x2c78x14+_0x47a0[44])})[_0x47a0[17]](function(_0x2c78xe){console[_0x47a0[16]](_0x2c78xe)})}})}else {console[_0x47a0[16]](_0x47a0[42]+_0x2c78x14+_0x47a0[47])}})})[_0x47a0[17]](function(_0x2c78xe){console[_0x47a0[16]](_0x2c78xe)})})[_0x47a0[17]](function(_0x2c78xe){console[_0x47a0[16]](_0x2c78xe)})});_0x2c78xc[_0x47a0[50]](_0x47a0[51],function(_0x2c78xd){console[_0x47a0[53]](_0x47a0[52]);FaxMessage[_0x47a0[55]]({where:{uniqueid:_0x2c78xd[_0x47a0[54]]}})[_0x47a0[45]](function(_0x2c78x10){if(_0x2c78x10){_0x2c78x10[_0x47a0[46]](_0x2c78xd)}})[_0x47a0[17]](function(_0x2c78xe){console[_0x47a0[16]](_0x2c78xe)})});_0x2c78xc[_0x47a0[50]](_0x47a0[56],function(_0x2c78xd){if(_0x2c78xd[_0x47a0[59]][_0x47a0[58]](_0x47a0[57])){FaxMessage[_0x47a0[55]]({where:{uniqueid:_0x2c78xd[_0x47a0[54]]}})[_0x47a0[45]](function(_0x2c78x10){if(_0x2c78x10){console[_0x47a0[53]](_0x47a0[60],_0x47a0[18],_0x2c78xd[_0x47a0[61]]);_0x2c78x10[_0x47a0[46]]({status:_0x2c78xd[_0x47a0[61]]==_0x47a0[62]?_0x47a0[62]:_0x47a0[63]})}})[_0x47a0[17]](function(_0x2c78xe){console[_0x47a0[16]](_0x2c78xe)})}else {if(_0x2c78xd[_0x47a0[59]][_0x47a0[58]](_0x47a0[64])){FaxMessage[_0x47a0[55]]({where:{uniqueid:_0x2c78xd[_0x47a0[54]]}})[_0x47a0[45]](function(_0x2c78x10){if(_0x2c78x10){console[_0x47a0[53]](_0x47a0[60],_0x47a0[16],_0x2c78xd[_0x47a0[61]]);_0x2c78x10[_0x47a0[46]]({error:_0x2c78xd[_0x47a0[61]]})}})[_0x47a0[17]](function(_0x2c78xe){console[_0x47a0[16]](_0x2c78xe)})}else {if(_0x2c78xd[_0x47a0[59]][_0x47a0[58]](_0x47a0[65])){FaxMessage[_0x47a0[55]]({where:{uniqueid:_0x2c78xd[_0x47a0[54]]}})[_0x47a0[45]](function(_0x2c78x10){if(_0x2c78x10){console[_0x47a0[53]](_0x47a0[60],_0x47a0[66],_0x2c78xd[_0x47a0[61]]);_0x2c78x10[_0x47a0[46]]({laststatus:_0x2c78xd[_0x47a0[61]]})}})[_0x47a0[17]](function(_0x2c78xe){console[_0x47a0[16]](_0x2c78xe)})}}}});_0x2c78xc[_0x47a0[50]](_0x47a0[67],function(_0x2c78xd){if(_0x2c78xd[_0x47a0[67]]===_0x47a0[68]){FaxMessage[_0x47a0[55]]({where:{uuid:_0x2c78xd[_0x47a0[70]]}})[_0x47a0[45]](function(_0x2c78x10){if(_0x2c78x10){_0x2c78xd[_0x47a0[18]]=_0x47a0[69];_0x2c78x10[_0x47a0[46]](_0x2c78xd)}})[_0x47a0[17]](function(_0x2c78xe){console[_0x47a0[16]](_0x2c78xe)})}});_0x2c78xc[_0x47a0[50]](_0x47a0[57],function(_0x2c78xd){FaxMessage[_0x47a0[55]]({where:{uniqueid:_0x2c78xd[_0x47a0[54]]}})[_0x47a0[45]](function(_0x2c78x10){if(_0x2c78x10){console[_0x47a0[53]](_0x47a0[71],_0x2c78xd[_0x47a0[54]],_0x2c78xd[_0x47a0[18]]);_0x2c78x10[_0x47a0[46]]({operation:_0x2c78xd[_0x47a0[72]],laststatus:_0x2c78xd[_0x47a0[18]]})}})[_0x47a0[17]](function(_0x2c78xe){console[_0x47a0[16]](_0x2c78xe)})});require(_0x47a0[73])[_0x47a0[14]](_0x2c78xc)}
\ No newline at end of file
+var _0x40c8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6E\x6F\x64\x65\x2D\x75\x75\x69\x64","\x74\x69\x66\x66\x2D\x74\x6F\x2D\x70\x6E\x67","\x65\x78\x65\x63","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x66\x73","\x70\x61\x74\x68","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x43\x6F\x6E\x74\x61\x63\x74","\x45\x76\x65\x6E\x74","\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x72\x65\x67\x69\x73\x74\x65\x72","\x72\x65\x63\x65\x69\x76\x65\x66\x61\x78","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x73\x74\x61\x74\x75\x73","\x52\x45\x43\x45\x49\x56\x45\x44","\x46\x61\x78\x52\x6F\x6F\x6D\x49\x64","\x69\x64","\x49\x4E\x43\x4F\x4D\x49\x4E\x47","\x46\x41\x58","\x63\x72\x65\x61\x74\x65","\x73\x65\x74\x46\x72\x6F\x6D","\x73\x70\x72\x65\x61\x64","\x72\x65\x6D\x6F\x74\x65\x73\x74\x61\x74\x69\x6F\x6E\x69\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x74\x54\x6F","\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64","\x76\x34","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x66\x61\x78","\x69\x6E\x62\x6F\x75\x6E\x64","\x2E\x70\x64\x66","\x6A\x6F\x69\x6E","\x63\x6F\x6E\x76\x65\x72\x74\x20","\x20","\x54\x68\x65\x20\x66\x69\x6C\x65\x20","\x20\x65\x78\x69\x74\x73","\x20\x77\x61\x73\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x20\x69\x6E\x20\x50\x44\x46","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x74\x73","\x65\x78\x69\x73\x74\x73","\x4E\x45\x57","\x6F\x6E","\x73\x65\x6E\x64\x66\x61\x78","\x2A\x2A\x2A\x53\x65\x6E\x64\x46\x41\x58\x2A\x2A\x2A","\x6C\x6F\x67","\x75\x6E\x69\x71\x75\x65\x69\x64","\x66\x69\x6E\x64\x4F\x6E\x65","\x76\x61\x72\x73\x65\x74","\x66\x61\x78\x73\x74\x61\x74\x75\x73","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x76\x61\x72\x69\x61\x62\x6C\x65","\x56\x61\x72\x53\x65\x74\x3A\x20","\x76\x61\x6C\x75\x65","\x46\x41\x49\x4C\x45\x44","\x53\x45\x4E\x54","\x66\x61\x78\x65\x72\x72\x6F\x72","\x66\x61\x78\x73\x74\x61\x74\x75\x73\x73\x74\x72\x69\x6E\x67","\x6C\x61\x73\x74\x73\x74\x61\x74\x75\x73","\x75\x73\x65\x72\x65\x76\x65\x6E\x74","\x46\x61\x78","\x53\x45\x4E\x44\x49\x4E\x47","\x75\x75\x69\x64","\x46\x41\x58\x53\x74\x61\x74\x75\x73\x3A\x20","\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x61\x6D\x69"];_0x40c8[0];var _=require(_0x40c8[1]);var uuidLib=require(_0x40c8[2]);var ConvertTiff=require(_0x40c8[3]);var exec=require(_0x40c8[5])[_0x40c8[4]];var fs=require(_0x40c8[6]);var path=require(_0x40c8[7]);var FaxMessage=require(_0x40c8[9])[_0x40c8[8]];var FaxRoom=require(_0x40c8[9])[_0x40c8[10]];var Contact=require(_0x40c8[9])[_0x40c8[11]];var Event=require(_0x40c8[9])[_0x40c8[12]];var config=require(_0x40c8[13]);exports[_0x40c8[14]]= function(_0x197exc){_0x197exc[_0x40c8[50]](_0x40c8[15],function(_0x197exd){FaxRoom[_0x40c8[24]]({status:_0x40c8[49],from:_0x197exd[_0x40c8[27]],FaxAccountId:1})[_0x40c8[45]](function(_0x197exf){_0x197exd[_0x40c8[18]]= _0x40c8[19];_0x197exd[_0x40c8[20]]= _0x197exf[_0x40c8[21]];FaxMessage[_0x40c8[24]](_0x197exd)[_0x40c8[45]](function(_0x197ex10){Event[_0x40c8[24]]({name:_0x40c8[22],channel:_0x40c8[23],FaxRoomId:_0x197exf[_0x40c8[21]],FaxAccountId:1})[_0x40c8[17]](function(_0x197exe){console[_0x40c8[16]](_0x197exe)});Contact[_0x40c8[28]]({where:{phone:_0x197exd[_0x40c8[27]]},defaults:{phone:_0x197exd[_0x40c8[27]],fullname:_0x197exd[_0x40c8[27]]}})[_0x40c8[26]](function(_0x197ex11,_0x197ex12){_0x197ex10[_0x40c8[25]](_0x197ex11)});Contact[_0x40c8[28]]({where:{phone:_0x197exd[_0x40c8[30]]},defaults:{phone:_0x197exd[_0x40c8[30]],fullname:_0x197exd[_0x40c8[30]]}})[_0x40c8[26]](function(_0x197ex11,_0x197ex12){_0x197ex10[_0x40c8[29]](_0x197ex11)});var _0x197ex13=uuidLib[_0x40c8[31]]();var _0x197ex14=_0x197exd[_0x40c8[32]];var _0x197ex15=path[_0x40c8[39]](config[_0x40c8[33]],_0x40c8[34],_0x40c8[35],_0x40c8[36],_0x40c8[37],_0x197ex13+ _0x40c8[38]);var _0x197ex16=_0x40c8[40]+ _0x197ex14+ _0x40c8[41]+ _0x197ex15;fs[_0x40c8[48]](_0x197ex14,function(_0x197ex17){if(_0x197ex17){console[_0x40c8[16]](_0x40c8[42]+ _0x197ex14+ _0x40c8[43]);exec(_0x197ex16,function(_0x197exe){if(_0x197exe){console[_0x40c8[16]](_0x197exe)}else {_0x197ex10[_0x40c8[46]]({filenamePDF:_0x197ex13+ _0x40c8[38]})[_0x40c8[45]](function(){console[_0x40c8[16]](_0x40c8[42]+ _0x197ex14+ _0x40c8[44])})[_0x40c8[17]](function(_0x197exe){console[_0x40c8[16]](_0x197exe)})}})}else {console[_0x40c8[16]](_0x40c8[42]+ _0x197ex14+ _0x40c8[47])}})})[_0x40c8[17]](function(_0x197exe){console[_0x40c8[16]](_0x197exe)})})[_0x40c8[17]](function(_0x197exe){console[_0x40c8[16]](_0x197exe)})});_0x197exc[_0x40c8[50]](_0x40c8[51],function(_0x197exd){console[_0x40c8[53]](_0x40c8[52]);FaxMessage[_0x40c8[55]]({where:{uniqueid:_0x197exd[_0x40c8[54]]}})[_0x40c8[45]](function(_0x197ex10){if(_0x197ex10){_0x197ex10[_0x40c8[46]](_0x197exd)}})[_0x40c8[17]](function(_0x197exe){console[_0x40c8[16]](_0x197exe)})});_0x197exc[_0x40c8[50]](_0x40c8[56],function(_0x197exd){if(_0x197exd[_0x40c8[59]][_0x40c8[58]](_0x40c8[57])){FaxMessage[_0x40c8[55]]({where:{uniqueid:_0x197exd[_0x40c8[54]]}})[_0x40c8[45]](function(_0x197ex10){if(_0x197ex10){console[_0x40c8[53]](_0x40c8[60],_0x40c8[18],_0x197exd[_0x40c8[61]]);_0x197ex10[_0x40c8[46]]({status:_0x197exd[_0x40c8[61]]== _0x40c8[62]?_0x40c8[62]:_0x40c8[63]})}})[_0x40c8[17]](function(_0x197exe){console[_0x40c8[16]](_0x197exe)})}else {if(_0x197exd[_0x40c8[59]][_0x40c8[58]](_0x40c8[64])){FaxMessage[_0x40c8[55]]({where:{uniqueid:_0x197exd[_0x40c8[54]]}})[_0x40c8[45]](function(_0x197ex10){if(_0x197ex10){console[_0x40c8[53]](_0x40c8[60],_0x40c8[16],_0x197exd[_0x40c8[61]]);_0x197ex10[_0x40c8[46]]({error:_0x197exd[_0x40c8[61]]})}})[_0x40c8[17]](function(_0x197exe){console[_0x40c8[16]](_0x197exe)})}else {if(_0x197exd[_0x40c8[59]][_0x40c8[58]](_0x40c8[65])){FaxMessage[_0x40c8[55]]({where:{uniqueid:_0x197exd[_0x40c8[54]]}})[_0x40c8[45]](function(_0x197ex10){if(_0x197ex10){console[_0x40c8[53]](_0x40c8[60],_0x40c8[66],_0x197exd[_0x40c8[61]]);_0x197ex10[_0x40c8[46]]({laststatus:_0x197exd[_0x40c8[61]]})}})[_0x40c8[17]](function(_0x197exe){console[_0x40c8[16]](_0x197exe)})}}}});_0x197exc[_0x40c8[50]](_0x40c8[67],function(_0x197exd){if(_0x197exd[_0x40c8[67]]=== _0x40c8[68]){FaxMessage[_0x40c8[55]]({where:{uuid:_0x197exd[_0x40c8[70]]}})[_0x40c8[45]](function(_0x197ex10){if(_0x197ex10){_0x197exd[_0x40c8[18]]= _0x40c8[69];_0x197ex10[_0x40c8[46]](_0x197exd)}})[_0x40c8[17]](function(_0x197exe){console[_0x40c8[16]](_0x197exe)})}});_0x197exc[_0x40c8[50]](_0x40c8[57],function(_0x197exd){FaxMessage[_0x40c8[55]]({where:{uniqueid:_0x197exd[_0x40c8[54]]}})[_0x40c8[45]](function(_0x197ex10){if(_0x197ex10){console[_0x40c8[53]](_0x40c8[71],_0x197exd[_0x40c8[54]],_0x197exd[_0x40c8[18]]);_0x197ex10[_0x40c8[46]]({operation:_0x197exd[_0x40c8[72]],laststatus:_0x197exd[_0x40c8[18]]})}})[_0x40c8[17]](function(_0x197exe){console[_0x40c8[16]](_0x197exe)})});require(_0x40c8[73])[_0x40c8[14]](_0x197exc)}
\ No newline at end of file