@tiledesk/tiledesk-server 2.19.9 → 2.19.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/pubmodules/s/stripe/index.js +2 -2
- package/routes/answered.js +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,12 @@
|
|
|
5
5
|
🚀 IN PRODUCTION 🚀
|
|
6
6
|
(https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.77)
|
|
7
7
|
|
|
8
|
+
# 2.19.11
|
|
9
|
+
- Updated payments module
|
|
10
|
+
|
|
11
|
+
# 2.19.10
|
|
12
|
+
- Fixed bug on add answered question route.
|
|
13
|
+
|
|
8
14
|
# 2.19.9
|
|
9
15
|
- Fixed an issue with the handling of situated_context during namespace import
|
|
10
16
|
|
package/package.json
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var _0x4ef7=['--\x20>\x20cancelsubscription\x20\x20err\x20','error','detach','save','Webhook\x20Error:\x20','free','get\x20PaymentMethods\x20list\x20req.params\x20>\x20customer_id\x20','subscription_create','detachPaymentFunct\x20>\x20paymentMethodid\x20','***\x20***\x20customer.subscription.deleted\x20','get\x20PaymentMethods\x20list\x20>\x20paymentMethods\x20','customers','env','YYYY-MM-DDTHH:mm:ss.SSS','data','rawBody','»»»\x20»»»\x20cancelsubscription\x20projectid','invoice_settings','stripe\x20endpointSecret','***\x20***\x20invoice.payment_succeeded\x20-\x20subscription\x20ID:\x20','PAYMENT_STRIPE_APIKEY','***\x20***\x20checkout.session.completed\x20-\x20getSubscritionById\x20err\x20','credit_card_num','card','credit_card_cvc','/customer/:projectid','--\x20>\x20get\x20customer\x20from\x20db\x20-\x20subscription\x20>\x20customer\x20id\x20','forEach','catch','Error\x20saving\x20object.','customer.subscription.deleted\x20event\x20','***\x20***\x20getSubByIdAndCheckoutSessionCompletedEvnt\x20subsptn_payment:\x20','subEnd','lines','***\x20***\x20checkout.session.completed\x20-\x20getSubscription\x20***\x20end\x20***\x20:\x20','body-parser','get\x20PaymentMethods\x20list\x20>\x20paymentMethods\x20>\x20default_payment_method_id\x20','--\x20>\x20checkoutSession\x20get\x20by\x20id\x20from\x20stripe\x20','total_count','subscriptions','stripe-signature','exports','../models/subscription-payment','webhooks','body','customer.subscription.deleted\x20profile\x20to\x20update\x20(event.data.object.canceled_at)\x20','passport','stripe\x20apiSecretKey','invoice.payment_succeeded','customer.subscription.deleted\x20subscriptionPayment\x20user\x20id:\x20','application/json','saveOnDB\x20plan_name','***\x20***\x20getSubByIdAndCheckoutSessionCompletedEvnt\x20subsptn_payment\x20typeof\x20subsptn_payment:\x20','\x20!!!!!!!!\x20HI\x20!!!!!!!!\x20invoice.payment_succeeded','»»»\x20»»»\x20\x20paymentMethod','split','sort','stripe\x20seats_numAsString:\x20','period','saveFirstInvoicePaymentSucceeded\x20stripe_event','message','moment','put','../../../config/winston','expiration_date_year','update','detachPaymentFunc\x20result\x20','--\x20>\x20subscription\x20get\x20by\x20id\x20freq.params.subscriptionid\x20','***\x20***\x20checkout.session.completed\x20-\x20getSubscritionById\x20subscr\x20object_type:\x20','Types','savedSubscriptionPayment\x20>>\x20','debug','payment','end','constructEvent','params','subscription','del','/checkoutSession/:sessionid','current_period_start','stripe\x20seats_num:\x20','stripe\x20plan_name:\x20','subscriptionId','info','USECASE\x20\x20invoice.payment_succeeded\x20\x20billing_reason\x20subscription_create\x20','get','\x20typeof\x20','***\x20***\x20invoice.payment_succeeded\x20-\x20end:\x20','agents','retrieve','subscriptionid','findOne','type','checkout','client_reference_id','checkout.session.completed','express','json','/stripesubs/:subscriptionid','basic','../../../models/project','***\x20***\x20invoice.payment_succeeded\x20-\x20BILLING\x20REASON\x20','raw','object','***\x20***\x20subscriptionEnd\x20','***\x20***\x20»»»\x20»»»\x20customer.subscription.deleted\x20subscriptionPayment\x20','/cancelsubscription','--\x20>\x20get\x20customer\x20from\x20db\x20>\x20customer\x20+\x20paymentMethods\x20','--\x20>\x20updatesubscription\x20\x20project\x20','post','»»»\x20»»»\x20updatesubscription\x20price','userid','***\x20***\x20checkout.session.completed\x20-\x20getSubscritionById\x20***\x20start\x20***\x20:\x20','saveOnDB\x20seats_num','paymentMethods','project_id','***\x20***\x20getSubByIdAndCheckoutSessionCompletedEvnt\x20\x20find\x20Project\x20','list','then','***\x20***\x20getSubByIdAndCheckoutSessionCompletedEvnt\x20-\x20err\x20','savedSubscriptionPayment\x20','attach','last_stripe_event','»»»\x20»»»\x20\x20paymentMethod\x20attached\x20','billing_reason','sessionid','***\x20***\x20!!!!!!!!!!!!!!!!!!!!!!\x20checkout.session.completed\x20-\x20subscription\x20ID:\x20','headers','--\x20>\x20updatesubscription\x20Error\x20getting\x20project\x20','****\x20Stripe\x20error\x20constructEvent:\x20','stripe\x20apiKey','saveFirstInvoicePaymentSucceeded\x20subscriptionid','find','default_payment_method','»»»\x20»»»\x20get\x20customer\x20from\x20db\x20-\x20projectid','jwt','--\x20>\x20GET\x20SUBSCRIPTION\x20PAYMENTS\x20ERRORt\x20','***\x20***\x20getSubByIdAndCheckoutSessionCompletedEvnt\x20subsptn_payment\x20>\x20project_id:\x20','customerid','/payment_methods/:customerid','stripe','log','stripe\x20project_id:\x20','»»»»\x20stripe\x20endpointSecret:\x20','unix','stripe\x20client_reference_id','status','customer.subscription.deleted\x20profile\x20to\x20update\x20','/updatesubscription','--\x20>\x20checkoutSession\x20params.sessionid\x20','sessions','findByIdAndUpdate','projectid','start','profile','authenticate','--\x20>\x20cancelsubscription\x20Error\x20getting\x20project\x20','subscription.deleted','get\x20PaymentMethods\x20list\x20req.params','../../../middleware/valid-token','exec','PAYMENT_STRIPE_API_SECRET_KEY','user_id','stripe\x20checkout.session.completed','../../../middleware/passport','»»»\x20»»»\x20get\x20customer\x20from\x20db\x20','»»»\x20»»»\x20\x20update\x20customer\x20-\x20customerid\x20from\x20params\x20','»»»\x20»»»\x20cancelsubscription\x20userid','***\x20***\x20invoice.payment_succeeded\x20-\x20index:\x20','ObjectId','Sandbox','expiration_date_month','»»»\x20»»»\x20updatesubscription\x20projectid','***\x20***\x20invoice.payment_succeeded\x20-\x20start:\x20','--\x20>\x20cancelsubscription\x20confirmation\x20','customer','PAYMENT_STRIPE_SECRET','--\x20>\x20subscription\x20get\x20by\x20id\x20from\x20stripe\x20\x20err\x20','canceled_at','format','customer.subscription.deleted\x20subscriptionPayment\x20project\x20id:\x20','send'];(function(_0x418770,_0x4ef704){var _0x15b190=function(_0x28a7c7){while(--_0x28a7c7){_0x418770['push'](_0x418770['shift']());}};_0x15b190(++_0x4ef704);}(_0x4ef7,0x177));var _0x15b1=function(_0x418770,_0x4ef704){_0x418770=_0x418770-0x0;var _0x15b190=_0x4ef7[_0x418770];return _0x15b190;};var express=require(_0x15b1('0x55'));var router=express['Router']();var winston=require(_0x15b1('0x34'));var Project=require(_0x15b1('0x59'));var SubscriptionPayment=require(_0x15b1('0x1f'));var moment=require(_0x15b1('0x32'));var mongoose=require('mongoose');var passport=require(_0x15b1('0x23'));require(_0x15b1('0x99'))(passport);var validtoken=require(_0x15b1('0x94'));const apiKey=process[_0x15b1('0x1')][_0x15b1('0x9')];winston[_0x15b1('0x3c')](_0x15b1('0x77')+apiKey);const stripe=require(_0x15b1('0x81'))(apiKey);const endpointSecret=process[_0x15b1('0x1')][_0x15b1('0xa5')];winston[_0x15b1('0x3c')](_0x15b1('0x7')+endpointSecret);const apiSecretKey=process[_0x15b1('0x1')][_0x15b1('0x96')];winston[_0x15b1('0x3c')](_0x15b1('0x24')+apiSecretKey);const bodyParser=require(_0x15b1('0x18'));router[_0x15b1('0x62')]('/webhook',bodyParser[_0x15b1('0x5b')]({'type':_0x15b1('0x27')}),function(_0x1bc881,_0x231607){winston[_0x15b1('0x3c')](_0x15b1('0x84')+endpointSecret);winston[_0x15b1('0x3c')]('»»»»\x20stripe\x20apiKey:\x20'+apiKey);winston[_0x15b1('0x3c')](_0x15b1('0x24')+apiSecretKey);const _0x175799=_0x1bc881[_0x15b1('0x74')][_0x15b1('0x1d')];winston[_0x15b1('0x3c')]('stripe\x20sig:\x20',_0x175799);let _0x52fcd0;try{_0x52fcd0=stripe[_0x15b1('0x20')][_0x15b1('0x3f')](_0x1bc881[_0x15b1('0x4')],_0x175799,endpointSecret);}catch(_0x5f3b19){winston[_0x15b1('0xac')](_0x15b1('0x76'),_0x5f3b19[_0x15b1('0x31')]);return _0x231607[_0x15b1('0x87')](0x190)[_0x15b1('0xaa')](_0x15b1('0xaf')+_0x5f3b19[_0x15b1('0x31')]);}if(_0x52fcd0[_0x15b1('0x51')]==='checkout.session.completed'){winston['debug']('!!!!!!!!\x20HI\x20!!!!!!!!\x20checkout.session.completed');const _0x2787f7=_0x52fcd0[_0x15b1('0x3')][_0x15b1('0x5c')];winston[_0x15b1('0x48')](_0x15b1('0x98'),_0x2787f7);var _0x1e8a3e=_0x2787f7[_0x15b1('0x53')];winston[_0x15b1('0x48')](_0x15b1('0x86'),_0x1e8a3e);var _0x5e28e2=_0x1e8a3e[_0x15b1('0x2c')]('_')[0x0];winston[_0x15b1('0x48')]('stripe\x20user_id:'+_0x5e28e2);var _0x3d054d=_0x1e8a3e['split']('_')[0x1];winston['info'](_0x15b1('0x83')+_0x3d054d);var _0x282810=_0x1e8a3e['split']('_')[0x2];winston[_0x15b1('0x48')](_0x15b1('0x46')+_0x282810);var _0x310977=_0x1e8a3e[_0x15b1('0x2c')]('_')[0x3];winston['info'](_0x15b1('0x45')+_0x310977+'typeof\x20',typeof _0x310977);var _0x1a282b=Number(_0x310977);winston[_0x15b1('0x48')](_0x15b1('0x2e')+_0x1a282b+_0x15b1('0x4b'),typeof _0x1a282b);var _0x4c51c2=_0x52fcd0[_0x15b1('0x3')][_0x15b1('0x5c')]['subscription'];winston[_0x15b1('0x48')](_0x15b1('0x73'),_0x4c51c2);getSubscritionById(_0x4c51c2)['then'](function(_0x3813f8){var _0x4b3f99=_0x3813f8['object'];winston[_0x15b1('0x48')](_0x15b1('0x39'),_0x4b3f99);var _0x3a8f3e=moment[_0x15b1('0x85')](_0x3813f8[_0x15b1('0x44')])[_0x15b1('0xa8')](_0x15b1('0x2'));winston[_0x15b1('0x48')](_0x15b1('0x65'),_0x3a8f3e);var _0x22a488=moment[_0x15b1('0x85')](_0x3813f8['current_period_end'])[_0x15b1('0xa8')](_0x15b1('0x2'));winston[_0x15b1('0x48')](_0x15b1('0x17'),_0x22a488);var _0x403371={'profile':{'name':_0x282810,'type':_0x15b1('0x3d'),'subscription_creation_date':_0x3a8f3e,'subStart':_0x3a8f3e,'subEnd':_0x22a488,'subscriptionId':_0x4c51c2,'last_stripe_event':_0x52fcd0['type'],'agents':_0x1a282b}};updateProjectProfile(_0x3d054d,_0x403371,'checkout.session.completed');saveOnDB(_0x4c51c2,_0x3d054d,_0x3813f8,_0x5e28e2,_0x52fcd0[_0x15b1('0x51')],_0x282810,_0x1a282b);})['catch'](function(_0x28d01d){winston[_0x15b1('0xac')](_0x15b1('0xa'),_0x28d01d);});}if(_0x52fcd0[_0x15b1('0x51')]==='invoice.payment_succeeded'){winston['info'](_0x15b1('0x2a'));winston['info'](_0x15b1('0x5a'),_0x52fcd0[_0x15b1('0x3')][_0x15b1('0x5c')][_0x15b1('0x71')]);var _0x1fdf5b=_0x52fcd0['data'][_0x15b1('0x5c')][_0x15b1('0x16')][_0x15b1('0x1b')];winston[_0x15b1('0x48')]('***\x20***\x20invoice.payment_succeeded\x20-\x20linesNum:\x20',_0x1fdf5b);var _0xdce2a8=_0x1fdf5b-0x1;winston[_0x15b1('0x48')](_0x15b1('0x9d'),_0xdce2a8);var _0x467c8c=moment[_0x15b1('0x85')](_0x52fcd0['data'][_0x15b1('0x5c')][_0x15b1('0x16')][_0x15b1('0x3')][_0xdce2a8]['period'][_0x15b1('0x8e')])[_0x15b1('0xa8')](_0x15b1('0x2'));winston[_0x15b1('0x48')](_0x15b1('0xa2'),_0x467c8c);var _0x33ea7e=moment[_0x15b1('0x85')](_0x52fcd0[_0x15b1('0x3')]['object']['lines'][_0x15b1('0x3')][_0xdce2a8][_0x15b1('0x2f')][_0x15b1('0x3e')])[_0x15b1('0xa8')](_0x15b1('0x2'));winston[_0x15b1('0x48')](_0x15b1('0x4c'),_0x33ea7e);var _0x4c51c2=_0x52fcd0[_0x15b1('0x3')][_0x15b1('0x5c')][_0x15b1('0x41')];winston[_0x15b1('0x48')](_0x15b1('0x8'),_0x4c51c2);if(_0x4c51c2==null){_0x4c51c2=_0x52fcd0[_0x15b1('0x3')][_0x15b1('0x5c')]['lines'][_0x15b1('0x3')][0x0][_0x15b1('0x41')];winston[_0x15b1('0x48')](_0x15b1('0x8'),_0x4c51c2);}if(_0x52fcd0['data']['object']['billing_reason']!==_0x15b1('0xb2')){getSubByIdAndCheckoutSessionCompletedEvnt(_0x4c51c2)[_0x15b1('0x6b')](function(_0x3ff5d3){winston[_0x15b1('0x48')](_0x15b1('0x14'),_0x3ff5d3);winston[_0x15b1('0x48')](_0x15b1('0x29'),typeof _0x3ff5d3);if(_0x3ff5d3){var _0x56ad04=_0x3ff5d3[_0x15b1('0x68')];winston[_0x15b1('0x48')](_0x15b1('0x7e'),_0x56ad04);Project[_0x15b1('0x50')]({'_id':_0x56ad04},function(_0x50aa7c,_0x320046){if(_0x50aa7c){winston[_0x15b1('0x48')](_0x15b1('0x69'),_0x50aa7c);return _0x50aa7c;}if(_0x320046){winston[_0x15b1('0x48')]('***\x20***\x20getSubByIdAndCheckoutSessionCompletedEvnt\x20\x20project\x20',_0x320046);winston[_0x15b1('0x48')]('***\x20***\x20getSubByIdAndCheckoutSessionCompletedEvnt\x20\x20project\x20>\x20profile',_0x320046[_0x15b1('0x8f')]);var _0x57de76=_0x320046['profile'][_0x15b1('0x4d')];var _0x182389=_0x320046[_0x15b1('0x8f')]['name'];var _0x47fbda=_0x3ff5d3[_0x15b1('0x97')];let _0x11b7fe=_0x320046['profile'];_0x11b7fe['name']=_0x182389;_0x11b7fe[_0x15b1('0x51')]=_0x15b1('0x3d');_0x11b7fe['subStart']=_0x467c8c;_0x11b7fe[_0x15b1('0x15')]=_0x33ea7e;_0x11b7fe['subscriptionId']=_0x4c51c2;_0x11b7fe[_0x15b1('0x6f')]=_0x52fcd0['type'];var _0x4b1a4e={'profile':_0x11b7fe};updateProjectProfile(_0x56ad04,_0x4b1a4e,_0x15b1('0x25'));saveOnDB(_0x4c51c2,_0x56ad04,_0x52fcd0,_0x47fbda,_0x52fcd0['type'],_0x182389,_0x57de76);}});}})[_0x15b1('0x11')](function(_0x36b60b){winston[_0x15b1('0xac')](_0x15b1('0x6c'),_0x36b60b);});}else if(_0x52fcd0[_0x15b1('0x3')][_0x15b1('0x5c')][_0x15b1('0x71')]==='subscription_create'){console[_0x15b1('0x82')](_0x15b1('0x49'));saveFirstInvoicePaymentSucceeded(_0x4c51c2,_0x52fcd0,_0x52fcd0['type']);}}if(_0x52fcd0['type']==='customer.subscription.deleted'){winston[_0x15b1('0x48')]('\x20!!!!!!!!\x20HI\x20!!!!!!!!!!!\x20customer.subscription.deleted');winston[_0x15b1('0x48')](_0x15b1('0x13'),_0x52fcd0);var _0x4c51c2=_0x52fcd0[_0x15b1('0x3')]['object']['id'];winston['info']('***\x20***\x20subscription\x20ID\x20',_0x4c51c2);var _0x3bdb9c=moment['unix'](_0x52fcd0[_0x15b1('0x3')][_0x15b1('0x5c')]['canceled_at'])[_0x15b1('0xa8')](_0x15b1('0x2'));winston[_0x15b1('0x48')](_0x15b1('0x5d'),_0x3bdb9c);getSubByIdAndCheckoutSessionCompletedEvnt(_0x4c51c2)[_0x15b1('0x6b')](function(_0x383645){winston[_0x15b1('0x48')](_0x15b1('0x5e'),_0x383645);if(_0x383645){var _0x39f7d8=_0x383645[_0x15b1('0x68')];winston[_0x15b1('0x48')](_0x15b1('0xa9'),_0x39f7d8);var _0x52e503=_0x383645[_0x15b1('0x97')];winston['info'](_0x15b1('0x26'),_0x52e503);}var _0x4acbc1={'profile':{'subscriptionId':_0x4c51c2,'name':_0x15b1('0x9f'),'type':_0x15b1('0xb0'),'agents':0x1,'last_stripe_event':_0x52fcd0[_0x15b1('0x51')],'subEnd':_0x3bdb9c}};winston['info'](_0x15b1('0x22'),_0x52fcd0[_0x15b1('0x3')]['object'][_0x15b1('0xa7')]);winston['info'](_0x15b1('0x88'),_0x4acbc1[_0x15b1('0x8f')]);updateProjectProfile(_0x39f7d8,_0x4acbc1,_0x15b1('0x92'));saveOnDB(_0x4c51c2,_0x39f7d8,_0x52fcd0[_0x15b1('0x3')][_0x15b1('0x5c')],_0x52e503,_0x52fcd0['type'],_0x282810,0x1);})[_0x15b1('0x11')](function(_0x2a1a3a){winston['error'](_0x15b1('0xb4'),_0x2a1a3a);});}_0x231607[_0x15b1('0x56')]({'received':!![]});});function getSubByIdAndCheckoutSessionCompletedEvnt(_0x430853){return new Promise(function(_0x365ecb,_0x52206a){SubscriptionPayment[_0x15b1('0x50')]({'subscription_id':_0x430853,'stripe_event':'checkout.session.completed'},function(_0x2dc6c6,_0x3a269b){if(_0x2dc6c6)_0x52206a(_0x2dc6c6);var _0x88dbce=_0x3a269b;_0x365ecb(_0x88dbce);});});};function getSubscritionById(_0xb497f4){return new Promise(function(_0x4d66d4,_0x3e3890){const _0x32d11c=require(_0x15b1('0x81'))(apiSecretKey);_0x32d11c[_0x15b1('0x1c')][_0x15b1('0x4e')](_0xb497f4,function(_0x112286,_0x534d58){if(_0x112286)_0x3e3890(_0x112286);var _0x534d58=_0x534d58;_0x4d66d4(_0x534d58);});});};function updateProjectProfile(_0x26b5d9,_0x36c121,_0xf15e2d){Project[_0x15b1('0x8c')](_0x26b5d9,_0x36c121,{'new':!![],'upsert':!![]},function(_0x5ab848,_0x4bec81){if(_0x5ab848){winston[_0x15b1('0xac')]('updateProjectProfile\x20Error\x20',_0x5ab848);}else{winston[_0x15b1('0x3c')](_0x4bec81);}});}function saveOnDB(_0x462571,_0x47f4eb,_0x696fb9,_0x51275d,_0x27b4c5,_0x4e92fa,_0x464282){winston[_0x15b1('0x48')](_0x15b1('0x28'),_0x4e92fa);winston['info'](_0x15b1('0x66'),_0x464282);var _0x2266ff=new SubscriptionPayment({'_id':new mongoose[(_0x15b1('0x3a'))][(_0x15b1('0x9e'))](),'subscription_id':_0x462571,'project_id':_0x47f4eb,'user_id':_0x51275d,'stripe_event':_0x27b4c5,'plan_name':_0x4e92fa,'agents':_0x464282,'object':_0x696fb9});_0x2266ff['save'](function(_0x325b75,_0x1fb921){if(_0x325b75){winston[_0x15b1('0xac')]('---\x20>\x20ERROR\x20',_0x325b75);return res[_0x15b1('0x87')](0x1f4)['send']({'success':![],'msg':_0x15b1('0x12')});}winston[_0x15b1('0x48')](_0x15b1('0x6d'),_0x1fb921);});}function saveFirstInvoicePaymentSucceeded(_0x19242c,_0x27ead3,_0x37ca2c){console[_0x15b1('0x82')](_0x15b1('0x78'),_0x19242c);console[_0x15b1('0x82')](_0x15b1('0x30'),_0x37ca2c);var _0x1be6d8=new SubscriptionPayment({'_id':new mongoose[(_0x15b1('0x3a'))]['ObjectId'](),'subscription_id':_0x19242c,'stripe_event':_0x37ca2c,'object':_0x27ead3});_0x1be6d8[_0x15b1('0xae')](function(_0x26a88e,_0x233e97){if(_0x26a88e){winston['error']('---\x20>\x20ERROR\x20',_0x26a88e);return res[_0x15b1('0x87')](0x1f4)[_0x15b1('0xaa')]({'success':![],'msg':_0x15b1('0x12')});}console['log'](_0x15b1('0x3b'),_0x233e97);});}router[_0x15b1('0x33')](_0x15b1('0x5f'),[passport[_0x15b1('0x90')]([_0x15b1('0x58'),_0x15b1('0x7c')],{'session':![]}),validtoken],function(_0x2cae72,_0x569a6d){var _0x2a03f2=_0x2cae72[_0x15b1('0x21')][_0x15b1('0x8d')];var _0x2d1562=_0x2cae72[_0x15b1('0x21')][_0x15b1('0x64')];winston[_0x15b1('0x48')](_0x15b1('0x5'),_0x2a03f2);winston['info'](_0x15b1('0x9c'),_0x2d1562);Project[_0x15b1('0x50')]({'_id':_0x2a03f2},function(_0x708b43,_0x3bbc53){if(_0x708b43){winston[_0x15b1('0xac')](_0x15b1('0x91'),_0x708b43);return _0x708b43;}if(_0x3bbc53){winston[_0x15b1('0x48')]('--\x20>\x20cancelsubscription\x20\x20project\x20',_0x3bbc53);var _0x1c6e9c=_0x3bbc53[_0x15b1('0x8f')][_0x15b1('0x47')];const _0x1100ec=require(_0x15b1('0x81'))(apiSecretKey);_0x1100ec[_0x15b1('0x1c')][_0x15b1('0x42')](_0x1c6e9c,function(_0x377195,_0x1c2788){if(_0x377195){winston[_0x15b1('0xac')](_0x15b1('0xab'),_0x377195);return _0x569a6d['status'](0x1f4)[_0x15b1('0xaa')]({'success':![],'msg':_0x377195});}winston[_0x15b1('0x48')](_0x15b1('0xa3'),_0x1c2788);_0x569a6d[_0x15b1('0x56')](_0x1c2788);});}});});router[_0x15b1('0x33')](_0x15b1('0x89'),[passport[_0x15b1('0x90')](['basic',_0x15b1('0x7c')],{'session':![]}),validtoken],function(_0x2ecc24,_0x4caea2){var _0x10b790=_0x2ecc24[_0x15b1('0x21')][_0x15b1('0x8d')];var _0x5f0d84=_0x2ecc24[_0x15b1('0x21')][_0x15b1('0x64')];var _0x2b520e=_0x2ecc24[_0x15b1('0x21')]['price'];winston['info'](_0x15b1('0xa1'),_0x10b790);winston[_0x15b1('0x48')]('»»»\x20»»»\x20updatesubscription\x20userid',_0x5f0d84);winston[_0x15b1('0x48')](_0x15b1('0x63'),_0x2b520e);const _0x191994=require(_0x15b1('0x81'))(apiSecretKey);Project[_0x15b1('0x50')]({'_id':_0x10b790},function(_0x3c37b6,_0x25d605){if(_0x3c37b6){winston[_0x15b1('0xac')](_0x15b1('0x75'),_0x3c37b6);return _0x3c37b6;}if(_0x25d605){winston[_0x15b1('0x48')](_0x15b1('0x61'),_0x25d605);var _0x14da8b=_0x25d605['profile'][_0x15b1('0x47')];_0x191994[_0x15b1('0x1c')][_0x15b1('0x36')](_0x14da8b);}});});router[_0x15b1('0x4a')]('/:subscriptionid',[passport[_0x15b1('0x90')]([_0x15b1('0x58'),_0x15b1('0x7c')],{'session':![]}),validtoken],function(_0xe18688,_0x32ed43){SubscriptionPayment[_0x15b1('0x79')]({'subscription_id':_0xe18688[_0x15b1('0x40')][_0x15b1('0x4f')]})[_0x15b1('0x2d')]({'object.created':'asc'})[_0x15b1('0x95')](function(_0x186afc,_0x328c41){if(_0x186afc){winston['error'](_0x15b1('0x7d'),project);return _0x32ed43[_0x15b1('0x87')](0x1f4)[_0x15b1('0xaa')]({'success':![],'msg':_0x186afc});}_0x32ed43[_0x15b1('0x56')](_0x328c41);});});router[_0x15b1('0x4a')](_0x15b1('0x57'),[passport[_0x15b1('0x90')]([_0x15b1('0x58'),'jwt'],{'session':![]}),validtoken],function(_0x32af3a,_0x42895b){winston['info'](_0x15b1('0x38'),_0x32af3a[_0x15b1('0x40')][_0x15b1('0x4f')]);var _0x3fb3e4=require(_0x15b1('0x81'))(apiSecretKey);_0x3fb3e4[_0x15b1('0x1c')][_0x15b1('0x4e')](_0x32af3a[_0x15b1('0x40')][_0x15b1('0x4f')],function(_0x240fd4,_0x35d5f1){if(_0x240fd4){winston[_0x15b1('0xac')](_0x15b1('0xa6'),_0x240fd4);return _0x42895b['status'](0x1f4)[_0x15b1('0xaa')]({'success':![],'msg':_0x240fd4});}winston[_0x15b1('0x48')]('--\x20>\x20subscription\x20get\x20by\x20id\x20from\x20stripe\x20',_0x35d5f1);_0x42895b[_0x15b1('0x56')](_0x35d5f1);});});router[_0x15b1('0x4a')](_0x15b1('0x43'),[passport[_0x15b1('0x90')](['basic','jwt'],{'session':![]}),validtoken],function(_0x54f287,_0x428ea5){winston[_0x15b1('0x48')](_0x15b1('0x8a'),_0x54f287[_0x15b1('0x40')][_0x15b1('0x72')]);var _0x1357e4=require(_0x15b1('0x81'))(apiSecretKey);_0x1357e4[_0x15b1('0x52')][_0x15b1('0x8b')][_0x15b1('0x4e')](_0x54f287[_0x15b1('0x40')]['sessionid'],function(_0x36f1df,_0x481728){if(_0x36f1df){winston[_0x15b1('0x48')]('--\x20>\x20checkoutSession\x20get\x20by\x20id\x20from\x20stripe\x20\x20err\x20',_0x36f1df);return _0x428ea5[_0x15b1('0x87')](0x1f4)[_0x15b1('0xaa')]({'success':![],'msg':_0x36f1df});}winston[_0x15b1('0x48')](_0x15b1('0x1a'),_0x481728);_0x428ea5[_0x15b1('0x56')](_0x481728);});});router[_0x15b1('0x4a')](_0x15b1('0xe'),[passport['authenticate']([_0x15b1('0x58'),_0x15b1('0x7c')],{'session':![]}),validtoken],function(_0x1f217f,_0xe893d){winston['debug'](_0x15b1('0x9a'),_0x1f217f['params']);var _0x57d7b5=_0x1f217f[_0x15b1('0x40')]['projectid'];winston['debug'](_0x15b1('0x7b'),_0x57d7b5);SubscriptionPayment['find']({'project_id':_0x57d7b5,'stripe_event':_0x15b1('0x54')},async function(_0x57b2c7,_0x3a1ac2){if(_0x57b2c7){winston['debug']('--\x20>\x20get\x20customer\x20from\x20db\x20-\x20Error\x20',_0x57b2c7);return _0x57b2c7;}if(_0x3a1ac2){_0x3a1ac2[0x0][_0x15b1('0x5c')][_0x15b1('0xa4')];winston['debug'](_0x15b1('0xf'),_0x3a1ac2[0x0][_0x15b1('0x5c')][_0x15b1('0xa4')]);const _0x133227=_0x3a1ac2[0x0][_0x15b1('0x5c')][_0x15b1('0xa4')];const _0x3cf78b=require(_0x15b1('0x81'))(apiSecretKey);const _0x1ec856=await _0x3cf78b[_0x15b1('0x0')]['retrieve'](_0x133227);winston[_0x15b1('0x3c')]('--\x20>\x20get\x20customer\x20from\x20db\x20>\x20customer\x20from\x20stripe\x20API\x20',_0x1ec856);const _0x27a810=await _0x3cf78b[_0x15b1('0x67')][_0x15b1('0x6a')]({'customer':_0x133227,'type':_0x15b1('0xc')});_0x1ec856['paymentMethods']=_0x27a810;winston['debug'](_0x15b1('0x60'),_0x3a1ac2);_0xe893d[_0x15b1('0x56')](_0x1ec856);}});});router['post']('/customers/:customerid',[passport['authenticate']([_0x15b1('0x58'),'jwt'],{'session':![]}),validtoken],async function(_0x45235a,_0x338697){var _0x2e54f6=_0x45235a[_0x15b1('0x40')][_0x15b1('0x7f')];winston[_0x15b1('0x3c')](_0x15b1('0x9b'),_0x2e54f6);winston[_0x15b1('0x3c')]('»»»\x20»»»\x20\x20update\x20customer\x20-\x20cc\x20from\x20body\x20',_0x45235a[_0x15b1('0x21')]);const _0x211a72=require(_0x15b1('0x81'))(apiSecretKey);let _0x1de67d;try{_0x1de67d=await _0x211a72[_0x15b1('0x67')]['create']({'type':'card','card':{'number':_0x45235a[_0x15b1('0x21')][_0x15b1('0xb')],'exp_month':_0x45235a[_0x15b1('0x21')][_0x15b1('0xa0')],'exp_year':_0x45235a['body'][_0x15b1('0x35')],'cvc':_0x45235a['body'][_0x15b1('0xd')]}});}catch(_0x23fbed){winston[_0x15b1('0xac')]('»»»\x20»»»\x20\x20paymentMethod\x20create\x20\x20error\x20',_0x23fbed);return _0x338697[_0x15b1('0x87')](0x1f6)[_0x15b1('0xaa')]({'success':![],'msg':_0x23fbed});}winston['debug'](_0x15b1('0x2b'),_0x1de67d);try{const _0x357fdf=await _0x211a72[_0x15b1('0x67')][_0x15b1('0x6e')](_0x1de67d['id'],{'customer':_0x2e54f6});winston[_0x15b1('0x3c')](_0x15b1('0x70'),_0x357fdf);}catch(_0x388221){winston[_0x15b1('0xac')]('»»»\x20»»»\x20\x20paymentMethod\x20attached\x20\x20error\x20',_0x388221);return _0x338697[_0x15b1('0x87')](0x1f5)[_0x15b1('0xaa')]({'success':![],'msg':_0x388221});}const _0x1dd031=await _0x211a72[_0x15b1('0x0')][_0x15b1('0x36')](_0x2e54f6,{'invoice_settings':{'default_payment_method':_0x1de67d['id']}});_0x338697[_0x15b1('0x56')](_0x1dd031);});router[_0x15b1('0x4a')](_0x15b1('0x80'),[passport[_0x15b1('0x90')](['basic',_0x15b1('0x7c')],{'session':![]}),validtoken],async function(_0x4a1e03,_0x347cbd){winston[_0x15b1('0x48')](_0x15b1('0x93'),_0x4a1e03[_0x15b1('0x40')]);var _0xf4172c=_0x4a1e03[_0x15b1('0x40')][_0x15b1('0x7f')];winston[_0x15b1('0x3c')](_0x15b1('0xb1'),_0xf4172c);const _0x36307d=require(_0x15b1('0x81'))(apiSecretKey);const _0x27a45f=await _0x36307d['customers'][_0x15b1('0x4e')](_0xf4172c);const _0x13af46=_0x27a45f[_0x15b1('0x6')][_0x15b1('0x7a')];let _0x3a54a0;try{_0x3a54a0=await _0x36307d['paymentMethods'][_0x15b1('0x6a')]({'customer':_0xf4172c,'type':_0x15b1('0xc')});winston[_0x15b1('0x3c')](_0x15b1('0xb5'),_0x3a54a0);}catch(_0x468a4c){return _0x347cbd[_0x15b1('0x87')](0x1f5)['send']({'success':![],'msg':_0x468a4c});}winston[_0x15b1('0x3c')](_0x15b1('0x19'),_0x13af46);_0x3a54a0[_0x15b1('0x3')][_0x15b1('0x10')](_0x1e84c8=>{if(_0x1e84c8['id']!==_0x13af46){winston[_0x15b1('0x3c')]('get\x20PaymentMethods\x20list\x20>\x20paymentMethods\x20>\x20paymentMethods.data\x20',_0x1e84c8['id']);detachPaymentFunc(_0x1e84c8['id'],function(_0x165391){winston[_0x15b1('0x48')](_0x15b1('0x37'),_0x165391);});}});_0x347cbd[_0x15b1('0x56')](_0x3a54a0);});async function detachPaymentFunc(_0x5c72a1,_0x5379eb){winston[_0x15b1('0x3c')](_0x15b1('0xb3'),_0x5c72a1);const _0x3612b3=require(_0x15b1('0x81'))(apiSecretKey);let _0x113a94;try{_0x113a94=await _0x3612b3[_0x15b1('0x67')][_0x15b1('0xad')](_0x5c72a1);_0x5379eb(_0x113a94);}catch(_0x3f8cbf){_0x5379eb(_0x3f8cbf);}}module[_0x15b1('0x1e')]=router;
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBheW1lbnRzL3N0cmlwZS9pbmRleC5qcyJdLCJuYW1lcyI6WyJleHByZXNzIiwicmVxdWlyZSIsInJvdXRlciIsIndpbnN0b24iLCJQcm9qZWN0IiwiU3Vic2NyaXB0aW9uUGF5bWVudCIsIm1vbWVudCIsIm1vbmdvb3NlIiwicGFzc3BvcnQiLCJ2YWxpZHRva2VuIiwiYXBpS2V5IiwicHJvY2VzcyIsInN0cmlwZSIsImVuZHBvaW50U2VjcmV0IiwiYXBpU2VjcmV0S2V5IiwiYm9keVBhcnNlciIsIl8weDFiYzg4MSIsIl8weDIzMTYwNyIsIl8weDE3NTc5OSIsIl8weDUyZmNkMCIsIl8weDVmM2IxOSIsIl8weDI3ODdmNyIsIl8weDFlOGEzZSIsIl8weDVlMjhlMiIsIl8weDNkMDU0ZCIsIl8weDI4MjgxMCIsIl8weDMxMDk3NyIsIl8weDFhMjgyYiIsIk51bWJlciIsIl8weDRjNTFjMiIsImdldFN1YnNjcml0aW9uQnlJZCIsIl8weDM4MTNmOCIsIl8weDRiM2Y5OSIsIl8weDNhOGYzZSIsIl8weDIyYTQ4OCIsIl8weDQwMzM3MSIsInVwZGF0ZVByb2plY3RQcm9maWxlIiwic2F2ZU9uREIiLCJfMHgyOGQwMWQiLCJfMHgxZmRmNWIiLCJfMHhkY2UyYTgiLCJfMHg0NjdjOGMiLCJfMHgzM2VhN2UiLCJnZXRTdWJCeUlkQW5kQ2hlY2tvdXRTZXNzaW9uQ29tcGxldGVkRXZudCIsIl8weDNmZjVkMyIsIl8weDU2YWQwNCIsIl8weDUwYWE3YyIsIl8weDMyMDA0NiIsIl8weDU3ZGU3NiIsIl8weDE4MjM4OSIsIl8weDQ3ZmJkYSIsIl8weDExYjdmZSIsIl8weDRiMWE0ZSIsIl8weDM2YjYwYiIsImNvbnNvbGUiLCJzYXZlRmlyc3RJbnZvaWNlUGF5bWVudFN1Y2NlZWRlZCIsIl8weDNiZGI5YyIsIl8weDM4MzY0NSIsIl8weDM5ZjdkOCIsIl8weDUyZTUwMyIsIl8weDRhY2JjMSIsIl8weDJhMWEzYSIsIl8weDQzMDg1MyIsIlByb21pc2UiLCJfMHgzNjVlY2IiLCJfMHg1MjIwNmEiLCJfMHgyZGM2YzYiLCJfMHgzYTI2OWIiLCJfMHg4OGRiY2UiLCJfMHhiNDk3ZjQiLCJfMHg0ZDY2ZDQiLCJfMHgzZTM4OTAiLCJfMHgzMmQxMWMiLCJfMHgxMTIyODYiLCJfMHg1MzRkNTgiLCJfMHgyNmI1ZDkiLCJfMHgzNmMxMjEiLCJfMHhmMTVlMmQiLCJfMHg1YWI4NDgiLCJfMHg0YmVjODEiLCJfMHg0NjI1NzEiLCJfMHg0N2Y0ZWIiLCJfMHg2OTZmYjkiLCJfMHg1MTI3NWQiLCJfMHgyN2I0YzUiLCJfMHg0ZTkyZmEiLCJfMHg0NjQyODIiLCJfMHgyMjY2ZmYiLCJfMHgzMjViNzUiLCJfMHgxZmI5MjEiLCJyZXMiLCJfMHgxOTI0MmMiLCJfMHgyN2VhZDMiLCJfMHgzN2NhMmMiLCJfMHgxYmU2ZDgiLCJfMHgyNmE4OGUiLCJfMHgyMzNlOTciLCJfMHgyY2FlNzIiLCJfMHg1NjlhNmQiLCJfMHgyYTAzZjIiLCJfMHgyZDE1NjIiLCJfMHg3MDhiNDMiLCJfMHgzYmJjNTMiLCJfMHgxYzZlOWMiLCJfMHgxMTAwZWMiLCJfMHgzNzcxOTUiLCJfMHgxYzI3ODgiLCJfMHgyZWNjMjQiLCJfMHg0Y2FlYTIiLCJfMHgxMGI3OTAiLCJfMHg1ZjBkODQiLCJfMHgyYjUyMGUiLCJfMHgxOTE5OTQiLCJfMHgzYzM3YjYiLCJfMHgyNWQ2MDUiLCJfMHgxNGRhOGIiLCJfMHhlMTg2ODgiLCJfMHgzMmVkNDMiLCJfMHgxODZhZmMiLCJfMHgzMjhjNDEiLCJwcm9qZWN0IiwiXzB4MzJhZjNhIiwiXzB4NDI4OTViIiwiXzB4M2ZiM2U0IiwiXzB4MjQwZmQ0IiwiXzB4MzVkNWYxIiwiXzB4NTRmMjg3IiwiXzB4NDI4ZWE1IiwiXzB4MTM1N2U0IiwiXzB4MzZmMWRmIiwiXzB4NDgxNzI4IiwiXzB4MWYyMTdmIiwiXzB4ZTg5M2QiLCJfMHg1N2Q3YjUiLCJfMHg1N2IyYzciLCJfMHgzYTFhYzIiLCJfMHgxMzMyMjciLCJfMHgzY2Y3OGIiLCJfMHgxZWM4NTYiLCJfMHgyN2E4MTAiLCJfMHg0NTIzNWEiLCJfMHgzMzg2OTciLCJfMHgyZTU0ZjYiLCJfMHgyMTFhNzIiLCJfMHgxZGU2N2QiLCJfMHgyM2ZiZWQiLCJfMHgzNTdmZGYiLCJfMHgzODgyMjEiLCJfMHgxZGQwMzEiLCJfMHg0YTFlMDMiLCJfMHgzNDdjYmQiLCJfMHhmNDE3MmMiLCJfMHgzNjMwN2QiLCJfMHgyN2E0NWYiLCJfMHgxM2FmNDYiLCJfMHgzYTU0YTAiLCJfMHg0NjhhNGMiLCJfMHgxZTg0YzgiLCJkZXRhY2hQYXltZW50RnVuYyIsIl8weDE2NTM5MSIsIl8weDVjNzJhMSIsIl8weDUzNzllYiIsIl8weDM2MTJiMyIsIl8weDExM2E5NCIsIl8weDNmOGNiZiIsIm1vZHVsZSJdLCJtYXBwaW5ncyI6IjI0TEFBQSxJQUFJQSxPQUFBLENBQVVDLE9BQUEsQyxlQUFBLENBQWQsQ0FDQSxJQUFJQyxNQUFBLENBQVNGLE9BQUEsQyxRQUFBLEdBQWIsQ0FFQSxJQUFJRyxPQUFBLENBQVVGLE9BQUEsQyxlQUFBLENBQWQsQ0FFQSxJQUFJRyxPQUFBLENBQVVILE9BQUEsQyxlQUFBLENBQWQsQ0FDQSxJQUFJSSxtQkFBQSxDQUFzQkosT0FBQSxDLGVBQUEsQ0FBMUIsQ0FDQSxJQUFJSyxNQUFBLENBQVNMLE9BQUEsQyxlQUFBLENBQWIsQ0FDQSxJQUFJTSxRQUFBLENBQVdOLE9BQUEsQyxVQUFBLENBQWYsQ0FDQSxJQUFJTyxRQUFBLENBQVdQLE9BQUEsQyxlQUFBLENBQWYsQ0FFQUEsT0FBQSxDLGVBQUEsRUFBd0NPLFFBQXhDLEVBRUEsSUFBSUMsVUFBQSxDQUFhUixPQUFBLEMsZUFBQSxDQUFqQixDQUdBLE1BQU1TLE1BQUEsQ0FBU0MsT0FBQSxDLGNBQUEsRSxjQUFBLENBQWYsQ0FDQVIsT0FBQSxDLGVBQUEsRSxlQUFjLENBQWtCTyxNQUFoQyxFQUVBLE1BQU1FLE1BQUEsQ0FBU1gsT0FBQSxDLGVBQUEsRUFBa0JTLE1BQWxCLENBQWYsQ0FHQSxNQUFNRyxjQUFBLENBQWlCRixPQUFBLEMsY0FBQSxFLGVBQUEsQ0FBdkIsQ0FD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QUFBLEMsZUFBQSxFQUFTSyxTQUFULEVBL0I4SSxDQUFoSixFQWtDQSxlQUFlRyxpQkFBZixDQUFpQ0UsU0FBakMsQ0FBa0RDLFNBQWxELENBQTRELENBQzFEOUosT0FBQSxDLGVBQUEsRSxlQUFBLENBQXVENkosU0FBdkQsRUFDQSxNQUFNRSxTQUFBLENBQVNqSyxPQUFBLEMsZUFBQSxFQUFrQmEsWUFBbEIsQ0FBZixDQUNBLElBQUlxSixTQUFKLENBQ0EsR0FBSSxDQUNGQSxTQUFBLENBQWdCLE1BQU1ELFNBQUEsQyxlQUFBLEUsZUFBQSxFQUNwQkYsU0FEb0IsQ0FBdEIsQ0FHQUMsU0FBQSxDQUFTRSxTQUFULEVBSkUsQ0FLRixNQUFPQyxTQUFQLENBQVUsQ0FDVkgsU0FBQSxDQUFTRyxTQUFULEVBRFUsQ0FUOEMsQ0FpRDVEQyxNQUFBLEMsZUFBQSxFQUFpQm5LLE1BQWpCIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGV4cHJlc3MgPSByZXF1aXJlKCdleHByZXNzJyk7XG52YXIgcm91dGVyID0gZXhwcmVzcy5Sb3V0ZXIoKTtcbi8vIHZhciB3aW5zdG9uID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vY29uZmlnL3dpbnN0b24nKTtcbnZhciB3aW5zdG9uID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uZmlnL3dpbnN0b24nKVxuLy8gdmFyIFByb2plY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vbW9kZWxzL3Byb2plY3RcIik7XG52YXIgUHJvamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9tb2RlbHMvcHJvamVjdFwiKTtcbnZhciBTdWJzY3JpcHRpb25QYXltZW50ID0gcmVxdWlyZShcIi4uL21vZGVscy9zdWJzY3JpcHRpb24tcGF5bWVudFwiKTtcbnZhciBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcbnZhciBtb25nb29zZSA9IHJlcXVpcmUoJ21vbmdvb3NlJyk7XG52YXIgcGFzc3BvcnQgPSByZXF1aXJlKCdwYXNzcG9ydCcpO1xuLy8gcmVxdWlyZSgnLi4vLi4vLi4vLi4vbWlkZGxld2FyZS9wYXNzcG9ydCcpKHBhc3Nwb3J0KTtcbnJlcXVpcmUoXCIuLi8uLi8uLi9taWRkbGV3YXJlL3Bhc3Nwb3J0XCIpKHBhc3Nwb3J0KTtcbi8vIHZhciB2YWxpZHRva2VuID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vbWlkZGxld2FyZS92YWxpZC10b2tlbicpXG52YXIgdmFsaWR0b2tlbiA9IHJlcXVpcmUoJy4uLy4uLy4uL21pZGRsZXdhcmUvdmFsaWQtdG9rZW4nKVxuLy8gU2V0IHlvdXIgc2VjcmV0IGtleTogcmVtZW1iZXIgdG8gY2hhbmdlIHRoaXMgdG8geW91ciBsaXZlIHNlY3JldCBrZXkgaW4gcHJvZHVjdGlvblxuLy8gU2VlIHlvdXIga2V5cyBoZXJlOiBodHRwczovL2Rhc2hib2FyZC5zdHJpcGUuY29tL2FjY291bnQvYXBpa2V5c1xuY29uc3QgYXBpS2V5ID0gcHJvY2Vzcy5lbnYuUEFZTUVOVF9TVFJJUEVfQVBJS0VZO1xud2luc3Rvbi5kZWJ1Zygnc3RyaXBlIGFwaUtleScgKyBhcGlLZXkpO1xuXG5jb25zdCBzdHJpcGUgPSByZXF1aXJlKCdzdHJpcGUnKShhcGlLZXkpO1xuXG4vLyBGaW5kIHlvdXIgZW5kcG9pbnQncyBzZWNyZXQgaW4geW91ciBEYXNoYm9hcmQncyB3ZWJob29rIHNldHRpbmdzXG5jb25zdCBlbmRwb2ludFNlY3JldCA9IHByb2Nlc3MuZW52LlBBWU1FTlRfU1RSSVBFX1NFQ1JFVDtcbndpbnN0b24uZGVidWcoJ3N0cmlwZSBlbmRwb2ludFNlY3JldCcgKyBlbmRwb2ludFNlY3JldCk7XG5cbmNvbnN0IGFwaVNlY3JldEtleSA9IHByb2Nlc3MuZW52LlBBWU1FTlRfU1RSSVBFX0FQSV9TRUNSRVRfS0VZO1xud2luc3Rvbi5kZWJ1Zygnc3RyaXBlIGFwaVNlY3JldEtleScgKyBhcGlTZWNyZXRLZXkpO1xuXG5jb25zdCBib2R5UGFyc2VyID0gcmVxdWlyZSgnYm9keS1wYXJzZXInKTtcblxuLy8gaHR0cHM6Ly9zdHJpcGUuY29tL2RvY3MvcGF5bWVudHMvY2hlY2tvdXQvZnVsZmlsbG1lbnQjd2ViaG9va3Ncbi8vIGN1cmwgLVggUE9TVCAtdSBhbmRyZWEubGVvQGYyMS5pdDoxMjM0NTYgLUggJ0NvbnRlbnQtVHlwZTphcHBsaWNhdGlvbi9qc29uJyAtZCAne1widHlwZVwiOlwicGF5bWVudF9pbnRlbnQuc3VjY2VlZGVkXCJ9JyAgaHR0cDovL2xvY2FsaG9zdDozMDAwL21vZHVsZXMvcGF5bWVudHMvc3RyaXBlL3dlYmhvb2tcbnJvdXRlci5wb3N0KCcvd2ViaG9vaycsIGJvZHlQYXJzZXIucmF3KHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pLCBmdW5jdGlvbiAocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgXG4gIHdpbnN0b24uZGVidWcoJ8K7wrvCu8K7IHN0cmlwZSBlbmRwb2ludFNlY3JldDogJyArIGVuZHBvaW50U2VjcmV0KVxuICB3aW5zdG9uLmRlYnVnKCfCu8K7wrvCuyBzdHJpcGUgYXBpS2V5OiAnICsgYXBpS2V5KTtcbiAgd2luc3Rvbi5kZWJ1Zygnc3RyaXBlIGFwaVNlY3JldEtleScgKyBhcGlTZWNyZXRLZXkpO1xuXG4gIGNvbnN0IHNpZyA9IHJlcXVlc3QuaGVhZGVyc1snc3RyaXBlLXNpZ25hdHVyZSddO1xuXG4gIHdpbnN0b24uZGVidWcoJ3N0cmlwZSBzaWc6ICcsIHNpZylcblxuICBsZXQgZXZlbnQ7XG5cbiAgdHJ5IHtcbiAgICBldmVudCA9IHN0cmlwZS53ZWJob29rcy5jb25zdHJ1Y3RFdmVudChyZXF1ZXN0LnJhd0JvZHksIHNpZywgZW5kcG9pbnRTZWNyZXQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB3aW5zdG9uLmVycm9yKCcqKioqIFN0cmlwZSBlcnJvciBjb25zdHJ1Y3RFdmVudDogJywgZXJyLm1lc3NhZ2UpXG4gICAgcmV0dXJuIHJlc3BvbnNlLnN0YXR1cyg0MDApLnNlbmQoYFdlYmhvb2sgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICAvKipcbiAgICoqISAqKiogSGFuZGxlIHRoZSBjaGVja291dC5zZXNzaW9uLmNvbXBsZXRlZCBldmVudCAqKipcbiAgICogTk9URTogVEhJUyBFVkVOVCBPQ0NVUiBPTkxZIFdIRU4gSVMgQ1JFQVRFRCBBIE5FVyBTVUJTQ1JJUFRJT05cbiAgICogMSkgRlJPTSBUSEUgUFJPUEVSVFkgXCJjbGllbnRfcmVmZXJlbmNlX2lkXCIgQVJFIE9CVEFJTkVEIFRIRTpcbiAgICogICAgQSkgVVNFUiBJRFxuICAgKiAgICBCKSBQUk9KRUNUIElEIFxuICAgKiAyKSBXSVRIIFRIRSBzdWJzY3JpcHRpb24gSUQgKE5PVEUgaXMgdGhlIHByb3BlcnR5IHN1YnNjcmlwdGlvbikgSVMgUlVOTkVEIEEgQ0FMTEJBQ0sgVE8gU1RSSVBFXG4gICAqICAgIFRPIE9CVEFJTiBUSEUgT0JKRUNUIFwiU1VCU0NSSVBUSU9OXCIgQU5EIFRIRU4gRlJPTSBUSElTIEFSRSBPQlRBSU5FRCBUSEU6XG4gICAqICAgIEEpIHN1YnNjcmlwdGlvblN0YXJ0RGF0ZVxuICAgKiAgICBCKSBzdWJzY3JpcHRpb25FbmREYXRlXG4gICAqICAgIEMpIHF1YW50aXR5ICh3aGljaCBpbiB0aGUgdGlsZWRlc2sgZGFzaGJvYXJkIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2YgYWdlbnRzIC8gb3BlcmF0b3JzIHNlYXRzKVxuICAgKiAzKSBXSVRIIFRIRSBPQlRBSU5FRCBEQVRBIElTIFVQREFURUQgVEhFIFBST0pFQ1QgJ1BST0ZJTEUnIChpcyBhbiBvYmplY3QgbmVzdGVkIGluIHRoZSBwcm9qZWN0IG9iamVjdCkgXG4gICAqIDQpIFRIRSBPQlRBSU5FRCBPQkpFQ1QgXCJTVUJTQ1JJUFRJT05cIiBBTkQgdGhlIFwiU1VCU0NSSVBUSU9OIElEXCIsIHRoZSBcIlBST0pFQ1QgSURcIiwgdGhlIFwiVVNFUiBJRFwiIEFORCBzdHJpcGVfZXZlbnQ6IFwiY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWRcIiBBUkUgU0FWRUQgT04gT1VSIERCXG4gICAqICAgIEFTIFwiU1VCU0NSSVBUSU9OLVBBWU1FTlRcIlxuICAgKi9cblxuICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NoZWNrb3V0LnNlc3Npb24uY29tcGxldGVkJykge1xuICAgIHdpbnN0b24uZGVidWcoJyEhISEhISEhIEhJICEhISEhISEhIGNoZWNrb3V0LnNlc3Npb24uY29tcGxldGVkJyk7XG5cbiAgICBjb25zdCBzZXNzaW9uID0gZXZlbnQuZGF0YS5vYmplY3Q7XG4gICAgd2luc3Rvbi5pbmZvKCdzdHJpcGUgY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWQnLCBzZXNzaW9uKTtcblxuICAgIHZhciBjbGllbnRfcmVmZXJlbmNlX2lkID0gc2Vzc2lvbi5jbGllbnRfcmVmZXJlbmNlX2lkO1xuICAgIHdpbnN0b24uaW5mbygnc3RyaXBlIGNsaWVudF9yZWZlcmVuY2VfaWQnLCBjbGllbnRfcmVmZXJlbmNlX2lkKTtcblxuICAgIC8qKiAxQSAqL1xuICAgIHZhciB1c2VyX2lkID0gY2xpZW50X3JlZmVyZW5jZV9pZC5zcGxpdChcIl9cIilbMF07XG4gICAgd2luc3Rvbi5pbmZvKCdzdHJpcGUgdXNlcl9pZDonICsgdXNlcl9pZCk7XG5cbiAgICAvKiogMUIgKi9cbiAgICB2YXIgcHJvamVjdF9pZCA9IGNsaWVudF9yZWZlcmVuY2VfaWQuc3BsaXQoXCJfXCIpWzFdO1xuICAgIHdpbnN0b24uaW5mbygnc3RyaXBlIHByb2plY3RfaWQ6ICcgKyBwcm9qZWN0X2lkKTtcblxuICAgIHZhciBwbGFuX25hbWUgPSBjbGllbnRfcmVmZXJlbmNlX2lkLnNwbGl0KFwiX1wiKVsyXTtcbiAgICB3aW5zdG9uLmluZm8oJ3N0cmlwZSBwbGFuX25hbWU6ICcgKyBwbGFuX25hbWUpO1xuXG4gICAgdmFyIHNlYXRzX251bUFzU3RyaW5nID0gY2xpZW50X3JlZmVyZW5jZV9pZC5zcGxpdChcIl9cIilbM107XG4gICAgd2luc3Rvbi5pbmZvKCdzdHJpcGUgc2VhdHNfbnVtOiAnICsgc2VhdHNfbnVtQXNTdHJpbmcgKyAndHlwZW9mICcsIHR5cGVvZiBzZWF0c19udW1Bc1N0cmluZyk7XG5cbiAgICB2YXIgc2VhdHNfbnVtID0gTnVtYmVyKHNlYXRzX251bUFzU3RyaW5nKVxuICAgIHdpbnN0b24uaW5mbygnc3RyaXBlIHNlYXRzX251bUFzU3RyaW5nOiAnICsgc2VhdHNfbnVtICsgJyB0eXBlb2YgJywgdHlwZW9mIHNlYXRzX251bSk7XG5cbiAgICB2YXIgc3Vic2NyaXB0aW9uSWQgPSBldmVudC5kYXRhLm9iamVjdC5zdWJzY3JpcHRpb247XG4gICAgd2luc3Rvbi5pbmZvKCcqKiogKioqICEhISEhISEhISEhISEhISEhISEhISEgY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWQgLSBzdWJzY3JpcHRpb24gSUQ6ICcsIHN1YnNjcmlwdGlvbklkKTtcblxuICAgIGdldFN1YnNjcml0aW9uQnlJZChzdWJzY3JpcHRpb25JZCkudGhlbihmdW5jdGlvbiAoc3Vic2NyaXB0aW9uX29iaikge1xuXG4gICAgICB2YXIgb2JqZWN0X3R5cGUgPSBzdWJzY3JpcHRpb25fb2JqLm9iamVjdDtcbiAgICAgIHdpbnN0b24uaW5mbygnKioqICoqKiBjaGVja291dC5zZXNzaW9uLmNvbXBsZXRlZCAtIGdldFN1YnNjcml0aW9uQnlJZCBzdWJzY3Igb2JqZWN0X3R5cGU6ICcsIG9iamVjdF90eXBlKTtcblxuICAgICAgLyoqIDJBICovXG4gICAgICB2YXIgc3Vic2NyaXB0aW9uU3RhcnREYXRlID0gbW9tZW50LnVuaXgoc3Vic2NyaXB0aW9uX29iai5jdXJyZW50X3BlcmlvZF9zdGFydCkuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycpXG4gICAgICB3aW5zdG9uLmluZm8oJyoqKiAqKiogY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWQgLSBnZXRTdWJzY3JpdGlvbkJ5SWQgKioqIHN0YXJ0ICoqKiA6ICcsIHN1YnNjcmlwdGlvblN0YXJ0RGF0ZSk7XG5cbiAgICAgIC8qKiAyQiAqL1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbkVuZERhdGUgPSBtb21lbnQudW5peChzdWJzY3JpcHRpb25fb2JqLmN1cnJlbnRfcGVyaW9kX2VuZCkuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycpXG4gICAgICB3aW5zdG9uLmluZm8oJyoqKiAqKiogY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWQgLSBnZXRTdWJzY3JpcHRpb24gKioqIGVuZCAqKiogOiAnLCBzdWJzY3JpcHRpb25FbmREYXRlKTtcblxuICAgICAgLyoqXG4gICAgICAgKiEgKioqIEJPRFkgKioqXG4gICAgICAgKi9cbiAgICAgIHZhciBib2R5ID0ge1xuICAgICAgICBwcm9maWxlOiB7XG4gICAgICAgICAgbmFtZTogcGxhbl9uYW1lLFxuICAgICAgICAgIHR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICBzdWJzY3JpcHRpb25fY3JlYXRpb25fZGF0ZTogc3Vic2NyaXB0aW9uU3RhcnREYXRlLFxuICAgICAgICAgIHN1YlN0YXJ0OiBzdWJzY3JpcHRpb25TdGFydERhdGUsXG4gICAgICAgICAgc3ViRW5kOiBzdWJzY3JpcHRpb25FbmREYXRlLFxuICAgICAgICAgIHN1YnNjcmlwdGlvbklkOiBzdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICBsYXN0X3N0cmlwZV9ldmVudDogZXZlbnQudHlwZSxcbiAgICAgICAgICBhZ2VudHM6IHNlYXRzX251bVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKiAzICovXG4gICAgICB1cGRhdGVQcm9qZWN0UHJvZmlsZShwcm9qZWN0X2lkLCBib2R5LCAnY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWQnKTtcblxuICAgICAgLyoqIDQgKi9cbiAgICAgIHNhdmVPbkRCKHN1YnNjcmlwdGlvbklkLCBwcm9qZWN0X2lkLCBzdWJzY3JpcHRpb25fb2JqLCB1c2VyX2lkLCBldmVudC50eXBlLCBwbGFuX25hbWUsIHNlYXRzX251bSlcblxuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIHdpbnN0b24uZXJyb3IoJyoqKiAqKiogY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWQgLSBnZXRTdWJzY3JpdGlvbkJ5SWQgZXJyICcsIGVycik7XG4gICAgfSk7XG5cbiAgfVxuICAvLyBvYmplY3RfdHlwZSA9IHN1YnNjcmlwdGlvbi5cbiAgLyoqXG4gICAqKiEgKioqIEhhbmRsZSB0aGUgaW52b2ljZS5wYXltZW50X3N1Y2NlZWRlZCBldmVudCAqKipcbiAgICogTk9URTogVEhJUyBFVkVOVCBPQ0NVUiBXSEVOIElTIENSRUFURUQgQSBORVcgU1VCU0NSSVBUSU9OIEFORCBFVkVSWSBUSU1FIFRIRSBTQU1FIElTIFJFTkVXRURcbiAgICogMSkgRlJPTSBUSEUgT0JKRUNUIE9GIFRIRSBFVkVOVCBBUkUgT0JUQUlORUQgVEhFOlxuICAgKiAgICBBKSBzdWJzY3JpcHRpb25TdGFydERhdGVcbiAgICogICAgQikgc3Vic2NyaXB0aW9uRW5kRGF0ZVxuICAgKiAgICBDKSBzdWJzY3JpdHB0aW9uSWQgIFxuICAgKiAyKSB3aGVuIHJlZmVyIHRvIGEgUkVORVdBTCAoIGJpbGxpbmdfcmVhc29uID09PSBzdWJzY3JpcHRpb25fY3ljbGUpXG4gICAqICAgIElGIFRIRSBWQUxVRSBPRiBUSEUgUFJPUEVSVFkgXCJiaWxsaW5nX3JlYXNvblwiIElTIFVOTElLRSBPRiBcInN1YnNjcmlwdGlvbl9jcmVhdGVcIiAoTUVBTlMgVEhBVCBUSEUgRVZFTlQgUkVGRVIgVE8gQSBSRU5FV0FMIFxuICAgKiAgICBGT1IgV0hJQ0ggYmlsbGluZ19yZWFzb246IHN1YnNjcmlwdGlvbl9jeWNsZSBBTkQgTk9UIFRPIFRIRSBGSVJTVCBTVUJTQ1JJUFRJT04pIFxuICAgKiAgICBBKSBJUyBPQlRBSU5FRCBUSEUgJ1NVQlNDUklQVElPTi1QQVlNRU5UJyAod2l0aCBzdHJpcGVfZXZlbnQ6IFwiY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWRcIikgU0FWRUQgQUJPVkUgQU5EIFRIRU4gRlJPTSBUSElTOlxuICAgKiAgICAgICAtIFRIRSBcIlBST0pFQ1QgSURcIiBcbiAgICogICAgICAgLSBUSEUgXCJVU0VSIElEXCJcbiAgICogICAgICAgVE8gT0JUQUlOIFRIRSAnU1VCU0NSSVBUSU9OLVBBWU1FTlQnSU4gT1VSIERCIElTIExPT0tFRCBGT1IgVEhFIFwiU1VCU0NSSVBJT04tUEFZTUVOVFwiIFRIQVQgSEFTIEZPUiBzdWJzY3JpcHRpb24gaWQgVEhFIFZBTFVFIE9GIDFDIEFORCBzdHJpcGVfZXZlbnQ6IFwiY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWRcIlxuICAgKiAgICAgICBUSEUgQ09ORElUSU9OIHN0cmlwZV9ldmVudDogXCJjaGVja291dC5zZXNzaW9uLmNvbXBsZXRlZFwiIChOTyBNT1JFOiBvYmplY3RfdHlwZSA9IHN1YnNjcmlwdGlvbikgSVQnUyBORUNFU1NBUlkgVE8gRklMVEVSIFRIRSBcIlNVQlNDUklQSU9OLVBBWU1FTlRTXCIgXG4gICAqICAgICAgIFRIQVQgQ09OVEFJTiBUSEUgIFBST1BFUlRJRVMgIFwicHJvamVjdElEXCIgQU5EIFwidXNlcklEXCJcbiAgICogICAgICAgVEhFIEVYSVNURU5DRSBPRiBBIFwiU1VCU0NSSVBUSU9OLVBBWU1FTlRcIiBXSVRIT1VUIFwicHJvamVjdElEXCIgQU5EIFwidXNlcklEXCIgSVMgRFVFIFRPIFRIRSBGQUNUIFRIQVQgQVQgVEhFIE1PTUVOVCBPRiBUSEUgQ1JFQVRJT04gT0YgQSBTVUJTQ1JJUFRJT04gXG4gICAqICAgICAgIElTIFNBVkVEIElOIE9VUiBEQiBBTFNPIEEgXCJTVUJTQ1JJUFRJT04tUEFZTUVOVFwiIENPUlJFU1BPTkRJTkcgVE8gVEhFIE9CSkVDVCBSRVRVUk5FRCBCWSAgVEhFIEVWRU5UIFwiaW52b2ljZS5wYXltZW50X3N1Y2NlZWRlZFwiIFVTRUZVTCBCRUNBVVNFIFxuICAgKiAgICAgICBJVCBDT05UQUlOUyBUSEUgTElOS1MgT0YgVEhFIElOVk9JQ0UgT0YgVEhFIEZJUlNUIFNVQlNDUklQVElPTiAodXNlZCBieSB0aWxlZGVzayBkYXNoYm9hcmQgaW4gdGhlIGNvbXBvbmVudHMgcGF5bWVudHMpXG4gICAqICAgICAgIEJVVCBGUk9NIFdISUNIIElUIElTIE5PVCBQT1NTSUJMRSBQVVNIIEFORCBUSEVOIFRPIFRPIE9CVEFJTiBUSEUgXCJwcm9qZWN0SURcIiBBTkQgXCJ1c2VySURcIlxuICAgKiAgICBCKSBJUyBVUERBVEVEIFRIRSBQUk9KRUNUICdQUk9GSUxFJyBXSVRIOlxuICAgKiAgICAgICAtIERBVEEgT0JUQUlORUQgRlJPTSBUSEUgRVZFTlQnUyBPQkpFQ1Q6XG4gICAqICAgICAgICAgLSBzdWJzY3JpcHRpb25TdGFydERhdGVcbiAgICogICAgICAgICAtIHN1YnNjcmlwdGlvbkVuZERhdGVcbiAgICogICAgICAgICAtIHN1YnNjcmlwdGlvbklkIFxuICAgKiAgICAgICAgIC0gbGFzdF9zdHJpcGVfZXZlbnQgXG4gICAqICAgICAgICAgLSBxdWFudGl0eSAod2hpY2ggaW4gdGhlIGRhc2hib2FyZCBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mIGFnZW50cyAvIG9wZXJhdG9ycyBzZWF0cylcbiAgICogICAgICAgLSBEQVRBIE9CVEFJTkVEIEZST00gVEhFICdTVUJTQ1JJUFRJT04tUEFZTUVOVCcgd2l0aCBzdHJpcGVfZXZlbnQ6IFwiY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWRcIlxuICAgKiAgICAgICAgIC0gXCJQUk9KRUNUIElEXCIgYW5kIFwiVVNFUiBJRFwiXG4gICAqICAgIEMpIFRIRSBPQkpFQ1QgT0YgVEhFIEVWRU5UIGludm9pY2UucGF5bWVudF9zdWNjZWVkZWQgQU5EIHRoZSBcIlNVQlNDUklQVElPTiBJRFwiLCB0aGUgXCJQUk9KRUNUIElEXCIsIHRoZSBcIlVTRVIgSURcIiBBTkQgdGhlIFwiT0JKRUNUX1RZUEVcIiAoZXZlbnQpIFxuICAgKiAgICAgICBBUkUgU0FWRUQgQVMgXCJTVUJTQ1JJUFRJT04tUEFZTUVOVFwiIE9OIE9VUiBEQlxuICAgKiAzKSB3aGVuIHJlZmVyIHRvIGEgQ1JFQVRJT04gKGJpbGxpbmdfcmVhc29uID09PSBzdWJzY3JpcHRpb25fY3JlYXRlKVxuICAgKiAgICBBKSBUSEUgT0JKRUNUIE9GIFRIRSBFVkVOVCBpbnZvaWNlLnBheW1lbnRfc3VjY2VlZGVkIEFORCBUSEUgREFUQSBldmVudC50eXBlID09PSBpbnZvaWNlLnBheW1lbnRfc3VjY2VlZGVkICBBUkUgU0FWRUQgQVMgXCJTVUJTQ1JJUFRJT04tUEFZTUVOVFwiXG4gICAqICAgICAgIE9OIE9VUiBEQiAoTk9URTogXCJQUk9KRUNUIElEXCIgQU5EIFwiVVNFUiBJRFwiIEFSRSBTQVZFRCBBUyBudWxsIFNJTkNFIElTIE5PVCBQT1NTSUJMRSBUTyBSRVRSSUVWRSBUSEUgVkFMVUVTKSBcbiAgICogXG4gICAqL1xuICBpZiAoZXZlbnQudHlwZSA9PT0gJ2ludm9pY2UucGF5bWVudF9zdWNjZWVkZWQnKSB7XG5cbiAgICB3aW5zdG9uLmluZm8oJyAhISEhISEhISBISSAhISEhISEhISBpbnZvaWNlLnBheW1lbnRfc3VjY2VlZGVkJyk7XG4gICAgd2luc3Rvbi5pbmZvKCcqKiogKioqIGludm9pY2UucGF5bWVudF9zdWNjZWVkZWQgLSBCSUxMSU5HIFJFQVNPTiAnLCBldmVudC5kYXRhLm9iamVjdC5iaWxsaW5nX3JlYXNvbik7XG5cbiAgICB2YXIgbGluZXNOdW0gPSBldmVudC5kYXRhLm9iamVjdC5saW5lcy50b3RhbF9jb3VudFxuICAgIHdpbnN0b24uaW5mbygnKioqICoqKiBpbnZvaWNlLnBheW1lbnRfc3VjY2VlZGVkIC0gbGluZXNOdW06ICcsIGxpbmVzTnVtKTtcblxuICAgIHZhciBpbmRleCA9IGxpbmVzTnVtIC0gMTtcbiAgICB3aW5zdG9uLmluZm8oJyoqKiAqKiogaW52b2ljZS5wYXltZW50X3N1Y2NlZWRlZCAtIGluZGV4OiAnLCBpbmRleCk7XG5cbiAgICAvKiogMUEgKi8gLy8gVEhJUyBXT1JLU1xuICAgIHZhciBzdWJzY3JpcHRpb25TdGFydERhdGUgPSBtb21lbnQudW5peChldmVudC5kYXRhLm9iamVjdC5saW5lcy5kYXRhW2luZGV4XS5wZXJpb2Quc3RhcnQpLmZvcm1hdCgnWVlZWS1NTS1ERFRISDptbTpzcy5TU1MnKVxuICAgIHdpbnN0b24uaW5mbygnKioqICoqKiBpbnZvaWNlLnBheW1lbnRfc3VjY2VlZGVkIC0gc3RhcnQ6ICcsIHN1YnNjcmlwdGlvblN0YXJ0RGF0ZSk7XG5cbiAgICAvKiogMUIgKi8gLy8gVEhJUyBXT1JLU1xuICAgIHZhciBzdWJzY3JpcHRpb25FbmREYXRlID0gbW9tZW50LnVuaXgoZXZlbnQuZGF0YS5vYmplY3QubGluZXMuZGF0YVtpbmRleF0ucGVyaW9kLmVuZCkuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycpXG4gICAgd2luc3Rvbi5pbmZvKCcqKiogKioqIGludm9pY2UucGF5bWVudF9zdWNjZWVkZWQgLSBlbmQ6ICcsIHN1YnNjcmlwdGlvbkVuZERhdGUpO1xuXG4gICAgdmFyIHN1YnNjcmlwdGlvbklkID0gZXZlbnQuZGF0YS5vYmplY3Quc3Vic2NyaXB0aW9uO1xuICAgIHdpbnN0b24uaW5mbygnKioqICoqKiBpbnZvaWNlLnBheW1lbnRfc3VjY2VlZGVkIC0gc3Vic2NyaXB0aW9uIElEOiAnLCBzdWJzY3JpcHRpb25JZCk7XG5cbiAgICBpZiAoc3Vic2NyaXB0aW9uSWQgPT0gbnVsbCkge1xuICAgICAgc3Vic2NyaXB0aW9uSWQgPSBldmVudC5kYXRhLm9iamVjdC5saW5lcy5kYXRhWzBdLnN1YnNjcmlwdGlvbjtcbiAgICAgIHdpbnN0b24uaW5mbygnKioqICoqKiBpbnZvaWNlLnBheW1lbnRfc3VjY2VlZGVkIC0gc3Vic2NyaXB0aW9uIElEOiAnLCBzdWJzY3JpcHRpb25JZCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmRhdGEub2JqZWN0LmJpbGxpbmdfcmVhc29uICE9PSAnc3Vic2NyaXB0aW9uX2NyZWF0ZScpIHtcblxuXG4gICAgICAvLyBUTyBURVNUIFRIRSBSRU5FV0FMIFVOQ09NTUVOVCBTRVQgVElNRU9VVFxuICAgICAgLy8gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAvKiogMkEgKi9cbiAgICAgIGdldFN1YkJ5SWRBbmRDaGVja291dFNlc3Npb25Db21wbGV0ZWRFdm50KHN1YnNjcmlwdGlvbklkKS50aGVuKGZ1bmN0aW9uIChzdWJzcHRuX3BheW1lbnQpIHtcbiAgICAgICAgd2luc3Rvbi5pbmZvKCcqKiogKioqIGdldFN1YkJ5SWRBbmRDaGVja291dFNlc3Npb25Db21wbGV0ZWRFdm50IHN1YnNwdG5fcGF5bWVudDogJywgc3Vic3B0bl9wYXltZW50KTtcbiAgICAgICAgd2luc3Rvbi5pbmZvKCcqKiogKioqIGdldFN1YkJ5SWRBbmRDaGVja291dFNlc3Npb25Db21wbGV0ZWRFdm50IHN1YnNwdG5fcGF5bWVudCB0eXBlb2Ygc3Vic3B0bl9wYXltZW50OiAnLCB0eXBlb2Ygc3Vic3B0bl9wYXltZW50KTtcbiAgICAgICAgaWYgKHN1YnNwdG5fcGF5bWVudCkge1xuXG4gICAgICAgICAgdmFyIHByb2plY3RJZCA9IHN1YnNwdG5fcGF5bWVudC5wcm9qZWN0X2lkXG4gICAgICAgICAgd2luc3Rvbi5pbmZvKCcqKiogKioqIGdldFN1YkJ5SWRBbmRDaGVja291dFNlc3Npb25Db21wbGV0ZWRFdm50IHN1YnNwdG5fcGF5bWVudCA+IHByb2plY3RfaWQ6ICcsIHByb2plY3RJZCk7XG5cbiAgICAgICAgICBQcm9qZWN0LmZpbmRPbmUoeyBfaWQ6IHByb2plY3RJZCB9LCBmdW5jdGlvbiAoZXJyLCBwcm9qZWN0KSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHdpbnN0b24uaW5mbygnKioqICoqKiBnZXRTdWJCeUlkQW5kQ2hlY2tvdXRTZXNzaW9uQ29tcGxldGVkRXZudCAgZmluZCBQcm9qZWN0ICcsIGVycik7XG4gICAgICAgICAgICAgIHJldHVybiAoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9qZWN0KSB7XG4gICAgICAgICAgICAgIHdpbnN0b24uaW5mbygnKioqICoqKiBnZXRTdWJCeUlkQW5kQ2hlY2tvdXRTZXNzaW9uQ29tcGxldGVkRXZudCAgcHJvamVjdCAnLCBwcm9qZWN0KTtcbiAgICAgICAgICAgICAgd2luc3Rvbi5pbmZvKCcqKiogKioqIGdldFN1YkJ5SWRBbmRDaGVja291dFNlc3Npb25Db21wbGV0ZWRFdm50ICBwcm9qZWN0ID4gcHJvZmlsZScsIHByb2plY3QucHJvZmlsZSk7XG5cbiAgICAgICAgICAgICAgdmFyIHNlYXRzX251bSA9IHByb2plY3QucHJvZmlsZS5hZ2VudHM7XG4gICAgICAgICAgICAgIHZhciBwbGFuX25hbWUgPSBwcm9qZWN0LnByb2ZpbGUubmFtZTtcbiAgICAgICAgICAgICAgdmFyIHVzZXJJZCA9IHN1YnNwdG5fcGF5bWVudC51c2VyX2lkXG5cbiAgICAgICAgICAgICAgbGV0IHByb2ZpbGUgPSBwcm9qZWN0LnByb2ZpbGU7XG4gICAgICAgICAgICAgIHByb2ZpbGUubmFtZSA9IHBsYW5fbmFtZTtcbiAgICAgICAgICAgICAgcHJvZmlsZS50eXBlID0gXCJwYXltZW50XCI7XG4gICAgICAgICAgICAgIHByb2ZpbGUuc3ViU3RhcnQgPSBzdWJzY3JpcHRpb25TdGFydERhdGU7XG4gICAgICAgICAgICAgIHByb2ZpbGUuc3ViRW5kID0gc3Vic2NyaXB0aW9uRW5kRGF0ZTtcbiAgICAgICAgICAgICAgcHJvZmlsZS5zdWJzY3JpcHRpb25JZCA9IHN1YnNjcmlwdGlvbklkO1xuICAgICAgICAgICAgICBwcm9maWxlLmxhc3Rfc3RyaXBlX2V2ZW50ID0gZXZlbnQudHlwZTtcblxuXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgIC8vICBCT0RZIFxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICB2YXIgYm9keSA9IHtcbiAgICAgICAgICAgICAgICBwcm9maWxlOiBwcm9maWxlXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvKiogMkIgKi9cbiAgICAgICAgICAgICAgdXBkYXRlUHJvamVjdFByb2ZpbGUocHJvamVjdElkLCBib2R5LCAnaW52b2ljZS5wYXltZW50X3N1Y2NlZWRlZCcpO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLyoqIDJDICovXG4gICAgICAgICAgICAgIHNhdmVPbkRCKHN1YnNjcmlwdGlvbklkLCBwcm9qZWN0SWQsIGV2ZW50LCB1c2VySWQsIGV2ZW50LnR5cGUsIHBsYW5fbmFtZSwgc2VhdHNfbnVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgd2luc3Rvbi5lcnJvcignKioqICoqKiBnZXRTdWJCeUlkQW5kQ2hlY2tvdXRTZXNzaW9uQ29tcGxldGVkRXZudCAtIGVyciAnLCBlcnIpO1xuICAgICAgfSk7XG4gICAgICAvLyB9LCA1MDAwKTtcbiAgICB9IFxuICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEub2JqZWN0LmJpbGxpbmdfcmVhc29uID09PSAnc3Vic2NyaXB0aW9uX2NyZWF0ZScpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdVU0VDQVNFICBpbnZvaWNlLnBheW1lbnRfc3VjY2VlZGVkICBiaWxsaW5nX3JlYXNvbiBzdWJzY3JpcHRpb25fY3JlYXRlICcpIFxuICAgICAgc2F2ZUZpcnN0SW52b2ljZVBheW1lbnRTdWNjZWVkZWQoc3Vic2NyaXB0aW9uSWQsIGV2ZW50LCBldmVudC50eXBlKTtcbiAgICB9IFxuICBcbiAgfVxuXG4gIC8qKlxuICAgKiohICoqKiBIQU5ETEUgVEhFIEVWRU5UIGN1c3RvbWVyLnN1YnNjcmlwdGlvbi5kZWxldGVkICoqKlxuICAgKiB0aGlzIGV2ZW50IG9jY3VycyB3aGVuIGEgc3Vic2NyaXB0aW9uIGlzIGNhbmNlbGxlZFxuICAgKiAtIGZyb20gdGhlIFRJTEVERVNLJyBkYXNoYm9hcmQgKGJ5IGNsaWNraW5nIENBTkNFTCBTVUJTQ1JJUFRJT04gdGhhdCBjYWxsIGNhbmNlbHN1YnNjcmlwdGlvbigpIC0gc2VlIGJlbG93KVxuICAgKiAtIGZyb20gdGhlIFNUUklQRScgZGFzaGJvYXJkXG4gICAqL1xuICBpZiAoZXZlbnQudHlwZSA9PT0gJ2N1c3RvbWVyLnN1YnNjcmlwdGlvbi5kZWxldGVkJykge1xuICAgIHdpbnN0b24uaW5mbygnICEhISEhISEhIEhJICEhISEhISEhISEhIGN1c3RvbWVyLnN1YnNjcmlwdGlvbi5kZWxldGVkJyk7XG4gICAgd2luc3Rvbi5pbmZvKCdjdXN0b21lci5zdWJzY3JpcHRpb24uZGVsZXRlZCBldmVudCAnLCBldmVudCk7XG4gICAgdmFyIHN1YnNjcmlwdGlvbklkID0gZXZlbnQuZGF0YS5vYmplY3QuaWRcbiAgICB3aW5zdG9uLmluZm8oJyoqKiAqKiogc3Vic2NyaXB0aW9uIElEICcsIHN1YnNjcmlwdGlvbklkKTtcblxuICAgIHZhciBzdWJzY3JpcHRpb25FbmQgPSBtb21lbnQudW5peChldmVudC5kYXRhLm9iamVjdC5jYW5jZWxlZF9hdCkuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycpXG4gICAgd2luc3Rvbi5pbmZvKCcqKiogKioqIHN1YnNjcmlwdGlvbkVuZCAnLCBzdWJzY3JpcHRpb25FbmQpO1xuXG4gICAgZ2V0U3ViQnlJZEFuZENoZWNrb3V0U2Vzc2lvbkNvbXBsZXRlZEV2bnQoc3Vic2NyaXB0aW9uSWQpLnRoZW4oZnVuY3Rpb24gKHN1YnNjcmlwdGlvblBheW1lbnQpIHtcbiAgICAgIC8vIFN1YnNjcmlwdGlvblBheW1lbnQuZmluZCh7IHN1YnNjcmlwdGlvbl9pZDogc3Vic2NyaXB0aW9uSWQsIG9iamVjdF90eXBlOiBcInN1YnNjcmlwdGlvblwiIH0sIGZ1bmN0aW9uIChlcnIsIHN1YnNjcmlwdGlvblBheW1lbnQpIHtcblxuICAgICAgLy8gaWYgKGVycikge1xuICAgICAgLy8gICB3aW5zdG9uLmluZm8oJ0Vycm9yIGdldHRpbmcgdGhlIHN1YnNjcmlwdGlvblBheW1lbnQgJywgZXJyKTtcbiAgICAgIC8vICAgcmV0dXJuIGVycjtcbiAgICAgIC8vIH1cbiAgICAgIHdpbnN0b24uaW5mbygnKioqICoqKiDCu8K7wrsgwrvCu8K7IGN1c3RvbWVyLnN1YnNjcmlwdGlvbi5kZWxldGVkIHN1YnNjcmlwdGlvblBheW1lbnQgJywgc3Vic2NyaXB0aW9uUGF5bWVudCk7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uUGF5bWVudCkgeyBcbiAgICAgICAgdmFyIHByb2plY3RJZCA9IHN1YnNjcmlwdGlvblBheW1lbnQucHJvamVjdF9pZDsgXG4gICAgICAgIHdpbnN0b24uaW5mbygnY3VzdG9tZXIuc3Vic2NyaXB0aW9uLmRlbGV0ZWQgc3Vic2NyaXB0aW9uUGF5bWVudCBwcm9qZWN0IGlkOiAnLCBwcm9qZWN0SWQpXG4gICAgICAgIFxuICAgICAgICB2YXIgdXNlcklkID0gc3Vic2NyaXB0aW9uUGF5bWVudC51c2VyX2lkO1xuICAgICAgICB3aW5zdG9uLmluZm8oJ2N1c3RvbWVyLnN1YnNjcmlwdGlvbi5kZWxldGVkIHN1YnNjcmlwdGlvblBheW1lbnQgdXNlciBpZDogJywgdXNlcklkKVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqISAqKiogQk9EWSAqKipcbiAgICAgICAqL1xuICAgICAgdmFyIGJvZHkgPSB7XG4gICAgICAgIHByb2ZpbGU6IHtcbiAgICAgICAgICBzdWJzY3JpcHRpb25JZDogc3Vic2NyaXB0aW9uSWQsXG4gICAgICAgICAgbmFtZTogJ1NhbmRib3gnLFxuICAgICAgICAgIHR5cGU6ICdmcmVlJyxcbiAgICAgICAgICBhZ2VudHM6IDEsXG4gICAgICAgICAgbGFzdF9zdHJpcGVfZXZlbnQ6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgc3ViRW5kOiBzdWJzY3JpcHRpb25FbmRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3aW5zdG9uLmluZm8oXCJjdXN0b21lci5zdWJzY3JpcHRpb24uZGVsZXRlZCBwcm9maWxlIHRvIHVwZGF0ZSAoZXZlbnQuZGF0YS5vYmplY3QuY2FuY2VsZWRfYXQpIFwiLCBldmVudC5kYXRhLm9iamVjdC5jYW5jZWxlZF9hdClcbiAgICAgIHdpbnN0b24uaW5mbyhcImN1c3RvbWVyLnN1YnNjcmlwdGlvbi5kZWxldGVkIHByb2ZpbGUgdG8gdXBkYXRlIFwiLCBib2R5LnByb2ZpbGUpXG4gICAgICBcbiAgICAgIHVwZGF0ZVByb2plY3RQcm9maWxlKHByb2plY3RJZCwgYm9keSwgJ3N1YnNjcmlwdGlvbi5kZWxldGVkJyk7XG4gICAgICBzYXZlT25EQihzdWJzY3JpcHRpb25JZCwgcHJvamVjdElkLCBldmVudC5kYXRhLm9iamVjdCwgdXNlcklkLCBldmVudC50eXBlLCBwbGFuX25hbWUsIDEpO1xuXG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgd2luc3Rvbi5lcnJvcignKioqICoqKiBjdXN0b21lci5zdWJzY3JpcHRpb24uZGVsZXRlZCAnLCBlcnIpO1xuICAgIH0pO1xuXG4gIH1cbiAgLy8gUmV0dXJuIGEgcmVzcG9uc2UgdG8gYWNrbm93bGVkZ2UgcmVjZWlwdCBvZiB0aGUgZXZlbnRcbiAgcmVzcG9uc2UuanNvbih7IHJlY2VpdmVkOiB0cnVlIH0pO1xufSk7XG5cblxuZnVuY3Rpb24gZ2V0U3ViQnlJZEFuZENoZWNrb3V0U2Vzc2lvbkNvbXBsZXRlZEV2bnQoc3Vic2NyaXB0aW9uaWQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBTdWJzY3JpcHRpb25QYXltZW50LmZpbmRPbmUoeyBzdWJzY3JpcHRpb25faWQ6IHN1YnNjcmlwdGlvbmlkLCBzdHJpcGVfZXZlbnQ6IFwiY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWRcIiB9LCBmdW5jdGlvbiAoZXJyLCBzdWJzY3JpcHRpb25QYXltZW50KSB7XG4gICAgICBpZiAoZXJyKSByZWplY3QoZXJyKTtcblxuICAgICAgdmFyIHN1YnNjcmlwdGlvbl9wYXltZW50ID0gc3Vic2NyaXB0aW9uUGF5bWVudDtcbiAgICAgIHJlc29sdmUoc3Vic2NyaXB0aW9uX3BheW1lbnQpO1xuICAgIH0pO1xuICB9KVxufTtcblxuZnVuY3Rpb24gZ2V0U3Vic2NyaXRpb25CeUlkKHN1YnNjcmlwdGlvbmlkKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY29uc3QgX3N0cmlwZSA9IHJlcXVpcmUoXCJzdHJpcGVcIikoYXBpU2VjcmV0S2V5KTtcbiAgICBfc3RyaXBlLnN1YnNjcmlwdGlvbnMucmV0cmlldmUoc3Vic2NyaXB0aW9uaWQsIGZ1bmN0aW9uIChlcnIsIHN1YnNjcmlwdGlvbikge1xuICAgICAgaWYgKGVycikgcmVqZWN0KGVycik7XG5cbiAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb247XG4gICAgICByZXNvbHZlKHN1YnNjcmlwdGlvbik7XG4gICAgfSk7XG4gIH0pXG59O1xuXG4vLyBTRUUgVXBkYXRpbmcgbmVzdGVkIG9iamVjdCBpbiBtb25nb29zZSBcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIzODMyOTIxL3VwZGF0aW5nLW5lc3RlZC1vYmplY3QtaW4tbW9uZ29vc2VcbmZ1bmN0aW9uIHVwZGF0ZVByb2plY3RQcm9maWxlKHByb2plY3RfaWQsIGJvZHksIGNhbGxlZEJ5KSB7XG4gIFByb2plY3QuZmluZEJ5SWRBbmRVcGRhdGUocHJvamVjdF9pZCwgYm9keSwgeyBuZXc6IHRydWUsIHVwc2VydDogdHJ1ZSB9LCBmdW5jdGlvbiAoZXJyLCB1cGRhdGVkUHJvamVjdCkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHdpbnN0b24uZXJyb3IoJ3VwZGF0ZVByb2plY3RQcm9maWxlIEVycm9yICcsIGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbnN0b24uZGVidWcodXBkYXRlZFByb2plY3QpXG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2F2ZU9uREIoc3Vic2NyaXB0aW9uaWQsIHByb2plY3RpZCwgb2JqLCB1c2VyaWQsIHN0cmlwZV9ldmVudCwgcGxhbl9uYW1lLCBzZWF0c19udW0pIHtcbiAgd2luc3Rvbi5pbmZvKCdzYXZlT25EQiBwbGFuX25hbWUnLCBwbGFuX25hbWUpXG4gIHdpbnN0b24uaW5mbygnc2F2ZU9uREIgc2VhdHNfbnVtJywgc2VhdHNfbnVtKVxuXG4gIHZhciBuZXdQYXltZW50U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvblBheW1lbnQoe1xuICAgIF9pZDogbmV3IG1vbmdvb3NlLlR5cGVzLk9iamVjdElkKCksXG4gICAgc3Vic2NyaXB0aW9uX2lkOiBzdWJzY3JpcHRpb25pZCxcbiAgICBwcm9qZWN0X2lkOiBwcm9qZWN0aWQsXG4gICAgdXNlcl9pZDogdXNlcmlkLFxuICAgIHN0cmlwZV9ldmVudDogc3RyaXBlX2V2ZW50LFxuICAgIHBsYW5fbmFtZTogcGxhbl9uYW1lLFxuICAgIGFnZW50czogc2VhdHNfbnVtLFxuICAgIG9iamVjdDogb2JqXG4gIH0pO1xuXG4gIG5ld1BheW1lbnRTdWJzY3JpcHRpb24uc2F2ZShmdW5jdGlvbiAoZXJyLCBzYXZlZFN1YnNjcmlwdGlvblBheW1lbnQpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB3aW5zdG9uLmVycm9yKCctLS0gPiBFUlJPUiAnLCBlcnIpXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDApLnNlbmQoeyBzdWNjZXNzOiBmYWxzZSwgbXNnOiAnRXJyb3Igc2F2aW5nIG9iamVjdC4nIH0pO1xuICAgIH1cbiAgICB3aW5zdG9uLmluZm8oJ3NhdmVkU3Vic2NyaXB0aW9uUGF5bWVudCAnLCBzYXZlZFN1YnNjcmlwdGlvblBheW1lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2F2ZUZpcnN0SW52b2ljZVBheW1lbnRTdWNjZWVkZWQoc3Vic2NyaXB0aW9uaWQsIG9iaiwgc3RyaXBlX2V2ZW50KSB7XG4gIGNvbnNvbGUubG9nKCdzYXZlRmlyc3RJbnZvaWNlUGF5bWVudFN1Y2NlZWRlZCBzdWJzY3JpcHRpb25pZCcsIHN1YnNjcmlwdGlvbmlkKVxuICBjb25zb2xlLmxvZygnc2F2ZUZpcnN0SW52b2ljZVBheW1lbnRTdWNjZWVkZWQgc3RyaXBlX2V2ZW50Jywgc3RyaXBlX2V2ZW50KVxuXG4gIHZhciBuZXdQYXltZW50U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvblBheW1lbnQoe1xuICAgIF9pZDogbmV3IG1vbmdvb3NlLlR5cGVzLk9iamVjdElkKCksXG4gICAgc3Vic2NyaXB0aW9uX2lkOiBzdWJzY3JpcHRpb25pZCxcbiAgICBzdHJpcGVfZXZlbnQ6IHN0cmlwZV9ldmVudCxcbiAgICBvYmplY3Q6IG9ialxuICB9KTtcblxuICBuZXdQYXltZW50U3Vic2NyaXB0aW9uLnNhdmUoZnVuY3Rpb24gKGVyciwgc2F2ZWRTdWJzY3JpcHRpb25QYXltZW50KSB7XG4gICAgaWYgKGVycikge1xuICAgICAgd2luc3Rvbi5lcnJvcignLS0tID4gRVJST1IgJywgZXJyKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHsgc3VjY2VzczogZmFsc2UsIG1zZzogJ0Vycm9yIHNhdmluZyBvYmplY3QuJyB9KTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3NhdmVkU3Vic2NyaXB0aW9uUGF5bWVudCA+PiAnLCBzYXZlZFN1YnNjcmlwdGlvblBheW1lbnQpO1xuICB9KTtcbn1cblxucm91dGVyLnB1dCgnL2NhbmNlbHN1YnNjcmlwdGlvbicsIFtwYXNzcG9ydC5hdXRoZW50aWNhdGUoWydiYXNpYycsICdqd3QnXSwgeyBzZXNzaW9uOiBmYWxzZSB9KSwgdmFsaWR0b2tlbl0sIGZ1bmN0aW9uIChyZXEsIHJlcykge1xuICB2YXIgcHJvamVjdGlkID0gcmVxLmJvZHkucHJvamVjdGlkXG4gIHZhciB1c2VyaWQgPSByZXEuYm9keS51c2VyaWRcbiAgd2luc3Rvbi5pbmZvKCfCu8K7wrsgwrvCu8K7IGNhbmNlbHN1YnNjcmlwdGlvbiBwcm9qZWN0aWQnLCBwcm9qZWN0aWQpO1xuICB3aW5zdG9uLmluZm8oJ8K7wrvCuyDCu8K7wrsgY2FuY2Vsc3Vic2NyaXB0aW9uIHVzZXJpZCcsIHVzZXJpZCk7XG5cbiAgUHJvamVjdC5maW5kT25lKHsgX2lkOiBwcm9qZWN0aWQgfSwgZnVuY3Rpb24gKGVyciwgcHJvamVjdCkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHdpbnN0b24uZXJyb3IoJy0tID4gY2FuY2Vsc3Vic2NyaXB0aW9uIEVycm9yIGdldHRpbmcgcHJvamVjdCAnLCBlcnIpXG4gICAgICByZXR1cm4gKGVycik7XG4gICAgfVxuICAgIGlmIChwcm9qZWN0KSB7XG4gICAgICB3aW5zdG9uLmluZm8oJy0tID4gY2FuY2Vsc3Vic2NyaXB0aW9uICBwcm9qZWN0ICcsIHByb2plY3QpO1xuXG4gICAgICB2YXIgc3Vic2NyaXB0aW9uaWQgPSBwcm9qZWN0LnByb2ZpbGUuc3Vic2NyaXB0aW9uSWQ7XG5cbiAgICAgIGNvbnN0IHN0cmlwZSA9IHJlcXVpcmUoXCJzdHJpcGVcIikoYXBpU2VjcmV0S2V5KTtcblxuICAgICAgc3RyaXBlLnN1YnNjcmlwdGlvbnMuZGVsKHN1YnNjcmlwdGlvbmlkLCBmdW5jdGlvbiAoZXJyLCBjb25maXJtYXRpb24pIHtcbiAgICAgICAgLy8gYXN5bmNocm9ub3VzbHkgY2FsbGVkXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICB3aW5zdG9uLmVycm9yKCctLSA+IGNhbmNlbHN1YnNjcmlwdGlvbiAgZXJyICcsIGVycik7XG4gICAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHsgc3VjY2VzczogZmFsc2UsIG1zZzogZXJyIH0pXG4gICAgICAgIH1cbiAgICAgICAgd2luc3Rvbi5pbmZvKCctLSA+IGNhbmNlbHN1YnNjcmlwdGlvbiBjb25maXJtYXRpb24gJywgY29uZmlybWF0aW9uKVxuICAgICAgICByZXMuanNvbihjb25maXJtYXRpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KVxufSk7XG5cbnJvdXRlci5wdXQoJy91cGRhdGVzdWJzY3JpcHRpb24nLCBbcGFzc3BvcnQuYXV0aGVudGljYXRlKFsnYmFzaWMnLCAnand0J10sIHsgc2Vzc2lvbjogZmFsc2UgfSksIHZhbGlkdG9rZW5dLCBmdW5jdGlvbiAocmVxLCByZXMpIHtcblxuICB2YXIgcHJvamVjdGlkID0gcmVxLmJvZHkucHJvamVjdGlkXG4gIHZhciB1c2VyaWQgPSByZXEuYm9keS51c2VyaWRcbiAgdmFyIHByaWNlID0gcmVxLmJvZHkucHJpY2VcbiAgd2luc3Rvbi5pbmZvKCfCu8K7wrsgwrvCu8K7IHVwZGF0ZXN1YnNjcmlwdGlvbiBwcm9qZWN0aWQnLCBwcm9qZWN0aWQpO1xuICB3aW5zdG9uLmluZm8oJ8K7wrvCuyDCu8K7wrsgdXBkYXRlc3Vic2NyaXB0aW9uIHVzZXJpZCcsIHVzZXJpZCk7XG4gIHdpbnN0b24uaW5mbygnwrvCu8K7IMK7wrvCuyB1cGRhdGVzdWJzY3JpcHRpb24gcHJpY2UnLCBwcmljZSk7XG4gIGNvbnN0IHN0cmlwZSA9IHJlcXVpcmUoXCJzdHJpcGVcIikoYXBpU2VjcmV0S2V5KTtcblxuICBQcm9qZWN0LmZpbmRPbmUoeyBfaWQ6IHByb2plY3RpZCB9LCBmdW5jdGlvbiAoZXJyLCBwcm9qZWN0KSB7XG4gICAgaWYgKGVycikge1xuICAgICAgd2luc3Rvbi5lcnJvcignLS0gPiB1cGRhdGVzdWJzY3JpcHRpb24gRXJyb3IgZ2V0dGluZyBwcm9qZWN0ICcsIGVycilcbiAgICAgIHJldHVybiAoZXJyKTtcbiAgICB9XG4gICAgaWYgKHByb2plY3QpIHtcbiAgICAgIHdpbnN0b24uaW5mbygnLS0gPiB1cGRhdGVzdWJzY3JpcHRpb24gIHByb2plY3QgJywgcHJvamVjdCk7XG5cbiAgICAgIHZhciBzdWJzY3JpcHRpb25pZCA9IHByb2plY3QucHJvZmlsZS5zdWJzY3JpcHRpb25JZDtcblxuICAgICAgLy8gc3Vic2NyaXB0aW9uaWRcbiAgICAgIHN0cmlwZS5zdWJzY3JpcHRpb25zLnVwZGF0ZShcbiAgICAgICAgc3Vic2NyaXB0aW9uaWQsXG4gICAgICAgIC8vIHsgdHJpYWxfZW5kOiAxNTY4MjEwNjU1IH0sXG4gICAgICAgIC8vIGZ1bmN0aW9uIChlcnIsIHN1YnNjcmlwdGlvbikge1xuICAgICAgICAvLyAgIC8vIGFzeW5jaHJvbm91c2x5IGNhbGxlZFxuICAgICAgICAvLyAgIGlmIChlcnIpIHtcbiAgICAgICAgLy8gICAgIHdpbnN0b24uZXJyb3IoJ3VwZGF0ZXN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24gZXJyICcsIGVycilcbiAgICAgICAgLy8gICAgIHJldHVyblxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gICB3aW5zdG9uLmluZm8oJ3VwZGF0ZXN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24gJywgc3Vic2NyaXB0aW9uKVxuICAgICAgICAvLyB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHN0cmlwZS5zdWJzY3JpcHRpb25zLnJldHJpZXZlKHN1YnNjcmlwdGlvbmlkLCBmdW5jdGlvbiAoZXJyLCBzdWJzY3JpcHRpb24pIHtcbiAgICAvLyAgIC8vIGFzeW5jaHJvbm91c2x5IGNhbGxlZFxuICAgIC8vICAgaWYgKGVycikge1xuICAgIC8vICAgICB3aW5zdG9uLmluZm8oJ3JldHJpZXZlIHVwZGF0ZWQgc3Vic2NyaXB0aW9uIGVyciAnLCBlcnIpXG4gICAgLy8gICB9IGVsc2Uge1xuICAgIC8vICAgICB3aW5zdG9uLmluZm8oJ8K7wrvCu8K7wrvCu8K7wrvCuyBncmV0cmlldmUgdXBkYXRlZCBzdWJzY3JpcHRpb246ICcsIHN1YnNjcmlwdGlvbik7XG5cbiAgICAvLyAgIH1cbiAgICAvLyB9KVxuICB9KVxuXG59KVxuXG5yb3V0ZXIuZ2V0KCcvOnN1YnNjcmlwdGlvbmlkJywgW3Bhc3Nwb3J0LmF1dGhlbnRpY2F0ZShbJ2Jhc2ljJywgJ2p3dCddLCB7IHNlc3Npb246IGZhbHNlIH0pLCB2YWxpZHRva2VuXSwgZnVuY3Rpb24gKHJlcSwgcmVzKSB7XG5cbiAgU3Vic2NyaXB0aW9uUGF5bWVudC5maW5kKHsgc3Vic2NyaXB0aW9uX2lkOiByZXEucGFyYW1zLnN1YnNjcmlwdGlvbmlkIH0pLnNvcnQoeyAnb2JqZWN0LmNyZWF0ZWQnOiBcImFzY1wiIH0pLmV4ZWMoZnVuY3Rpb24gKGVyciwgc3Vic2NyaXB0aW9uUGF5bWVudHMpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB3aW5zdG9uLmVycm9yKCctLSA+IEdFVCBTVUJTQ1JJUFRJT04gUEFZTUVOVFMgRVJST1J0ICcsIHByb2plY3QpO1xuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHsgc3VjY2VzczogZmFsc2UsIG1zZzogZXJyIH0pXG4gICAgfVxuICAgIHJlcy5qc29uKHN1YnNjcmlwdGlvblBheW1lbnRzKTtcbiAgfSk7XG5cbn0pO1xuXG4vLyAgUkVUUklFVkUgVEhFIENVUlJFTlQgU1VCU0NSSVBUSU9OIEZST00gU1RSSVBFXG5yb3V0ZXIuZ2V0KCcvc3RyaXBlc3Vicy86c3Vic2NyaXB0aW9uaWQnLCBbcGFzc3BvcnQuYXV0aGVudGljYXRlKFsnYmFzaWMnLCAnand0J10sIHsgc2Vzc2lvbjogZmFsc2UgfSksIHZhbGlkdG9rZW5dLCBmdW5jdGlvbiAocmVxLCByZXMpIHtcblxuICB3aW5zdG9uLmluZm8oJy0tID4gc3Vic2NyaXB0aW9uIGdldCBieSBpZCBmcmVxLnBhcmFtcy5zdWJzY3JpcHRpb25pZCAnLCByZXEucGFyYW1zLnN1YnNjcmlwdGlvbmlkKTtcbiAgdmFyIHN0cmlwZSA9IHJlcXVpcmUoJ3N0cmlwZScpKGFwaVNlY3JldEtleSk7XG5cbiAgc3RyaXBlLnN1YnNjcmlwdGlvbnMucmV0cmlldmUoXG4gICAgcmVxLnBhcmFtcy5zdWJzY3JpcHRpb25pZCxcbiAgICBmdW5jdGlvbiAoZXJyLCBzdWJzY3JpcHRpb24pIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgd2luc3Rvbi5lcnJvcignLS0gPiBzdWJzY3JpcHRpb24gZ2V0IGJ5IGlkIGZyb20gc3RyaXBlICBlcnIgJywgZXJyKTtcbiAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHsgc3VjY2VzczogZmFsc2UsIG1zZzogZXJyIH0pXG4gICAgICB9XG4gICAgICB3aW5zdG9uLmluZm8oJy0tID4gc3Vic2NyaXB0aW9uIGdldCBieSBpZCBmcm9tIHN0cmlwZSAnLCBzdWJzY3JpcHRpb24pXG4gICAgICByZXMuanNvbihzdWJzY3JpcHRpb24pO1xuICAgIH1cbiAgKTtcbn0pO1xuXG4vLyAgUkVUUklFVkUgVEhFIENIRUNLT1VUIFNFU1NJT05cbnJvdXRlci5nZXQoJy9jaGVja291dFNlc3Npb24vOnNlc3Npb25pZCcsIFtwYXNzcG9ydC5hdXRoZW50aWNhdGUoWydiYXNpYycsICdqd3QnXSwgeyBzZXNzaW9uOiBmYWxzZSB9KSwgdmFsaWR0b2tlbl0sIGZ1bmN0aW9uIChyZXEsIHJlcykge1xuXG4gIHdpbnN0b24uaW5mbygnLS0gPiBjaGVja291dFNlc3Npb24gcGFyYW1zLnNlc3Npb25pZCAnLCByZXEucGFyYW1zLnNlc3Npb25pZCk7XG4gIHZhciBzdHJpcGUgPSByZXF1aXJlKCdzdHJpcGUnKShhcGlTZWNyZXRLZXkpO1xuXG4gIHN0cmlwZS5jaGVja291dC5zZXNzaW9ucy5yZXRyaWV2ZShcbiAgICByZXEucGFyYW1zLnNlc3Npb25pZCxcbiAgICBmdW5jdGlvbiAoZXJyLCBzZXNzaW9uKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHdpbnN0b24uaW5mbygnLS0gPiBjaGVja291dFNlc3Npb24gZ2V0IGJ5IGlkIGZyb20gc3RyaXBlICBlcnIgJywgZXJyKTtcbiAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHsgc3VjY2VzczogZmFsc2UsIG1zZzogZXJyIH0pXG4gICAgICB9XG4gICAgICB3aW5zdG9uLmluZm8oJy0tID4gY2hlY2tvdXRTZXNzaW9uIGdldCBieSBpZCBmcm9tIHN0cmlwZSAnLCBzZXNzaW9uKVxuICAgICAgcmVzLmpzb24oc2Vzc2lvbik7XG4gICAgfVxuICApO1xufSk7XG5cbi8vbmV3IGNvZGVcbnJvdXRlci5nZXQoJy9jdXN0b21lci86cHJvamVjdGlkJywgW3Bhc3Nwb3J0LmF1dGhlbnRpY2F0ZShbJ2Jhc2ljJywgJ2p3dCddLCB7IHNlc3Npb246IGZhbHNlIH0pLCB2YWxpZHRva2VuXSwgZnVuY3Rpb24gKHJlcSwgcmVzKSB7XG4gIHdpbnN0b24uZGVidWcoJ8K7wrvCuyDCu8K7wrsgZ2V0IGN1c3RvbWVyIGZyb20gZGIgJywgcmVxLnBhcmFtcylcbiAgdmFyIHByb2plY3RpZCA9IHJlcS5wYXJhbXMucHJvamVjdGlkXG5cbiAgd2luc3Rvbi5kZWJ1ZygnwrvCu8K7IMK7wrvCuyBnZXQgY3VzdG9tZXIgZnJvbSBkYiAtIHByb2plY3RpZCcsIHByb2plY3RpZCk7XG5cbiAgU3Vic2NyaXB0aW9uUGF5bWVudC5maW5kKHsgcHJvamVjdF9pZDogcHJvamVjdGlkLCBzdHJpcGVfZXZlbnQ6IFwiY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWRcIiB9LCBhc3luYyBmdW5jdGlvbiAoZXJyLCBzdWJzY3JpcHRpb24pIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB3aW5zdG9uLmRlYnVnKCctLSA+IGdldCBjdXN0b21lciBmcm9tIGRiIC0gRXJyb3IgJywgZXJyKVxuICAgICAgcmV0dXJuIChlcnIpO1xuICAgIH1cbiAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG5cbiAgICAgIHN1YnNjcmlwdGlvblswXS5vYmplY3QuY3VzdG9tZXJcbiAgICAgIHdpbnN0b24uZGVidWcoJy0tID4gZ2V0IGN1c3RvbWVyIGZyb20gZGIgLSBzdWJzY3JpcHRpb24gPiBjdXN0b21lciBpZCAnLCBzdWJzY3JpcHRpb25bMF0ub2JqZWN0LmN1c3RvbWVyKTtcbiAgICAgIGNvbnN0IGN1c3RvbWVyaWQgPSBzdWJzY3JpcHRpb25bMF0ub2JqZWN0LmN1c3RvbWVyXG4gICAgICBjb25zdCBzdHJpcGUgPSByZXF1aXJlKFwic3RyaXBlXCIpKGFwaVNlY3JldEtleSk7XG5cbiAgICAgIGNvbnN0IGN1c3RvbWVyID0gYXdhaXQgc3RyaXBlLmN1c3RvbWVycy5yZXRyaWV2ZShcbiAgICAgICAgY3VzdG9tZXJpZFxuICAgICAgKTtcbiAgICAgIHdpbnN0b24uZGVidWcoJy0tID4gZ2V0IGN1c3RvbWVyIGZyb20gZGIgPiBjdXN0b21lciBmcm9tIHN0cmlwZSBBUEkgJywgY3VzdG9tZXIpXG5cbiAgICAgIGNvbnN0IHBheW1lbnRNZXRob2RzID0gYXdhaXQgc3RyaXBlLnBheW1lbnRNZXRob2RzLmxpc3Qoe1xuICAgICAgICBjdXN0b21lcjogY3VzdG9tZXJpZCxcbiAgICAgICAgdHlwZTogJ2NhcmQnLFxuICAgICAgfSk7XG4gICAgICBjdXN0b21lclsncGF5bWVudE1ldGhvZHMnXSA9IHBheW1lbnRNZXRob2RzO1xuICAgICAgd2luc3Rvbi5kZWJ1ZygnLS0gPiBnZXQgY3VzdG9tZXIgZnJvbSBkYiA+IGN1c3RvbWVyICsgcGF5bWVudE1ldGhvZHMgJywgc3Vic2NyaXB0aW9uKVxuICAgICAgcmVzLmpzb24oY3VzdG9tZXIpXG4gICAgfVxuICB9KVxufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFVwZGF0ZWQgY3VzdG9tZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnJvdXRlci5wb3N0KCcvY3VzdG9tZXJzLzpjdXN0b21lcmlkJywgW3Bhc3Nwb3J0LmF1dGhlbnRpY2F0ZShbJ2Jhc2ljJywgJ2p3dCddLCB7IHNlc3Npb246IGZhbHNlIH0pLCB2YWxpZHRva2VuXSwgYXN5bmMgZnVuY3Rpb24gKHJlcSwgcmVzKSB7XG4gIHZhciBjdXN0b21lcmlkID0gcmVxLnBhcmFtcy5jdXN0b21lcmlkO1xuICB3aW5zdG9uLmRlYnVnKCfCu8K7wrsgwrvCu8K7ICB1cGRhdGUgY3VzdG9tZXIgLSBjdXN0b21lcmlkIGZyb20gcGFyYW1zICcsIGN1c3RvbWVyaWQpO1xuICB3aW5zdG9uLmRlYnVnKCfCu8K7wrsgwrvCu8K7ICB1cGRhdGUgY3VzdG9tZXIgLSBjYyBmcm9tIGJvZHkgJywgcmVxLmJvZHkpO1xuXG4gIGNvbnN0IHN0cmlwZSA9IHJlcXVpcmUoXCJzdHJpcGVcIikoYXBpU2VjcmV0S2V5KTtcblxuICBsZXQgcGF5bWVudE1ldGhvZDtcbiAgdHJ5IHtcbiAgICBwYXltZW50TWV0aG9kID0gYXdhaXQgc3RyaXBlLnBheW1lbnRNZXRob2RzLmNyZWF0ZSh7XG4gICAgICB0eXBlOiAnY2FyZCcsXG4gICAgICBjYXJkOiB7XG4gICAgICAgIG51bWJlcjogcmVxLmJvZHkuY3JlZGl0X2NhcmRfbnVtLFxuICAgICAgICBleHBfbW9udGg6IHJlcS5ib2R5LmV4cGlyYXRpb25fZGF0ZV9tb250aCxcbiAgICAgICAgZXhwX3llYXI6IHJlcS5ib2R5LmV4cGlyYXRpb25fZGF0ZV95ZWFyLFxuICAgICAgICBjdmM6IHJlcS5ib2R5LmNyZWRpdF9jYXJkX2N2YyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB3aW5zdG9uLmVycm9yKCfCu8K7wrsgwrvCu8K7ICBwYXltZW50TWV0aG9kIGNyZWF0ZSAgZXJyb3IgJywgZSlcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDIpLnNlbmQoeyBzdWNjZXNzOiBmYWxzZSwgbXNnOiBlIH0pXG5cbiAgfVxuICB3aW5zdG9uLmRlYnVnKCfCu8K7wrsgwrvCu8K7ICBwYXltZW50TWV0aG9kJywgcGF5bWVudE1ldGhvZClcblxuICB0cnkge1xuICAgIGNvbnN0IF9wYXltZW50TWV0aG9kID0gYXdhaXQgc3RyaXBlLnBheW1lbnRNZXRob2RzLmF0dGFjaChcbiAgICAgIHBheW1lbnRNZXRob2QuaWQsXG4gICAgICB7IGN1c3RvbWVyOiBjdXN0b21lcmlkIH1cbiAgICApO1xuXG4gICAgd2luc3Rvbi5kZWJ1ZygnwrvCu8K7IMK7wrvCuyAgcGF5bWVudE1ldGhvZCBhdHRhY2hlZCAnLCBfcGF5bWVudE1ldGhvZClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHdpbnN0b24uZXJyb3IoJ8K7wrvCuyDCu8K7wrsgIHBheW1lbnRNZXRob2QgYXR0YWNoZWQgIGVycm9yICcsIGUpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAxKS5zZW5kKHsgc3VjY2VzczogZmFsc2UsIG1zZzogZSB9KVxuICB9XG5cbiAgY29uc3QgX2N1c3RvbWVyID0gYXdhaXQgc3RyaXBlLmN1c3RvbWVycy51cGRhdGUoXG4gICAgY3VzdG9tZXJpZCxcbiAgICB7XG4gICAgICBpbnZvaWNlX3NldHRpbmdzOiB7IGRlZmF1bHRfcGF5bWVudF9tZXRob2Q6IHBheW1lbnRNZXRob2QuaWQgfVxuICAgIH0pO1xuICByZXMuanNvbihfY3VzdG9tZXIpO1xufSk7XG5cblxucm91dGVyLmdldCgnL3BheW1lbnRfbWV0aG9kcy86Y3VzdG9tZXJpZCcsIFtwYXNzcG9ydC5hdXRoZW50aWNhdGUoWydiYXNpYycsICdqd3QnXSwgeyBzZXNzaW9uOiBmYWxzZSB9KSwgdmFsaWR0b2tlbl0sIGFzeW5jIGZ1bmN0aW9uIChyZXEsIHJlcykge1xuICB3aW5zdG9uLmluZm8oJ2dldCBQYXltZW50TWV0aG9kcyBsaXN0IHJlcS5wYXJhbXMnLCByZXEucGFyYW1zKVxuICB2YXIgY3VzdG9tZXJfaWQgPSByZXEucGFyYW1zLmN1c3RvbWVyaWQ7XG4gIHdpbnN0b24uZGVidWcoJ2dldCBQYXltZW50TWV0aG9kcyBsaXN0IHJlcS5wYXJhbXMgPiBjdXN0b21lcl9pZCAnLCBjdXN0b21lcl9pZClcbiAgY29uc3Qgc3RyaXBlID0gcmVxdWlyZShcInN0cmlwZVwiKShhcGlTZWNyZXRLZXkpO1xuXG4gIGNvbnN0IGN1c3RvbWVyID0gYXdhaXQgc3RyaXBlLmN1c3RvbWVycy5yZXRyaWV2ZShcbiAgICBjdXN0b21lcl9pZFxuICApO1xuXG4gIGNvbnN0IGRlZmF1bHRfcGF5bWVudF9tZXRob2RfaWQgPSBjdXN0b21lci5pbnZvaWNlX3NldHRpbmdzLmRlZmF1bHRfcGF5bWVudF9tZXRob2RcbiAgbGV0IHBheW1lbnRNZXRob2RzO1xuICB0cnkge1xuICAgIHBheW1lbnRNZXRob2RzID0gYXdhaXQgc3RyaXBlLnBheW1lbnRNZXRob2RzLmxpc3Qoe1xuICAgICAgY3VzdG9tZXI6IGN1c3RvbWVyX2lkLFxuICAgICAgdHlwZTogJ2NhcmQnLFxuICAgIH0pO1xuICAgIHdpbnN0b24uZGVidWcoJ2dldCBQYXltZW50TWV0aG9kcyBsaXN0ID4gcGF5bWVudE1ldGhvZHMgJywgcGF5bWVudE1ldGhvZHMpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDEpLnNlbmQoeyBzdWNjZXNzOiBmYWxzZSwgbXNnOiBlIH0pXG4gIH1cblxuICB3aW5zdG9uLmRlYnVnKCdnZXQgUGF5bWVudE1ldGhvZHMgbGlzdCA+IHBheW1lbnRNZXRob2RzID4gZGVmYXVsdF9wYXltZW50X21ldGhvZF9pZCAnLCBkZWZhdWx0X3BheW1lbnRfbWV0aG9kX2lkKVxuICBwYXltZW50TWV0aG9kcy5kYXRhLmZvckVhY2gocGF5bWVudE1ldGhvZCA9PiB7XG4gICAgaWYgKHBheW1lbnRNZXRob2QuaWQgIT09IGRlZmF1bHRfcGF5bWVudF9tZXRob2RfaWQpIHtcbiAgICAgIHdpbnN0b24uZGVidWcoJ2dldCBQYXltZW50TWV0aG9kcyBsaXN0ID4gcGF5bWVudE1ldGhvZHMgPiBwYXltZW50TWV0aG9kcy5kYXRhICcsIHBheW1lbnRNZXRob2QuaWQpXG4gICAgICBkZXRhY2hQYXltZW50RnVuYyhwYXltZW50TWV0aG9kLmlkLCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIHdpbnN0b24uaW5mbygnZGV0YWNoUGF5bWVudEZ1bmMgcmVzdWx0ICcsIHJlc3VsdClcbiAgICAgIH0pXG4gICAgfVxuICB9KTtcbiAgcmVzLmpzb24ocGF5bWVudE1ldGhvZHMpXG59KVxuXG5hc3luYyBmdW5jdGlvbiBkZXRhY2hQYXltZW50RnVuYyhwYXltZW50TWV0aG9kaWQsIGNhbGxiYWNrKSB7XG4gIHdpbnN0b24uZGVidWcoJ2RldGFjaFBheW1lbnRGdW5jdCA+IHBheW1lbnRNZXRob2RpZCAnLCBwYXltZW50TWV0aG9kaWQpXG4gIGNvbnN0IHN0cmlwZSA9IHJlcXVpcmUoXCJzdHJpcGVcIikoYXBpU2VjcmV0S2V5KTtcbiAgbGV0IHBheW1lbnRNZXRob2Q7XG4gIHRyeSB7XG4gICAgcGF5bWVudE1ldGhvZCA9IGF3YWl0IHN0cmlwZS5wYXltZW50TWV0aG9kcy5kZXRhY2goXG4gICAgICBwYXltZW50TWV0aG9kaWRcbiAgICApO1xuICAgIGNhbGxiYWNrKHBheW1lbnRNZXRob2QpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYWxsYmFjayhlKVxuICB9XG59XG5cblxuXG4vLyBjdXJsIC1YIFBPU1QgLXUgYW5kcmVhLmxlb0BmMjEuaXQ6MTIzNDU2IC1IICdDb250ZW50LVR5cGU6YXBwbGljYXRpb24vanNvbicgLWQgJ3tcInR5cGVcIjpcInBheW1lbnRfaW50ZW50LnN1Y2NlZWRlZFwifScgIGh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9tb2R1bGVzL3BheW1lbnRzL3N0cmlwZS93ZWJob29rXG5cbi8vIHJvdXRlci5wb3N0KCcvd2ViaG9vaycsIGZ1bmN0aW9uKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4vLyAgIHdpbnN0b24uaW5mbygnc3RyaXBlIHdlYmhvb2snKTtcblxuLy8gLy8gTWF0Y2ggdGhlIHJhdyBib2R5IHRvIGNvbnRlbnQgdHlwZSBhcHBsaWNhdGlvbi9qc29uXG4vLyAvLyBhcHAucG9zdCgnJywgYm9keVBhcnNlci5yYXcoe3R5cGU6ICdhcHBsaWNhdGlvbi9qc29uJ30pLCAocmVxdWVzdCwgcmVzcG9uc2UpID0+IHtcbi8vICAgICBsZXQgZXZlbnQgPSByZXF1ZXN0LmJvZHk7XG4vLyAgICAgd2luc3Rvbi5pbmZvKCdldmVudCcsZXZlbnQpOyAgXG5cbi8vICAgICAvLyBIYW5kbGUgdGhlIGV2ZW50XG4vLyAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4vLyAgICAgICBjYXNlICdwYXltZW50X2ludGVudC5zdWNjZWVkZWQnOlxuLy8gICAgICAgICBjb25zdCBwYXltZW50SW50ZW50ID0gZXZlbnQuZGF0YS5vYmplY3Q7XG4vLyAgICAgICAgIGhhbmRsZVBheW1lbnRJbnRlbnRTdWNjZWVkZWQocGF5bWVudEludGVudCk7XG4vLyAgICAgICAgIGJyZWFrO1xuLy8gICAgICAgY2FzZSAncGF5bWVudF9tZXRob2QuYXR0YWNoZWQnOlxuLy8gICAgICAgICBjb25zdCBwYXltZW50TWV0aG9kID0gZXZlbnQuZGF0YS5vYmplY3Q7XG4vLyAgICAgICAgIGhhbmRsZVBheW1lbnRNZXRob2RBdHRhY2hlZChwYXltZW50TWV0aG9kKTtcbi8vICAgICAgICAgYnJlYWs7XG4vLyAgICAgICAvLyAuLi4gaGFuZGxlIG90aGVyIGV2ZW50IHR5cGVzXG4vLyAgICAgICBkZWZhdWx0OlxuLy8gICAgICAgICAvLyBVbmV4cGVjdGVkIGV2ZW50IHR5cGVcbi8vICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnN0YXR1cyg0MDApLmVuZCgpO1xuLy8gICAgIH1cblxuLy8gICAgIC8vIFJldHVybiBhIHJlc3BvbnNlIHRvIGFja25vd2xlZGdlIHJlY2VpcHQgb2YgdGhlIGV2ZW50XG4vLyAgICAgcmVzcG9uc2UuanNvbih7cmVjZWl2ZWQ6IHRydWV9KTtcbi8vIH0pO1xuXG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHJvdXRlcjsiXSwiZmlsZSI6InBheW1lbnRzL3N0cmlwZS9pbmRleC5qcyJ9
|
|
1
|
+
var _0x2868=['exports','project_id','(Stripe)\x20Error:\x20paymentMethod\x20create\x20','(Stripe)\x20Event:\x20customer.subscription.deleted','(Stripe)\x20Event:\x20checkout.session.completed','subscriptionId','projectid','sessionid','update','json','subEnd','Error\x20saving\x20object.','subStart','../../../middleware/valid-token','(Stripe)\x20user_id:\x20','(Stripe)\x20customerid:\x20','/payment_methods/:customerid','(Stripe)\x20endpointSecret:\x20','/cancelsubscription','PAYMENT_STRIPE_SECRET','client_reference_id','Types','(Stripe)\x20seats_numAsString:\x20','userid','../../../middleware/passport','(Stripe)\x20subscriptionId:\x20','/checkoutSession/:sessionid','(Stripe)\x20billing_reason:\x20','(Stripe)\x20subscriptionid:\x20','subscription','get','params','subscriptionid','customers','type','findOne','create','body-parser','object','(Stripe)\x20sig:\x20','asc','(Stripe)\x20sessionid:\x20','(Stripe)\x20confirmation:\x20','(Stripe)\x20client_reference_id:\x20','(Stripe)\x20projectid:\x20','jwt','current_period_start','info','start','credit_card_num','headers','(Stripe)\x20USECASE:\x20invoice.payment_succeeded\x20billing_reason\x20subscription_create\x20','invoice_settings','split','(Stripe)\x20subscription:\x20','(Stripe)\x20subscriptionEndDate:\x20','invoice.payment_succeeded','\x20typeof\x20','sort','(Stripe)\x20cc\x20from\x20body:\x20','stripe-signature','(Stripe)\x20Error:\x20get\x20customer\x20from\x20db\x20','application/json','(Stripe)\x20customer\x20from\x20stripe\x20API:\x20','catch','updateProjectProfile\x20Error\x20','post','(Stripe)\x20projectId:\x20','PAYMENT_STRIPE_APIKEY','unix','(Stripe)\x20Error:\x20checkoutSession\x20get\x20by\x20id\x20from\x20stripe\x20','body','(Stripe)\x20apiKey','mongoose','customer','warn','(Stripe)\x20subsptn_payment\x20typeof:\x20','status','format','(Stripe)\x20subscriptionStartDate:\x20','../../../config/winston','paymentMethods','(Stripe)\x20index:\x20','basic','stripe','rawBody','(Stripe)\x20Error:\x20getSubscritionById\x20','name','(Stripe)\x20stripe_event:\x20','(Stripe)\x20Error:\x20getSubByIdAndCheckoutSessionCompletedEvnt\x20','last_stripe_event','Webhook\x20Error:\x20','authenticate','customerid','findByIdAndUpdate','subscription_create','(Stripe)\x20Error:\x20subscription\x20get\x20by\x20id\x20from\x20stripe\x20','checkout.session.completed','/webhook','forEach','payment','canceled_at','/updatesubscription','(Stripe)\x20seats_num','raw','card','lines','free','customer.subscription.deleted','billing_reason','(Stripe)\x20customer.subscription.deleted\x20profile\x20to\x20update\x20(event.data.object.canceled_at)\x20','(Stripe)\x20Error:\x20customer.subscription.deleted\x20','profile','PAYMENT_STRIPE_API_SECRET_KEY','express','retrieve','(Stripe)\x20Error:\x20find\x20Project\x20','(Stripe)\x20Event:\x20invoice.payment_succeeded','credit_card_cvc','(Stripe)\x20savedSubscriptionPayment:\x20','period','message','/customer/:projectid','total_count','(Stripe)\x20Error:\x20saveFirstInvoicePaymentSucceeded\x20','(Stripe)\x20Error:\x20cancelsubscription\x20getting\x20project\x20','price','(Stripe)\x20customer.subscription.deleted\x20profile\x20to\x20update\x20','ObjectId','YYYY-MM-DDTHH:mm:ss.SSS','then','put','user_id','(Stripe)\x20paymentMethodid:\x20','No\x20subscription\x20payment\x20found\x20for\x20this\x20project.','(Stripe)\x20userId:\x20','(Stripe)\x20seats_num:\x20','(Stripe)\x20event:\x20','debug','(Stripe)\x20paymentMethod:\x20','sessions','(Stripe)\x20customer\x20+\x20paymentMethods:\x20','(Stripe)\x20apiSecretKey','(Stripe)\x20profile:\x20','(Stripe)\x20customer\x20id:\x20','/:subscriptionid','webhooks','error','find','exec','(Stripe)\x20object_type:\x20','end','list','(Stripe)\x20userid:\x20','data','subscriptions','save','current_period_end','(Stripe)\x20project:\x20','(Stripe)\x20Session:\x20','agents','env','(Stripe)\x20paymentMethods:\x20','(Stripe)\x20Error:\x20saveOnDB\x20','(Stripe)\x20plan_name:\x20','(Stripe)\x20Error:\x20updatesubscription\x20getting\x20project\x20','send'];(function(_0x87a174,_0x2868d8){var _0x12408b=function(_0x37270a){while(--_0x37270a){_0x87a174['push'](_0x87a174['shift']());}};_0x12408b(++_0x2868d8);}(_0x2868,0x87));var _0x1240=function(_0x87a174,_0x2868d8){_0x87a174=_0x87a174-0x0;var _0x12408b=_0x2868[_0x87a174];return _0x12408b;};var express=require(_0x1240('0x92'));var router=express['Router']();var winston=require(_0x1240('0x70'));var Project=require('../../../models/project');var SubscriptionPayment=require('../models/subscription-payment');var moment=require('moment');var mongoose=require(_0x1240('0x69'));var passport=require('passport');require(_0x1240('0x38'))(passport);var validtoken=require(_0x1240('0x2d'));const apiKey=process[_0x1240('0x1a')][_0x1240('0x64')];winston[_0x1240('0x3')](_0x1240('0x68')+apiKey);const stripe=require(_0x1240('0x74'))(apiKey);const endpointSecret=process[_0x1240('0x1a')][_0x1240('0x33')];winston[_0x1240('0x3')]('(Stripe)\x20endpointSecret'+endpointSecret);const apiSecretKey=process[_0x1240('0x1a')][_0x1240('0x91')];winston[_0x1240('0x3')]('(Stripe)\x20apiSecretKey'+apiSecretKey);const bodyParser=require(_0x1240('0x45'));router[_0x1240('0x62')](_0x1240('0x82'),bodyParser[_0x1240('0x88')]({'type':_0x1240('0x5e')}),function(_0x20395c,_0x5c061e){winston[_0x1240('0x3')](_0x1240('0x31')+endpointSecret);winston[_0x1240('0x3')]('(Stripe)\x20apiKey:\x20'+apiKey);winston[_0x1240('0x3')](_0x1240('0x7')+apiSecretKey);const _0x12125d=_0x20395c[_0x1240('0x52')][_0x1240('0x5c')];winston[_0x1240('0x3')](_0x1240('0x47'),_0x12125d);let _0x16aa8a;try{_0x16aa8a=stripe[_0x1240('0xb')]['constructEvent'](_0x20395c[_0x1240('0x75')],_0x12125d,endpointSecret);}catch(_0x1ca0ef){winston[_0x1240('0xc')]('(Stripe)\x20Error\x20constructEvent:\x20',_0x1ca0ef[_0x1240('0x99')]);return _0x5c061e[_0x1240('0x6d')](0x190)['send'](_0x1240('0x7b')+_0x1ca0ef['message']);}if(_0x16aa8a[_0x1240('0x42')]==='checkout.session.completed'){winston['debug'](_0x1240('0x24'));const _0x18122a=_0x16aa8a[_0x1240('0x13')][_0x1240('0x46')];winston[_0x1240('0x4f')](_0x1240('0x18'),_0x18122a);var _0x143313=_0x18122a[_0x1240('0x34')];winston['info'](_0x1240('0x4b'),_0x143313);var _0x3b71b7=_0x143313[_0x1240('0x55')]('_')[0x0];winston[_0x1240('0x4f')](_0x1240('0x2e'),_0x3b71b7);var _0x502032=_0x143313[_0x1240('0x55')]('_')[0x1];winston['info']('(Stripe)\x20project_id:\x20',_0x502032);var _0x3aa2e0=_0x143313[_0x1240('0x55')]('_')[0x2];winston[_0x1240('0x4f')](_0x1240('0x1d'),_0x3aa2e0);var _0x5c273f=_0x143313['split']('_')[0x3];winston[_0x1240('0x4f')](_0x1240('0x1'),_0x5c273f+_0x1240('0x59'),typeof _0x5c273f);var _0x4a6c09=Number(_0x5c273f);winston[_0x1240('0x4f')](_0x1240('0x36'),_0x4a6c09+_0x1240('0x59'),typeof _0x4a6c09);var _0x53a746=_0x16aa8a[_0x1240('0x13')]['object'][_0x1240('0x3d')];winston[_0x1240('0x4f')](_0x1240('0x39'),_0x53a746);getSubscritionById(_0x53a746)['then'](function(_0x29da58){if(!_0x29da58){winston['error']('(Stripe)\x20Error:\x20Subscription\x20not\x20found\x20for\x20id\x20',_0x53a746);return;}var _0x42f176=_0x29da58[_0x1240('0x46')];winston[_0x1240('0x4f')](_0x1240('0xf'),_0x42f176);var _0x46efa7=moment[_0x1240('0x65')](_0x29da58[_0x1240('0x4e')])[_0x1240('0x6e')](_0x1240('0xa1'));winston[_0x1240('0x4f')](_0x1240('0x6f'),_0x46efa7);var _0x261203=moment[_0x1240('0x65')](_0x29da58[_0x1240('0x16')])['format'](_0x1240('0xa1'));winston['info'](_0x1240('0x57'),_0x261203);var _0xb629df={'profile':{'name':_0x3aa2e0,'type':_0x1240('0x84'),'subscription_creation_date':_0x46efa7,'subStart':_0x46efa7,'subEnd':_0x261203,'subscriptionId':_0x53a746,'last_stripe_event':_0x16aa8a[_0x1240('0x42')],'agents':_0x4a6c09}};updateProjectProfile(_0x502032,_0xb629df,_0x1240('0x81'));saveOnDB(_0x53a746,_0x502032,_0x29da58,_0x3b71b7,_0x16aa8a['type'],_0x3aa2e0,_0x4a6c09);})[_0x1240('0x60')](function(_0x45bdb4){winston['error'](_0x1240('0x76'),_0x45bdb4);});}if(_0x16aa8a['type']===_0x1240('0x58')){winston[_0x1240('0x4f')](_0x1240('0x95'));winston[_0x1240('0x4f')](_0x1240('0x3b'),_0x16aa8a[_0x1240('0x13')]['object'][_0x1240('0x8d')]);var _0x2de9ee=_0x16aa8a[_0x1240('0x13')][_0x1240('0x46')][_0x1240('0x8a')][_0x1240('0x9b')];winston[_0x1240('0x4f')]('(Stripe)\x20linesNum:\x20',_0x2de9ee);var _0x3e6f46=_0x2de9ee-0x1;winston[_0x1240('0x4f')](_0x1240('0x72'),_0x3e6f46);var _0x3a95f1=moment[_0x1240('0x65')](_0x16aa8a[_0x1240('0x13')]['object'][_0x1240('0x8a')][_0x1240('0x13')][_0x3e6f46][_0x1240('0x98')][_0x1240('0x50')])['format']('YYYY-MM-DDTHH:mm:ss.SSS');winston[_0x1240('0x4f')](_0x1240('0x6f'),_0x3a95f1);var _0x1f900d=moment[_0x1240('0x65')](_0x16aa8a[_0x1240('0x13')][_0x1240('0x46')]['lines'][_0x1240('0x13')][_0x3e6f46][_0x1240('0x98')][_0x1240('0x10')])[_0x1240('0x6e')](_0x1240('0xa1'));winston[_0x1240('0x4f')](_0x1240('0x57'),_0x1f900d);var _0x53a746=_0x16aa8a[_0x1240('0x13')]['object'][_0x1240('0x3d')];winston[_0x1240('0x4f')](_0x1240('0x39'),_0x53a746);if(_0x53a746==null){_0x53a746=_0x16aa8a[_0x1240('0x13')]['object'][_0x1240('0x8a')][_0x1240('0x13')][0x0][_0x1240('0x3d')];winston[_0x1240('0x4f')](_0x1240('0x39'),_0x53a746);}if(_0x16aa8a[_0x1240('0x13')][_0x1240('0x46')][_0x1240('0x8d')]!=='subscription_create'){getSubByIdAndCheckoutSessionCompletedEvnt(_0x53a746)[_0x1240('0xa2')](function(_0xe7a721){winston['info']('(Stripe)\x20subsptn_payment:\x20',_0xe7a721);winston[_0x1240('0x4f')](_0x1240('0x6c'),typeof _0xe7a721);if(_0xe7a721){var _0x270e7b=_0xe7a721[_0x1240('0x21')];winston[_0x1240('0x4f')](_0x1240('0x63'),_0x270e7b);Project[_0x1240('0x43')]({'_id':_0x270e7b},function(_0x1df9e5,_0x3dddf8){if(_0x1df9e5){winston[_0x1240('0x4f')](_0x1240('0x94'),_0x1df9e5);return _0x1df9e5;}if(_0x3dddf8){winston['info']('(Stripe)\x20project:\x20',_0x3dddf8);winston[_0x1240('0x4f')](_0x1240('0x8'),_0x3dddf8['profile']);var _0x10d47f=_0x3dddf8[_0x1240('0x90')][_0x1240('0x19')];var _0x3c3865=_0x3dddf8[_0x1240('0x90')][_0x1240('0x77')];var _0x16bf66=_0xe7a721[_0x1240('0xa4')];let _0x12260e=_0x3dddf8['profile'];_0x12260e['name']=_0x3c3865;_0x12260e[_0x1240('0x42')]=_0x1240('0x84');_0x12260e[_0x1240('0x2c')]=_0x3a95f1;_0x12260e[_0x1240('0x2a')]=_0x1f900d;_0x12260e[_0x1240('0x25')]=_0x53a746;_0x12260e[_0x1240('0x7a')]=_0x16aa8a[_0x1240('0x42')];var _0x1fb719={'profile':_0x12260e};updateProjectProfile(_0x270e7b,_0x1fb719,_0x1240('0x58'));saveOnDB(_0x53a746,_0x270e7b,_0x16aa8a,_0x16bf66,_0x16aa8a[_0x1240('0x42')],_0x3c3865,_0x10d47f);}});}})[_0x1240('0x60')](function(_0x3433f7){winston['error'](_0x1240('0x79'),_0x3433f7);});}else if(_0x16aa8a['data'][_0x1240('0x46')]['billing_reason']===_0x1240('0x7f')){winston[_0x1240('0x4f')](_0x1240('0x53'));saveFirstInvoicePaymentSucceeded(_0x53a746,_0x16aa8a,_0x16aa8a[_0x1240('0x42')]);}}if(_0x16aa8a[_0x1240('0x42')]===_0x1240('0x8c')){winston['info'](_0x1240('0x23'));winston[_0x1240('0x4f')](_0x1240('0x2'),_0x16aa8a);var _0x53a746=_0x16aa8a[_0x1240('0x13')][_0x1240('0x46')]['id'];winston['info'](_0x1240('0x39'),_0x53a746);var _0x2b9b3d=moment[_0x1240('0x65')](_0x16aa8a['data'][_0x1240('0x46')][_0x1240('0x85')])[_0x1240('0x6e')](_0x1240('0xa1'));winston[_0x1240('0x4f')]('(Stripe)\x20subscriptionEnd:\x20',_0x2b9b3d);getSubByIdAndCheckoutSessionCompletedEvnt(_0x53a746)['then'](function(_0x593fef){winston['info']('(Stripe)\x20subscriptionPayment:\x20',_0x593fef);if(_0x593fef){var _0x4de733=_0x593fef[_0x1240('0x21')];winston[_0x1240('0x4f')]('(Stripe)\x20projectId:\x20',_0x4de733);var _0x1a879e=_0x593fef[_0x1240('0xa4')];winston['info'](_0x1240('0x0'),_0x1a879e);}var _0x21ff54={'profile':{'subscriptionId':_0x53a746,'name':'Sandbox','type':_0x1240('0x8b'),'agents':0x1,'last_stripe_event':_0x16aa8a[_0x1240('0x42')],'subEnd':_0x2b9b3d}};winston['info'](_0x1240('0x8e'),_0x16aa8a[_0x1240('0x13')][_0x1240('0x46')]['canceled_at']);winston[_0x1240('0x4f')](_0x1240('0x9f'),_0x21ff54[_0x1240('0x90')]);updateProjectProfile(_0x4de733,_0x21ff54,'subscription.deleted');saveOnDB(_0x53a746,_0x4de733,_0x16aa8a[_0x1240('0x13')][_0x1240('0x46')],_0x1a879e,_0x16aa8a['type'],_0x3aa2e0,0x1);})[_0x1240('0x60')](function(_0x3d05b1){winston['error'](_0x1240('0x8f'),_0x3d05b1);});}_0x5c061e[_0x1240('0x29')]({'received':!![]});});function getSubByIdAndCheckoutSessionCompletedEvnt(_0x1e8015){return new Promise(function(_0x584cd1,_0x263867){SubscriptionPayment[_0x1240('0x43')]({'subscription_id':_0x1e8015,'stripe_event':_0x1240('0x81')},function(_0x313ce6,_0x4a0eaf){if(_0x313ce6)return _0x263867(_0x313ce6);_0x584cd1(_0x4a0eaf);});});};function getSubscritionById(_0x475c49){return new Promise(function(_0x13674a,_0x398215){const _0x3b5623=require('stripe')(apiSecretKey);_0x3b5623[_0x1240('0x14')][_0x1240('0x93')](_0x475c49,function(_0x1de522,_0x3dcb48){if(_0x1de522)return _0x398215(_0x1de522);_0x13674a(_0x3dcb48);});});};function updateProjectProfile(_0x2e3cff,_0x4958ee,_0x59717f){Project[_0x1240('0x7e')](_0x2e3cff,_0x4958ee,{'new':!![],'upsert':!![]},function(_0x34adcf,_0x9bdd3a){if(_0x34adcf){winston[_0x1240('0xc')](_0x1240('0x61'),_0x34adcf);}else{winston[_0x1240('0x3')](_0x9bdd3a);}});}function saveOnDB(_0x31d531,_0xaa859b,_0x26642b,_0x24c886,_0x34535c,_0x6122dc,_0x133a08){winston[_0x1240('0x4f')]('(Stripe)\x20plan_name',_0x6122dc);winston[_0x1240('0x4f')](_0x1240('0x87'),_0x133a08);var _0x24c020=new SubscriptionPayment({'_id':new mongoose[(_0x1240('0x35'))][(_0x1240('0xa0'))](),'subscription_id':_0x31d531,'project_id':_0xaa859b,'user_id':_0x24c886,'stripe_event':_0x34535c,'plan_name':_0x6122dc,'agents':_0x133a08,'object':_0x26642b});_0x24c020[_0x1240('0x15')](function(_0x14d602,_0x572644){if(_0x14d602){winston[_0x1240('0xc')](_0x1240('0x1c'),_0x14d602);return res['status'](0x1f4)[_0x1240('0x1f')]({'success':![],'msg':_0x1240('0x2b')});}winston['info'](_0x1240('0x97'),_0x572644);});}function saveFirstInvoicePaymentSucceeded(_0x139ca3,_0x28aa18,_0x4bf531){winston[_0x1240('0x4f')](_0x1240('0x3c'),_0x139ca3);winston['info'](_0x1240('0x78'),_0x4bf531);var _0x31e76c=new SubscriptionPayment({'_id':new mongoose[(_0x1240('0x35'))][(_0x1240('0xa0'))](),'subscription_id':_0x139ca3,'stripe_event':_0x4bf531,'object':_0x28aa18});_0x31e76c['save'](function(_0x215928,_0xbdd832){if(_0x215928){winston[_0x1240('0xc')](_0x1240('0x9c'),_0x215928);return res[_0x1240('0x6d')](0x1f4)[_0x1240('0x1f')]({'success':![],'msg':_0x1240('0x2b')});}winston[_0x1240('0x4f')](_0x1240('0x97'),_0xbdd832);});}router['put'](_0x1240('0x32'),[passport[_0x1240('0x7c')]([_0x1240('0x73'),'jwt'],{'session':![]}),validtoken],function(_0x5b9006,_0x32fd9c){var _0x47646f=_0x5b9006[_0x1240('0x67')][_0x1240('0x26')];var _0x1bdfda=_0x5b9006[_0x1240('0x67')][_0x1240('0x37')];winston[_0x1240('0x4f')]('(Stripe)\x20projectid:\x20',_0x47646f);winston[_0x1240('0x4f')](_0x1240('0x12'),_0x1bdfda);Project[_0x1240('0x43')]({'_id':_0x47646f},function(_0x2b2b71,_0x49270e){if(_0x2b2b71){winston['error'](_0x1240('0x9d'),_0x2b2b71);return _0x2b2b71;}if(_0x49270e){winston[_0x1240('0x4f')]('(Stripe)\x20project:\x20',_0x49270e);var _0x54b83a=_0x49270e[_0x1240('0x90')][_0x1240('0x25')];const _0x87ffe1=require(_0x1240('0x74'))(apiSecretKey);_0x87ffe1[_0x1240('0x14')]['del'](_0x54b83a,function(_0x4898b4,_0x2a3af6){if(_0x4898b4){winston[_0x1240('0xc')]('(Stripe)\x20Error:\x20cancelsubscription\x20',_0x4898b4);return _0x32fd9c[_0x1240('0x6d')](0x1f4)['send']({'success':![],'msg':_0x4898b4});}winston[_0x1240('0x4f')](_0x1240('0x4a'),_0x2a3af6);_0x32fd9c[_0x1240('0x29')](_0x2a3af6);});}});});router[_0x1240('0xa3')](_0x1240('0x86'),[passport[_0x1240('0x7c')]([_0x1240('0x73'),_0x1240('0x4d')],{'session':![]}),validtoken],function(_0x57aed4,_0x200cc5){var _0x482ae3=_0x57aed4[_0x1240('0x67')][_0x1240('0x26')];var _0x4f9ee4=_0x57aed4['body'][_0x1240('0x37')];var _0x32cfd5=_0x57aed4[_0x1240('0x67')][_0x1240('0x9e')];winston[_0x1240('0x4f')]('(Stripe)\x20projectid:\x20',_0x482ae3);winston[_0x1240('0x4f')](_0x1240('0x12'),_0x4f9ee4);winston[_0x1240('0x4f')]('(Stripe)\x20price:\x20',_0x32cfd5);const _0x15e329=require(_0x1240('0x74'))(apiSecretKey);Project[_0x1240('0x43')]({'_id':_0x482ae3},function(_0x11198a,_0x45eb04){if(_0x11198a){winston[_0x1240('0xc')](_0x1240('0x1e'),_0x11198a);return _0x11198a;}if(_0x45eb04){winston[_0x1240('0x4f')](_0x1240('0x17'),_0x45eb04);var _0x6b423e=_0x45eb04[_0x1240('0x90')][_0x1240('0x25')];_0x15e329[_0x1240('0x14')][_0x1240('0x28')](_0x6b423e);}});});router[_0x1240('0x3e')](_0x1240('0xa'),[passport[_0x1240('0x7c')](['basic',_0x1240('0x4d')],{'session':![]}),validtoken],function(_0x3c7064,_0x496247){SubscriptionPayment[_0x1240('0xd')]({'subscription_id':_0x3c7064['params'][_0x1240('0x40')]})[_0x1240('0x5a')]({'object.created':_0x1240('0x48')})[_0x1240('0xe')](function(_0xe0dc56,_0x352a0b){if(_0xe0dc56){winston[_0x1240('0xc')]('(Stripe)\x20Error:\x20Get\x20Subscription\x20Payments\x20',_0x352a0b);return _0x496247[_0x1240('0x6d')](0x1f4)[_0x1240('0x1f')]({'success':![],'msg':_0xe0dc56});}_0x496247[_0x1240('0x29')](_0x352a0b);});});router['get']('/stripesubs/:subscriptionid',[passport[_0x1240('0x7c')](['basic',_0x1240('0x4d')],{'session':![]}),validtoken],function(_0x5b1209,_0x284982){winston['info']('(Stripe)\x20subscription\x20get\x20by\x20id:\x20',_0x5b1209[_0x1240('0x3f')][_0x1240('0x40')]);var _0x149abc=require(_0x1240('0x74'))(apiSecretKey);_0x149abc[_0x1240('0x14')][_0x1240('0x93')](_0x5b1209[_0x1240('0x3f')]['subscriptionid'],function(_0x49576a,_0x288174){if(_0x49576a){winston['error'](_0x1240('0x80'),_0x49576a);return _0x284982[_0x1240('0x6d')](0x1f4)[_0x1240('0x1f')]({'success':![],'msg':_0x49576a});}winston[_0x1240('0x4f')](_0x1240('0x56'),_0x288174);_0x284982['json'](_0x288174);});});router[_0x1240('0x3e')](_0x1240('0x3a'),[passport[_0x1240('0x7c')]([_0x1240('0x73'),_0x1240('0x4d')],{'session':![]}),validtoken],function(_0x1433cb,_0x4d51c2){winston['info'](_0x1240('0x49'),_0x1433cb['params']['sessionid']);var _0x89f940=require(_0x1240('0x74'))(apiSecretKey);_0x89f940['checkout'][_0x1240('0x5')][_0x1240('0x93')](_0x1433cb[_0x1240('0x3f')][_0x1240('0x27')],function(_0x232025,_0x5e1e80){if(_0x232025){winston['info'](_0x1240('0x66'),_0x232025);return _0x4d51c2[_0x1240('0x6d')](0x1f4)['send']({'success':![],'msg':_0x232025});}winston[_0x1240('0x4f')]('(Stripe)\x20session:\x20',_0x5e1e80);_0x4d51c2['json'](_0x5e1e80);});});router[_0x1240('0x3e')](_0x1240('0x9a'),[passport[_0x1240('0x7c')]([_0x1240('0x73'),_0x1240('0x4d')],{'session':![]}),validtoken],function(_0x26936c,_0x135339){winston[_0x1240('0x3')]('(Stripe)\x20get\x20customer\x20from\x20db:\x20',_0x26936c['params']);var _0x1e93c4=_0x26936c[_0x1240('0x3f')][_0x1240('0x26')];winston['debug'](_0x1240('0x4c'),_0x1e93c4);SubscriptionPayment[_0x1240('0xd')]({'project_id':_0x1e93c4,'stripe_event':_0x1240('0x81')},async function(_0x39aafa,_0x30ff15){if(_0x39aafa){winston[_0x1240('0x3')](_0x1240('0x5d'),_0x39aafa);return _0x39aafa;}if(_0x30ff15&&_0x30ff15['length']>0x0&&_0x30ff15[0x0]['object']){winston[_0x1240('0x3')](_0x1240('0x9'),_0x30ff15[0x0]['object'][_0x1240('0x6a')]);const _0x3839f0=_0x30ff15[0x0][_0x1240('0x46')][_0x1240('0x6a')];const _0x3c011e=require(_0x1240('0x74'))(apiSecretKey);const _0x8aae01=await _0x3c011e[_0x1240('0x41')]['retrieve'](_0x3839f0);winston[_0x1240('0x3')](_0x1240('0x5f'),_0x8aae01);const _0x42f7cb=await _0x3c011e['paymentMethods'][_0x1240('0x11')]({'customer':_0x3839f0,'type':_0x1240('0x89')});_0x8aae01['paymentMethods']=_0x42f7cb;winston[_0x1240('0x3')](_0x1240('0x6'),_0x30ff15);_0x135339[_0x1240('0x29')](_0x8aae01);}else{winston[_0x1240('0x6b')]('(Stripe)\x20no\x20checkout\x20subscription\x20found\x20for\x20project:\x20',_0x1e93c4);return _0x135339[_0x1240('0x6d')](0x194)['send']({'success':![],'msg':_0x1240('0xa6')});}});});router[_0x1240('0x62')]('/customers/:customerid',[passport[_0x1240('0x7c')]([_0x1240('0x73'),'jwt'],{'session':![]}),validtoken],async function(_0x591299,_0x3d2411){var _0x33278b=_0x591299[_0x1240('0x3f')]['customerid'];winston[_0x1240('0x3')](_0x1240('0x2f'),_0x33278b);winston[_0x1240('0x3')](_0x1240('0x5b'),_0x591299['body']);const _0x5301c6=require(_0x1240('0x74'))(apiSecretKey);let _0x80a174;try{_0x80a174=await _0x5301c6[_0x1240('0x71')][_0x1240('0x44')]({'type':_0x1240('0x89'),'card':{'number':_0x591299[_0x1240('0x67')][_0x1240('0x51')],'exp_month':_0x591299['body']['expiration_date_month'],'exp_year':_0x591299[_0x1240('0x67')]['expiration_date_year'],'cvc':_0x591299[_0x1240('0x67')][_0x1240('0x96')]}});}catch(_0x2102c5){winston[_0x1240('0xc')](_0x1240('0x22'),_0x2102c5);return _0x3d2411[_0x1240('0x6d')](0x1f6)[_0x1240('0x1f')]({'success':![],'msg':_0x2102c5});}winston[_0x1240('0x3')](_0x1240('0x4'),_0x80a174);try{const _0x1a3775=await _0x5301c6[_0x1240('0x71')]['attach'](_0x80a174['id'],{'customer':_0x33278b});winston['debug']('(Stripe)\x20paymentMethod\x20attached:\x20',_0x1a3775);}catch(_0xb26561){winston[_0x1240('0xc')]('(Stripe)\x20Error:\x20paymentMethod\x20attached\x20',_0xb26561);return _0x3d2411[_0x1240('0x6d')](0x1f5)[_0x1240('0x1f')]({'success':![],'msg':_0xb26561});}const _0x5e6410=await _0x5301c6['customers'][_0x1240('0x28')](_0x33278b,{'invoice_settings':{'default_payment_method':_0x80a174['id']}});_0x3d2411[_0x1240('0x29')](_0x5e6410);});router[_0x1240('0x3e')](_0x1240('0x30'),[passport[_0x1240('0x7c')]([_0x1240('0x73'),'jwt'],{'session':![]}),validtoken],async function(_0x4ee7b0,_0x18db2b){winston['info']('(Stripe)\x20get\x20PaymentMethods\x20list:\x20',_0x4ee7b0[_0x1240('0x3f')]);var _0x3fb7e9=_0x4ee7b0[_0x1240('0x3f')][_0x1240('0x7d')];winston[_0x1240('0x3')]('(Stripe)\x20customer_id:\x20',_0x3fb7e9);const _0x59b70f=require(_0x1240('0x74'))(apiSecretKey);const _0x47de68=await _0x59b70f[_0x1240('0x41')][_0x1240('0x93')](_0x3fb7e9);const _0x1b3a18=_0x47de68[_0x1240('0x54')]['default_payment_method'];let _0x4a4b04;try{_0x4a4b04=await _0x59b70f['paymentMethods'][_0x1240('0x11')]({'customer':_0x3fb7e9,'type':_0x1240('0x89')});winston['debug'](_0x1240('0x1b'),_0x4a4b04);}catch(_0x150968){return _0x18db2b[_0x1240('0x6d')](0x1f5)[_0x1240('0x1f')]({'success':![],'msg':_0x150968});}winston['debug']('(Stripe)\x20default_payment_method_id:\x20',_0x1b3a18);_0x4a4b04[_0x1240('0x13')][_0x1240('0x83')](_0x4fb55c=>{if(_0x4fb55c['id']!==_0x1b3a18){winston['debug']('(Stripe)\x20paymentMethod.id:\x20',_0x4fb55c['id']);detachPaymentFunc(_0x4fb55c['id'],function(_0x3ab5f5){winston['info']('(Stripe)\x20detachPaymentFunc\x20result:\x20',_0x3ab5f5);});}});_0x18db2b[_0x1240('0x29')](_0x4a4b04);});async function detachPaymentFunc(_0x31bcc0,_0x339fc8){winston[_0x1240('0x3')](_0x1240('0xa5'),_0x31bcc0);const _0x664521=require('stripe')(apiSecretKey);let _0x22aa55;try{_0x22aa55=await _0x664521[_0x1240('0x71')]['detach'](_0x31bcc0);_0x339fc8(_0x22aa55);}catch(_0x571493){_0x339fc8(_0x571493);}}module[_0x1240('0x20')]=router;
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBheW1lbnRzL3N0cmlwZS9pbmRleC5qcyJdLCJuYW1lcyI6WyJleHByZXNzIiwicmVxdWlyZSIsInJvdXRlciIsIndpbnN0b24iLCJQcm9qZWN0IiwiU3Vic2NyaXB0aW9uUGF5bWVudCIsIm1vbWVudCIsIm1vbmdvb3NlIiwicGFzc3BvcnQiLCJ2YWxpZHRva2VuIiwiYXBpS2V5IiwicHJvY2VzcyIsInN0cmlwZSIsImVuZHBvaW50U2VjcmV0IiwiYXBpU2VjcmV0S2V5IiwiYm9keVBhcnNlciIsIl8weDIwMzk1YyIsIl8weDVjMDYxZSIsIl8weDEyMTI1ZCIsIl8weDE2YWE4YSIsIl8weDFjYTBlZiIsIl8weDE4MTIyYSIsIl8weDE0MzMxMyIsIl8weDNiNzFiNyIsIl8weDUwMjAzMiIsIl8weDNhYTJlMCIsIl8weDVjMjczZiIsIl8weDRhNmMwOSIsIk51bWJlciIsIl8weDUzYTc0NiIsImdldFN1YnNjcml0aW9uQnlJZCIsIl8weDI5ZGE1OCIsIl8weDQyZjE3NiIsIl8weDQ2ZWZhNyIsIl8weDI2MTIwMyIsIl8weGI2MjlkZiIsInVwZGF0ZVByb2plY3RQcm9maWxlIiwic2F2ZU9uREIiLCJfMHg0NWJkYjQiLCJfMHgyZGU5ZWUiLCJfMHgzZTZmNDYiLCJfMHgzYTk1ZjEiLCJfMHgxZjkwMGQiLCJnZXRTdWJCeUlkQW5kQ2hlY2tvdXRTZXNzaW9uQ29tcGxldGVkRXZudCIsIl8weGU3YTcyMSIsIl8weDI3MGU3YiIsIl8weDFkZjllNSIsIl8weDNkZGRmOCIsIl8weDEwZDQ3ZiIsIl8weDNjMzg2NSIsIl8weDE2YmY2NiIsIl8weDEyMjYwZSIsIl8weDFmYjcxOSIsIl8weDM0MzNmNyIsInNhdmVGaXJzdEludm9pY2VQYXltZW50U3VjY2VlZGVkIiwiXzB4MmI5YjNkIiwiXzB4NTkzZmVmIiwiXzB4NGRlNzMzIiwiXzB4MWE4NzllIiwiXzB4MjFmZjU0IiwiXzB4M2QwNWIxIiwiXzB4MWU4MDE1IiwiUHJvbWlzZSIsIl8weDU4NGNkMSIsIl8weDI2Mzg2NyIsIl8weDMxM2NlNiIsIl8weDRhMGVhZiIsIl8weDQ3NWM0OSIsIl8weDEzNjc0YSIsIl8weDM5ODIxNSIsIl8weDNiNTYyMyIsIl8weDFkZTUyMiIsIl8weDNkY2I0OCIsIl8weDJlM2NmZiIsIl8weDQ5NThlZSIsIl8weDU5NzE3ZiIsIl8weDM0YWRjZiIsIl8weDliZGQzYSIsIl8weDMxZDUzMSIsIl8weGFhODU5YiIsIl8weDI2NjQyYiIsIl8weDI0Yzg4NiIsIl8weDM0NTM1YyIsIl8weDYxMjJkYyIsIl8weDEzM2EwOCIsIl8weDI0YzAyMCIsIl8weDE0ZDYwMiIsIl8weDU3MjY0NCIsInJlcyIsIl8weDEzOWNhMyIsIl8weDI4YWExOCIsIl8weDRiZjUzMSIsIl8weDMxZTc2YyIsIl8weDIxNTkyOCIsIl8weGJkZDgzMiIsIl8weDViOTAwNiIsIl8weDMyZmQ5YyIsIl8weDQ3NjQ2ZiIsIl8weDFiZGZkYSIsIl8weDJiMmI3MSIsIl8weDQ5MjcwZSIsIl8weDU0YjgzYSIsIl8weDg3ZmZlMSIsIl8weDQ4OThiNCIsIl8weDJhM2FmNiIsIl8weDU3YWVkNCIsIl8weDIwMGNjNSIsIl8weDQ4MmFlMyIsIl8weDRmOWVlNCIsIl8weDMyY2ZkNSIsIl8weDE1ZTMyOSIsIl8weDExMTk4YSIsIl8weDQ1ZWIwNCIsIl8weDZiNDIzZSIsIl8weDNjNzA2NCIsIl8weDQ5NjI0NyIsIl8weGUwZGM1NiIsIl8weDM1MmEwYiIsIl8weDViMTIwOSIsIl8weDI4NDk4MiIsIl8weDE0OWFiYyIsIl8weDQ5NTc2YSIsIl8weDI4ODE3NCIsIl8weDE0MzNjYiIsIl8weDRkNTFjMiIsIl8weDg5Zjk0MCIsIl8weDIzMjAyNSIsIl8weDVlMWU4MCIsIl8weDI2OTM2YyIsIl8weDEzNTMzOSIsIl8weDFlOTNjNCIsIl8weDM5YWFmYSIsIl8weDMwZmYxNSIsIl8weDM4MzlmMCIsIl8weDNjMDExZSIsIl8weDhhYWUwMSIsIl8weDQyZjdjYiIsIl8weDU5MTI5OSIsIl8weDNkMjQxMSIsIl8weDMzMjc4YiIsIl8weDUzMDFjNiIsIl8weDgwYTE3NCIsIl8weDIxMDJjNSIsIl8weDFhMzc3NSIsIl8weGIyNjU2MSIsIl8weDVlNjQxMCIsIl8weDRlZTdiMCIsIl8weDE4ZGIyYiIsIl8weDNmYjdlOSIsIl8weDU5YjcwZiIsIl8weDQ3ZGU2OCIsIl8weDFiM2ExOCIsIl8weDRhNGIwNCIsIl8weDE1MDk2OCIsIl8weDRmYjU1YyIsImRldGFjaFBheW1lbnRGdW5jIiwiXzB4M2FiNWY1IiwiXzB4MzFiY2MwIiwiXzB4MzM5ZmM4IiwiXzB4NjY0NTIxIiwiXzB4MjJhYTU1IiwiXzB4NTcxNDkzIiwibW9kdWxlIl0sIm1hcHBpbmdzIjoiMnNJQUFBLElBQUlBLE9BQUEsQ0FBVUMsT0FBQSxDLGVBQUEsQ0FBZCxDQUNBLElBQUlDLE1BQUEsQ0FBU0YsT0FBQSxDLFFBQUEsR0FBYixDQUVBLElBQUlHLE9BQUEsQ0FBVUYsT0FBQSxDLGVBQUEsQ0FBZCxDQUVBLElBQUlHLE9BQUEsQ0FBVUgsT0FBQSxDLHlCQUFBLENBQWQsQ0FDQSxJQUFJSSxtQkFBQSxDQUFzQkosT0FBQSxDLGdDQUFBLENBQTFCLENBQ0EsSUFBSUssTUFBQSxDQUFTTCxPQUFBLEMsUUFBQSxDQUFiLENBQ0EsSUFBSU0sUUFBQSxDQUFXTixPQUFBLEMsZUFBQSxDQUFmLENBQ0EsSUFBSU8sUUFBQSxDQUFXUCxPQUFBLEMsVUFBQSxDQUFmLENBRUFBLE9BQUEsQyxlQUFBLEVBQXdDTyxRQUF4QyxFQUVBLElBQUlDLFVBQUEsQ0FBYVIsT0FBQSxDLGVBQUEsQ0FBakIsQ0FHQSxNQUFNUyxNQUFBLENBQVNDLE9BQUEsQyxlQUFBLEUsZUFBQSxDQUFmLENBQ0FSLE9BQUEsQyxjQUFBLEUsZUFBYyxDQUFvQk8sTUFBbEMsRUFFQSxNQUFNRSxNQUFBLENBQVNYLE9BQUEsQyxlQUFBLEVBQWtCUyxNQUFsQixDQUFmLENBR0EsTUFBTUcsY0FBQSxDQUFpQkYsT0FBQSxDLGVBQUEsRSxlQUFBLENBQXZCLENBQ0FSLE9BQUEsQyxjQUFBLEUsNEJBQWMsQ0FBNEJV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b0QsQ0FDbERwSixPQUFBLEMsT0FBQSxFLG1DQUFBLENBQTZDdUosU0FBQSxDLElBQUEsQ0FBN0MsRUFDQUMsaUJBQUEsQ0FBa0JELFNBQUEsQyxJQUFBLENBQWxCLENBQW9DLFNBQVVFLFNBQVYsQ0FBa0IsQ0FDcER6SixPQUFBLEMsTUFBQSxFLDhDQUFBLENBQW9EeUosU0FBcEQsRUFEb0QsQ0FBdEQsRUFGa0QsQ0FEVCxDQUE3QyxFQVFBVCxTQUFBLEMsZUFBQSxFQUFTSyxTQUFULEVBL0I4SSxDQUFoSixFQWtDQSxlQUFlRyxpQkFBZixDQUFpQ0UsU0FBakMsQ0FBa0RDLFNBQWxELENBQTRELENBQzFEM0osT0FBQSxDLGNBQUEsRSxlQUFBLENBQTRDMEosU0FBNUMsRUFDQSxNQUFNRSxTQUFBLENBQVM5SixPQUFBLEMsUUFBQSxFQUFrQmEsWUFBbEIsQ0FBZixDQUNBLElBQUlrSixTQUFKLENBQ0EsR0FBSSxDQUNGQSxTQUFBLENBQWdCLE1BQU1ELFNBQUEsQyxlQUFBLEUsUUFBQSxFQUNwQkYsU0FEb0IsQ0FBdEIsQ0FHQUMsU0FBQSxDQUFTRSxTQUFULEVBSkUsQ0FLRixNQUFPQyxTQUFQLENBQVUsQ0FDVkgsU0FBQSxDQUFTRyxTQUFULEVBRFUsQ0FUOEMsQ0FpRDVEQyxNQUFBLEMsZUFBQSxFQUFpQmhLLE1BQWpCIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGV4cHJlc3MgPSByZXF1aXJlKCdleHByZXNzJyk7XG52YXIgcm91dGVyID0gZXhwcmVzcy5Sb3V0ZXIoKTtcbi8vIHZhciB3aW5zdG9uID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vY29uZmlnL3dpbnN0b24nKTtcbnZhciB3aW5zdG9uID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uZmlnL3dpbnN0b24nKVxuLy8gdmFyIFByb2plY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vbW9kZWxzL3Byb2plY3RcIik7XG52YXIgUHJvamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9tb2RlbHMvcHJvamVjdFwiKTtcbnZhciBTdWJzY3JpcHRpb25QYXltZW50ID0gcmVxdWlyZShcIi4uL21vZGVscy9zdWJzY3JpcHRpb24tcGF5bWVudFwiKTtcbnZhciBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcbnZhciBtb25nb29zZSA9IHJlcXVpcmUoJ21vbmdvb3NlJyk7XG52YXIgcGFzc3BvcnQgPSByZXF1aXJlKCdwYXNzcG9ydCcpO1xuLy8gcmVxdWlyZSgnLi4vLi4vLi4vLi4vbWlkZGxld2FyZS9wYXNzcG9ydCcpKHBhc3Nwb3J0KTtcbnJlcXVpcmUoXCIuLi8uLi8uLi9taWRkbGV3YXJlL3Bhc3Nwb3J0XCIpKHBhc3Nwb3J0KTtcbi8vIHZhciB2YWxpZHRva2VuID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vbWlkZGxld2FyZS92YWxpZC10b2tlbicpXG52YXIgdmFsaWR0b2tlbiA9IHJlcXVpcmUoJy4uLy4uLy4uL21pZGRsZXdhcmUvdmFsaWQtdG9rZW4nKVxuLy8gU2V0IHlvdXIgc2VjcmV0IGtleTogcmVtZW1iZXIgdG8gY2hhbmdlIHRoaXMgdG8geW91ciBsaXZlIHNlY3JldCBrZXkgaW4gcHJvZHVjdGlvblxuLy8gU2VlIHlvdXIga2V5cyBoZXJlOiBodHRwczovL2Rhc2hib2FyZC5zdHJpcGUuY29tL2FjY291bnQvYXBpa2V5c1xuY29uc3QgYXBpS2V5ID0gcHJvY2Vzcy5lbnYuUEFZTUVOVF9TVFJJUEVfQVBJS0VZO1xud2luc3Rvbi5kZWJ1ZygnKFN0cmlwZSkgYXBpS2V5JyArIGFwaUtleSk7XG5cbmNvbnN0IHN0cmlwZSA9IHJlcXVpcmUoJ3N0cmlwZScpKGFwaUtleSk7XG5cbi8vIEZpbmQgeW91ciBlbmRwb2ludCdzIHNlY3JldCBpbiB5b3VyIERhc2hib2FyZCdzIHdlYmhvb2sgc2V0dGluZ3NcbmNvbnN0IGVuZHBvaW50U2VjcmV0ID0gcHJvY2Vzcy5lbnYuUEFZTUVOVF9TVFJJUEVfU0VDUkVUO1xud2luc3Rvbi5kZWJ1ZygnKFN0cmlwZSkgZW5kcG9pbnRTZWNyZXQnICsgZW5kcG9pbnRTZWNyZXQpO1xuXG5jb25zdCBhcGlTZWNyZXRLZXkgPSBwcm9jZXNzLmVudi5QQVlNRU5UX1NUUklQRV9BUElfU0VDUkVUX0tFWTtcbndpbnN0b24uZGVidWcoJyhTdHJpcGUpIGFwaVNlY3JldEtleScgKyBhcGlTZWNyZXRLZXkpO1xuXG5jb25zdCBib2R5UGFyc2VyID0gcmVxdWlyZSgnYm9keS1wYXJzZXInKTtcblxuLy8gaHR0cHM6Ly9zdHJpcGUuY29tL2RvY3MvcGF5bWVudHMvY2hlY2tvdXQvZnVsZmlsbG1lbnQjd2ViaG9va3Ncbi8vIGN1cmwgLVggUE9TVCAtdSBhbmRyZWEubGVvQGYyMS5pdDoxMjM0NTYgLUggJ0NvbnRlbnQtVHlwZTphcHBsaWNhdGlvbi9qc29uJyAtZCAne1widHlwZVwiOlwicGF5bWVudF9pbnRlbnQuc3VjY2VlZGVkXCJ9JyAgaHR0cDovL2xvY2FsaG9zdDozMDAwL21vZHVsZXMvcGF5bWVudHMvc3RyaXBlL3dlYmhvb2tcbnJvdXRlci5wb3N0KCcvd2ViaG9vaycsIGJvZHlQYXJzZXIucmF3KHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pLCBmdW5jdGlvbiAocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgXG4gIHdpbnN0b24uZGVidWcoJyhTdHJpcGUpIGVuZHBvaW50U2VjcmV0OiAnICsgZW5kcG9pbnRTZWNyZXQpXG4gIHdpbnN0b24uZGVidWcoJyhTdHJpcGUpIGFwaUtleTogJyArIGFwaUtleSk7XG4gIHdpbnN0b24uZGVidWcoJyhTdHJpcGUpIGFwaVNlY3JldEtleScgKyBhcGlTZWNyZXRLZXkpO1xuXG4gIGNvbnN0IHNpZyA9IHJlcXVlc3QuaGVhZGVyc1snc3RyaXBlLXNpZ25hdHVyZSddO1xuXG4gIHdpbnN0b24uZGVidWcoJyhTdHJpcGUpIHNpZzogJywgc2lnKVxuXG4gIGxldCBldmVudDtcblxuICB0cnkge1xuICAgIGV2ZW50ID0gc3RyaXBlLndlYmhvb2tzLmNvbnN0cnVjdEV2ZW50KHJlcXVlc3QucmF3Qm9keSwgc2lnLCBlbmRwb2ludFNlY3JldCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHdpbnN0b24uZXJyb3IoJyhTdHJpcGUpIEVycm9yIGNvbnN0cnVjdEV2ZW50OiAnLCBlcnIubWVzc2FnZSlcbiAgICByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzKDQwMCkuc2VuZChgV2ViaG9vayBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiohICoqKiBIYW5kbGUgdGhlIGNoZWNrb3V0LnNlc3Npb24uY29tcGxldGVkIGV2ZW50ICoqKlxuICAgKiBOT1RFOiBUSElTIEVWRU5UIE9DQ1VSIE9OTFkgV0hFTiBJUyBDUkVBVEVEIEEgTkVXIFNVQlNDUklQVElPTlxuICAgKiAxKSBGUk9NIFRIRSBQUk9QRVJUWSBcImNsaWVudF9yZWZlcmVuY2VfaWRcIiBBUkUgT0JUQUlORUQgVEhFOlxuICAgKiAgICBBKSBVU0VSIElEXG4gICAqICAgIEIpIFBST0pFQ1QgSUQgXG4gICAqIDIpIFdJVEggVEhFIHN1YnNjcmlwdGlvbiBJRCAoTk9URSBpcyB0aGUgcHJvcGVydHkgc3Vic2NyaXB0aW9uKSBJUyBSVU5ORUQgQSBDQUxMQkFDSyBUTyBTVFJJUEVcbiAgICogICAgVE8gT0JUQUlOIFRIRSBPQkpFQ1QgXCJTVUJTQ1JJUFRJT05cIiBBTkQgVEhFTiBGUk9NIFRISVMgQVJFIE9CVEFJTkVEIFRIRTpcbiAgICogICAgQSkgc3Vic2NyaXB0aW9uU3RhcnREYXRlXG4gICAqICAgIEIpIHN1YnNjcmlwdGlvbkVuZERhdGVcbiAgICogICAgQykgcXVhbnRpdHkgKHdoaWNoIGluIHRoZSB0aWxlZGVzayBkYXNoYm9hcmQgY29ycmVzcG9uZHMgdG8gdGhlIG51bWJlciBvZiBhZ2VudHMgLyBvcGVyYXRvcnMgc2VhdHMpXG4gICAqIDMpIFdJVEggVEhFIE9CVEFJTkVEIERBVEEgSVMgVVBEQVRFRCBUSEUgUFJPSkVDVCAnUFJPRklMRScgKGlzIGFuIG9iamVjdCBuZXN0ZWQgaW4gdGhlIHByb2plY3Qgb2JqZWN0KSBcbiAgICogNCkgVEhFIE9CVEFJTkVEIE9CSkVDVCBcIlNVQlNDUklQVElPTlwiIEFORCB0aGUgXCJTVUJTQ1JJUFRJT04gSURcIiwgdGhlIFwiUFJPSkVDVCBJRFwiLCB0aGUgXCJVU0VSIElEXCIgQU5EIHN0cmlwZV9ldmVudDogXCJjaGVja291dC5zZXNzaW9uLmNvbXBsZXRlZFwiIEFSRSBTQVZFRCBPTiBPVVIgREJcbiAgICogICAgQVMgXCJTVUJTQ1JJUFRJT04tUEFZTUVOVFwiXG4gICAqL1xuXG4gIGlmIChldmVudC50eXBlID09PSAnY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWQnKSB7XG4gICAgd2luc3Rvbi5kZWJ1ZygnKFN0cmlwZSkgRXZlbnQ6IGNoZWNrb3V0LnNlc3Npb24uY29tcGxldGVkJyk7XG5cbiAgICBjb25zdCBzZXNzaW9uID0gZXZlbnQuZGF0YS5vYmplY3Q7XG4gICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBTZXNzaW9uOiAnLCBzZXNzaW9uKTtcblxuICAgIHZhciBjbGllbnRfcmVmZXJlbmNlX2lkID0gc2Vzc2lvbi5jbGllbnRfcmVmZXJlbmNlX2lkO1xuICAgIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgY2xpZW50X3JlZmVyZW5jZV9pZDogJywgY2xpZW50X3JlZmVyZW5jZV9pZCk7XG5cbiAgICAvKiogMUEgKi9cbiAgICB2YXIgdXNlcl9pZCA9IGNsaWVudF9yZWZlcmVuY2VfaWQuc3BsaXQoXCJfXCIpWzBdO1xuICAgIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgdXNlcl9pZDogJywgdXNlcl9pZCk7XG5cbiAgICAvKiogMUIgKi9cbiAgICB2YXIgcHJvamVjdF9pZCA9IGNsaWVudF9yZWZlcmVuY2VfaWQuc3BsaXQoXCJfXCIpWzFdO1xuICAgIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgcHJvamVjdF9pZDogJywgcHJvamVjdF9pZCk7XG5cbiAgICB2YXIgcGxhbl9uYW1lID0gY2xpZW50X3JlZmVyZW5jZV9pZC5zcGxpdChcIl9cIilbMl07XG4gICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBwbGFuX25hbWU6ICcsIHBsYW5fbmFtZSk7XG5cbiAgICB2YXIgc2VhdHNfbnVtQXNTdHJpbmcgPSBjbGllbnRfcmVmZXJlbmNlX2lkLnNwbGl0KFwiX1wiKVszXTtcbiAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHNlYXRzX251bTogJywgc2VhdHNfbnVtQXNTdHJpbmcgKyAnIHR5cGVvZiAnLCB0eXBlb2Ygc2VhdHNfbnVtQXNTdHJpbmcpO1xuXG4gICAgdmFyIHNlYXRzX251bSA9IE51bWJlcihzZWF0c19udW1Bc1N0cmluZylcbiAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHNlYXRzX251bUFzU3RyaW5nOiAnLCBzZWF0c19udW0gKyAnIHR5cGVvZiAnLCB0eXBlb2Ygc2VhdHNfbnVtKTtcblxuICAgIHZhciBzdWJzY3JpcHRpb25JZCA9IGV2ZW50LmRhdGEub2JqZWN0LnN1YnNjcmlwdGlvbjtcbiAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHN1YnNjcmlwdGlvbklkOiAnLCBzdWJzY3JpcHRpb25JZCk7XG5cbiAgICBnZXRTdWJzY3JpdGlvbkJ5SWQoc3Vic2NyaXB0aW9uSWQpLnRoZW4oZnVuY3Rpb24gKHN1YnNjcmlwdGlvbl9vYmopIHtcblxuICAgICAgaWYgKCFzdWJzY3JpcHRpb25fb2JqKSB7XG4gICAgICAgIHdpbnN0b24uZXJyb3IoJyhTdHJpcGUpIEVycm9yOiBTdWJzY3JpcHRpb24gbm90IGZvdW5kIGZvciBpZCAnLCBzdWJzY3JpcHRpb25JZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG9iamVjdF90eXBlID0gc3Vic2NyaXB0aW9uX29iai5vYmplY3Q7XG4gICAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIG9iamVjdF90eXBlOiAnLCBvYmplY3RfdHlwZSk7XG5cbiAgICAgIC8qKiAyQSAqL1xuICAgICAgdmFyIHN1YnNjcmlwdGlvblN0YXJ0RGF0ZSA9IG1vbWVudC51bml4KHN1YnNjcmlwdGlvbl9vYmouY3VycmVudF9wZXJpb2Rfc3RhcnQpLmZvcm1hdCgnWVlZWS1NTS1ERFRISDptbTpzcy5TU1MnKVxuICAgICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBzdWJzY3JpcHRpb25TdGFydERhdGU6ICcsIHN1YnNjcmlwdGlvblN0YXJ0RGF0ZSk7XG5cbiAgICAgIC8qKiAyQiAqL1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbkVuZERhdGUgPSBtb21lbnQudW5peChzdWJzY3JpcHRpb25fb2JqLmN1cnJlbnRfcGVyaW9kX2VuZCkuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycpXG4gICAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHN1YnNjcmlwdGlvbkVuZERhdGU6ICcsIHN1YnNjcmlwdGlvbkVuZERhdGUpO1xuXG4gICAgICAvKipcbiAgICAgICAqISAqKiogQk9EWSAqKipcbiAgICAgICAqL1xuICAgICAgdmFyIGJvZHkgPSB7XG4gICAgICAgIHByb2ZpbGU6IHtcbiAgICAgICAgICBuYW1lOiBwbGFuX25hbWUsXG4gICAgICAgICAgdHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIHN1YnNjcmlwdGlvbl9jcmVhdGlvbl9kYXRlOiBzdWJzY3JpcHRpb25TdGFydERhdGUsXG4gICAgICAgICAgc3ViU3RhcnQ6IHN1YnNjcmlwdGlvblN0YXJ0RGF0ZSxcbiAgICAgICAgICBzdWJFbmQ6IHN1YnNjcmlwdGlvbkVuZERhdGUsXG4gICAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IHN1YnNjcmlwdGlvbklkLFxuICAgICAgICAgIGxhc3Rfc3RyaXBlX2V2ZW50OiBldmVudC50eXBlLFxuICAgICAgICAgIGFnZW50czogc2VhdHNfbnVtXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqIDMgKi9cbiAgICAgIHVwZGF0ZVByb2plY3RQcm9maWxlKHByb2plY3RfaWQsIGJvZHksICdjaGVja291dC5zZXNzaW9uLmNvbXBsZXRlZCcpO1xuXG4gICAgICAvLyByaWNoaWFtYSBlbmRwb2ludCBzZXJ2ZXIgcGVyIG5vdGlmeVxuXG4gICAgICAvKiogNCAqL1xuICAgICAgc2F2ZU9uREIoc3Vic2NyaXB0aW9uSWQsIHByb2plY3RfaWQsIHN1YnNjcmlwdGlvbl9vYmosIHVzZXJfaWQsIGV2ZW50LnR5cGUsIHBsYW5fbmFtZSwgc2VhdHNfbnVtKVxuXG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgd2luc3Rvbi5lcnJvcignKFN0cmlwZSkgRXJyb3I6IGdldFN1YnNjcml0aW9uQnlJZCAnLCBlcnIpO1xuICAgIH0pO1xuXG4gIH1cbiAgLy8gb2JqZWN0X3R5cGUgPSBzdWJzY3JpcHRpb24uXG4gIC8qKlxuICAgKiohICoqKiBIYW5kbGUgdGhlIGludm9pY2UucGF5bWVudF9zdWNjZWVkZWQgZXZlbnQgKioqXG4gICAqIE5PVEU6IFRISVMgRVZFTlQgT0NDVVIgV0hFTiBJUyBDUkVBVEVEIEEgTkVXIFNVQlNDUklQVElPTiBBTkQgRVZFUlkgVElNRSBUSEUgU0FNRSBJUyBSRU5FV0VEXG4gICAqIDEpIEZST00gVEhFIE9CSkVDVCBPRiBUSEUgRVZFTlQgQVJFIE9CVEFJTkVEIFRIRTpcbiAgICogICAgQSkgc3Vic2NyaXB0aW9uU3RhcnREYXRlXG4gICAqICAgIEIpIHN1YnNjcmlwdGlvbkVuZERhdGVcbiAgICogICAgQykgc3Vic2NyaXRwdGlvbklkICBcbiAgICogMikgd2hlbiByZWZlciB0byBhIFJFTkVXQUwgKCBiaWxsaW5nX3JlYXNvbiA9PT0gc3Vic2NyaXB0aW9uX2N5Y2xlKVxuICAgKiAgICBJRiBUSEUgVkFMVUUgT0YgVEhFIFBST1BFUlRZIFwiYmlsbGluZ19yZWFzb25cIiBJUyBVTkxJS0UgT0YgXCJzdWJzY3JpcHRpb25fY3JlYXRlXCIgKE1FQU5TIFRIQVQgVEhFIEVWRU5UIFJFRkVSIFRPIEEgUkVORVdBTCBcbiAgICogICAgRk9SIFdISUNIIGJpbGxpbmdfcmVhc29uOiBzdWJzY3JpcHRpb25fY3ljbGUgQU5EIE5PVCBUTyBUSEUgRklSU1QgU1VCU0NSSVBUSU9OKSBcbiAgICogICAgQSkgSVMgT0JUQUlORUQgVEhFICdTVUJTQ1JJUFRJT04tUEFZTUVOVCcgKHdpdGggc3RyaXBlX2V2ZW50OiBcImNoZWNrb3V0LnNlc3Npb24uY29tcGxldGVkXCIpIFNBVkVEIEFCT1ZFIEFORCBUSEVOIEZST00gVEhJUzpcbiAgICogICAgICAgLSBUSEUgXCJQUk9KRUNUIElEXCIgXG4gICAqICAgICAgIC0gVEhFIFwiVVNFUiBJRFwiXG4gICAqICAgICAgIFRPIE9CVEFJTiBUSEUgJ1NVQlNDUklQVElPTi1QQVlNRU5UJ0lOIE9VUiBEQiBJUyBMT09LRUQgRk9SIFRIRSBcIlNVQlNDUklQSU9OLVBBWU1FTlRcIiBUSEFUIEhBUyBGT1Igc3Vic2NyaXB0aW9uIGlkIFRIRSBWQUxVRSBPRiAxQyBBTkQgc3RyaXBlX2V2ZW50OiBcImNoZWNrb3V0LnNlc3Npb24uY29tcGxldGVkXCJcbiAgICogICAgICAgVEhFIENPTkRJVElPTiBzdHJpcGVfZXZlbnQ6IFwiY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWRcIiAoTk8gTU9SRTogb2JqZWN0X3R5cGUgPSBzdWJzY3JpcHRpb24pIElUJ1MgTkVDRVNTQVJZIFRPIEZJTFRFUiBUSEUgXCJTVUJTQ1JJUElPTi1QQVlNRU5UU1wiIFxuICAgKiAgICAgICBUSEFUIENPTlRBSU4gVEhFICBQUk9QRVJUSUVTICBcInByb2plY3RJRFwiIEFORCBcInVzZXJJRFwiXG4gICAqICAgICAgIFRIRSBFWElTVEVOQ0UgT0YgQSBcIlNVQlNDUklQVElPTi1QQVlNRU5UXCIgV0lUSE9VVCBcInByb2plY3RJRFwiIEFORCBcInVzZXJJRFwiIElTIERVRSBUTyBUSEUgRkFDVCBUSEFUIEFUIFRIRSBNT01FTlQgT0YgVEhFIENSRUFUSU9OIE9GIEEgU1VCU0NSSVBUSU9OIFxuICAgKiAgICAgICBJUyBTQVZFRCBJTiBPVVIgREIgQUxTTyBBIFwiU1VCU0NSSVBUSU9OLVBBWU1FTlRcIiBDT1JSRVNQT05ESU5HIFRPIFRIRSBPQkpFQ1QgUkVUVVJORUQgQlkgIFRIRSBFVkVOVCBcImludm9pY2UucGF5bWVudF9zdWNjZWVkZWRcIiBVU0VGVUwgQkVDQVVTRSBcbiAgICogICAgICAgSVQgQ09OVEFJTlMgVEhFIExJTktTIE9GIFRIRSBJTlZPSUNFIE9GIFRIRSBGSVJTVCBTVUJTQ1JJUFRJT04gKHVzZWQgYnkgdGlsZWRlc2sgZGFzaGJvYXJkIGluIHRoZSBjb21wb25lbnRzIHBheW1lbnRzKVxuICAgKiAgICAgICBCVVQgRlJPTSBXSElDSCBJVCBJUyBOT1QgUE9TU0lCTEUgUFVTSCBBTkQgVEhFTiBUTyBUTyBPQlRBSU4gVEhFIFwicHJvamVjdElEXCIgQU5EIFwidXNlcklEXCJcbiAgICogICAgQikgSVMgVVBEQVRFRCBUSEUgUFJPSkVDVCAnUFJPRklMRScgV0lUSDpcbiAgICogICAgICAgLSBEQVRBIE9CVEFJTkVEIEZST00gVEhFIEVWRU5UJ1MgT0JKRUNUOlxuICAgKiAgICAgICAgIC0gc3Vic2NyaXB0aW9uU3RhcnREYXRlXG4gICAqICAgICAgICAgLSBzdWJzY3JpcHRpb25FbmREYXRlXG4gICAqICAgICAgICAgLSBzdWJzY3JpcHRpb25JZCBcbiAgICogICAgICAgICAtIGxhc3Rfc3RyaXBlX2V2ZW50IFxuICAgKiAgICAgICAgIC0gcXVhbnRpdHkgKHdoaWNoIGluIHRoZSBkYXNoYm9hcmQgY29ycmVzcG9uZHMgdG8gdGhlIG51bWJlciBvZiBhZ2VudHMgLyBvcGVyYXRvcnMgc2VhdHMpXG4gICAqICAgICAgIC0gREFUQSBPQlRBSU5FRCBGUk9NIFRIRSAnU1VCU0NSSVBUSU9OLVBBWU1FTlQnIHdpdGggc3RyaXBlX2V2ZW50OiBcImNoZWNrb3V0LnNlc3Npb24uY29tcGxldGVkXCJcbiAgICogICAgICAgICAtIFwiUFJPSkVDVCBJRFwiIGFuZCBcIlVTRVIgSURcIlxuICAgKiAgICBDKSBUSEUgT0JKRUNUIE9GIFRIRSBFVkVOVCBpbnZvaWNlLnBheW1lbnRfc3VjY2VlZGVkIEFORCB0aGUgXCJTVUJTQ1JJUFRJT04gSURcIiwgdGhlIFwiUFJPSkVDVCBJRFwiLCB0aGUgXCJVU0VSIElEXCIgQU5EIHRoZSBcIk9CSkVDVF9UWVBFXCIgKGV2ZW50KSBcbiAgICogICAgICAgQVJFIFNBVkVEIEFTIFwiU1VCU0NSSVBUSU9OLVBBWU1FTlRcIiBPTiBPVVIgREJcbiAgICogMykgd2hlbiByZWZlciB0byBhIENSRUFUSU9OIChiaWxsaW5nX3JlYXNvbiA9PT0gc3Vic2NyaXB0aW9uX2NyZWF0ZSlcbiAgICogICAgQSkgVEhFIE9CSkVDVCBPRiBUSEUgRVZFTlQgaW52b2ljZS5wYXltZW50X3N1Y2NlZWRlZCBBTkQgVEhFIERBVEEgZXZlbnQudHlwZSA9PT0gaW52b2ljZS5wYXltZW50X3N1Y2NlZWRlZCAgQVJFIFNBVkVEIEFTIFwiU1VCU0NSSVBUSU9OLVBBWU1FTlRcIlxuICAgKiAgICAgICBPTiBPVVIgREIgKE5PVEU6IFwiUFJPSkVDVCBJRFwiIEFORCBcIlVTRVIgSURcIiBBUkUgU0FWRUQgQVMgbnVsbCBTSU5DRSBJUyBOT1QgUE9TU0lCTEUgVE8gUkVUUklFVkUgVEhFIFZBTFVFUykgXG4gICAqIFxuICAgKi9cbiAgaWYgKGV2ZW50LnR5cGUgPT09ICdpbnZvaWNlLnBheW1lbnRfc3VjY2VlZGVkJykge1xuXG4gICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBFdmVudDogaW52b2ljZS5wYXltZW50X3N1Y2NlZWRlZCcpO1xuICAgIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgYmlsbGluZ19yZWFzb246ICcsIGV2ZW50LmRhdGEub2JqZWN0LmJpbGxpbmdfcmVhc29uKTtcblxuICAgIHZhciBsaW5lc051bSA9IGV2ZW50LmRhdGEub2JqZWN0LmxpbmVzLnRvdGFsX2NvdW50XG4gICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBsaW5lc051bTogJywgbGluZXNOdW0pO1xuXG4gICAgdmFyIGluZGV4ID0gbGluZXNOdW0gLSAxO1xuICAgIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgaW5kZXg6ICcsIGluZGV4KTtcblxuICAgIC8qKiAxQSAqLyAvLyBUSElTIFdPUktTXG4gICAgdmFyIHN1YnNjcmlwdGlvblN0YXJ0RGF0ZSA9IG1vbWVudC51bml4KGV2ZW50LmRhdGEub2JqZWN0LmxpbmVzLmRhdGFbaW5kZXhdLnBlcmlvZC5zdGFydCkuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycpXG4gICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBzdWJzY3JpcHRpb25TdGFydERhdGU6ICcsIHN1YnNjcmlwdGlvblN0YXJ0RGF0ZSk7XG5cbiAgICAvKiogMUIgKi8gLy8gVEhJUyBXT1JLU1xuICAgIHZhciBzdWJzY3JpcHRpb25FbmREYXRlID0gbW9tZW50LnVuaXgoZXZlbnQuZGF0YS5vYmplY3QubGluZXMuZGF0YVtpbmRleF0ucGVyaW9kLmVuZCkuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycpXG4gICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBzdWJzY3JpcHRpb25FbmREYXRlOiAnLCBzdWJzY3JpcHRpb25FbmREYXRlKTtcblxuICAgIHZhciBzdWJzY3JpcHRpb25JZCA9IGV2ZW50LmRhdGEub2JqZWN0LnN1YnNjcmlwdGlvbjtcbiAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHN1YnNjcmlwdGlvbklkOiAnLCBzdWJzY3JpcHRpb25JZCk7XG5cbiAgICBpZiAoc3Vic2NyaXB0aW9uSWQgPT0gbnVsbCkge1xuICAgICAgc3Vic2NyaXB0aW9uSWQgPSBldmVudC5kYXRhLm9iamVjdC5saW5lcy5kYXRhWzBdLnN1YnNjcmlwdGlvbjtcbiAgICAgIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgc3Vic2NyaXB0aW9uSWQ6ICcsIHN1YnNjcmlwdGlvbklkKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuZGF0YS5vYmplY3QuYmlsbGluZ19yZWFzb24gIT09ICdzdWJzY3JpcHRpb25fY3JlYXRlJykge1xuXG5cbiAgICAgIC8vIFRPIFRFU1QgVEhFIFJFTkVXQUwgVU5DT01NRU5UIFNFVCBUSU1FT1VUXG4gICAgICAvLyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIC8qKiAyQSAqL1xuICAgICAgZ2V0U3ViQnlJZEFuZENoZWNrb3V0U2Vzc2lvbkNvbXBsZXRlZEV2bnQoc3Vic2NyaXB0aW9uSWQpLnRoZW4oZnVuY3Rpb24gKHN1YnNwdG5fcGF5bWVudCkge1xuICAgICAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHN1YnNwdG5fcGF5bWVudDogJywgc3Vic3B0bl9wYXltZW50KTtcbiAgICAgICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBzdWJzcHRuX3BheW1lbnQgdHlwZW9mOiAnLCB0eXBlb2Ygc3Vic3B0bl9wYXltZW50KTtcbiAgICAgICAgaWYgKHN1YnNwdG5fcGF5bWVudCkge1xuXG4gICAgICAgICAgdmFyIHByb2plY3RJZCA9IHN1YnNwdG5fcGF5bWVudC5wcm9qZWN0X2lkXG4gICAgICAgICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBwcm9qZWN0SWQ6ICcsIHByb2plY3RJZCk7XG5cbiAgICAgICAgICBQcm9qZWN0LmZpbmRPbmUoeyBfaWQ6IHByb2plY3RJZCB9LCBmdW5jdGlvbiAoZXJyLCBwcm9qZWN0KSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgRXJyb3I6IGZpbmQgUHJvamVjdCAnLCBlcnIpO1xuICAgICAgICAgICAgICByZXR1cm4gKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvamVjdCkge1xuICAgICAgICAgICAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHByb2plY3Q6ICcsIHByb2plY3QpO1xuICAgICAgICAgICAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHByb2ZpbGU6ICcsIHByb2plY3QucHJvZmlsZSk7XG5cbiAgICAgICAgICAgICAgdmFyIHNlYXRzX251bSA9IHByb2plY3QucHJvZmlsZS5hZ2VudHM7XG4gICAgICAgICAgICAgIHZhciBwbGFuX25hbWUgPSBwcm9qZWN0LnByb2ZpbGUubmFtZTtcbiAgICAgICAgICAgICAgdmFyIHVzZXJJZCA9IHN1YnNwdG5fcGF5bWVudC51c2VyX2lkXG5cbiAgICAgICAgICAgICAgbGV0IHByb2ZpbGUgPSBwcm9qZWN0LnByb2ZpbGU7XG4gICAgICAgICAgICAgIHByb2ZpbGUubmFtZSA9IHBsYW5fbmFtZTtcbiAgICAgICAgICAgICAgcHJvZmlsZS50eXBlID0gXCJwYXltZW50XCI7XG4gICAgICAgICAgICAgIHByb2ZpbGUuc3ViU3RhcnQgPSBzdWJzY3JpcHRpb25TdGFydERhdGU7XG4gICAgICAgICAgICAgIHByb2ZpbGUuc3ViRW5kID0gc3Vic2NyaXB0aW9uRW5kRGF0ZTtcbiAgICAgICAgICAgICAgcHJvZmlsZS5zdWJzY3JpcHRpb25JZCA9IHN1YnNjcmlwdGlvbklkO1xuICAgICAgICAgICAgICBwcm9maWxlLmxhc3Rfc3RyaXBlX2V2ZW50ID0gZXZlbnQudHlwZTtcblxuXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgIC8vICBCT0RZIFxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICB2YXIgYm9keSA9IHtcbiAgICAgICAgICAgICAgICBwcm9maWxlOiBwcm9maWxlXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvKiogMkIgKi9cbiAgICAgICAgICAgICAgdXBkYXRlUHJvamVjdFByb2ZpbGUocHJvamVjdElkLCBib2R5LCAnaW52b2ljZS5wYXltZW50X3N1Y2NlZWRlZCcpO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLyoqIDJDICovXG4gICAgICAgICAgICAgIHNhdmVPbkRCKHN1YnNjcmlwdGlvbklkLCBwcm9qZWN0SWQsIGV2ZW50LCB1c2VySWQsIGV2ZW50LnR5cGUsIHBsYW5fbmFtZSwgc2VhdHNfbnVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgd2luc3Rvbi5lcnJvcignKFN0cmlwZSkgRXJyb3I6IGdldFN1YkJ5SWRBbmRDaGVja291dFNlc3Npb25Db21wbGV0ZWRFdm50ICcsIGVycik7XG4gICAgICB9KTtcbiAgICAgIC8vIH0sIDUwMDApO1xuICAgIH0gXG4gICAgZWxzZSBpZiAoZXZlbnQuZGF0YS5vYmplY3QuYmlsbGluZ19yZWFzb24gPT09ICdzdWJzY3JpcHRpb25fY3JlYXRlJykge1xuICAgICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBVU0VDQVNFOiBpbnZvaWNlLnBheW1lbnRfc3VjY2VlZGVkIGJpbGxpbmdfcmVhc29uIHN1YnNjcmlwdGlvbl9jcmVhdGUgJykgXG4gICAgICBzYXZlRmlyc3RJbnZvaWNlUGF5bWVudFN1Y2NlZWRlZChzdWJzY3JpcHRpb25JZCwgZXZlbnQsIGV2ZW50LnR5cGUpO1xuICAgIH0gXG4gIFxuICB9XG5cbiAgLyoqXG4gICAqKiEgKioqIEhBTkRMRSBUSEUgRVZFTlQgY3VzdG9tZXIuc3Vic2NyaXB0aW9uLmRlbGV0ZWQgKioqXG4gICAqIHRoaXMgZXZlbnQgb2NjdXJzIHdoZW4gYSBzdWJzY3JpcHRpb24gaXMgY2FuY2VsbGVkXG4gICAqIC0gZnJvbSB0aGUgVElMRURFU0snIGRhc2hib2FyZCAoYnkgY2xpY2tpbmcgQ0FOQ0VMIFNVQlNDUklQVElPTiB0aGF0IGNhbGwgY2FuY2Vsc3Vic2NyaXB0aW9uKCkgLSBzZWUgYmVsb3cpXG4gICAqIC0gZnJvbSB0aGUgU1RSSVBFJyBkYXNoYm9hcmRcbiAgICovXG4gIGlmIChldmVudC50eXBlID09PSAnY3VzdG9tZXIuc3Vic2NyaXB0aW9uLmRlbGV0ZWQnKSB7XG4gICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBFdmVudDogY3VzdG9tZXIuc3Vic2NyaXB0aW9uLmRlbGV0ZWQnKTtcbiAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIGV2ZW50OiAnLCBldmVudCk7XG4gICAgdmFyIHN1YnNjcmlwdGlvbklkID0gZXZlbnQuZGF0YS5vYmplY3QuaWRcbiAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHN1YnNjcmlwdGlvbklkOiAnLCBzdWJzY3JpcHRpb25JZCk7XG5cbiAgICB2YXIgc3Vic2NyaXB0aW9uRW5kID0gbW9tZW50LnVuaXgoZXZlbnQuZGF0YS5vYmplY3QuY2FuY2VsZWRfYXQpLmZvcm1hdCgnWVlZWS1NTS1ERFRISDptbTpzcy5TU1MnKVxuICAgIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgc3Vic2NyaXB0aW9uRW5kOiAnLCBzdWJzY3JpcHRpb25FbmQpO1xuXG4gICAgZ2V0U3ViQnlJZEFuZENoZWNrb3V0U2Vzc2lvbkNvbXBsZXRlZEV2bnQoc3Vic2NyaXB0aW9uSWQpLnRoZW4oZnVuY3Rpb24gKHN1YnNjcmlwdGlvblBheW1lbnQpIHtcbiAgICAgIC8vIFN1YnNjcmlwdGlvblBheW1lbnQuZmluZCh7IHN1YnNjcmlwdGlvbl9pZDogc3Vic2NyaXB0aW9uSWQsIG9iamVjdF90eXBlOiBcInN1YnNjcmlwdGlvblwiIH0sIGZ1bmN0aW9uIChlcnIsIHN1YnNjcmlwdGlvblBheW1lbnQpIHtcblxuICAgICAgLy8gaWYgKGVycikge1xuICAgICAgLy8gICB3aW5zdG9uLmluZm8oJ0Vycm9yIGdldHRpbmcgdGhlIHN1YnNjcmlwdGlvblBheW1lbnQgJywgZXJyKTtcbiAgICAgIC8vICAgcmV0dXJuIGVycjtcbiAgICAgIC8vIH1cbiAgICAgIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgc3Vic2NyaXB0aW9uUGF5bWVudDogJywgc3Vic2NyaXB0aW9uUGF5bWVudCk7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uUGF5bWVudCkgeyBcbiAgICAgICAgdmFyIHByb2plY3RJZCA9IHN1YnNjcmlwdGlvblBheW1lbnQucHJvamVjdF9pZDsgXG4gICAgICAgIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgcHJvamVjdElkOiAnLCBwcm9qZWN0SWQpXG4gICAgICAgIFxuICAgICAgICB2YXIgdXNlcklkID0gc3Vic2NyaXB0aW9uUGF5bWVudC51c2VyX2lkO1xuICAgICAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHVzZXJJZDogJywgdXNlcklkKVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqISAqKiogQk9EWSAqKipcbiAgICAgICAqL1xuICAgICAgdmFyIGJvZHkgPSB7XG4gICAgICAgIHByb2ZpbGU6IHtcbiAgICAgICAgICBzdWJzY3JpcHRpb25JZDogc3Vic2NyaXB0aW9uSWQsXG4gICAgICAgICAgbmFtZTogJ1NhbmRib3gnLFxuICAgICAgICAgIHR5cGU6ICdmcmVlJyxcbiAgICAgICAgICBhZ2VudHM6IDEsXG4gICAgICAgICAgbGFzdF9zdHJpcGVfZXZlbnQ6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgc3ViRW5kOiBzdWJzY3JpcHRpb25FbmRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3aW5zdG9uLmluZm8oXCIoU3RyaXBlKSBjdXN0b21lci5zdWJzY3JpcHRpb24uZGVsZXRlZCBwcm9maWxlIHRvIHVwZGF0ZSAoZXZlbnQuZGF0YS5vYmplY3QuY2FuY2VsZWRfYXQpIFwiLCBldmVudC5kYXRhLm9iamVjdC5jYW5jZWxlZF9hdClcbiAgICAgIHdpbnN0b24uaW5mbyhcIihTdHJpcGUpIGN1c3RvbWVyLnN1YnNjcmlwdGlvbi5kZWxldGVkIHByb2ZpbGUgdG8gdXBkYXRlIFwiLCBib2R5LnByb2ZpbGUpXG4gICAgICBcbiAgICAgIHVwZGF0ZVByb2plY3RQcm9maWxlKHByb2plY3RJZCwgYm9keSwgJ3N1YnNjcmlwdGlvbi5kZWxldGVkJyk7XG4gICAgICBzYXZlT25EQihzdWJzY3JpcHRpb25JZCwgcHJvamVjdElkLCBldmVudC5kYXRhLm9iamVjdCwgdXNlcklkLCBldmVudC50eXBlLCBwbGFuX25hbWUsIDEpO1xuXG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgd2luc3Rvbi5lcnJvcignKFN0cmlwZSkgRXJyb3I6IGN1c3RvbWVyLnN1YnNjcmlwdGlvbi5kZWxldGVkICcsIGVycik7XG4gICAgfSk7XG5cbiAgfVxuICAvLyBSZXR1cm4gYSByZXNwb25zZSB0byBhY2tub3dsZWRnZSByZWNlaXB0IG9mIHRoZSBldmVudFxuICByZXNwb25zZS5qc29uKHsgcmVjZWl2ZWQ6IHRydWUgfSk7XG59KTtcblxuXG5mdW5jdGlvbiBnZXRTdWJCeUlkQW5kQ2hlY2tvdXRTZXNzaW9uQ29tcGxldGVkRXZudChzdWJzY3JpcHRpb25pZCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIFN1YnNjcmlwdGlvblBheW1lbnQuZmluZE9uZSh7IHN1YnNjcmlwdGlvbl9pZDogc3Vic2NyaXB0aW9uaWQsIHN0cmlwZV9ldmVudDogXCJjaGVja291dC5zZXNzaW9uLmNvbXBsZXRlZFwiIH0sIGZ1bmN0aW9uIChlcnIsIHN1YnNjcmlwdGlvblBheW1lbnQpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIHJlc29sdmUoc3Vic2NyaXB0aW9uUGF5bWVudCk7XG4gICAgfSk7XG4gIH0pXG59O1xuXG5mdW5jdGlvbiBnZXRTdWJzY3JpdGlvbkJ5SWQoc3Vic2NyaXB0aW9uaWQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBjb25zdCBfc3RyaXBlID0gcmVxdWlyZShcInN0cmlwZVwiKShhcGlTZWNyZXRLZXkpO1xuICAgIF9zdHJpcGUuc3Vic2NyaXB0aW9ucy5yZXRyaWV2ZShzdWJzY3JpcHRpb25pZCwgZnVuY3Rpb24gKGVyciwgc3Vic2NyaXB0aW9uKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICByZXNvbHZlKHN1YnNjcmlwdGlvbik7XG4gICAgfSk7XG4gIH0pXG59O1xuXG4vLyBTRUUgVXBkYXRpbmcgbmVzdGVkIG9iamVjdCBpbiBtb25nb29zZSBcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIzODMyOTIxL3VwZGF0aW5nLW5lc3RlZC1vYmplY3QtaW4tbW9uZ29vc2VcbmZ1bmN0aW9uIHVwZGF0ZVByb2plY3RQcm9maWxlKHByb2plY3RfaWQsIGJvZHksIGNhbGxlZEJ5KSB7XG4gIFByb2plY3QuZmluZEJ5SWRBbmRVcGRhdGUocHJvamVjdF9pZCwgYm9keSwgeyBuZXc6IHRydWUsIHVwc2VydDogdHJ1ZSB9LCBmdW5jdGlvbiAoZXJyLCB1cGRhdGVkUHJvamVjdCkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHdpbnN0b24uZXJyb3IoJ3VwZGF0ZVByb2plY3RQcm9maWxlIEVycm9yICcsIGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbnN0b24uZGVidWcodXBkYXRlZFByb2plY3QpXG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2F2ZU9uREIoc3Vic2NyaXB0aW9uaWQsIHByb2plY3RpZCwgb2JqLCB1c2VyaWQsIHN0cmlwZV9ldmVudCwgcGxhbl9uYW1lLCBzZWF0c19udW0pIHtcbiAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBwbGFuX25hbWUnLCBwbGFuX25hbWUpXG4gIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgc2VhdHNfbnVtJywgc2VhdHNfbnVtKVxuXG4gIHZhciBuZXdQYXltZW50U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvblBheW1lbnQoe1xuICAgIF9pZDogbmV3IG1vbmdvb3NlLlR5cGVzLk9iamVjdElkKCksXG4gICAgc3Vic2NyaXB0aW9uX2lkOiBzdWJzY3JpcHRpb25pZCxcbiAgICBwcm9qZWN0X2lkOiBwcm9qZWN0aWQsXG4gICAgdXNlcl9pZDogdXNlcmlkLFxuICAgIHN0cmlwZV9ldmVudDogc3RyaXBlX2V2ZW50LFxuICAgIHBsYW5fbmFtZTogcGxhbl9uYW1lLFxuICAgIGFnZW50czogc2VhdHNfbnVtLFxuICAgIG9iamVjdDogb2JqXG4gIH0pO1xuXG4gIG5ld1BheW1lbnRTdWJzY3JpcHRpb24uc2F2ZShmdW5jdGlvbiAoZXJyLCBzYXZlZFN1YnNjcmlwdGlvblBheW1lbnQpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB3aW5zdG9uLmVycm9yKCcoU3RyaXBlKSBFcnJvcjogc2F2ZU9uREIgJywgZXJyKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHsgc3VjY2VzczogZmFsc2UsIG1zZzogJ0Vycm9yIHNhdmluZyBvYmplY3QuJyB9KTtcbiAgICB9XG4gICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBzYXZlZFN1YnNjcmlwdGlvblBheW1lbnQ6ICcsIHNhdmVkU3Vic2NyaXB0aW9uUGF5bWVudCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzYXZlRmlyc3RJbnZvaWNlUGF5bWVudFN1Y2NlZWRlZChzdWJzY3JpcHRpb25pZCwgb2JqLCBzdHJpcGVfZXZlbnQpIHtcbiAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBzdWJzY3JpcHRpb25pZDogJywgc3Vic2NyaXB0aW9uaWQpXG4gIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgc3RyaXBlX2V2ZW50OiAnLCBzdHJpcGVfZXZlbnQpXG5cbiAgdmFyIG5ld1BheW1lbnRTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uUGF5bWVudCh7XG4gICAgX2lkOiBuZXcgbW9uZ29vc2UuVHlwZXMuT2JqZWN0SWQoKSxcbiAgICBzdWJzY3JpcHRpb25faWQ6IHN1YnNjcmlwdGlvbmlkLFxuICAgIHN0cmlwZV9ldmVudDogc3RyaXBlX2V2ZW50LFxuICAgIG9iamVjdDogb2JqXG4gIH0pO1xuXG4gIG5ld1BheW1lbnRTdWJzY3JpcHRpb24uc2F2ZShmdW5jdGlvbiAoZXJyLCBzYXZlZFN1YnNjcmlwdGlvblBheW1lbnQpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB3aW5zdG9uLmVycm9yKCcoU3RyaXBlKSBFcnJvcjogc2F2ZUZpcnN0SW52b2ljZVBheW1lbnRTdWNjZWVkZWQgJywgZXJyKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHsgc3VjY2VzczogZmFsc2UsIG1zZzogJ0Vycm9yIHNhdmluZyBvYmplY3QuJyB9KTtcbiAgICB9XG4gICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBzYXZlZFN1YnNjcmlwdGlvblBheW1lbnQ6ICcsIHNhdmVkU3Vic2NyaXB0aW9uUGF5bWVudCk7XG4gIH0pO1xufVxuXG5yb3V0ZXIucHV0KCcvY2FuY2Vsc3Vic2NyaXB0aW9uJywgW3Bhc3Nwb3J0LmF1dGhlbnRpY2F0ZShbJ2Jhc2ljJywgJ2p3dCddLCB7IHNlc3Npb246IGZhbHNlIH0pLCB2YWxpZHRva2VuXSwgZnVuY3Rpb24gKHJlcSwgcmVzKSB7XG4gIHZhciBwcm9qZWN0aWQgPSByZXEuYm9keS5wcm9qZWN0aWRcbiAgdmFyIHVzZXJpZCA9IHJlcS5ib2R5LnVzZXJpZFxuICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHByb2plY3RpZDogJywgcHJvamVjdGlkKTtcbiAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSB1c2VyaWQ6ICcsIHVzZXJpZCk7XG5cbiAgUHJvamVjdC5maW5kT25lKHsgX2lkOiBwcm9qZWN0aWQgfSwgZnVuY3Rpb24gKGVyciwgcHJvamVjdCkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHdpbnN0b24uZXJyb3IoJyhTdHJpcGUpIEVycm9yOiBjYW5jZWxzdWJzY3JpcHRpb24gZ2V0dGluZyBwcm9qZWN0ICcsIGVycilcbiAgICAgIHJldHVybiAoZXJyKTtcbiAgICB9XG4gICAgaWYgKHByb2plY3QpIHtcbiAgICAgIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgcHJvamVjdDogJywgcHJvamVjdCk7XG5cbiAgICAgIHZhciBzdWJzY3JpcHRpb25pZCA9IHByb2plY3QucHJvZmlsZS5zdWJzY3JpcHRpb25JZDtcblxuICAgICAgY29uc3Qgc3RyaXBlID0gcmVxdWlyZShcInN0cmlwZVwiKShhcGlTZWNyZXRLZXkpO1xuXG4gICAgICBzdHJpcGUuc3Vic2NyaXB0aW9ucy5kZWwoc3Vic2NyaXB0aW9uaWQsIGZ1bmN0aW9uIChlcnIsIGNvbmZpcm1hdGlvbikge1xuICAgICAgICAvLyBhc3luY2hyb25vdXNseSBjYWxsZWRcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHdpbnN0b24uZXJyb3IoJyhTdHJpcGUpIEVycm9yOiBjYW5jZWxzdWJzY3JpcHRpb24gJywgZXJyKTtcbiAgICAgICAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDApLnNlbmQoeyBzdWNjZXNzOiBmYWxzZSwgbXNnOiBlcnIgfSlcbiAgICAgICAgfVxuICAgICAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIGNvbmZpcm1hdGlvbjogJywgY29uZmlybWF0aW9uKVxuICAgICAgICByZXMuanNvbihjb25maXJtYXRpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KVxufSk7XG5cbnJvdXRlci5wdXQoJy91cGRhdGVzdWJzY3JpcHRpb24nLCBbcGFzc3BvcnQuYXV0aGVudGljYXRlKFsnYmFzaWMnLCAnand0J10sIHsgc2Vzc2lvbjogZmFsc2UgfSksIHZhbGlkdG9rZW5dLCBmdW5jdGlvbiAocmVxLCByZXMpIHtcblxuICB2YXIgcHJvamVjdGlkID0gcmVxLmJvZHkucHJvamVjdGlkXG4gIHZhciB1c2VyaWQgPSByZXEuYm9keS51c2VyaWRcbiAgdmFyIHByaWNlID0gcmVxLmJvZHkucHJpY2VcbiAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBwcm9qZWN0aWQ6ICcsIHByb2plY3RpZCk7XG4gIHdpbnN0b24uaW5mbygnKFN0cmlwZSkgdXNlcmlkOiAnLCB1c2VyaWQpO1xuICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHByaWNlOiAnLCBwcmljZSk7XG4gIGNvbnN0IHN0cmlwZSA9IHJlcXVpcmUoXCJzdHJpcGVcIikoYXBpU2VjcmV0S2V5KTtcblxuICBQcm9qZWN0LmZpbmRPbmUoeyBfaWQ6IHByb2plY3RpZCB9LCBmdW5jdGlvbiAoZXJyLCBwcm9qZWN0KSB7XG4gICAgaWYgKGVycikge1xuICAgICAgd2luc3Rvbi5lcnJvcignKFN0cmlwZSkgRXJyb3I6IHVwZGF0ZXN1YnNjcmlwdGlvbiBnZXR0aW5nIHByb2plY3QgJywgZXJyKVxuICAgICAgcmV0dXJuIChlcnIpO1xuICAgIH1cbiAgICBpZiAocHJvamVjdCkge1xuICAgICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBwcm9qZWN0OiAnLCBwcm9qZWN0KTtcblxuICAgICAgdmFyIHN1YnNjcmlwdGlvbmlkID0gcHJvamVjdC5wcm9maWxlLnN1YnNjcmlwdGlvbklkO1xuXG4gICAgICAvLyBzdWJzY3JpcHRpb25pZFxuICAgICAgc3RyaXBlLnN1YnNjcmlwdGlvbnMudXBkYXRlKFxuICAgICAgICBzdWJzY3JpcHRpb25pZCxcbiAgICAgICAgLy8geyB0cmlhbF9lbmQ6IDE1NjgyMTA2NTUgfSxcbiAgICAgICAgLy8gZnVuY3Rpb24gKGVyciwgc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIC8vICAgLy8gYXN5bmNocm9ub3VzbHkgY2FsbGVkXG4gICAgICAgIC8vICAgaWYgKGVycikge1xuICAgICAgICAvLyAgICAgd2luc3Rvbi5lcnJvcigndXBkYXRlc3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbiBlcnIgJywgZXJyKVxuICAgICAgICAvLyAgICAgcmV0dXJuXG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgIHdpbnN0b24uaW5mbygndXBkYXRlc3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbiAnLCBzdWJzY3JpcHRpb24pXG4gICAgICAgIC8vIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gc3RyaXBlLnN1YnNjcmlwdGlvbnMucmV0cmlldmUoc3Vic2NyaXB0aW9uaWQsIGZ1bmN0aW9uIChlcnIsIHN1YnNjcmlwdGlvbikge1xuICAgIC8vICAgLy8gYXN5bmNocm9ub3VzbHkgY2FsbGVkXG4gICAgLy8gICBpZiAoZXJyKSB7XG4gICAgLy8gICAgIHdpbnN0b24uaW5mbygncmV0cmlldmUgdXBkYXRlZCBzdWJzY3JpcHRpb24gZXJyICcsIGVycilcbiAgICAvLyAgIH0gZWxzZSB7XG4gICAgLy8gICAgIHdpbnN0b24uaW5mbygnwrvCu8K7wrvCu8K7wrvCu8K7IGdyZXRyaWV2ZSB1cGRhdGVkIHN1YnNjcmlwdGlvbjogJywgc3Vic2NyaXB0aW9uKTtcblxuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gIH0pXG5cbn0pXG5cbnJvdXRlci5nZXQoJy86c3Vic2NyaXB0aW9uaWQnLCBbcGFzc3BvcnQuYXV0aGVudGljYXRlKFsnYmFzaWMnLCAnand0J10sIHsgc2Vzc2lvbjogZmFsc2UgfSksIHZhbGlkdG9rZW5dLCBmdW5jdGlvbiAocmVxLCByZXMpIHtcblxuICBTdWJzY3JpcHRpb25QYXltZW50LmZpbmQoeyBzdWJzY3JpcHRpb25faWQ6IHJlcS5wYXJhbXMuc3Vic2NyaXB0aW9uaWQgfSkuc29ydCh7ICdvYmplY3QuY3JlYXRlZCc6IFwiYXNjXCIgfSkuZXhlYyhmdW5jdGlvbiAoZXJyLCBzdWJzY3JpcHRpb25QYXltZW50cykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHdpbnN0b24uZXJyb3IoJyhTdHJpcGUpIEVycm9yOiBHZXQgU3Vic2NyaXB0aW9uIFBheW1lbnRzICcsIHN1YnNjcmlwdGlvblBheW1lbnRzKTtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDUwMCkuc2VuZCh7IHN1Y2Nlc3M6IGZhbHNlLCBtc2c6IGVyciB9KVxuICAgIH1cbiAgICByZXMuanNvbihzdWJzY3JpcHRpb25QYXltZW50cyk7XG4gIH0pO1xuXG59KTtcblxuLy8gIFJFVFJJRVZFIFRIRSBDVVJSRU5UIFNVQlNDUklQVElPTiBGUk9NIFNUUklQRVxucm91dGVyLmdldCgnL3N0cmlwZXN1YnMvOnN1YnNjcmlwdGlvbmlkJywgW3Bhc3Nwb3J0LmF1dGhlbnRpY2F0ZShbJ2Jhc2ljJywgJ2p3dCddLCB7IHNlc3Npb246IGZhbHNlIH0pLCB2YWxpZHRva2VuXSwgZnVuY3Rpb24gKHJlcSwgcmVzKSB7XG5cbiAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBzdWJzY3JpcHRpb24gZ2V0IGJ5IGlkOiAnLCByZXEucGFyYW1zLnN1YnNjcmlwdGlvbmlkKTtcbiAgdmFyIHN0cmlwZSA9IHJlcXVpcmUoJ3N0cmlwZScpKGFwaVNlY3JldEtleSk7XG5cbiAgc3RyaXBlLnN1YnNjcmlwdGlvbnMucmV0cmlldmUoXG4gICAgcmVxLnBhcmFtcy5zdWJzY3JpcHRpb25pZCxcbiAgICBmdW5jdGlvbiAoZXJyLCBzdWJzY3JpcHRpb24pIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgd2luc3Rvbi5lcnJvcignKFN0cmlwZSkgRXJyb3I6IHN1YnNjcmlwdGlvbiBnZXQgYnkgaWQgZnJvbSBzdHJpcGUgJywgZXJyKTtcbiAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHsgc3VjY2VzczogZmFsc2UsIG1zZzogZXJyIH0pXG4gICAgICB9XG4gICAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHN1YnNjcmlwdGlvbjogJywgc3Vic2NyaXB0aW9uKVxuICAgICAgcmVzLmpzb24oc3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICk7XG59KTtcblxuLy8gIFJFVFJJRVZFIFRIRSBDSEVDS09VVCBTRVNTSU9OXG5yb3V0ZXIuZ2V0KCcvY2hlY2tvdXRTZXNzaW9uLzpzZXNzaW9uaWQnLCBbcGFzc3BvcnQuYXV0aGVudGljYXRlKFsnYmFzaWMnLCAnand0J10sIHsgc2Vzc2lvbjogZmFsc2UgfSksIHZhbGlkdG9rZW5dLCBmdW5jdGlvbiAocmVxLCByZXMpIHtcblxuICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIHNlc3Npb25pZDogJywgcmVxLnBhcmFtcy5zZXNzaW9uaWQpO1xuICB2YXIgc3RyaXBlID0gcmVxdWlyZSgnc3RyaXBlJykoYXBpU2VjcmV0S2V5KTtcblxuICBzdHJpcGUuY2hlY2tvdXQuc2Vzc2lvbnMucmV0cmlldmUoXG4gICAgcmVxLnBhcmFtcy5zZXNzaW9uaWQsXG4gICAgZnVuY3Rpb24gKGVyciwgc2Vzc2lvbikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIEVycm9yOiBjaGVja291dFNlc3Npb24gZ2V0IGJ5IGlkIGZyb20gc3RyaXBlICcsIGVycik7XG4gICAgICAgIHJldHVybiByZXMuc3RhdHVzKDUwMCkuc2VuZCh7IHN1Y2Nlc3M6IGZhbHNlLCBtc2c6IGVyciB9KVxuICAgICAgfVxuICAgICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBzZXNzaW9uOiAnLCBzZXNzaW9uKVxuICAgICAgcmVzLmpzb24oc2Vzc2lvbik7XG4gICAgfVxuICApO1xufSk7XG5cbi8vbmV3IGNvZGVcbnJvdXRlci5nZXQoJy9jdXN0b21lci86cHJvamVjdGlkJywgW3Bhc3Nwb3J0LmF1dGhlbnRpY2F0ZShbJ2Jhc2ljJywgJ2p3dCddLCB7IHNlc3Npb246IGZhbHNlIH0pLCB2YWxpZHRva2VuXSwgZnVuY3Rpb24gKHJlcSwgcmVzKSB7XG4gIHdpbnN0b24uZGVidWcoJyhTdHJpcGUpIGdldCBjdXN0b21lciBmcm9tIGRiOiAnLCByZXEucGFyYW1zKVxuICB2YXIgcHJvamVjdGlkID0gcmVxLnBhcmFtcy5wcm9qZWN0aWRcblxuICB3aW5zdG9uLmRlYnVnKCcoU3RyaXBlKSBwcm9qZWN0aWQ6ICcsIHByb2plY3RpZCk7XG5cbiAgU3Vic2NyaXB0aW9uUGF5bWVudC5maW5kKHsgcHJvamVjdF9pZDogcHJvamVjdGlkLCBzdHJpcGVfZXZlbnQ6IFwiY2hlY2tvdXQuc2Vzc2lvbi5jb21wbGV0ZWRcIiB9LCBhc3luYyBmdW5jdGlvbiAoZXJyLCBzdWJzY3JpcHRpb24pIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB3aW5zdG9uLmRlYnVnKCcoU3RyaXBlKSBFcnJvcjogZ2V0IGN1c3RvbWVyIGZyb20gZGIgJywgZXJyKVxuICAgICAgcmV0dXJuIChlcnIpO1xuICAgIH1cbiAgICBpZiAoc3Vic2NyaXB0aW9uICYmIHN1YnNjcmlwdGlvbi5sZW5ndGggPiAwICYmIHN1YnNjcmlwdGlvblswXS5vYmplY3QpIHtcblxuICAgICAgd2luc3Rvbi5kZWJ1ZygnKFN0cmlwZSkgY3VzdG9tZXIgaWQ6ICcsIHN1YnNjcmlwdGlvblswXS5vYmplY3QuY3VzdG9tZXIpO1xuICAgICAgY29uc3QgY3VzdG9tZXJpZCA9IHN1YnNjcmlwdGlvblswXS5vYmplY3QuY3VzdG9tZXJcbiAgICAgIGNvbnN0IHN0cmlwZSA9IHJlcXVpcmUoXCJzdHJpcGVcIikoYXBpU2VjcmV0S2V5KTtcblxuICAgICAgY29uc3QgY3VzdG9tZXIgPSBhd2FpdCBzdHJpcGUuY3VzdG9tZXJzLnJldHJpZXZlKFxuICAgICAgICBjdXN0b21lcmlkXG4gICAgICApO1xuICAgICAgd2luc3Rvbi5kZWJ1ZygnKFN0cmlwZSkgY3VzdG9tZXIgZnJvbSBzdHJpcGUgQVBJOiAnLCBjdXN0b21lcilcblxuICAgICAgY29uc3QgcGF5bWVudE1ldGhvZHMgPSBhd2FpdCBzdHJpcGUucGF5bWVudE1ldGhvZHMubGlzdCh7XG4gICAgICAgIGN1c3RvbWVyOiBjdXN0b21lcmlkLFxuICAgICAgICB0eXBlOiAnY2FyZCcsXG4gICAgICB9KTtcbiAgICAgIGN1c3RvbWVyWydwYXltZW50TWV0aG9kcyddID0gcGF5bWVudE1ldGhvZHM7XG4gICAgICB3aW5zdG9uLmRlYnVnKCcoU3RyaXBlKSBjdXN0b21lciArIHBheW1lbnRNZXRob2RzOiAnLCBzdWJzY3JpcHRpb24pXG4gICAgICByZXMuanNvbihjdXN0b21lcilcbiAgICB9IGVsc2Uge1xuICAgICAgd2luc3Rvbi53YXJuKCcoU3RyaXBlKSBubyBjaGVja291dCBzdWJzY3JpcHRpb24gZm91bmQgZm9yIHByb2plY3Q6ICcsIHByb2plY3RpZCk7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDQpLnNlbmQoeyBzdWNjZXNzOiBmYWxzZSwgbXNnOiAnTm8gc3Vic2NyaXB0aW9uIHBheW1lbnQgZm91bmQgZm9yIHRoaXMgcHJvamVjdC4nIH0pO1xuICAgIH1cbiAgfSlcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBVcGRhdGVkIGN1c3RvbWVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5yb3V0ZXIucG9zdCgnL2N1c3RvbWVycy86Y3VzdG9tZXJpZCcsIFtwYXNzcG9ydC5hdXRoZW50aWNhdGUoWydiYXNpYycsICdqd3QnXSwgeyBzZXNzaW9uOiBmYWxzZSB9KSwgdmFsaWR0b2tlbl0sIGFzeW5jIGZ1bmN0aW9uIChyZXEsIHJlcykge1xuICB2YXIgY3VzdG9tZXJpZCA9IHJlcS5wYXJhbXMuY3VzdG9tZXJpZDtcbiAgd2luc3Rvbi5kZWJ1ZygnKFN0cmlwZSkgY3VzdG9tZXJpZDogJywgY3VzdG9tZXJpZCk7XG4gIHdpbnN0b24uZGVidWcoJyhTdHJpcGUpIGNjIGZyb20gYm9keTogJywgcmVxLmJvZHkpO1xuXG4gIGNvbnN0IHN0cmlwZSA9IHJlcXVpcmUoXCJzdHJpcGVcIikoYXBpU2VjcmV0S2V5KTtcblxuICBsZXQgcGF5bWVudE1ldGhvZDtcbiAgdHJ5IHtcbiAgICBwYXltZW50TWV0aG9kID0gYXdhaXQgc3RyaXBlLnBheW1lbnRNZXRob2RzLmNyZWF0ZSh7XG4gICAgICB0eXBlOiAnY2FyZCcsXG4gICAgICBjYXJkOiB7XG4gICAgICAgIG51bWJlcjogcmVxLmJvZHkuY3JlZGl0X2NhcmRfbnVtLFxuICAgICAgICBleHBfbW9udGg6IHJlcS5ib2R5LmV4cGlyYXRpb25fZGF0ZV9tb250aCxcbiAgICAgICAgZXhwX3llYXI6IHJlcS5ib2R5LmV4cGlyYXRpb25fZGF0ZV95ZWFyLFxuICAgICAgICBjdmM6IHJlcS5ib2R5LmNyZWRpdF9jYXJkX2N2YyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB3aW5zdG9uLmVycm9yKCcoU3RyaXBlKSBFcnJvcjogcGF5bWVudE1ldGhvZCBjcmVhdGUgJywgZSlcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDIpLnNlbmQoeyBzdWNjZXNzOiBmYWxzZSwgbXNnOiBlIH0pXG5cbiAgfVxuICB3aW5zdG9uLmRlYnVnKCcoU3RyaXBlKSBwYXltZW50TWV0aG9kOiAnLCBwYXltZW50TWV0aG9kKVxuXG4gIHRyeSB7XG4gICAgY29uc3QgX3BheW1lbnRNZXRob2QgPSBhd2FpdCBzdHJpcGUucGF5bWVudE1ldGhvZHMuYXR0YWNoKFxuICAgICAgcGF5bWVudE1ldGhvZC5pZCxcbiAgICAgIHsgY3VzdG9tZXI6IGN1c3RvbWVyaWQgfVxuICAgICk7XG5cbiAgICB3aW5zdG9uLmRlYnVnKCcoU3RyaXBlKSBwYXltZW50TWV0aG9kIGF0dGFjaGVkOiAnLCBfcGF5bWVudE1ldGhvZClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHdpbnN0b24uZXJyb3IoJyhTdHJpcGUpIEVycm9yOiBwYXltZW50TWV0aG9kIGF0dGFjaGVkICcsIGUpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAxKS5zZW5kKHsgc3VjY2VzczogZmFsc2UsIG1zZzogZSB9KVxuICB9XG5cbiAgY29uc3QgX2N1c3RvbWVyID0gYXdhaXQgc3RyaXBlLmN1c3RvbWVycy51cGRhdGUoXG4gICAgY3VzdG9tZXJpZCxcbiAgICB7XG4gICAgICBpbnZvaWNlX3NldHRpbmdzOiB7IGRlZmF1bHRfcGF5bWVudF9tZXRob2Q6IHBheW1lbnRNZXRob2QuaWQgfVxuICAgIH0pO1xuICByZXMuanNvbihfY3VzdG9tZXIpO1xufSk7XG5cblxucm91dGVyLmdldCgnL3BheW1lbnRfbWV0aG9kcy86Y3VzdG9tZXJpZCcsIFtwYXNzcG9ydC5hdXRoZW50aWNhdGUoWydiYXNpYycsICdqd3QnXSwgeyBzZXNzaW9uOiBmYWxzZSB9KSwgdmFsaWR0b2tlbl0sIGFzeW5jIGZ1bmN0aW9uIChyZXEsIHJlcykge1xuICB3aW5zdG9uLmluZm8oJyhTdHJpcGUpIGdldCBQYXltZW50TWV0aG9kcyBsaXN0OiAnLCByZXEucGFyYW1zKVxuICB2YXIgY3VzdG9tZXJfaWQgPSByZXEucGFyYW1zLmN1c3RvbWVyaWQ7XG4gIHdpbnN0b24uZGVidWcoJyhTdHJpcGUpIGN1c3RvbWVyX2lkOiAnLCBjdXN0b21lcl9pZClcbiAgY29uc3Qgc3RyaXBlID0gcmVxdWlyZShcInN0cmlwZVwiKShhcGlTZWNyZXRLZXkpO1xuXG4gIGNvbnN0IGN1c3RvbWVyID0gYXdhaXQgc3RyaXBlLmN1c3RvbWVycy5yZXRyaWV2ZShcbiAgICBjdXN0b21lcl9pZFxuICApO1xuXG4gIGNvbnN0IGRlZmF1bHRfcGF5bWVudF9tZXRob2RfaWQgPSBjdXN0b21lci5pbnZvaWNlX3NldHRpbmdzLmRlZmF1bHRfcGF5bWVudF9tZXRob2RcbiAgbGV0IHBheW1lbnRNZXRob2RzO1xuICB0cnkge1xuICAgIHBheW1lbnRNZXRob2RzID0gYXdhaXQgc3RyaXBlLnBheW1lbnRNZXRob2RzLmxpc3Qoe1xuICAgICAgY3VzdG9tZXI6IGN1c3RvbWVyX2lkLFxuICAgICAgdHlwZTogJ2NhcmQnLFxuICAgIH0pO1xuICAgIHdpbnN0b24uZGVidWcoJyhTdHJpcGUpIHBheW1lbnRNZXRob2RzOiAnLCBwYXltZW50TWV0aG9kcylcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiByZXMuc3RhdHVzKDUwMSkuc2VuZCh7IHN1Y2Nlc3M6IGZhbHNlLCBtc2c6IGUgfSlcbiAgfVxuXG4gIHdpbnN0b24uZGVidWcoJyhTdHJpcGUpIGRlZmF1bHRfcGF5bWVudF9tZXRob2RfaWQ6ICcsIGRlZmF1bHRfcGF5bWVudF9tZXRob2RfaWQpXG4gIHBheW1lbnRNZXRob2RzLmRhdGEuZm9yRWFjaChwYXltZW50TWV0aG9kID0+IHtcbiAgICBpZiAocGF5bWVudE1ldGhvZC5pZCAhPT0gZGVmYXVsdF9wYXltZW50X21ldGhvZF9pZCkge1xuICAgICAgd2luc3Rvbi5kZWJ1ZygnKFN0cmlwZSkgcGF5bWVudE1ldGhvZC5pZDogJywgcGF5bWVudE1ldGhvZC5pZClcbiAgICAgIGRldGFjaFBheW1lbnRGdW5jKHBheW1lbnRNZXRob2QuaWQsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgd2luc3Rvbi5pbmZvKCcoU3RyaXBlKSBkZXRhY2hQYXltZW50RnVuYyByZXN1bHQ6ICcsIHJlc3VsdClcbiAgICAgIH0pXG4gICAgfVxuICB9KTtcbiAgcmVzLmpzb24ocGF5bWVudE1ldGhvZHMpXG59KVxuXG5hc3luYyBmdW5jdGlvbiBkZXRhY2hQYXltZW50RnVuYyhwYXltZW50TWV0aG9kaWQsIGNhbGxiYWNrKSB7XG4gIHdpbnN0b24uZGVidWcoJyhTdHJpcGUpIHBheW1lbnRNZXRob2RpZDogJywgcGF5bWVudE1ldGhvZGlkKVxuICBjb25zdCBzdHJpcGUgPSByZXF1aXJlKFwic3RyaXBlXCIpKGFwaVNlY3JldEtleSk7XG4gIGxldCBwYXltZW50TWV0aG9kO1xuICB0cnkge1xuICAgIHBheW1lbnRNZXRob2QgPSBhd2FpdCBzdHJpcGUucGF5bWVudE1ldGhvZHMuZGV0YWNoKFxuICAgICAgcGF5bWVudE1ldGhvZGlkXG4gICAgKTtcbiAgICBjYWxsYmFjayhwYXltZW50TWV0aG9kKVxuICB9IGNhdGNoIChlKSB7XG4gICAgY2FsbGJhY2soZSlcbiAgfVxufVxuXG5cblxuLy8gY3VybCAtWCBQT1NUIC11IGFuZHJlYS5sZW9AZjIxLml0OjEyMzQ1NiAtSCAnQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24nIC1kICd7XCJ0eXBlXCI6XCJwYXltZW50X2ludGVudC5zdWNjZWVkZWRcIn0nICBodHRwOi8vbG9jYWxob3N0OjMwMDAvbW9kdWxlcy9wYXltZW50cy9zdHJpcGUvd2ViaG9va1xuXG4vLyByb3V0ZXIucG9zdCgnL3dlYmhvb2snLCBmdW5jdGlvbihyZXF1ZXN0LCByZXNwb25zZSkge1xuLy8gICB3aW5zdG9uLmluZm8oJ3N0cmlwZSB3ZWJob29rJyk7XG5cbi8vIC8vIE1hdGNoIHRoZSByYXcgYm9keSB0byBjb250ZW50IHR5cGUgYXBwbGljYXRpb24vanNvblxuLy8gLy8gYXBwLnBvc3QoJycsIGJvZHlQYXJzZXIucmF3KHt0eXBlOiAnYXBwbGljYXRpb24vanNvbid9KSwgKHJlcXVlc3QsIHJlc3BvbnNlKSA9PiB7XG4vLyAgICAgbGV0IGV2ZW50ID0gcmVxdWVzdC5ib2R5O1xuLy8gICAgIHdpbnN0b24uaW5mbygnZXZlbnQnLGV2ZW50KTsgIFxuXG4vLyAgICAgLy8gSGFuZGxlIHRoZSBldmVudFxuLy8gICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuLy8gICAgICAgY2FzZSAncGF5bWVudF9pbnRlbnQuc3VjY2VlZGVkJzpcbi8vICAgICAgICAgY29uc3QgcGF5bWVudEludGVudCA9IGV2ZW50LmRhdGEub2JqZWN0O1xuLy8gICAgICAgICBoYW5kbGVQYXltZW50SW50ZW50U3VjY2VlZGVkKHBheW1lbnRJbnRlbnQpO1xuLy8gICAgICAgICBicmVhaztcbi8vICAgICAgIGNhc2UgJ3BheW1lbnRfbWV0aG9kLmF0dGFjaGVkJzpcbi8vICAgICAgICAgY29uc3QgcGF5bWVudE1ldGhvZCA9IGV2ZW50LmRhdGEub2JqZWN0O1xuLy8gICAgICAgICBoYW5kbGVQYXltZW50TWV0aG9kQXR0YWNoZWQocGF5bWVudE1ldGhvZCk7XG4vLyAgICAgICAgIGJyZWFrO1xuLy8gICAgICAgLy8gLi4uIGhhbmRsZSBvdGhlciBldmVudCB0eXBlc1xuLy8gICAgICAgZGVmYXVsdDpcbi8vICAgICAgICAgLy8gVW5leHBlY3RlZCBldmVudCB0eXBlXG4vLyAgICAgICAgIHJldHVybiByZXNwb25zZS5zdGF0dXMoNDAwKS5lbmQoKTtcbi8vICAgICB9XG5cbi8vICAgICAvLyBSZXR1cm4gYSByZXNwb25zZSB0byBhY2tub3dsZWRnZSByZWNlaXB0IG9mIHRoZSBldmVudFxuLy8gICAgIHJlc3BvbnNlLmpzb24oe3JlY2VpdmVkOiB0cnVlfSk7XG4vLyB9KTtcblxuXG5cblxubW9kdWxlLmV4cG9ydHMgPSByb3V0ZXI7Il0sImZpbGUiOiJwYXltZW50cy9zdHJpcGUvaW5kZXguanMifQ==
|
package/routes/answered.js
CHANGED
|
@@ -3,6 +3,7 @@ const router = express.Router();
|
|
|
3
3
|
const { Namespace, AnsweredQuestion } = require('../models/kb_setting');
|
|
4
4
|
const winston = require('../config/winston');
|
|
5
5
|
var fastCsv = require('fast-csv');
|
|
6
|
+
const kbQuestionService = require('../services/kbQuestionService');
|
|
6
7
|
|
|
7
8
|
// Add a new unanswerd question
|
|
8
9
|
router.post('/', async (req, res) => {
|
|
@@ -11,7 +12,7 @@ router.post('/', async (req, res) => {
|
|
|
11
12
|
const data = req.body;
|
|
12
13
|
const id_project = req.projectid;
|
|
13
14
|
|
|
14
|
-
const savedQuestion = await
|
|
15
|
+
const savedQuestion = await kbQuestionService.createAnsweredQuestion(
|
|
15
16
|
id_project,
|
|
16
17
|
data
|
|
17
18
|
);
|