Built motion from commit 85328c08.|2.5.50
[motion2.git] / server / api / intZohoAccount / intZohoAccount.controller.js
index 36d4c24..5a2c6af 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x291c=['https://accounts.zoho.com.au','https://accounts.zoho.eu','https://accounts.zoho.com.cn','POST','/oauth/v2/token','clientId','clientSecret','refresh_token','access_token','getFields','host','refreshToken','zoho.eu','com','slice','lastIndexOf','Refresh\x20Token\x20not\x20available\x20for\x20the\x20account','GET','format','Calls','response','Owner','Subject','Description','Call_Duration','Call_Result','Call_Start_Time','Call_Type','api_name','custom_field','data_type','picklist','pick_list_values','statusCode','Wrong\x20credentials','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../mysqldb','../../components/integrations/configuration','jayson/promise','http','test','Sequelize','ValidationError','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','ZohoAccount,\x20%s,\x20%s','request\x20sent','debug','ZohoAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','sendStatus','status','json','count','offset','limit','set','reject','save','update','then','end','stack','name','send','index','map','rawAttributes','type','key','model','keys','intersection','attributes','fields','query','nolimit','order','sort','where','filters','pick','filter','merge','VIRTUAL','options','ZohoAccount','include','findAll','rows','catch','show','params','includeAll','find','create','body','destroy','getConfigurations','findOne','ZohoConfiguration','length','addConfiguration','AccountId','getSubjects','getDescriptions','channel','ZohoField','Descriptions','zone','https://accounts.zoho.com'];(function(_0x13ce0c,_0x3f2a0d){var _0x4388fb=function(_0x27db4b){while(--_0x27db4b){_0x13ce0c['push'](_0x13ce0c['shift']());}};_0x4388fb(++_0x3f2a0d);}(_0x291c,0x137));var _0xc291=function(_0x4a9fb1,_0x273043){_0x4a9fb1=_0x4a9fb1-0x0;var _0x348672=_0x291c[_0x4a9fb1];return _0x348672;};'use strict';var pdf=require(_0xc291('0x0'));var emlformat=require(_0xc291('0x1'));var rimraf=require(_0xc291('0x2'));var zipdir=require(_0xc291('0x3'));var jsonpatch=require(_0xc291('0x4'));var rp=require(_0xc291('0x5'));var moment=require(_0xc291('0x6'));var BPromise=require(_0xc291('0x7'));var Mustache=require(_0xc291('0x8'));var util=require(_0xc291('0x9'));var path=require(_0xc291('0xa'));var sox=require('sox');var csv=require(_0xc291('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xc291('0xc'));var crypto=require(_0xc291('0xd'));var jsforce=require(_0xc291('0xe'));var deskjs=require(_0xc291('0xf'));var toCsv=require('to-csv');var querystring=require(_0xc291('0x10'));var Papa=require(_0xc291('0x11'));var Redis=require(_0xc291('0x12'));var authService=require(_0xc291('0x13'));var qs=require(_0xc291('0x14'));var as=require(_0xc291('0x15'));var hardwareService=require(_0xc291('0x16'));var logger=require(_0xc291('0x17'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xc291('0x18'))['db'];var integrations=require(_0xc291('0x19'));var jayson=require(_0xc291('0x1a'));var client=jayson['client'][_0xc291('0x1b')]({'port':0x232a});function checkPasswordPattern(_0x4ea590,_0x13f6d0,_0x9b3761){if(_0x9b3761){var _0x1217f8=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1217f8[_0xc291('0x1c')](_0x13f6d0)){return _0x4ea590;}else{throw new db[(_0xc291('0x1d'))][(_0xc291('0x1e'))](_0xc291('0x1f'));}}else{return _0x4ea590;}}function respondWithRpcPromise(_0x409efe,_0x1fe920,_0x7eb5f1,_0x5495ff){return new BPromise(function(_0x305ecc,_0x23dbf0){var _0x5888de=_0x5495ff||client;return _0x5888de[_0xc291('0x20')](_0x409efe,_0x7eb5f1)['then'](function(_0x4c8947){logger['info'](_0xc291('0x21'),_0x1fe920,_0xc291('0x22'));logger[_0xc291('0x23')](_0xc291('0x24'),_0x1fe920,_0xc291('0x22'),JSON[_0xc291('0x25')](_0x4c8947));if(_0x4c8947[_0xc291('0x26')]){if(_0x4c8947[_0xc291('0x26')][_0xc291('0x27')]===0x1f4){logger[_0xc291('0x26')]('ZohoAccount,\x20%s,\x20%s',_0x1fe920,_0x4c8947[_0xc291('0x26')][_0xc291('0x28')]);return _0x23dbf0(_0x4c8947[_0xc291('0x26')]['message']);}logger[_0xc291('0x26')]('ZohoAccount,\x20%s,\x20%s',_0x1fe920,_0x4c8947[_0xc291('0x26')][_0xc291('0x28')]);return _0x305ecc(_0x4c8947['error']['message']);}else{logger[_0xc291('0x29')](_0xc291('0x21'),_0x1fe920,_0xc291('0x22'));_0x305ecc(_0x4c8947['result'][_0xc291('0x28')]);}})['catch'](function(_0x13a3cd){logger[_0xc291('0x26')](_0xc291('0x21'),_0x1fe920,_0x13a3cd);_0x23dbf0(_0x13a3cd);});});}function respondWithStatusCode(_0x773903,_0x879898){_0x879898=_0x879898||0xcc;return function(_0x11a235){if(_0x11a235){return _0x773903[_0xc291('0x2a')](_0x879898);}return _0x773903[_0xc291('0x2b')](_0x879898)['end']();};}function respondWithResult(_0x3e4e3c,_0x273c0a){_0x273c0a=_0x273c0a||0xc8;return function(_0x1ed0af){if(_0x1ed0af){return _0x3e4e3c['status'](_0x273c0a)[_0xc291('0x2c')](_0x1ed0af);}};}function respondWithFilteredResult(_0xbf4adb,_0x345159){return function(_0xd38395){if(_0xd38395){var _0xec5f68=_0xd38395[_0xc291('0x2d')],_0x48e001=_0x345159['offset'],_0x192f4c=_0x345159[_0xc291('0x2e')]+_0x345159[_0xc291('0x2f')],_0x269c8e;if(_0x192f4c>=_0xec5f68){_0x192f4c=_0xec5f68;_0x269c8e=0xc8;}else{_0x269c8e=0xce;}_0xbf4adb[_0xc291('0x2b')](_0x269c8e);return _0xbf4adb[_0xc291('0x30')]('Content-Range',_0x48e001+'-'+_0x192f4c+'/'+_0xec5f68)['json'](_0xd38395);}return null;};}function patchUpdates(_0x4917e9){return function(_0x2a3c9d){try{jsonpatch['apply'](_0x2a3c9d,_0x4917e9,!![]);}catch(_0x5a0587){return BPromise[_0xc291('0x31')](_0x5a0587);}return _0x2a3c9d[_0xc291('0x32')]();};}function saveUpdates(_0xf05ddf,_0x3059cb){return function(_0x1fcace){if(_0x1fcace){return _0x1fcace[_0xc291('0x33')](_0xf05ddf)[_0xc291('0x34')](function(_0x16ea89){return _0x16ea89;});}return null;};}function removeEntity(_0x1a998f,_0x54a278){return function(_0x20a9df){if(_0x20a9df){return _0x20a9df['destroy']()[_0xc291('0x34')](function(){_0x1a998f[_0xc291('0x2b')](0xcc)[_0xc291('0x35')]();});}};}function handleEntityNotFound(_0x50f268,_0x1095be){return function(_0x1961a3){if(!_0x1961a3){_0x50f268['sendStatus'](0x194);}return _0x1961a3;};}function handleError(_0x446583,_0x7b83f6){_0x7b83f6=_0x7b83f6||0x1f4;return function(_0x4abf51){logger[_0xc291('0x26')](_0x4abf51[_0xc291('0x36')]);if(_0x4abf51[_0xc291('0x37')]){delete _0x4abf51[_0xc291('0x37')];}_0x446583[_0xc291('0x2b')](_0x7b83f6)[_0xc291('0x38')](_0x4abf51);};}exports[_0xc291('0x39')]=function(_0x49e1fc,_0x2e0cd7){var _0x2e71d6={},_0x44e333={},_0x22ba5b={'count':0x0,'rows':[]};var _0x21cca3=_[_0xc291('0x3a')](db['ZohoAccount'][_0xc291('0x3b')],function(_0x4e4f9a){return{'name':_0x4e4f9a['fieldName'],'type':_0x4e4f9a[_0xc291('0x3c')][_0xc291('0x3d')]};});_0x44e333[_0xc291('0x3e')]=_[_0xc291('0x3a')](_0x21cca3,'name');_0x44e333['query']=_[_0xc291('0x3f')](_0x49e1fc['query']);_0x44e333['filters']=_[_0xc291('0x40')](_0x44e333[_0xc291('0x3e')],_0x44e333['query']);_0x2e71d6[_0xc291('0x41')]=_['intersection'](_0x44e333[_0xc291('0x3e')],qs[_0xc291('0x42')](_0x49e1fc[_0xc291('0x43')][_0xc291('0x42')]));_0x2e71d6[_0xc291('0x41')]=_0x2e71d6[_0xc291('0x41')]['length']?_0x2e71d6[_0xc291('0x41')]:_0x44e333[_0xc291('0x3e')];if(!_0x49e1fc['query']['hasOwnProperty'](_0xc291('0x44'))){_0x2e71d6[_0xc291('0x2f')]=qs[_0xc291('0x2f')](_0x49e1fc['query'][_0xc291('0x2f')]);_0x2e71d6[_0xc291('0x2e')]=qs['offset'](_0x49e1fc[_0xc291('0x43')]['offset']);}_0x2e71d6[_0xc291('0x45')]=qs[_0xc291('0x46')](_0x49e1fc['query'][_0xc291('0x46')]);_0x2e71d6[_0xc291('0x47')]=qs[_0xc291('0x48')](_[_0xc291('0x49')](_0x49e1fc[_0xc291('0x43')],_0x44e333[_0xc291('0x48')]));if(_0x49e1fc['query'][_0xc291('0x4a')]){_0x2e71d6[_0xc291('0x47')]=_[_0xc291('0x4b')](_0x2e71d6[_0xc291('0x47')],{'$or':_[_0xc291('0x3a')](_0x21cca3,function(_0x4efd8d){if(_0x4efd8d['type']!==_0xc291('0x4c')){var _0x4bd4f6={};_0x4bd4f6[_0x4efd8d['name']]={'$like':'%'+_0x49e1fc[_0xc291('0x43')][_0xc291('0x4a')]+'%'};return _0x4bd4f6;}})});}_0x2e71d6=_[_0xc291('0x4b')]({},_0x2e71d6,_0x49e1fc[_0xc291('0x4d')]);var _0x19c772={'where':_0x2e71d6[_0xc291('0x47')]};return db[_0xc291('0x4e')][_0xc291('0x2d')](_0x19c772)[_0xc291('0x34')](function(_0x401dd0){_0x22ba5b['count']=_0x401dd0;if(_0x49e1fc[_0xc291('0x43')]['includeAll']){_0x2e71d6[_0xc291('0x4f')]=[{'all':!![]}];}return db[_0xc291('0x4e')][_0xc291('0x50')](_0x2e71d6);})[_0xc291('0x34')](function(_0x3fafbf){_0x22ba5b[_0xc291('0x51')]=_0x3fafbf;return _0x22ba5b;})['then'](respondWithFilteredResult(_0x2e0cd7,_0x2e71d6))[_0xc291('0x52')](handleError(_0x2e0cd7,null));};exports[_0xc291('0x53')]=function(_0x25857a,_0x3f4c27){var _0x3b8db8={'raw':![],'where':{'id':_0x25857a[_0xc291('0x54')]['id']}},_0x4b8c9f={};_0x4b8c9f['model']=_['keys'](db['ZohoAccount'][_0xc291('0x3b')]);_0x4b8c9f[_0xc291('0x43')]=_[_0xc291('0x3f')](_0x25857a[_0xc291('0x43')]);_0x4b8c9f['filters']=_[_0xc291('0x40')](_0x4b8c9f[_0xc291('0x3e')],_0x4b8c9f['query']);_0x3b8db8[_0xc291('0x41')]=_['intersection'](_0x4b8c9f[_0xc291('0x3e')],qs['fields'](_0x25857a[_0xc291('0x43')][_0xc291('0x42')]));_0x3b8db8[_0xc291('0x41')]=_0x3b8db8[_0xc291('0x41')]['length']?_0x3b8db8[_0xc291('0x41')]:_0x4b8c9f[_0xc291('0x3e')];if(_0x25857a[_0xc291('0x43')][_0xc291('0x55')]){_0x3b8db8[_0xc291('0x4f')]=[{'all':!![]}];}_0x3b8db8=_[_0xc291('0x4b')]({},_0x3b8db8,_0x25857a[_0xc291('0x4d')]);return db[_0xc291('0x4e')][_0xc291('0x56')](_0x3b8db8)[_0xc291('0x34')](handleEntityNotFound(_0x3f4c27,null))[_0xc291('0x34')](respondWithResult(_0x3f4c27,null))[_0xc291('0x52')](handleError(_0x3f4c27,null));};exports[_0xc291('0x57')]=function(_0x36739d,_0x45dd84){return db[_0xc291('0x4e')][_0xc291('0x57')](_0x36739d[_0xc291('0x58')],{})[_0xc291('0x34')](respondWithResult(_0x45dd84,0xc9))[_0xc291('0x52')](handleError(_0x45dd84,null));};exports[_0xc291('0x33')]=function(_0x4b77cd,_0x31341b){if(_0x4b77cd[_0xc291('0x58')]['id']){delete _0x4b77cd[_0xc291('0x58')]['id'];}return db[_0xc291('0x4e')][_0xc291('0x56')]({'where':{'id':_0x4b77cd[_0xc291('0x54')]['id']}})['then'](handleEntityNotFound(_0x31341b,null))[_0xc291('0x34')](saveUpdates(_0x4b77cd['body'],null))['then'](respondWithResult(_0x31341b,null))[_0xc291('0x52')](handleError(_0x31341b,null));};exports[_0xc291('0x59')]=function(_0x5edf00,_0x1652a1){return db[_0xc291('0x4e')][_0xc291('0x56')]({'where':{'id':_0x5edf00[_0xc291('0x54')]['id']}})[_0xc291('0x34')](handleEntityNotFound(_0x1652a1,null))[_0xc291('0x34')](removeEntity(_0x1652a1,null))[_0xc291('0x52')](handleError(_0x1652a1,null));};exports[_0xc291('0x5a')]=function(_0x13b3e3,_0x2b22a0,_0x1aa8dd){var _0xd69cc8={};var _0x384d31={};var _0x41c487;var _0x15be7d;return db[_0xc291('0x4e')][_0xc291('0x5b')]({'where':{'id':_0x13b3e3['params']['id']}})['then'](handleEntityNotFound(_0x2b22a0,null))[_0xc291('0x34')](function(_0x43130c){if(_0x43130c){_0x41c487=_0x43130c;_0x384d31['model']=_[_0xc291('0x3f')](db[_0xc291('0x5c')]['rawAttributes']);_0x384d31[_0xc291('0x43')]=_[_0xc291('0x3f')](_0x13b3e3[_0xc291('0x43')]);_0x384d31[_0xc291('0x48')]=_['intersection'](_0x384d31[_0xc291('0x3e')],_0x384d31[_0xc291('0x43')]);_0xd69cc8[_0xc291('0x41')]=_['intersection'](_0x384d31[_0xc291('0x3e')],qs[_0xc291('0x42')](_0x13b3e3[_0xc291('0x43')]['fields']));_0xd69cc8[_0xc291('0x41')]=_0xd69cc8[_0xc291('0x41')][_0xc291('0x5d')]?_0xd69cc8[_0xc291('0x41')]:_0x384d31[_0xc291('0x3e')];_0xd69cc8['order']=qs['sort'](_0x13b3e3['query'][_0xc291('0x46')]);_0xd69cc8[_0xc291('0x47')]=qs['filters'](_[_0xc291('0x49')](_0x13b3e3[_0xc291('0x43')],_0x384d31['filters']));if(_0x13b3e3[_0xc291('0x43')]['filter']){_0xd69cc8[_0xc291('0x47')]=_['merge'](_0xd69cc8[_0xc291('0x47')],{'$or':_[_0xc291('0x3a')](_0xd69cc8['attributes'],function(_0xa03790){var _0x25b928={};_0x25b928[_0xa03790]={'$like':'%'+_0x13b3e3[_0xc291('0x43')][_0xc291('0x4a')]+'%'};return _0x25b928;})});}_0xd69cc8=_['merge']({},_0xd69cc8,_0x13b3e3['options']);return _0x41c487['getConfigurations'](_0xd69cc8);}})[_0xc291('0x34')](function(_0x4d7512){if(_0x4d7512){_0x15be7d=_0x4d7512['length'];if(!_0x13b3e3['query']['hasOwnProperty']('nolimit')){_0xd69cc8['limit']=qs[_0xc291('0x2f')](_0x13b3e3[_0xc291('0x43')][_0xc291('0x2f')]);_0xd69cc8[_0xc291('0x2e')]=qs[_0xc291('0x2e')](_0x13b3e3['query'][_0xc291('0x2e')]);}return _0x41c487[_0xc291('0x5a')](_0xd69cc8);}})[_0xc291('0x34')](function(_0xbe4acb){if(_0xbe4acb){return _0xbe4acb?{'count':_0x15be7d,'rows':_0xbe4acb}:null;}})[_0xc291('0x34')](respondWithResult(_0x2b22a0,null))[_0xc291('0x52')](handleError(_0x2b22a0,null));};exports[_0xc291('0x5e')]=function(_0xf4ef6b,_0x4f2318,_0x342e3d){if(_0xf4ef6b[_0xc291('0x58')]['id']){delete _0xf4ef6b[_0xc291('0x58')]['id'];}return db['ZohoAccount'][_0xc291('0x5b')]({'where':{'id':_0xf4ef6b[_0xc291('0x54')]['id']}})[_0xc291('0x34')](handleEntityNotFound(_0x4f2318,null))[_0xc291('0x34')](function(_0x5c6f25){if(_0x5c6f25){_0xf4ef6b['body'][_0xc291('0x5f')]=_0x5c6f25['id'];_0xf4ef6b[_0xc291('0x58')]['Subjects']=integrations[_0xc291('0x60')](_0xf4ef6b['body']['channel'],_0xf4ef6b['body']['type']);_0xf4ef6b[_0xc291('0x58')]['Descriptions']=integrations[_0xc291('0x61')](_0xf4ef6b[_0xc291('0x58')][_0xc291('0x62')],_0xf4ef6b[_0xc291('0x58')][_0xc291('0x3c')]);return db['ZohoConfiguration'][_0xc291('0x57')](_0xf4ef6b[_0xc291('0x58')],{'include':[{'model':db['ZohoField'],'as':'Subjects'},{'model':db[_0xc291('0x63')],'as':_0xc291('0x64')}]});}return null;})[_0xc291('0x34')](respondWithResult(_0x4f2318,null))[_0xc291('0x52')](handleError(_0x4f2318,null));};function getAccessToken(_0x4b7463){return new Promise(function(_0x1809c2,_0x4ec905){var _0x224236;switch(_0x4b7463[_0xc291('0x65')]){case'US':_0x224236=_0xc291('0x66');break;case'AU':_0x224236=_0xc291('0x67');break;case'EU':_0x224236=_0xc291('0x68');break;case'IN':_0x224236='https://accounts.zoho.in';break;case'CN':_0x224236=_0xc291('0x69');break;default:_0x224236=_0xc291('0x68');break;}var _0xa64054={'method':_0xc291('0x6a'),'uri':_0x224236+_0xc291('0x6b'),'qs':{'refresh_token':_0x4b7463['refreshToken'],'client_id':_0x4b7463[_0xc291('0x6c')],'client_secret':_0x4b7463[_0xc291('0x6d')],'grant_type':_0xc291('0x6e')},'json':!![]};return rp(_0xa64054)[_0xc291('0x34')](function(_0x590168){if(_0x590168[_0xc291('0x6f')]){_0x1809c2(_0x590168[_0xc291('0x6f')]);}else{_0x4ec905('Unable\x20to\x20retrieve\x20the\x20access\x20token');}})[_0xc291('0x52')](function(_0x19a97e){_0x4ec905(_0x19a97e);});});}exports[_0xc291('0x70')]=function(_0xeeaf63,_0xd5c9e4,_0x236f95){var _0x2f4f6f,_0x587808,_0x4146ea,_0x162cfb,_0x3ce099;return db['ZohoAccount']['findOne']({'where':{'id':_0xeeaf63[_0xc291('0x54')]['id']},'attributes':['id',_0xc291('0x71'),_0xc291('0x65'),'clientId',_0xc291('0x6d'),'serverUrl',_0xc291('0x27'),_0xc291('0x72')]})['then'](handleEntityNotFound(_0xd5c9e4,null))[_0xc291('0x34')](function(_0x1ba5a2){_0x3ce099=_0x1ba5a2;_0x2f4f6f=_0x3ce099[_0xc291('0x71')];_0x587808=_0x2f4f6f===_0xc291('0x73')?'eu':_0xc291('0x74');_0x4146ea=_0x3ce099['serverUrl'];var _0xc7682b=_0x4146ea[_0xc291('0x75')](-0x1);if(_0xc7682b==='/'||_0xc7682b==='\x5c'||_0xc7682b===':'){_0x4146ea=_0x4146ea['substring'](0x0,_0x4146ea[_0xc291('0x76')](_0xc7682b));}if(!_0x3ce099[_0xc291('0x72')]){throw new Error(_0xc291('0x77'));}return getAccessToken(_0x3ce099);})['then'](function(_0x31ea5b){if(_0x31ea5b){return rp({'method':_0xc291('0x78'),'uri':util[_0xc291('0x79')]('https://www.zohoapis.%s/crm/v2/settings/fields',_0x587808),'qs':{'module':_0xc291('0x7a')},'headers':{'Authorization':'Zoho-oauthtoken\x20'+_0x31ea5b},'json':!![]});}})[_0xc291('0x34')](function(_0x5a2323){if(_0x5a2323){if(_0x5a2323[_0xc291('0x7b')]&&_0x5a2323[_0xc291('0x7b')][_0xc291('0x26')]){throw new Error(_0x5a2323[_0xc291('0x7b')]['error'][_0xc291('0x28')]);}var _0x19f3a6=[];var _0x213287=[];var _0x2e60a2=[_0xc291('0x7c'),_0xc291('0x7d'),_0xc291('0x7e'),'WhoId',_0xc291('0x7f'),_0xc291('0x80'),_0xc291('0x81'),_0xc291('0x82')];_0x213287=_['remove'](_0x5a2323[_0xc291('0x42')],function(_0x137793){return _0x2e60a2['includes'](_0x137793[_0xc291('0x83')]);});for(var _0x140dc2=0x0;_0x140dc2<_0x213287[_0xc291('0x5d')];_0x140dc2++){if(_0x213287[_0x140dc2]['system_mandatory']===![]){_0x19f3a6['push']({'id':_0x213287[_0x140dc2]['id'],'name':_0x213287[_0x140dc2]['display_label'],'custom':_0x213287[_0x140dc2][_0xc291('0x84')],'options':_0x213287[_0x140dc2][_0xc291('0x85')]===_0xc291('0x86')&&_0x213287[_0x140dc2][_0xc291('0x87')][_0xc291('0x5d')]>-0x1?_[_0xc291('0x3a')](_0x213287[_0x140dc2][_0xc291('0x87')],function(_0x3b460){return{'name':_0x3b460,'value':_0x3b460};}):[]});}}return{'count':_0x19f3a6[_0xc291('0x5d')],'rows':_0x19f3a6};}else{return{'count':0x0,'rows':[]};}})[_0xc291('0x34')](respondWithResult(_0xd5c9e4,null))[_0xc291('0x52')](function(_0x282cac){var _0x32c513=_0xeeaf63[_0xc291('0x43')][_0xc291('0x1c')]?0x1f4:_0x282cac[_0xc291('0x88')]||0x1f4;logger[_0xc291('0x26')]('getFields,\x20%s,\x20%s,\x20%s',_0xc291('0x70'),_0x32c513,JSON[_0xc291('0x25')](_0x282cac));delete _0x282cac[_0xc291('0x37')];if(_0x32c513===0x191){_0x32c513=0x190;}_0xd5c9e4['status'](_0x32c513)[_0xc291('0x38')](_0xeeaf63[_0xc291('0x43')][_0xc291('0x1c')]?{'message':_0xc291('0x89'),'statusCode':_0x282cac[_0xc291('0x88')]}:_0x282cac);});};
\ No newline at end of file
+var _0xe157=['save','update','destroy','end','error','stack','name','send','index','map','ZohoAccount','fieldName','type','key','query','keys','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','VIRTUAL','options','then','includeAll','include','findAll','rows','catch','rawAttributes','find','create','body','getConfigurations','findOne','params','ZohoConfiguration','addConfiguration','Subjects','getSubjects','channel','Descriptions','getDescriptions','ZohoField','zone','https://accounts.zoho.eu','POST','/oauth/v2/token','refreshToken','clientId','clientSecret','refresh_token','access_token','Unable\x20to\x20retrieve\x20the\x20access\x20token','code','host','serverUrl','slice','lastIndexOf','GET','format','https://www.zohoapis.%s/crm/v2/settings/fields','Calls','Zoho-oauthtoken\x20','response','message','Owner','WhoId','Call_Duration','Call_Result','Call_Start_Time','Call_Type','includes','api_name','system_mandatory','push','display_label','custom_field','data_type','test','statusCode','getFields','stringify','zip-dir','fast-json-patch','request-promise','to-csv','ejs','fs-extra','squel','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../components/integrations/configuration','sendStatus','status','json','offset','undefined','limit','count','Content-Range','apply','reject'];(function(_0x5b78e8,_0x55096b){var _0xf2c321=function(_0x4e0cff){while(--_0x4e0cff){_0x5b78e8['push'](_0x5b78e8['shift']());}};_0xf2c321(++_0x55096b);}(_0xe157,0xd8));var _0x7e15=function(_0x461c6c,_0xf3e8d2){_0x461c6c=_0x461c6c-0x0;var _0x4d0d7a=_0xe157[_0x461c6c];return _0x4d0d7a;};'use strict';var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x7e15('0x0'));var jsonpatch=require(_0x7e15('0x1'));var rp=require(_0x7e15('0x2'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0x7e15('0x3'));var ejs=require(_0x7e15('0x4'));var fs=require('fs');var fs_extra=require(_0x7e15('0x5'));var _=require('lodash');var squel=require(_0x7e15('0x6'));var crypto=require(_0x7e15('0x7'));var jsforce=require(_0x7e15('0x8'));var deskjs=require(_0x7e15('0x9'));var toCsv=require(_0x7e15('0x3'));var querystring=require('querystring');var Papa=require(_0x7e15('0xa'));var Redis=require(_0x7e15('0xb'));var authService=require(_0x7e15('0xc'));var qs=require(_0x7e15('0xd'));var as=require(_0x7e15('0xe'));var hardwareService=require(_0x7e15('0xf'));var logger=require(_0x7e15('0x10'))(_0x7e15('0x11'));var utils=require(_0x7e15('0x12'));var config=require(_0x7e15('0x13'));var licenseUtil=require(_0x7e15('0x14'));var db=require('../../mysqldb')['db'];var integrations=require(_0x7e15('0x15'));function respondWithStatusCode(_0x59a080,_0x387ee4){_0x387ee4=_0x387ee4||0xcc;return function(_0x13b9fc){if(_0x13b9fc){return _0x59a080[_0x7e15('0x16')](_0x387ee4);}return _0x59a080['status'](_0x387ee4)['end']();};}function respondWithResult(_0x1c07e7,_0x217027){_0x217027=_0x217027||0xc8;return function(_0x1a3099){if(_0x1a3099){return _0x1c07e7[_0x7e15('0x17')](_0x217027)[_0x7e15('0x18')](_0x1a3099);}};}function respondWithFilteredResult(_0x3ca814,_0x54ed93){return function(_0x2ff13c){if(_0x2ff13c){var _0xfd48ca=typeof _0x54ed93[_0x7e15('0x19')]===_0x7e15('0x1a')&&typeof _0x54ed93[_0x7e15('0x1b')]==='undefined';var _0x12e9c6=_0x2ff13c[_0x7e15('0x1c')];var _0x25090a=_0xfd48ca?0x0:_0x54ed93[_0x7e15('0x19')];var _0xe36240=_0xfd48ca?_0x2ff13c[_0x7e15('0x1c')]:_0x54ed93[_0x7e15('0x19')]+_0x54ed93[_0x7e15('0x1b')];var _0x176405;if(_0xe36240>=_0x12e9c6){_0xe36240=_0x12e9c6;_0x176405=0xc8;}else{_0x176405=0xce;}_0x3ca814[_0x7e15('0x17')](_0x176405);return _0x3ca814['set'](_0x7e15('0x1d'),_0x25090a+'-'+_0xe36240+'/'+_0x12e9c6)[_0x7e15('0x18')](_0x2ff13c);}return null;};}function patchUpdates(_0x24c721){return function(_0x4a071b){try{jsonpatch[_0x7e15('0x1e')](_0x4a071b,_0x24c721,!![]);}catch(_0x4ef8c1){return BPromise[_0x7e15('0x1f')](_0x4ef8c1);}return _0x4a071b[_0x7e15('0x20')]();};}function saveUpdates(_0x13319a,_0x6b7e0a){return function(_0x1a7f25){if(_0x1a7f25){return _0x1a7f25[_0x7e15('0x21')](_0x13319a)['then'](function(_0xa52664){return _0xa52664;});}return null;};}function removeEntity(_0xcece3f,_0x50c3ed){return function(_0x5be565){if(_0x5be565){return _0x5be565[_0x7e15('0x22')]()['then'](function(){_0xcece3f['status'](0xcc)[_0x7e15('0x23')]();});}};}function handleEntityNotFound(_0x14f0fd,_0x3e9db0){return function(_0x3a1e77){if(!_0x3a1e77){_0x14f0fd[_0x7e15('0x16')](0x194);}return _0x3a1e77;};}function handleError(_0x576a8c,_0x44d0f9){_0x44d0f9=_0x44d0f9||0x1f4;return function(_0x1be782){logger[_0x7e15('0x24')](_0x1be782[_0x7e15('0x25')]);if(_0x1be782[_0x7e15('0x26')]){delete _0x1be782['name'];}_0x576a8c[_0x7e15('0x17')](_0x44d0f9)[_0x7e15('0x27')](_0x1be782);};}exports[_0x7e15('0x28')]=function(_0x41b8c0,_0x2ee85f){var _0x25d55f={},_0x48a76c={},_0x4c5813={'count':0x0,'rows':[]};var _0x4aa3df=_[_0x7e15('0x29')](db[_0x7e15('0x2a')]['rawAttributes'],function(_0x588c83){return{'name':_0x588c83[_0x7e15('0x2b')],'type':_0x588c83[_0x7e15('0x2c')][_0x7e15('0x2d')]};});_0x48a76c['model']=_[_0x7e15('0x29')](_0x4aa3df,'name');_0x48a76c[_0x7e15('0x2e')]=_[_0x7e15('0x2f')](_0x41b8c0[_0x7e15('0x2e')]);_0x48a76c[_0x7e15('0x30')]=_[_0x7e15('0x31')](_0x48a76c[_0x7e15('0x32')],_0x48a76c[_0x7e15('0x2e')]);_0x25d55f[_0x7e15('0x33')]=_[_0x7e15('0x31')](_0x48a76c[_0x7e15('0x32')],qs[_0x7e15('0x34')](_0x41b8c0[_0x7e15('0x2e')]['fields']));_0x25d55f[_0x7e15('0x33')]=_0x25d55f[_0x7e15('0x33')][_0x7e15('0x35')]?_0x25d55f['attributes']:_0x48a76c[_0x7e15('0x32')];if(!_0x41b8c0[_0x7e15('0x2e')][_0x7e15('0x36')](_0x7e15('0x37'))){_0x25d55f['limit']=qs[_0x7e15('0x1b')](_0x41b8c0['query']['limit']);_0x25d55f[_0x7e15('0x19')]=qs['offset'](_0x41b8c0[_0x7e15('0x2e')]['offset']);}_0x25d55f[_0x7e15('0x38')]=qs['sort'](_0x41b8c0[_0x7e15('0x2e')][_0x7e15('0x39')]);_0x25d55f[_0x7e15('0x3a')]=qs[_0x7e15('0x30')](_[_0x7e15('0x3b')](_0x41b8c0['query'],_0x48a76c['filters']),_0x4aa3df);if(_0x41b8c0[_0x7e15('0x2e')][_0x7e15('0x3c')]){_0x25d55f[_0x7e15('0x3a')]=_[_0x7e15('0x3d')](_0x25d55f[_0x7e15('0x3a')],{'$or':_[_0x7e15('0x29')](_0x4aa3df,function(_0x598542){if(_0x598542[_0x7e15('0x2c')]!==_0x7e15('0x3e')){var _0x3457ec={};_0x3457ec[_0x598542[_0x7e15('0x26')]]={'$like':'%'+_0x41b8c0[_0x7e15('0x2e')]['filter']+'%'};return _0x3457ec;}})});}_0x25d55f=_[_0x7e15('0x3d')]({},_0x25d55f,_0x41b8c0[_0x7e15('0x3f')]);var _0x4a21f4={'where':_0x25d55f[_0x7e15('0x3a')]};return db[_0x7e15('0x2a')]['count'](_0x4a21f4)[_0x7e15('0x40')](function(_0x32bf4b){_0x4c5813[_0x7e15('0x1c')]=_0x32bf4b;if(_0x41b8c0[_0x7e15('0x2e')][_0x7e15('0x41')]){_0x25d55f[_0x7e15('0x42')]=[{'all':!![]}];}return db[_0x7e15('0x2a')][_0x7e15('0x43')](_0x25d55f);})[_0x7e15('0x40')](function(_0x1d3309){_0x4c5813[_0x7e15('0x44')]=_0x1d3309;return _0x4c5813;})[_0x7e15('0x40')](respondWithFilteredResult(_0x2ee85f,_0x25d55f))[_0x7e15('0x45')](handleError(_0x2ee85f,null));};exports['show']=function(_0x28f032,_0x1494fa){var _0x294dd6={'raw':![],'where':{'id':_0x28f032['params']['id']}},_0x56faaf={};_0x56faaf[_0x7e15('0x32')]=_[_0x7e15('0x2f')](db['ZohoAccount'][_0x7e15('0x46')]);_0x56faaf[_0x7e15('0x2e')]=_[_0x7e15('0x2f')](_0x28f032[_0x7e15('0x2e')]);_0x56faaf[_0x7e15('0x30')]=_[_0x7e15('0x31')](_0x56faaf[_0x7e15('0x32')],_0x56faaf['query']);_0x294dd6[_0x7e15('0x33')]=_[_0x7e15('0x31')](_0x56faaf[_0x7e15('0x32')],qs[_0x7e15('0x34')](_0x28f032[_0x7e15('0x2e')][_0x7e15('0x34')]));_0x294dd6[_0x7e15('0x33')]=_0x294dd6[_0x7e15('0x33')][_0x7e15('0x35')]?_0x294dd6['attributes']:_0x56faaf['model'];if(_0x28f032[_0x7e15('0x2e')][_0x7e15('0x41')]){_0x294dd6[_0x7e15('0x42')]=[{'all':!![]}];}_0x294dd6=_[_0x7e15('0x3d')]({},_0x294dd6,_0x28f032[_0x7e15('0x3f')]);return db['ZohoAccount'][_0x7e15('0x47')](_0x294dd6)[_0x7e15('0x40')](handleEntityNotFound(_0x1494fa,null))[_0x7e15('0x40')](respondWithResult(_0x1494fa,null))[_0x7e15('0x45')](handleError(_0x1494fa,null));};exports[_0x7e15('0x48')]=function(_0x168ecc,_0x532fd7){return db[_0x7e15('0x2a')][_0x7e15('0x48')](_0x168ecc['body'],{})[_0x7e15('0x40')](respondWithResult(_0x532fd7,0xc9))['catch'](handleError(_0x532fd7,null));};exports[_0x7e15('0x21')]=function(_0x3f398b,_0x23b4d2){if(_0x3f398b['body']['id']){delete _0x3f398b['body']['id'];}return db[_0x7e15('0x2a')][_0x7e15('0x47')]({'where':{'id':_0x3f398b['params']['id']}})[_0x7e15('0x40')](handleEntityNotFound(_0x23b4d2,null))[_0x7e15('0x40')](saveUpdates(_0x3f398b[_0x7e15('0x49')],null))['then'](respondWithResult(_0x23b4d2,null))[_0x7e15('0x45')](handleError(_0x23b4d2,null));};exports[_0x7e15('0x22')]=function(_0x458f07,_0xc6ab79){return db[_0x7e15('0x2a')]['find']({'where':{'id':_0x458f07['params']['id']}})[_0x7e15('0x40')](handleEntityNotFound(_0xc6ab79,null))[_0x7e15('0x40')](removeEntity(_0xc6ab79,null))['catch'](handleError(_0xc6ab79,null));};exports[_0x7e15('0x4a')]=function(_0x5287a8,_0x54582e,_0x44f37d){var _0x512e12={};var _0x2ab93d={};var _0x48f27c;var _0x383fbb;return db['ZohoAccount'][_0x7e15('0x4b')]({'where':{'id':_0x5287a8[_0x7e15('0x4c')]['id']}})[_0x7e15('0x40')](handleEntityNotFound(_0x54582e,null))[_0x7e15('0x40')](function(_0x262021){if(_0x262021){_0x48f27c=_0x262021;_0x2ab93d[_0x7e15('0x32')]=_[_0x7e15('0x2f')](db[_0x7e15('0x4d')]['rawAttributes']);_0x2ab93d[_0x7e15('0x2e')]=_['keys'](_0x5287a8[_0x7e15('0x2e')]);_0x2ab93d[_0x7e15('0x30')]=_['intersection'](_0x2ab93d[_0x7e15('0x32')],_0x2ab93d[_0x7e15('0x2e')]);_0x512e12[_0x7e15('0x33')]=_[_0x7e15('0x31')](_0x2ab93d['model'],qs['fields'](_0x5287a8[_0x7e15('0x2e')][_0x7e15('0x34')]));_0x512e12[_0x7e15('0x33')]=_0x512e12[_0x7e15('0x33')][_0x7e15('0x35')]?_0x512e12[_0x7e15('0x33')]:_0x2ab93d['model'];_0x512e12[_0x7e15('0x38')]=qs[_0x7e15('0x39')](_0x5287a8[_0x7e15('0x2e')]['sort']);_0x512e12['where']=qs[_0x7e15('0x30')](_[_0x7e15('0x3b')](_0x5287a8[_0x7e15('0x2e')],_0x2ab93d[_0x7e15('0x30')]));if(_0x5287a8['query'][_0x7e15('0x3c')]){_0x512e12['where']=_[_0x7e15('0x3d')](_0x512e12[_0x7e15('0x3a')],{'$or':_[_0x7e15('0x29')](_0x512e12[_0x7e15('0x33')],function(_0x2f636c){var _0x197c45={};_0x197c45[_0x2f636c]={'$like':'%'+_0x5287a8['query'][_0x7e15('0x3c')]+'%'};return _0x197c45;})});}_0x512e12=_[_0x7e15('0x3d')]({},_0x512e12,_0x5287a8[_0x7e15('0x3f')]);return _0x48f27c['getConfigurations'](_0x512e12);}})[_0x7e15('0x40')](function(_0x295dc6){if(_0x295dc6){_0x383fbb=_0x295dc6[_0x7e15('0x35')];if(!_0x5287a8['query']['hasOwnProperty'](_0x7e15('0x37'))){_0x512e12[_0x7e15('0x1b')]=qs[_0x7e15('0x1b')](_0x5287a8[_0x7e15('0x2e')]['limit']);_0x512e12[_0x7e15('0x19')]=qs['offset'](_0x5287a8[_0x7e15('0x2e')][_0x7e15('0x19')]);}return _0x48f27c['getConfigurations'](_0x512e12);}})[_0x7e15('0x40')](function(_0x561c82){if(_0x561c82){return _0x561c82?{'count':_0x383fbb,'rows':_0x561c82}:null;}})[_0x7e15('0x40')](respondWithResult(_0x54582e,null))[_0x7e15('0x45')](handleError(_0x54582e,null));};exports[_0x7e15('0x4e')]=function(_0x54e5d7,_0x21d1f8,_0x2babd5){if(_0x54e5d7[_0x7e15('0x49')]['id']){delete _0x54e5d7[_0x7e15('0x49')]['id'];}return db[_0x7e15('0x2a')][_0x7e15('0x4b')]({'where':{'id':_0x54e5d7['params']['id']}})['then'](handleEntityNotFound(_0x21d1f8,null))['then'](function(_0x4fad84){if(_0x4fad84){_0x54e5d7[_0x7e15('0x49')]['AccountId']=_0x4fad84['id'];_0x54e5d7[_0x7e15('0x49')][_0x7e15('0x4f')]=integrations[_0x7e15('0x50')](_0x54e5d7['body'][_0x7e15('0x51')],_0x54e5d7['body'][_0x7e15('0x2c')]);_0x54e5d7[_0x7e15('0x49')][_0x7e15('0x52')]=integrations[_0x7e15('0x53')](_0x54e5d7[_0x7e15('0x49')][_0x7e15('0x51')],_0x54e5d7[_0x7e15('0x49')][_0x7e15('0x2c')]);return db[_0x7e15('0x4d')][_0x7e15('0x48')](_0x54e5d7[_0x7e15('0x49')],{'include':[{'model':db[_0x7e15('0x54')],'as':_0x7e15('0x4f')},{'model':db['ZohoField'],'as':_0x7e15('0x52')}]});}return null;})['then'](respondWithResult(_0x21d1f8,null))[_0x7e15('0x45')](handleError(_0x21d1f8,null));};function getAccessToken(_0x507066){return new Promise(function(_0x5379b1,_0x3a4c73){var _0x3b7fe1;switch(_0x507066[_0x7e15('0x55')]){case'US':_0x3b7fe1='https://accounts.zoho.com';break;case'AU':_0x3b7fe1='https://accounts.zoho.com.au';break;case'EU':_0x3b7fe1=_0x7e15('0x56');break;case'IN':_0x3b7fe1='https://accounts.zoho.in';break;case'CN':_0x3b7fe1='https://accounts.zoho.com.cn';break;default:_0x3b7fe1='https://accounts.zoho.eu';break;}var _0x5ebcc4={'method':_0x7e15('0x57'),'uri':_0x3b7fe1+_0x7e15('0x58'),'qs':{'refresh_token':_0x507066[_0x7e15('0x59')],'client_id':_0x507066[_0x7e15('0x5a')],'client_secret':_0x507066[_0x7e15('0x5b')],'grant_type':_0x7e15('0x5c')},'json':!![]};return rp(_0x5ebcc4)[_0x7e15('0x40')](function(_0x57d6b0){if(_0x57d6b0[_0x7e15('0x5d')]){_0x5379b1(_0x57d6b0[_0x7e15('0x5d')]);}else{_0x3a4c73(_0x7e15('0x5e'));}})['catch'](function(_0x33f654){_0x3a4c73(_0x33f654);});});}exports['getFields']=function(_0x39762a,_0xa8eebd,_0x47f812){var _0x36e868,_0x377f68,_0x2ea88c,_0x57139d,_0x4e3c47;return db[_0x7e15('0x2a')][_0x7e15('0x4b')]({'where':{'id':_0x39762a[_0x7e15('0x4c')]['id']},'attributes':['id','host','zone',_0x7e15('0x5a'),_0x7e15('0x5b'),'serverUrl',_0x7e15('0x5f'),'refreshToken']})[_0x7e15('0x40')](handleEntityNotFound(_0xa8eebd,null))['then'](function(_0x2493ea){_0x4e3c47=_0x2493ea;_0x36e868=_0x4e3c47[_0x7e15('0x60')];_0x377f68=_0x36e868==='zoho.eu'?'eu':'com';_0x2ea88c=_0x4e3c47[_0x7e15('0x61')];var _0x4694e1=_0x2ea88c[_0x7e15('0x62')](-0x1);if(_0x4694e1==='/'||_0x4694e1==='\x5c'||_0x4694e1===':'){_0x2ea88c=_0x2ea88c['substring'](0x0,_0x2ea88c[_0x7e15('0x63')](_0x4694e1));}if(!_0x4e3c47[_0x7e15('0x59')]){throw new Error('Refresh\x20Token\x20not\x20available\x20for\x20the\x20account');}return getAccessToken(_0x4e3c47);})[_0x7e15('0x40')](function(_0x521c57){if(_0x521c57){return rp({'method':_0x7e15('0x64'),'uri':util[_0x7e15('0x65')](_0x7e15('0x66'),_0x377f68),'qs':{'module':_0x7e15('0x67')},'headers':{'Authorization':_0x7e15('0x68')+_0x521c57},'json':!![]});}})[_0x7e15('0x40')](function(_0x503655){if(_0x503655){if(_0x503655[_0x7e15('0x69')]&&_0x503655['response']['error']){throw new Error(_0x503655[_0x7e15('0x69')]['error'][_0x7e15('0x6a')]);}var _0x419847=[];var _0x56c1b4=[];var _0x380cf4=[_0x7e15('0x6b'),'Subject','Description',_0x7e15('0x6c'),_0x7e15('0x6d'),_0x7e15('0x6e'),_0x7e15('0x6f'),_0x7e15('0x70')];_0x56c1b4=_['remove'](_0x503655[_0x7e15('0x34')],function(_0x5c7e41){return _0x380cf4[_0x7e15('0x71')](_0x5c7e41[_0x7e15('0x72')]);});for(var _0x34b25d=0x0;_0x34b25d<_0x56c1b4['length'];_0x34b25d++){if(_0x56c1b4[_0x34b25d][_0x7e15('0x73')]===![]){_0x419847[_0x7e15('0x74')]({'id':_0x56c1b4[_0x34b25d]['id'],'name':_0x56c1b4[_0x34b25d][_0x7e15('0x75')],'custom':_0x56c1b4[_0x34b25d][_0x7e15('0x76')],'options':_0x56c1b4[_0x34b25d][_0x7e15('0x77')]==='picklist'&&_0x56c1b4[_0x34b25d]['pick_list_values']['length']>-0x1?_['map'](_0x56c1b4[_0x34b25d]['pick_list_values'],function(_0x115afb){return{'name':_0x115afb,'value':_0x115afb};}):[]});}}return{'count':_0x419847[_0x7e15('0x35')],'rows':_0x419847};}else{return{'count':0x0,'rows':[]};}})[_0x7e15('0x40')](respondWithResult(_0xa8eebd,null))[_0x7e15('0x45')](function(_0x4f7f97){var _0x4f4889=_0x39762a[_0x7e15('0x2e')][_0x7e15('0x78')]?0x1f4:_0x4f7f97[_0x7e15('0x79')]||0x1f4;logger['error']('getFields,\x20%s,\x20%s,\x20%s',_0x7e15('0x7a'),_0x4f4889,JSON[_0x7e15('0x7b')](_0x4f7f97));delete _0x4f7f97[_0x7e15('0x26')];if(_0x4f4889===0x191){_0x4f4889=0x190;}_0xa8eebd[_0x7e15('0x17')](_0x4f4889)[_0x7e15('0x27')](_0x39762a['query'][_0x7e15('0x78')]?{'message':'Wrong\x20credentials','statusCode':_0x4f7f97[_0x7e15('0x79')]}:_0x4f7f97);});};
\ No newline at end of file