Built motion from commit a679711e.|2.6.15
[motion2.git] / server / api / intDynamics365Field / intDynamics365Field.controller.js
index 393519f..2fc3041 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x18f5=['find','create','body','update','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','mustache','util','sox','ejs','fs-extra','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','../../config/license/util','sendStatus','end','status','json','offset','undefined','limit','count','set','Content-Range','apply','reject','save','then','destroy','error','stack','name','send','index','map','Dynamics365Field','rawAttributes','fieldName','type','key','keys','query','filters','intersection','model','attributes','fields','length','nolimit','order','where','filter','merge','VIRTUAL','options','includeAll','include','rows','catch','params'];(function(_0x1573a7,_0x5d6992){var _0x36835d=function(_0x1f04aa){while(--_0x1f04aa){_0x1573a7['push'](_0x1573a7['shift']());}};_0x36835d(++_0x5d6992);}(_0x18f5,0x120));var _0x518f=function(_0x1f9f37,_0x18776e){_0x1f9f37=_0x1f9f37-0x0;var _0x21c080=_0x18f5[_0x1f9f37];return _0x21c080;};'use strict';var emlformat=require(_0x518f('0x0'));var rimraf=require(_0x518f('0x1'));var zipdir=require(_0x518f('0x2'));var jsonpatch=require(_0x518f('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x518f('0x4'));var Mustache=require(_0x518f('0x5'));var util=require(_0x518f('0x6'));var path=require('path');var sox=require(_0x518f('0x7'));var csv=require('to-csv');var ejs=require(_0x518f('0x8'));var fs=require('fs');var fs_extra=require(_0x518f('0x9'));var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x518f('0xa'));var toCsv=require(_0x518f('0xb'));var querystring=require(_0x518f('0xc'));var Papa=require(_0x518f('0xd'));var Redis=require(_0x518f('0xe'));var authService=require(_0x518f('0xf'));var qs=require('../../components/parsers/qs');var as=require(_0x518f('0x10'));var hardwareService=require(_0x518f('0x11'));var logger=require('../../config/logger')(_0x518f('0x12'));var utils=require(_0x518f('0x13'));var config=require('../../config/environment');var licenseUtil=require(_0x518f('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x475f9b,_0x1c5523){_0x1c5523=_0x1c5523||0xcc;return function(_0x168c37){if(_0x168c37){return _0x475f9b[_0x518f('0x15')](_0x1c5523);}return _0x475f9b['status'](_0x1c5523)[_0x518f('0x16')]();};}function respondWithResult(_0x233deb,_0x176aa2){_0x176aa2=_0x176aa2||0xc8;return function(_0x3ccc2c){if(_0x3ccc2c){return _0x233deb[_0x518f('0x17')](_0x176aa2)[_0x518f('0x18')](_0x3ccc2c);}};}function respondWithFilteredResult(_0x11e762,_0x376040){return function(_0x561136){if(_0x561136){var _0x199047=typeof _0x376040[_0x518f('0x19')]===_0x518f('0x1a')&&typeof _0x376040[_0x518f('0x1b')]===_0x518f('0x1a');var _0x49e222=_0x561136['count'];var _0x1fe8e9=_0x199047?0x0:_0x376040[_0x518f('0x19')];var _0x154f4b=_0x199047?_0x561136[_0x518f('0x1c')]:_0x376040[_0x518f('0x19')]+_0x376040['limit'];var _0x29c7a8;if(_0x154f4b>=_0x49e222){_0x154f4b=_0x49e222;_0x29c7a8=0xc8;}else{_0x29c7a8=0xce;}_0x11e762[_0x518f('0x17')](_0x29c7a8);return _0x11e762[_0x518f('0x1d')](_0x518f('0x1e'),_0x1fe8e9+'-'+_0x154f4b+'/'+_0x49e222)['json'](_0x561136);}return null;};}function patchUpdates(_0x43127e){return function(_0x4f1233){try{jsonpatch[_0x518f('0x1f')](_0x4f1233,_0x43127e,!![]);}catch(_0x33a59d){return BPromise[_0x518f('0x20')](_0x33a59d);}return _0x4f1233[_0x518f('0x21')]();};}function saveUpdates(_0x34860f,_0x5dff1f){return function(_0x4f7e59){if(_0x4f7e59){return _0x4f7e59['update'](_0x34860f)[_0x518f('0x22')](function(_0xa58b69){return _0xa58b69;});}return null;};}function removeEntity(_0x591162,_0x26ab5d){return function(_0x534839){if(_0x534839){return _0x534839[_0x518f('0x23')]()[_0x518f('0x22')](function(){_0x591162[_0x518f('0x17')](0xcc)[_0x518f('0x16')]();});}};}function handleEntityNotFound(_0x2ac1b9,_0x30671b){return function(_0x275974){if(!_0x275974){_0x2ac1b9[_0x518f('0x15')](0x194);}return _0x275974;};}function handleError(_0x4df7b6,_0x22724b){_0x22724b=_0x22724b||0x1f4;return function(_0x36cde8){logger[_0x518f('0x24')](_0x36cde8[_0x518f('0x25')]);if(_0x36cde8[_0x518f('0x26')]){delete _0x36cde8[_0x518f('0x26')];}_0x4df7b6[_0x518f('0x17')](_0x22724b)[_0x518f('0x27')](_0x36cde8);};}exports[_0x518f('0x28')]=function(_0x403ab3,_0x2113e1){var _0x3e20e0={},_0x324de1={},_0x2e8565={'count':0x0,'rows':[]};var _0x248f29=_[_0x518f('0x29')](db[_0x518f('0x2a')][_0x518f('0x2b')],function(_0x496bfd){return{'name':_0x496bfd[_0x518f('0x2c')],'type':_0x496bfd[_0x518f('0x2d')][_0x518f('0x2e')]};});_0x324de1['model']=_['map'](_0x248f29,_0x518f('0x26'));_0x324de1['query']=_[_0x518f('0x2f')](_0x403ab3[_0x518f('0x30')]);_0x324de1[_0x518f('0x31')]=_[_0x518f('0x32')](_0x324de1[_0x518f('0x33')],_0x324de1[_0x518f('0x30')]);_0x3e20e0[_0x518f('0x34')]=_[_0x518f('0x32')](_0x324de1[_0x518f('0x33')],qs[_0x518f('0x35')](_0x403ab3['query']['fields']));_0x3e20e0[_0x518f('0x34')]=_0x3e20e0[_0x518f('0x34')][_0x518f('0x36')]?_0x3e20e0[_0x518f('0x34')]:_0x324de1[_0x518f('0x33')];if(!_0x403ab3[_0x518f('0x30')]['hasOwnProperty'](_0x518f('0x37'))){_0x3e20e0[_0x518f('0x1b')]=qs[_0x518f('0x1b')](_0x403ab3[_0x518f('0x30')][_0x518f('0x1b')]);_0x3e20e0['offset']=qs[_0x518f('0x19')](_0x403ab3[_0x518f('0x30')][_0x518f('0x19')]);}_0x3e20e0[_0x518f('0x38')]=qs['sort'](_0x403ab3[_0x518f('0x30')]['sort']);_0x3e20e0[_0x518f('0x39')]=qs['filters'](_['pick'](_0x403ab3[_0x518f('0x30')],_0x324de1['filters']),_0x248f29);if(_0x403ab3[_0x518f('0x30')][_0x518f('0x3a')]){_0x3e20e0[_0x518f('0x39')]=_[_0x518f('0x3b')](_0x3e20e0[_0x518f('0x39')],{'$or':_['map'](_0x248f29,function(_0x228cda){if(_0x228cda['type']!==_0x518f('0x3c')){var _0xf9439d={};_0xf9439d[_0x228cda[_0x518f('0x26')]]={'$like':'%'+_0x403ab3[_0x518f('0x30')][_0x518f('0x3a')]+'%'};return _0xf9439d;}})});}_0x3e20e0=_[_0x518f('0x3b')]({},_0x3e20e0,_0x403ab3[_0x518f('0x3d')]);var _0x3b7099={'where':_0x3e20e0['where']};return db['Dynamics365Field'][_0x518f('0x1c')](_0x3b7099)['then'](function(_0xd07dcf){_0x2e8565['count']=_0xd07dcf;if(_0x403ab3[_0x518f('0x30')][_0x518f('0x3e')]){_0x3e20e0[_0x518f('0x3f')]=[{'all':!![]}];}return db[_0x518f('0x2a')]['findAll'](_0x3e20e0);})[_0x518f('0x22')](function(_0x35a04f){_0x2e8565[_0x518f('0x40')]=_0x35a04f;return _0x2e8565;})[_0x518f('0x22')](respondWithFilteredResult(_0x2113e1,_0x3e20e0))[_0x518f('0x41')](handleError(_0x2113e1,null));};exports['show']=function(_0x2abe80,_0x3228e8){var _0xbb4fb2={'raw':!![],'where':{'id':_0x2abe80[_0x518f('0x42')]['id']}},_0x5e3d9d={};_0x5e3d9d[_0x518f('0x33')]=_['keys'](db[_0x518f('0x2a')][_0x518f('0x2b')]);_0x5e3d9d['query']=_[_0x518f('0x2f')](_0x2abe80[_0x518f('0x30')]);_0x5e3d9d[_0x518f('0x31')]=_[_0x518f('0x32')](_0x5e3d9d['model'],_0x5e3d9d['query']);_0xbb4fb2[_0x518f('0x34')]=_[_0x518f('0x32')](_0x5e3d9d[_0x518f('0x33')],qs[_0x518f('0x35')](_0x2abe80[_0x518f('0x30')][_0x518f('0x35')]));_0xbb4fb2[_0x518f('0x34')]=_0xbb4fb2[_0x518f('0x34')]['length']?_0xbb4fb2[_0x518f('0x34')]:_0x5e3d9d['model'];if(_0x2abe80[_0x518f('0x30')]['includeAll']){_0xbb4fb2[_0x518f('0x3f')]=[{'all':!![]}];}_0xbb4fb2=_[_0x518f('0x3b')]({},_0xbb4fb2,_0x2abe80[_0x518f('0x3d')]);return db[_0x518f('0x2a')][_0x518f('0x43')](_0xbb4fb2)['then'](handleEntityNotFound(_0x3228e8,null))[_0x518f('0x22')](respondWithResult(_0x3228e8,null))[_0x518f('0x41')](handleError(_0x3228e8,null));};exports[_0x518f('0x44')]=function(_0x12066d,_0x2f880f){return db[_0x518f('0x2a')]['create'](_0x12066d[_0x518f('0x45')],{})['then'](respondWithResult(_0x2f880f,0xc9))[_0x518f('0x41')](handleError(_0x2f880f,null));};exports[_0x518f('0x46')]=function(_0x47dfc8,_0x2ca677){if(_0x47dfc8['body']['id']){delete _0x47dfc8['body']['id'];}return db[_0x518f('0x2a')][_0x518f('0x43')]({'where':{'id':_0x47dfc8[_0x518f('0x42')]['id']}})[_0x518f('0x22')](handleEntityNotFound(_0x2ca677,null))['then'](saveUpdates(_0x47dfc8[_0x518f('0x45')],null))[_0x518f('0x22')](respondWithResult(_0x2ca677,null))[_0x518f('0x41')](handleError(_0x2ca677,null));};exports[_0x518f('0x23')]=function(_0x53c9f1,_0x1f627c){return db[_0x518f('0x2a')][_0x518f('0x43')]({'where':{'id':_0x53c9f1[_0x518f('0x42')]['id']}})[_0x518f('0x22')](handleEntityNotFound(_0x1f627c,null))[_0x518f('0x22')](removeEntity(_0x1f627c,null))['catch'](handleError(_0x1f627c,null));};
\ No newline at end of file
+var _0x5f5f=['rimraf','fast-json-patch','request-promise','util','path','sox','to-csv','ejs','fs-extra','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','end','json','offset','undefined','limit','count','Content-Range','apply','reject','save','then','destroy','error','name','send','index','map','rawAttributes','fieldName','type','key','model','query','keys','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','filters','pick','merge','VIRTUAL','filter','options','include','rows','catch','show','params','Dynamics365Field','length','create','body','update','find','eml-format'];(function(_0x2663b9,_0x20875a){var _0xd03a24=function(_0x419244){while(--_0x419244){_0x2663b9['push'](_0x2663b9['shift']());}};_0xd03a24(++_0x20875a);}(_0x5f5f,0x1c1));var _0xf5f5=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x5f5f[_0x3dd15e];return _0x231fd0;};'use strict';var emlformat=require(_0xf5f5('0x0'));var rimraf=require(_0xf5f5('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xf5f5('0x2'));var rp=require(_0xf5f5('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xf5f5('0x4'));var path=require(_0xf5f5('0x5'));var sox=require(_0xf5f5('0x6'));var csv=require(_0xf5f5('0x7'));var ejs=require(_0xf5f5('0x8'));var fs=require('fs');var fs_extra=require(_0xf5f5('0x9'));var _=require(_0xf5f5('0xa'));var squel=require(_0xf5f5('0xb'));var crypto=require(_0xf5f5('0xc'));var jsforce=require(_0xf5f5('0xd'));var deskjs=require(_0xf5f5('0xe'));var toCsv=require(_0xf5f5('0x7'));var querystring=require(_0xf5f5('0xf'));var Papa=require(_0xf5f5('0x10'));var Redis=require('ioredis');var authService=require(_0xf5f5('0x11'));var qs=require(_0xf5f5('0x12'));var as=require(_0xf5f5('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xf5f5('0x14'))('api');var utils=require('../../config/utils');var config=require(_0xf5f5('0x15'));var licenseUtil=require(_0xf5f5('0x16'));var db=require(_0xf5f5('0x17'))['db'];function respondWithStatusCode(_0x3fed29,_0x383672){_0x383672=_0x383672||0xcc;return function(_0x4dea4f){if(_0x4dea4f){return _0x3fed29[_0xf5f5('0x18')](_0x383672);}return _0x3fed29[_0xf5f5('0x19')](_0x383672)[_0xf5f5('0x1a')]();};}function respondWithResult(_0x331955,_0x5c9f25){_0x5c9f25=_0x5c9f25||0xc8;return function(_0x2586de){if(_0x2586de){return _0x331955['status'](_0x5c9f25)[_0xf5f5('0x1b')](_0x2586de);}};}function respondWithFilteredResult(_0x10ccac,_0x482842){return function(_0x2beb28){if(_0x2beb28){var _0x5ced13=typeof _0x482842[_0xf5f5('0x1c')]===_0xf5f5('0x1d')&&typeof _0x482842[_0xf5f5('0x1e')]===_0xf5f5('0x1d');var _0x26394b=_0x2beb28[_0xf5f5('0x1f')];var _0x570dcd=_0x5ced13?0x0:_0x482842['offset'];var _0x5da14b=_0x5ced13?_0x2beb28[_0xf5f5('0x1f')]:_0x482842[_0xf5f5('0x1c')]+_0x482842['limit'];var _0x4aebd1;if(_0x5da14b>=_0x26394b){_0x5da14b=_0x26394b;_0x4aebd1=0xc8;}else{_0x4aebd1=0xce;}_0x10ccac[_0xf5f5('0x19')](_0x4aebd1);return _0x10ccac['set'](_0xf5f5('0x20'),_0x570dcd+'-'+_0x5da14b+'/'+_0x26394b)[_0xf5f5('0x1b')](_0x2beb28);}return null;};}function patchUpdates(_0x5d1dfb){return function(_0x10736d){try{jsonpatch[_0xf5f5('0x21')](_0x10736d,_0x5d1dfb,!![]);}catch(_0x163989){return BPromise[_0xf5f5('0x22')](_0x163989);}return _0x10736d[_0xf5f5('0x23')]();};}function saveUpdates(_0x2f3741,_0x50a83a){return function(_0x1e9001){if(_0x1e9001){return _0x1e9001['update'](_0x2f3741)[_0xf5f5('0x24')](function(_0xdf7f34){return _0xdf7f34;});}return null;};}function removeEntity(_0x53e6b3,_0x487fd7){return function(_0x5eb3e8){if(_0x5eb3e8){return _0x5eb3e8[_0xf5f5('0x25')]()[_0xf5f5('0x24')](function(){_0x53e6b3[_0xf5f5('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x582e72,_0x27d6bd){return function(_0x1815a1){if(!_0x1815a1){_0x582e72[_0xf5f5('0x18')](0x194);}return _0x1815a1;};}function handleError(_0x1fdbdd,_0x22d309){_0x22d309=_0x22d309||0x1f4;return function(_0x460da8){logger[_0xf5f5('0x26')](_0x460da8['stack']);if(_0x460da8[_0xf5f5('0x27')]){delete _0x460da8[_0xf5f5('0x27')];}_0x1fdbdd[_0xf5f5('0x19')](_0x22d309)[_0xf5f5('0x28')](_0x460da8);};}exports[_0xf5f5('0x29')]=function(_0x112ca5,_0x2044b5){var _0xc369fc={},_0x2a919f={},_0x542542={'count':0x0,'rows':[]};var _0x41885a=_[_0xf5f5('0x2a')](db['Dynamics365Field'][_0xf5f5('0x2b')],function(_0x2b5466){return{'name':_0x2b5466[_0xf5f5('0x2c')],'type':_0x2b5466[_0xf5f5('0x2d')][_0xf5f5('0x2e')]};});_0x2a919f[_0xf5f5('0x2f')]=_['map'](_0x41885a,_0xf5f5('0x27'));_0x2a919f[_0xf5f5('0x30')]=_[_0xf5f5('0x31')](_0x112ca5[_0xf5f5('0x30')]);_0x2a919f['filters']=_[_0xf5f5('0x32')](_0x2a919f[_0xf5f5('0x2f')],_0x2a919f[_0xf5f5('0x30')]);_0xc369fc['attributes']=_[_0xf5f5('0x32')](_0x2a919f[_0xf5f5('0x2f')],qs['fields'](_0x112ca5[_0xf5f5('0x30')][_0xf5f5('0x33')]));_0xc369fc['attributes']=_0xc369fc[_0xf5f5('0x34')]['length']?_0xc369fc[_0xf5f5('0x34')]:_0x2a919f[_0xf5f5('0x2f')];if(!_0x112ca5[_0xf5f5('0x30')][_0xf5f5('0x35')](_0xf5f5('0x36'))){_0xc369fc[_0xf5f5('0x1e')]=qs[_0xf5f5('0x1e')](_0x112ca5[_0xf5f5('0x30')][_0xf5f5('0x1e')]);_0xc369fc['offset']=qs[_0xf5f5('0x1c')](_0x112ca5[_0xf5f5('0x30')][_0xf5f5('0x1c')]);}_0xc369fc[_0xf5f5('0x37')]=qs[_0xf5f5('0x38')](_0x112ca5['query']['sort']);_0xc369fc[_0xf5f5('0x39')]=qs[_0xf5f5('0x3a')](_[_0xf5f5('0x3b')](_0x112ca5['query'],_0x2a919f['filters']),_0x41885a);if(_0x112ca5[_0xf5f5('0x30')]['filter']){_0xc369fc['where']=_[_0xf5f5('0x3c')](_0xc369fc['where'],{'$or':_[_0xf5f5('0x2a')](_0x41885a,function(_0x2502d5){if(_0x2502d5['type']!==_0xf5f5('0x3d')){var _0x152a6a={};_0x152a6a[_0x2502d5['name']]={'$like':'%'+_0x112ca5['query'][_0xf5f5('0x3e')]+'%'};return _0x152a6a;}})});}_0xc369fc=_[_0xf5f5('0x3c')]({},_0xc369fc,_0x112ca5[_0xf5f5('0x3f')]);var _0x2c9b73={'where':_0xc369fc[_0xf5f5('0x39')]};return db['Dynamics365Field']['count'](_0x2c9b73)[_0xf5f5('0x24')](function(_0x3275c2){_0x542542[_0xf5f5('0x1f')]=_0x3275c2;if(_0x112ca5[_0xf5f5('0x30')]['includeAll']){_0xc369fc[_0xf5f5('0x40')]=[{'all':!![]}];}return db['Dynamics365Field']['findAll'](_0xc369fc);})['then'](function(_0x297a17){_0x542542[_0xf5f5('0x41')]=_0x297a17;return _0x542542;})['then'](respondWithFilteredResult(_0x2044b5,_0xc369fc))[_0xf5f5('0x42')](handleError(_0x2044b5,null));};exports[_0xf5f5('0x43')]=function(_0x28fd37,_0x3c1fa1){var _0xdb2143={'raw':!![],'where':{'id':_0x28fd37[_0xf5f5('0x44')]['id']}},_0x24578f={};_0x24578f[_0xf5f5('0x2f')]=_['keys'](db[_0xf5f5('0x45')][_0xf5f5('0x2b')]);_0x24578f[_0xf5f5('0x30')]=_[_0xf5f5('0x31')](_0x28fd37[_0xf5f5('0x30')]);_0x24578f[_0xf5f5('0x3a')]=_[_0xf5f5('0x32')](_0x24578f['model'],_0x24578f[_0xf5f5('0x30')]);_0xdb2143[_0xf5f5('0x34')]=_[_0xf5f5('0x32')](_0x24578f['model'],qs['fields'](_0x28fd37[_0xf5f5('0x30')][_0xf5f5('0x33')]));_0xdb2143[_0xf5f5('0x34')]=_0xdb2143[_0xf5f5('0x34')][_0xf5f5('0x46')]?_0xdb2143[_0xf5f5('0x34')]:_0x24578f[_0xf5f5('0x2f')];if(_0x28fd37['query']['includeAll']){_0xdb2143[_0xf5f5('0x40')]=[{'all':!![]}];}_0xdb2143=_['merge']({},_0xdb2143,_0x28fd37[_0xf5f5('0x3f')]);return db[_0xf5f5('0x45')]['find'](_0xdb2143)[_0xf5f5('0x24')](handleEntityNotFound(_0x3c1fa1,null))['then'](respondWithResult(_0x3c1fa1,null))[_0xf5f5('0x42')](handleError(_0x3c1fa1,null));};exports[_0xf5f5('0x47')]=function(_0x459e2e,_0x8232e0){return db[_0xf5f5('0x45')][_0xf5f5('0x47')](_0x459e2e[_0xf5f5('0x48')],{})[_0xf5f5('0x24')](respondWithResult(_0x8232e0,0xc9))[_0xf5f5('0x42')](handleError(_0x8232e0,null));};exports[_0xf5f5('0x49')]=function(_0x36ed9f,_0xcdda68){if(_0x36ed9f[_0xf5f5('0x48')]['id']){delete _0x36ed9f['body']['id'];}return db[_0xf5f5('0x45')][_0xf5f5('0x4a')]({'where':{'id':_0x36ed9f[_0xf5f5('0x44')]['id']}})[_0xf5f5('0x24')](handleEntityNotFound(_0xcdda68,null))['then'](saveUpdates(_0x36ed9f[_0xf5f5('0x48')],null))['then'](respondWithResult(_0xcdda68,null))[_0xf5f5('0x42')](handleError(_0xcdda68,null));};exports[_0xf5f5('0x25')]=function(_0x2bd703,_0x12da87){return db[_0xf5f5('0x45')][_0xf5f5('0x4a')]({'where':{'id':_0x2bd703[_0xf5f5('0x44')]['id']}})[_0xf5f5('0x24')](handleEntityNotFound(_0x12da87,null))['then'](removeEntity(_0x12da87,null))[_0xf5f5('0x42')](handleError(_0x12da87,null));};
\ No newline at end of file