Built motion from commit 00bf23f6.|2.6.16
[motion2.git] / server / api / integration / integration.controller.js
index 5048591..cf46960 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6efe=['catch','params','intersection','includeAll','create','body','find','eml-format','zip-dir','fast-json-patch','request-promise','mustache','util','squel','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/license/util','../../mysqldb','sendStatus','status','json','count','offset','limit','Content-Range','apply','reject','update','then','destroy','end','error','stack','name','send','index','map','Integration','rawAttributes','fieldName','type','key','model','query','keys','filters','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filter','VIRTUAL','merge','options','include','findAll','rows'];(function(_0x4c12ec,_0x2e9103){var _0x3ae42c=function(_0x5a728f){while(--_0x5a728f){_0x4c12ec['push'](_0x4c12ec['shift']());}};_0x3ae42c(++_0x2e9103);}(_0x6efe,0x1a5));var _0xe6ef=function(_0x10ce1b,_0x4bd436){_0x10ce1b=_0x10ce1b-0x0;var _0x2a3d53=_0x6efe[_0x10ce1b];return _0x2a3d53;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xe6ef('0x0'));var rimraf=require('rimraf');var zipdir=require(_0xe6ef('0x1'));var jsonpatch=require(_0xe6ef('0x2'));var rp=require(_0xe6ef('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xe6ef('0x4'));var util=require(_0xe6ef('0x5'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xe6ef('0x6'));var crypto=require('crypto');var jsforce=require(_0xe6ef('0x7'));var deskjs=require(_0xe6ef('0x8'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xe6ef('0x9'));var Redis=require(_0xe6ef('0xa'));var authService=require(_0xe6ef('0xb'));var qs=require(_0xe6ef('0xc'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0xe6ef('0xd'));var logger=require(_0xe6ef('0xe'))(_0xe6ef('0xf'));var utils=require(_0xe6ef('0x10'));var config=require('../../config/environment');var licenseUtil=require(_0xe6ef('0x11'));var db=require(_0xe6ef('0x12'))['db'];function respondWithStatusCode(_0x4ef60c,_0xa2f540){_0xa2f540=_0xa2f540||0xcc;return function(_0x3b9220){if(_0x3b9220){return _0x4ef60c[_0xe6ef('0x13')](_0xa2f540);}return _0x4ef60c[_0xe6ef('0x14')](_0xa2f540)['end']();};}function respondWithResult(_0xc94cbb,_0x570ec0){_0x570ec0=_0x570ec0||0xc8;return function(_0x22c51e){if(_0x22c51e){return _0xc94cbb[_0xe6ef('0x14')](_0x570ec0)[_0xe6ef('0x15')](_0x22c51e);}};}function respondWithFilteredResult(_0x23e11f,_0x594fda){return function(_0x108edf){if(_0x108edf){var _0x522ce8=_0x108edf[_0xe6ef('0x16')],_0x30039a=_0x594fda[_0xe6ef('0x17')],_0x5d9a32=_0x594fda['offset']+_0x594fda[_0xe6ef('0x18')],_0x39a873;if(_0x5d9a32>=_0x522ce8){_0x5d9a32=_0x522ce8;_0x39a873=0xc8;}else{_0x39a873=0xce;}_0x23e11f[_0xe6ef('0x14')](_0x39a873);return _0x23e11f['set'](_0xe6ef('0x19'),_0x30039a+'-'+_0x5d9a32+'/'+_0x522ce8)[_0xe6ef('0x15')](_0x108edf);}return null;};}function patchUpdates(_0x3beef1){return function(_0x47cc92){try{jsonpatch[_0xe6ef('0x1a')](_0x47cc92,_0x3beef1,!![]);}catch(_0x34b7c2){return BPromise[_0xe6ef('0x1b')](_0x34b7c2);}return _0x47cc92['save']();};}function saveUpdates(_0x5710f7,_0x2d0a6d){return function(_0x1920c0){if(_0x1920c0){return _0x1920c0[_0xe6ef('0x1c')](_0x5710f7)[_0xe6ef('0x1d')](function(_0x232f14){return _0x232f14;});}return null;};}function removeEntity(_0x33fdad,_0x49a6e4){return function(_0x38e3b7){if(_0x38e3b7){return _0x38e3b7[_0xe6ef('0x1e')]()[_0xe6ef('0x1d')](function(){_0x33fdad[_0xe6ef('0x14')](0xcc)[_0xe6ef('0x1f')]();});}};}function handleEntityNotFound(_0x2f0ca3,_0x4eb415){return function(_0x532698){if(!_0x532698){_0x2f0ca3[_0xe6ef('0x13')](0x194);}return _0x532698;};}function handleError(_0x30c215,_0xd00592){_0xd00592=_0xd00592||0x1f4;return function(_0x5e6a1f){logger[_0xe6ef('0x20')](_0x5e6a1f[_0xe6ef('0x21')]);if(_0x5e6a1f[_0xe6ef('0x22')]){delete _0x5e6a1f[_0xe6ef('0x22')];}_0x30c215['status'](_0xd00592)[_0xe6ef('0x23')](_0x5e6a1f);};}exports[_0xe6ef('0x24')]=function(_0x50d2c8,_0x45c97d){var _0x5bdfe4={},_0x1cd86a={},_0x6d5116={'count':0x0,'rows':[]};var _0x387e8a=_[_0xe6ef('0x25')](db[_0xe6ef('0x26')][_0xe6ef('0x27')],function(_0x596b62){return{'name':_0x596b62[_0xe6ef('0x28')],'type':_0x596b62[_0xe6ef('0x29')][_0xe6ef('0x2a')]};});_0x1cd86a[_0xe6ef('0x2b')]=_[_0xe6ef('0x25')](_0x387e8a,_0xe6ef('0x22'));_0x1cd86a[_0xe6ef('0x2c')]=_[_0xe6ef('0x2d')](_0x50d2c8[_0xe6ef('0x2c')]);_0x1cd86a[_0xe6ef('0x2e')]=_['intersection'](_0x1cd86a[_0xe6ef('0x2b')],_0x1cd86a['query']);_0x5bdfe4[_0xe6ef('0x2f')]=_['intersection'](_0x1cd86a[_0xe6ef('0x2b')],qs[_0xe6ef('0x30')](_0x50d2c8[_0xe6ef('0x2c')][_0xe6ef('0x30')]));_0x5bdfe4[_0xe6ef('0x2f')]=_0x5bdfe4['attributes'][_0xe6ef('0x31')]?_0x5bdfe4[_0xe6ef('0x2f')]:_0x1cd86a[_0xe6ef('0x2b')];if(!_0x50d2c8[_0xe6ef('0x2c')][_0xe6ef('0x32')](_0xe6ef('0x33'))){_0x5bdfe4['limit']=qs[_0xe6ef('0x18')](_0x50d2c8[_0xe6ef('0x2c')]['limit']);_0x5bdfe4[_0xe6ef('0x17')]=qs[_0xe6ef('0x17')](_0x50d2c8[_0xe6ef('0x2c')][_0xe6ef('0x17')]);}_0x5bdfe4['order']=qs[_0xe6ef('0x34')](_0x50d2c8[_0xe6ef('0x2c')][_0xe6ef('0x34')]);_0x5bdfe4[_0xe6ef('0x35')]=qs[_0xe6ef('0x2e')](_[_0xe6ef('0x36')](_0x50d2c8[_0xe6ef('0x2c')],_0x1cd86a[_0xe6ef('0x2e')]),_0x387e8a);if(_0x50d2c8[_0xe6ef('0x2c')][_0xe6ef('0x37')]){_0x5bdfe4[_0xe6ef('0x35')]=_['merge'](_0x5bdfe4[_0xe6ef('0x35')],{'$or':_['map'](_0x387e8a,function(_0x32a28a){if(_0x32a28a[_0xe6ef('0x29')]!==_0xe6ef('0x38')){var _0xd7cb63={};_0xd7cb63[_0x32a28a[_0xe6ef('0x22')]]={'$like':'%'+_0x50d2c8[_0xe6ef('0x2c')][_0xe6ef('0x37')]+'%'};return _0xd7cb63;}})});}_0x5bdfe4=_[_0xe6ef('0x39')]({},_0x5bdfe4,_0x50d2c8[_0xe6ef('0x3a')]);var _0x2e0fb6={'where':_0x5bdfe4['where']};return db[_0xe6ef('0x26')][_0xe6ef('0x16')](_0x2e0fb6)[_0xe6ef('0x1d')](function(_0x4fb786){_0x6d5116[_0xe6ef('0x16')]=_0x4fb786;if(_0x50d2c8[_0xe6ef('0x2c')]['includeAll']){_0x5bdfe4[_0xe6ef('0x3b')]=[{'all':!![]}];}return db['Integration'][_0xe6ef('0x3c')](_0x5bdfe4);})[_0xe6ef('0x1d')](function(_0x5e4735){_0x6d5116[_0xe6ef('0x3d')]=_0x5e4735;return _0x6d5116;})[_0xe6ef('0x1d')](respondWithFilteredResult(_0x45c97d,_0x5bdfe4))[_0xe6ef('0x3e')](handleError(_0x45c97d,null));};exports['show']=function(_0x485c61,_0x3b20ef){var _0x26e073={'raw':![],'where':{'id':_0x485c61[_0xe6ef('0x3f')]['id']}},_0x57f8d1={};_0x57f8d1['model']=_[_0xe6ef('0x2d')](db[_0xe6ef('0x26')]['rawAttributes']);_0x57f8d1['query']=_[_0xe6ef('0x2d')](_0x485c61[_0xe6ef('0x2c')]);_0x57f8d1['filters']=_[_0xe6ef('0x40')](_0x57f8d1[_0xe6ef('0x2b')],_0x57f8d1[_0xe6ef('0x2c')]);_0x26e073[_0xe6ef('0x2f')]=_[_0xe6ef('0x40')](_0x57f8d1[_0xe6ef('0x2b')],qs[_0xe6ef('0x30')](_0x485c61[_0xe6ef('0x2c')]['fields']));_0x26e073['attributes']=_0x26e073[_0xe6ef('0x2f')]['length']?_0x26e073[_0xe6ef('0x2f')]:_0x57f8d1[_0xe6ef('0x2b')];if(_0x485c61[_0xe6ef('0x2c')][_0xe6ef('0x41')]){_0x26e073[_0xe6ef('0x3b')]=[{'all':!![]}];}_0x26e073=_['merge']({},_0x26e073,_0x485c61[_0xe6ef('0x3a')]);return db['Integration']['find'](_0x26e073)[_0xe6ef('0x1d')](handleEntityNotFound(_0x3b20ef,null))[_0xe6ef('0x1d')](respondWithResult(_0x3b20ef,null))[_0xe6ef('0x3e')](handleError(_0x3b20ef,null));};exports['create']=function(_0x50fa10,_0x1463a6){return db[_0xe6ef('0x26')][_0xe6ef('0x42')](_0x50fa10[_0xe6ef('0x43')],{})[_0xe6ef('0x1d')](respondWithResult(_0x1463a6,0xc9))[_0xe6ef('0x3e')](handleError(_0x1463a6,null));};exports['update']=function(_0x3e0754,_0x1946db){if(_0x3e0754[_0xe6ef('0x43')]['id']){delete _0x3e0754[_0xe6ef('0x43')]['id'];}return db[_0xe6ef('0x26')][_0xe6ef('0x44')]({'where':{'id':_0x3e0754[_0xe6ef('0x3f')]['id']}})[_0xe6ef('0x1d')](handleEntityNotFound(_0x1946db,null))[_0xe6ef('0x1d')](saveUpdates(_0x3e0754[_0xe6ef('0x43')],null))[_0xe6ef('0x1d')](respondWithResult(_0x1946db,null))[_0xe6ef('0x3e')](handleError(_0x1946db,null));};exports[_0xe6ef('0x1e')]=function(_0x10977d,_0x113b41){return db['Integration'][_0xe6ef('0x44')]({'where':{'id':_0x10977d[_0xe6ef('0x3f')]['id']}})['then'](handleEntityNotFound(_0x113b41,null))['then'](removeEntity(_0x113b41,null))['catch'](handleError(_0x113b41,null));};
\ No newline at end of file
+var _0x4991=['intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','merge','type','filter','options','Integration','includeAll','include','findAll','rows','show','params','keys','find','create','body','catch','eml-format','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','fs-extra','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','sendStatus','status','json','offset','limit','undefined','count','set','Content-Range','apply','reject','save','update','then','destroy','end','error','stack','name','map','rawAttributes','fieldName','key','model','query','filters'];(function(_0x23e127,_0x471ff4){var _0xefabf1=function(_0x4495aa){while(--_0x4495aa){_0x23e127['push'](_0x23e127['shift']());}};_0xefabf1(++_0x471ff4);}(_0x4991,0xf7));var _0x1499=function(_0x355c36,_0xed399a){_0x355c36=_0x355c36-0x0;var _0x37a5e5=_0x4991[_0x355c36];return _0x37a5e5;};'use strict';var emlformat=require(_0x1499('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x1499('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0x1499('0x2'));var moment=require(_0x1499('0x3'));var BPromise=require(_0x1499('0x4'));var Mustache=require(_0x1499('0x5'));var util=require(_0x1499('0x6'));var path=require(_0x1499('0x7'));var sox=require(_0x1499('0x8'));var csv=require(_0x1499('0x9'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0x1499('0xa'));var _=require(_0x1499('0xb'));var squel=require(_0x1499('0xc'));var crypto=require(_0x1499('0xd'));var jsforce=require(_0x1499('0xe'));var deskjs=require(_0x1499('0xf'));var toCsv=require(_0x1499('0x9'));var querystring=require(_0x1499('0x10'));var Papa=require('papaparse');var Redis=require(_0x1499('0x11'));var authService=require(_0x1499('0x12'));var qs=require('../../components/parsers/qs');var as=require(_0x1499('0x13'));var hardwareService=require(_0x1499('0x14'));var logger=require('../../config/logger')(_0x1499('0x15'));var utils=require(_0x1499('0x16'));var config=require('../../config/environment');var licenseUtil=require('../../config/license/util');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3039ce,_0x274bc1){_0x274bc1=_0x274bc1||0xcc;return function(_0x34a928){if(_0x34a928){return _0x3039ce[_0x1499('0x17')](_0x274bc1);}return _0x3039ce[_0x1499('0x18')](_0x274bc1)['end']();};}function respondWithResult(_0x5f34f2,_0x308177){_0x308177=_0x308177||0xc8;return function(_0x4e5195){if(_0x4e5195){return _0x5f34f2[_0x1499('0x18')](_0x308177)[_0x1499('0x19')](_0x4e5195);}};}function respondWithFilteredResult(_0x308318,_0x3ab605){return function(_0x48f654){if(_0x48f654){var _0x1ed43b=typeof _0x3ab605[_0x1499('0x1a')]==='undefined'&&typeof _0x3ab605[_0x1499('0x1b')]===_0x1499('0x1c');var _0x46b364=_0x48f654[_0x1499('0x1d')];var _0x1e45a9=_0x1ed43b?0x0:_0x3ab605[_0x1499('0x1a')];var _0x5b9859=_0x1ed43b?_0x48f654['count']:_0x3ab605['offset']+_0x3ab605[_0x1499('0x1b')];var _0xad534b;if(_0x5b9859>=_0x46b364){_0x5b9859=_0x46b364;_0xad534b=0xc8;}else{_0xad534b=0xce;}_0x308318['status'](_0xad534b);return _0x308318[_0x1499('0x1e')](_0x1499('0x1f'),_0x1e45a9+'-'+_0x5b9859+'/'+_0x46b364)[_0x1499('0x19')](_0x48f654);}return null;};}function patchUpdates(_0x18e4a6){return function(_0x21e887){try{jsonpatch[_0x1499('0x20')](_0x21e887,_0x18e4a6,!![]);}catch(_0x2b0458){return BPromise[_0x1499('0x21')](_0x2b0458);}return _0x21e887[_0x1499('0x22')]();};}function saveUpdates(_0x15bcd4,_0x2bb71f){return function(_0x836081){if(_0x836081){return _0x836081[_0x1499('0x23')](_0x15bcd4)[_0x1499('0x24')](function(_0x4ec57a){return _0x4ec57a;});}return null;};}function removeEntity(_0x1e2c51,_0x2c7f57){return function(_0x5615b4){if(_0x5615b4){return _0x5615b4[_0x1499('0x25')]()[_0x1499('0x24')](function(){_0x1e2c51[_0x1499('0x18')](0xcc)[_0x1499('0x26')]();});}};}function handleEntityNotFound(_0x3968e0,_0x16d036){return function(_0x54f3c2){if(!_0x54f3c2){_0x3968e0['sendStatus'](0x194);}return _0x54f3c2;};}function handleError(_0x12739b,_0x3c9aca){_0x3c9aca=_0x3c9aca||0x1f4;return function(_0x3b9259){logger[_0x1499('0x27')](_0x3b9259[_0x1499('0x28')]);if(_0x3b9259['name']){delete _0x3b9259[_0x1499('0x29')];}_0x12739b['status'](_0x3c9aca)['send'](_0x3b9259);};}exports['index']=function(_0x21d204,_0x103efa){var _0x40932a={},_0x1b460b={},_0x3dad86={'count':0x0,'rows':[]};var _0x388513=_[_0x1499('0x2a')](db['Integration'][_0x1499('0x2b')],function(_0x1a2c99){return{'name':_0x1a2c99[_0x1499('0x2c')],'type':_0x1a2c99['type'][_0x1499('0x2d')]};});_0x1b460b[_0x1499('0x2e')]=_['map'](_0x388513,_0x1499('0x29'));_0x1b460b[_0x1499('0x2f')]=_['keys'](_0x21d204[_0x1499('0x2f')]);_0x1b460b[_0x1499('0x30')]=_[_0x1499('0x31')](_0x1b460b[_0x1499('0x2e')],_0x1b460b[_0x1499('0x2f')]);_0x40932a[_0x1499('0x32')]=_[_0x1499('0x31')](_0x1b460b[_0x1499('0x2e')],qs[_0x1499('0x33')](_0x21d204[_0x1499('0x2f')][_0x1499('0x33')]));_0x40932a[_0x1499('0x32')]=_0x40932a[_0x1499('0x32')][_0x1499('0x34')]?_0x40932a[_0x1499('0x32')]:_0x1b460b[_0x1499('0x2e')];if(!_0x21d204[_0x1499('0x2f')][_0x1499('0x35')](_0x1499('0x36'))){_0x40932a[_0x1499('0x1b')]=qs['limit'](_0x21d204[_0x1499('0x2f')][_0x1499('0x1b')]);_0x40932a[_0x1499('0x1a')]=qs[_0x1499('0x1a')](_0x21d204[_0x1499('0x2f')][_0x1499('0x1a')]);}_0x40932a[_0x1499('0x37')]=qs[_0x1499('0x38')](_0x21d204[_0x1499('0x2f')][_0x1499('0x38')]);_0x40932a[_0x1499('0x39')]=qs['filters'](_['pick'](_0x21d204[_0x1499('0x2f')],_0x1b460b['filters']),_0x388513);if(_0x21d204[_0x1499('0x2f')]['filter']){_0x40932a[_0x1499('0x39')]=_[_0x1499('0x3a')](_0x40932a[_0x1499('0x39')],{'$or':_[_0x1499('0x2a')](_0x388513,function(_0x531933){if(_0x531933[_0x1499('0x3b')]!=='VIRTUAL'){var _0x2f9c59={};_0x2f9c59[_0x531933[_0x1499('0x29')]]={'$like':'%'+_0x21d204[_0x1499('0x2f')][_0x1499('0x3c')]+'%'};return _0x2f9c59;}})});}_0x40932a=_['merge']({},_0x40932a,_0x21d204[_0x1499('0x3d')]);var _0x815a99={'where':_0x40932a[_0x1499('0x39')]};return db[_0x1499('0x3e')]['count'](_0x815a99)[_0x1499('0x24')](function(_0x4cc411){_0x3dad86[_0x1499('0x1d')]=_0x4cc411;if(_0x21d204[_0x1499('0x2f')][_0x1499('0x3f')]){_0x40932a[_0x1499('0x40')]=[{'all':!![]}];}return db[_0x1499('0x3e')][_0x1499('0x41')](_0x40932a);})[_0x1499('0x24')](function(_0xcb85eb){_0x3dad86[_0x1499('0x42')]=_0xcb85eb;return _0x3dad86;})[_0x1499('0x24')](respondWithFilteredResult(_0x103efa,_0x40932a))['catch'](handleError(_0x103efa,null));};exports[_0x1499('0x43')]=function(_0x5dd36c,_0x2cfdaf){var _0x1af1a1={'raw':![],'where':{'id':_0x5dd36c[_0x1499('0x44')]['id']}},_0x5646cf={};_0x5646cf[_0x1499('0x2e')]=_[_0x1499('0x45')](db[_0x1499('0x3e')][_0x1499('0x2b')]);_0x5646cf['query']=_['keys'](_0x5dd36c[_0x1499('0x2f')]);_0x5646cf[_0x1499('0x30')]=_['intersection'](_0x5646cf[_0x1499('0x2e')],_0x5646cf[_0x1499('0x2f')]);_0x1af1a1['attributes']=_['intersection'](_0x5646cf[_0x1499('0x2e')],qs[_0x1499('0x33')](_0x5dd36c[_0x1499('0x2f')]['fields']));_0x1af1a1[_0x1499('0x32')]=_0x1af1a1[_0x1499('0x32')][_0x1499('0x34')]?_0x1af1a1[_0x1499('0x32')]:_0x5646cf['model'];if(_0x5dd36c[_0x1499('0x2f')][_0x1499('0x3f')]){_0x1af1a1[_0x1499('0x40')]=[{'all':!![]}];}_0x1af1a1=_[_0x1499('0x3a')]({},_0x1af1a1,_0x5dd36c['options']);return db[_0x1499('0x3e')][_0x1499('0x46')](_0x1af1a1)[_0x1499('0x24')](handleEntityNotFound(_0x2cfdaf,null))['then'](respondWithResult(_0x2cfdaf,null))['catch'](handleError(_0x2cfdaf,null));};exports[_0x1499('0x47')]=function(_0x491777,_0x7fa101){return db[_0x1499('0x3e')][_0x1499('0x47')](_0x491777[_0x1499('0x48')],{})[_0x1499('0x24')](respondWithResult(_0x7fa101,0xc9))[_0x1499('0x49')](handleError(_0x7fa101,null));};exports[_0x1499('0x23')]=function(_0x591aa8,_0x420d16){if(_0x591aa8['body']['id']){delete _0x591aa8[_0x1499('0x48')]['id'];}return db[_0x1499('0x3e')]['find']({'where':{'id':_0x591aa8[_0x1499('0x44')]['id']}})[_0x1499('0x24')](handleEntityNotFound(_0x420d16,null))[_0x1499('0x24')](saveUpdates(_0x591aa8['body'],null))[_0x1499('0x24')](respondWithResult(_0x420d16,null))[_0x1499('0x49')](handleError(_0x420d16,null));};exports[_0x1499('0x25')]=function(_0x29ac0f,_0x305599){return db[_0x1499('0x3e')][_0x1499('0x46')]({'where':{'id':_0x29ac0f[_0x1499('0x44')]['id']}})[_0x1499('0x24')](handleEntityNotFound(_0x305599,null))[_0x1499('0x24')](removeEntity(_0x305599,null))['catch'](handleError(_0x305599,null));};
\ No newline at end of file