@bitgo/sdk-coin-ada 4.20.8 → 4.21.0

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.
@@ -312,5 +312,67 @@ describe('ADA Token Operations', async () => {
312
312
  txBuilder.isTokenTransaction();
313
313
  await txBuilder.build().should.not.be.rejected();
314
314
  });
315
+ it(`should build a sponsored token transaction where fee address sponsors min ADA for receiver`, async () => {
316
+ const feeAddress = 'addr_test1qz2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer3jcu5d8ps7zex2k2xt3uqxgjqnnj83ws8lhrn648jjxtwq2ytjqp';
317
+ const quantity = '20';
318
+ const senderInputBalance = 5000000;
319
+ const feeAddressInputBalance = 20000000; // Fee address has enough ADA to sponsor
320
+ const totalAssetList = {
321
+ [fingerprint]: {
322
+ quantity: '100',
323
+ policy_id: policyId,
324
+ asset_name: asciiEncodedName,
325
+ },
326
+ };
327
+ const txBuilder = factory.getTransferBuilder();
328
+ // Sender input (has tokens)
329
+ txBuilder.input({
330
+ transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba21',
331
+ transaction_index: 1,
332
+ });
333
+ // Fee address input (sponsors fees and min ADA)
334
+ txBuilder.input({
335
+ transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba22',
336
+ transaction_index: 0,
337
+ });
338
+ txBuilder.output({
339
+ address: receiverAddress,
340
+ amount: '0', // Set ADA amount to 0 for token transfer (min ADA is handled by fee address)
341
+ multiAssets: {
342
+ asset_name: asciiEncodedName,
343
+ policy_id: policyId,
344
+ quantity,
345
+ fingerprint,
346
+ },
347
+ });
348
+ txBuilder.changeAddress(senderAddress, senderInputBalance.toString(), totalAssetList);
349
+ txBuilder.sponsorshipInfo({
350
+ feeAddress: feeAddress,
351
+ feeAddressInputBalance: feeAddressInputBalance.toString(),
352
+ });
353
+ txBuilder.ttl(800000000);
354
+ txBuilder.isTokenTransaction();
355
+ const tx = (await txBuilder.build());
356
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
357
+ const txData = tx.toJson();
358
+ txData.inputs.length.should.equal(2);
359
+ txData.outputs.length.should.equal(4);
360
+ // Validate receiver output - min ADA should be sponsored by fee address
361
+ const receiverOutput = txData.outputs.filter((output) => output.address === receiverAddress);
362
+ receiverOutput.length.should.equal(1);
363
+ receiverOutput[0].amount.should.equal('1500000'); // Minimum ADA for asset output (sponsored by fee address)
364
+ receiverOutput[0].multiAssets
365
+ .get_asset(policyScriptHash, CardanoWasm.AssetName.new(Buffer.from(asciiEncodedName, 'hex')))
366
+ .to_str()
367
+ .should.equal(quantity);
368
+ // Validate sender change output - should have full sender balance (tokens only, no ADA deduction for receiver)
369
+ const senderChangeOutput = txData.outputs.filter((output) => output.address === senderAddress);
370
+ senderChangeOutput.length.should.be.equal(2);
371
+ // Validate fee address change output - should have remaining ADA after fees and min ADA for receiver
372
+ const feeAddressChangeOutput = txData.outputs.filter((output) => output.address === feeAddress);
373
+ feeAddressChangeOutput.length.should.equal(1);
374
+ // Fee address change should not have any tokens
375
+ should_1.default.not.exist(feeAddressChangeOutput[0].multiAssets);
376
+ });
315
377
  });
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5XaXRoZHJhd2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3Rva2VuV2l0aGRyYXdhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FBa0Q7QUFDbEQsdURBQXlDO0FBQ3pDLG1DQUFzRDtBQUN0RCw0Q0FBdUM7QUFDdkMsc0ZBQXdFO0FBR3hFLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVqRSxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7SUFDOUQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO0lBRTVELE1BQU0sUUFBUSxHQUFHLDBEQUEwRCxDQUFDO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkUsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDO0lBQy9CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUNyQixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxNQUFNLFdBQVcsR0FBRyw4Q0FBOEMsQ0FBQztJQUVuRSxNQUFNLG1CQUFtQixHQUFHLDBEQUEwRCxDQUFDO0lBQ3ZGLE1BQU0sMkJBQTJCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN6RixNQUFNLGVBQWUs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QVE7Z0JBQ25CLFFBQVE7Z0JBQ1IsV0FBVzthQUNaO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzlFLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekIsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFL0IsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCAqIGFzIENhcmRhbm9XYXNtIGZyb20gJ0BlbXVyZ28vY2FyZGFuby1zZXJpYWxpemF0aW9uLWxpYi1ub2RlanMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJztcblxuZGVzY3JpYmUoJ0FEQSBUb2tlbiBPcGVyYXRpb25zJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YWRhJykpO1xuXG4gIGNvbnN0IHJlY2VpdmVyQWRkcmVzcyA9IHRlc3REYXRhLnJhd1R4Lm91dHB1dEFkZHJlc3MyLmFkZHJlc3M7XG4gIGNvbnN0IHNlbmRlckFkZHJlc3MgPSB0ZXN0RGF0YS5yYXdUeC5vdXRwdXRBZGRyZXNzMS5hZGRyZXNzO1xuXG4gIGNvbnN0IHBvbGljeUlkID0gJ2UxNmMyZGM4YWU5MzdlOGQzNzkwYzdmZDcxNjhkN2I5OTQ2MjFiYTE0Y2ExMTQxNWYzOWZlZDcyJztcbiAgY29uc3QgcG9saWN5U2NyaXB0SGFzaCA9IENhcmRhbm9XYXNtLlNjcmlwdEhhc2guZnJvbV9oZXgocG9saWN5SWQpO1xuICBjb25zdCBhc3NldE5hbWUgPSAndGFkYTp3YXRlcic7XG4gIGNvbnN0IG5hbWUgPSAnV0FURVInO1xuICBjb25zdCBhc2NpaUVuY29kZWROYW1lID0gQnVmZmVyLmZyb20obmFtZSwgJ2FzY2lpJykudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCBmaW5nZXJwcmludCA9ICdhc3NldDFuNjl4ZjYwZDA3NjB4dm44djJmZmQ1ZnJ2c20wY2wycjhoZmpmNic7XG5cbiAgY29uc3QgdW5zdXBwb3J0ZWRQb2xpY3lJZCA9ICcyNzljOTA5ZjM0OGU1MzNkYTU4MDg4OThmODdmOWExNGJiMmMzZGZiYmFjY2NkNjMxZDkyN2EzZic7XG4gIGNvbnN0IHVuc3VwcG9ydGVkUG9saWN5U2NyaXB0SGFzaCA9IENhcmRhbm9XYXNtLlNjcmlwdEhhc2guZnJvbV9oZXgodW5zdXBwb3J0ZWRQb2xpY3lJZCk7XG4gIGNvbnN0IHVuc3VwcG9ydGVkTmFtZSA9ICdCSVRHTyc7XG4gIGNvbnN0IHVuc3VwcG9ydGVkQXNjaWlFbmNvZGVkTmFtZSA9IEJ1ZmZlci5mcm9tKHVuc3VwcG9ydGVkTmFtZSwgJ2FzY2lpJykudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCB1bnN1cHBvcnRlZEZpbmdlcnByaW50ID0gJ2Fzc2V0MW04aDBnazdmNng1ajVxZzB4NW00cTVmNWo1cWcweDVtNHE1ZjVqJztcblxuICBpdChgc2hvdWxkIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCB0b2tlbiAke2Fzc2V0TmFtZX0gLSBhZGEgKyAke2Fzc2V0TmFtZX1gLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcXVhbnRpdHkgPSAnMjAnO1xuICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGV4cGVjdGVkQ2hhbmdlQWRhID0gKFxuICAgICAgdG90YWxJbnB1dCAtXG4gICAgICAxNTAwMDAwIC8qIG1pbiBhZGEgZm9yIGNoYW5nZSB0b2tlbiB1dHhvICovIC1cbiAgICAgIDE1MDAwMDAgLyogbWluIGFkYSBmb3IgcmVjaXBpZW50IHRva2VuIHV0eG8qLyAtXG4gICAgICAxNzM1OTdcbiAgICApIC8qIGZlZSAqL1xuICAgICAgLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZXhwZWN0ZWRDaGFuZ2VUb2tlbiA9ICc4MCc7XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgIGFtb3VudDogJzAnLCAvLyBTZXQgQURBIGFtb3VudCB0byAwIGZvciB0b2tlbiB0cmFuc2ZlciAobWluIEFEQSBpcyBoYW5kbGVkIGluIHNkayBidWlsZClcbiAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIHF1YW50aXR5LFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCB0b3RhbElucHV0LnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcblxuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG5cbiAgICAvLyBDaGVjayBvdXRwdXRzIChzaG91bGQgaW5jbHVkZSBtdWx0aS1hc3NldCBhbmQgcmVndWxhciBjaGFuZ2UpXG4gICAgdHhEYXRhLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICB0eERhdGEuaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAvLyBPbmUgb3V0cHV0IHNob3VsZCBoYXZlIHRoZSBtdWx0aS1hc3NldCBjaGFuZ2UgYW5kIHRoZSBvdGhlciBmb3IgdGhlIHRyYW5zZmVyXG4gICAgY29uc3QgYXNzZXRPdXRwdXQgPSB0eERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0Lm11bHRpQXNzZXRzICE9PSB1bmRlZmluZWQpO1xuICAgIGFzc2V0T3V0cHV0IS5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuXG4gICAgLy8gVmVyaWZ5IGlucHV0cyBhbmQgb3V0cHV0c1xuICAgIGNvbnN0IGlucHV0ID0gdHhEYXRhLmlucHV0c1swXTtcbiAgICBpbnB1dC50cmFuc2FjdGlvbl9pZC5zaG91bGQuZXF1YWwoJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnKTtcbiAgICBpbnB1dC50cmFuc2FjdGlvbl9pbmRleC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAvLyBWYWxpZGF0ZSByZWNlaXZlciBvdXRwdXRcbiAgICBjb25zdCByZWNlaXZlck91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gcmVjZWl2ZXJBZGRyZXNzKTtcbiAgICByZWNlaXZlck91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHJlY2VpdmVyT3V0cHV0WzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTsgLy8gTWluaW11bSBBREEgZm9yIGFzc2V0IG91dHB1dFxuICAgIChyZWNlaXZlck91dHB1dFswXS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgIC5nZXRfYXNzZXQocG9saWN5U2NyaXB0SGFzaCwgQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc2NpaUVuY29kZWROYW1lLCAnaGV4JykpKVxuICAgICAgLnRvX3N0cigpXG4gICAgICAuc2hvdWxkLmVxdWFsKHF1YW50aXR5KTtcblxuICAgIC8vIFZhbGlkYXRlIGNoYW5nZSBvdXRwdXRzIChvbmUgd2l0aCBhc3NldCBhbmQgb25lIHdpdGhvdXQpXG4gICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSBzZW5kZXJBZGRyZXNzKTtcbiAgICBjaGFuZ2VPdXRwdXQubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICBjb25zdCBjaGFuZ2VXaXRoQXNzZXQgPSBjaGFuZ2VPdXRwdXQuZmluZCgob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCk7XG4gICAgc2hvdWxkLmV4aXN0KGNoYW5nZVdpdGhBc3NldCk7XG4gICAgY2hhbmdlV2l0aEFzc2V0IS5hbW91bnQuc2hvdWxkLmVxdWFsKCcxNTAwMDAwJyk7IC8vIE1pbmltdW0gQURBIGZvciBhc3NldCBvdXRwdXRcbiAgICAoY2hhbmdlV2l0aEFzc2V0IS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgIC5nZXRfYXNzZXQocG9saWN5U2NyaXB0SGFzaCwgQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc2NpaUVuY29kZWROYW1lLCAnaGV4JykpKVxuICAgICAgLnRvX3N0cigpXG4gICAgICAuc2hvdWxkLmVxdWFsKGV4cGVjdGVkQ2hhbmdlVG9rZW4pO1xuXG4gICAgY29uc3QgY2hhbmdlV2l0aG91dEFzc2V0ID0gY2hhbmdlT3V0cHV0LmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lm11bHRpQXNzZXRzID09PSB1bmRlZmluZWQpO1xuICAgIHNob3VsZC5leGlzdChjaGFuZ2VXaXRob3V0QXNzZXQpO1xuICAgIGNoYW5nZVdpdGhvdXRBc3NldCEuYW1vdW50LnNob3VsZC5lcXVhbChleHBlY3RlZENoYW5nZUFkYSk7IC8vIFJlbWFpbmluZyBBREEgYWZ0ZXIgZmVlcyBhbmQgbWluIEFEQXNcbiAgfSk7XG5cbiAgaXQoYHNob3VsZCBidWlsZCBhIHRyYW5zYWN0aW9uIHdpdGggdG9rZW4gJHthc3NldE5hbWV9IC0gYWRhICsgJHthc3NldE5hbWV9ICsgdW5zdXBwb3J0ZWQgdG9rZW5gLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcXVhbnRpdHkgPSAnMjAnO1xuICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICAgIFt1bnN1cHBvcnRlZEZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMDAwJyxcbiAgICAgICAgcG9saWN5X2lkOiB1bnN1cHBvcnRlZFBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiB1bnN1cHBvcnRlZEFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgZXhwZWN0ZWRDaGFuZ2VBZGEgPSAoXG4gICAgICB0b3RhbElucHV0IC1cbiAgICAgIDE1MDAwMDAgLyogbWluIGFkYSBmb3IgY2hhbmdlIHRva2VuIHV0eG8gKi8gLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciByZWNpcGllbnQgdG9rZW4gdXR4byovIC1cbiAgICAgIDE1MDAwMDAgLyogbWluIGFkYSBmb3IgdW5zdXBwb3J0ZWQgdG9rZW4gY2hhbmdlIHV0eG8gKi8gLVxuICAgICAgMTc5ODg5XG4gICAgKSAvKiBmZWUgKi9cbiAgICAgIC50b1N0cmluZygpO1xuICAgIGNvbnN0IGV4cGVjdGVkQ2hhbmdlVG9rZW4gPSAnODAnO1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjInLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgIGFtb3VudDogJzAnLCAvLyBTZXQgQURBIGFtb3VudCB0byAwIGZvciB0b2tlbiB0cmFuc2ZlciAobWluIEFEQSBpcyBoYW5kbGVkIGluIHNkayBidWlsZClcbiAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIHF1YW50aXR5LFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCB0b3RhbElucHV0LnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcblxuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG5cbiAgICAvLyBDaGVjayBvdXRwdXRzIChzaG91bGQgaW5jbHVkZSBtdWx0aS1hc3NldCBhbmQgcmVndWxhciBjaGFuZ2UpXG4gICAgdHhEYXRhLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCg0KTtcbiAgICB0eERhdGEuaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAvLyBPbmUgb3V0cHV0IHNob3VsZCBoYXZlIHRoZSBtdWx0aS1hc3NldCBjaGFuZ2UgYW5kIHRoZSBvdGhlciBmb3IgdGhlIHRyYW5zZmVyXG4gICAgY29uc3QgYXNzZXRPdXRwdXQgPSB0eERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0Lm11bHRpQXNzZXRzICE9PSB1bmRlZmluZWQpO1xuICAgIGFzc2V0T3V0cHV0IS5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuXG4gICAgLy8gVmVyaWZ5IGlucHV0cyBhbmQgb3V0cHV0c1xuICAgIHR4RGF0YS5pbnB1dHNbMF0udHJhbnNhY3Rpb25faWQuc2hvdWxkLmVxdWFsKCczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyk7XG4gICAgdHhEYXRhLmlucHV0c1swXS50cmFuc2FjdGlvbl9pbmRleC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICB0eERhdGEuaW5wdXRzWzFdLnRyYW5zYWN0aW9uX2lkLnNob3VsZC5lcXVhbCgnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMicpO1xuICAgIHR4RGF0YS5pbnB1dHNbMV0udHJhbnNhY3Rpb25faW5kZXguc2hvdWxkLmVxdWFsKDEpO1xuXG4gICAgLy8gVmFsaWRhdGUgcmVjZWl2ZXIgb3V0cHV0XG4gICAgY29uc3QgcmVjZWl2ZXJPdXRwdXQgPSB0eERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmFkZHJlc3MgPT09IHJlY2VpdmVyQWRkcmVzcyk7XG4gICAgcmVjZWl2ZXJPdXRwdXQubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICByZWNlaXZlck91dHB1dFswXS5hbW91bnQuc2hvdWxkLmVxdWFsKCcxNTAwMDAwJyk7IC8vIE1pbmltdW0gQURBIGZvciBhc3NldCBvdXRwdXRcbiAgICAocmVjZWl2ZXJPdXRwdXRbMF0ubXVsdGlBc3NldHMhIGFzIENhcmRhbm9XYXNtLk11bHRpQXNzZXQpXG4gICAgICAuZ2V0X2Fzc2V0KHBvbGljeVNjcmlwdEhhc2gsIENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNjaWlFbmNvZGVkTmFtZSwgJ2hleCcpKSlcbiAgICAgIC50b19zdHIoKVxuICAgICAgLnNob3VsZC5lcXVhbChxdWFudGl0eSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBjaGFuZ2Ugb3V0cHV0cyAob25lIHdpdGggc3VwcG9ydGVkIHRva2VuLCBvbmUgd2l0aCB1bnN1cHBvcnRlZCB0b2tlbiBhbmQgb25lIGZvciBwdXJlIGFkYSlcbiAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSB0eERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmFkZHJlc3MgPT09IHNlbmRlckFkZHJlc3MpO1xuICAgIGNoYW5nZU91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuXG4gICAgY29uc3QgY2hhbmdlV2l0aEFzc2V0ID0gY2hhbmdlT3V0cHV0LmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCk7XG4gICAgY2hhbmdlV2l0aEFzc2V0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG4gICAgbGV0IHRva2VucyA9IDA7XG4gICAgY2hhbmdlV2l0aEFzc2V0LmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgb3V0cHV0IS5hbW91bnQuc2hvdWxkLmVxdWFsKCcxNTAwMDAwJyk7IC8vIE1pbmltdW0gQURBIGZvciBhc3NldCBvdXRwdXRcbiAgICAgIGNvbnN0IHN1cHBvcnRlZFRva2VuQ2hhbmdlUXR5ID0gKG91dHB1dCEubXVsdGlBc3NldHMhIGFzIENhcmRhbm9XYXNtLk11bHRpQXNzZXQpXG4gICAgICAgIC5nZXRfYXNzZXQocG9saWN5U2NyaXB0SGFzaCwgQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc2NpaUVuY29kZWROYW1lLCAnaGV4JykpKVxuICAgICAgICAudG9fc3RyKCk7XG4gICAgICBjb25zdCB1bnN1cHBvcnRlZFRva2VuQ2hhbmdlUXR5ID0gKG91dHB1dCEubXVsdGlBc3NldHMhIGFzIENhcmRhbm9XYXNtLk11bHRpQXNzZXQpXG4gICAgICAgIC5nZXRfYXNzZXQoXG4gICAgICAgICAgdW5zdXBwb3J0ZWRQb2xpY3lTY3JpcHRIYXNoLFxuICAgICAgICAgIENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20odW5zdXBwb3J0ZWRBc2NpaUVuY29kZWROYW1lLCAnaGV4JykpXG4gICAgICAgIClcbiAgICAgICAgLnRvX3N0cigpO1xuICAgICAgaWYgKHN1cHBvcnRlZFRva2VuQ2hhbmdlUXR5ICE9PSAnMCcpIHtcbiAgICAgICAgc3VwcG9ydGVkVG9rZW5DaGFuZ2VRdHkuc2hvdWxkLmVxdWFsKGV4cGVjdGVkQ2hhbmdlVG9rZW4pO1xuICAgICAgICB0b2tlbnMrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVuc3VwcG9ydGVkVG9rZW5DaGFuZ2VRdHkhLnNob3VsZC5lcXVhbCgnMTAwMDAnKTtcbiAgICAgICAgdG9rZW5zKys7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdG9rZW5zLnNob3VsZC5lcXVhbCgyKTtcblxuICAgIGNvbnN0IGNoYW5nZVdpdGhvdXRBc3NldCA9IGNoYW5nZU91dHB1dC5maW5kKChvdXRwdXQpID0+IG91dHB1dC5tdWx0aUFzc2V0cyA9PT0gdW5kZWZpbmVkKTtcbiAgICBzaG91bGQuZXhpc3QoY2hhbmdlV2l0aG91dEFzc2V0KTtcbiAgICBjaGFuZ2VXaXRob3V0QXNzZXQhLmFtb3VudC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRDaGFuZ2VBZGEpOyAvLyBSZW1haW5pbmcgQURBIGFmdGVyIGZlZXMgYW5kIG1pbiBBREFzXG4gIH0pO1xuXG4gIGl0KGBzaG91bGQgZmFpbCB0byBidWlsZCBhIHRyYW5zYWN0aW9uIHdpdGggJHthc3NldE5hbWV9IHRva2VuIGFuZCBpbnN1ZmZpY2llbnQgbWluaW11bSBBREFgLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcXVhbnRpdHkgPSAnMjAnO1xuICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgIGFtb3VudDogJzAnLCAvLyBTZXQgQURBIGFtb3VudCB0byAwIGZvciB0b2tlbiB0cmFuc2ZlciAobWluIEFEQSBpcyBoYW5kbGVkIGluIHNkayBidWlsZClcbiAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIHF1YW50aXR5LFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCB0b3RhbElucHV0LnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuXG4gICAgYXdhaXQgdHhCdWlsZGVyXG4gICAgICAuYnVpbGQoKVxuICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoXG4gICAgICAgICdJbnN1ZmZpY2llbnQgZnVuZHM6IG5lZWQgYSBtaW5pbXVtIG9mIDE1MDAwMDAgbG92ZWxhY2UgcGVyIG91dHB1dCB0byBjb25zdHJ1Y3QgdG9rZW4gdHJhbnNhY3Rpb25zJ1xuICAgICAgKTtcbiAgfSk7XG5cbiAgaXQoYHNob3VsZCBmYWlsIHRvIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCAke2Fzc2V0TmFtZX0gYW5kIGluc3VmZmljaWVudCB0b2tlbiBxdHlgLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcXVhbnRpdHkgPSAnMjAnO1xuICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICc1JyxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdJbnN1ZmZpY2llbnQgcXR5OiBub3QgZW5vdWdoIHRva2VuIHF0eSB0byBjb3ZlciByZWNlaXZlciBvdXRwdXQnKTtcbiAgfSk7XG5cbiAgaXQoYHNob3VsZCBidWlsZCBhIHRyYW5zYWN0aW9uIHdpdGggJHthc3NldE5hbWV9IHdoZW4gdGhlIHRva2VuIHF0eSBpcyBleGFjdGx5IHRoZSBxdHkgaW4gd2l0aGRyYXdhbGAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcxJztcbiAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDA7XG4gICAgY29uc3QgdG90YWxBc3NldExpc3QgPSB7XG4gICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgIHF1YW50aXR5OiAnMScsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgIGFtb3VudDogJzAnLCAvLyBTZXQgQURBIGFtb3VudCB0byAwIGZvciB0b2tlbiB0cmFuc2ZlciAobWluIEFEQSBpcyBoYW5kbGVkIGluIHNkayBidWlsZClcbiAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIHF1YW50aXR5LFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCB0b3RhbElucHV0LnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuXG4gICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLm5vdC5iZS5yZWplY3RlZCgpO1xuICB9KTtcbn0pO1xuIl19
378
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5XaXRoZHJhd2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3Rva2VuV2l0aGRyYXdhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FBa0Q7QUFDbEQsdURBQXlDO0FBQ3pDLG1DQUFzRDtBQUN0RCw0Q0FBdUM7QUFDdkMsc0ZBQXdFO0FBR3hFLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVqRSxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7SUFDOUQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO0lBRTVELE1BQU0sUUFBUSxHQUFHLDBEQUEwRCxDQUFDO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkUsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDO0lBQy9CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUNyQixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxNQUFNLFdBQVcsR0FBRyw4Q0FBOEMsQ0FBQztJQUVuRSxNQUFNLG1CQUFtQixHQUFHLDBEQUEwRCxDQUFDO0lBQ3ZGLE1BQU0sMkJBQTJCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN6RixNQUFNLGVBQWUs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QUN0QyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQywwREFBMEQ7UUFDM0csY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQXVDO2FBQ3ZELFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDNUYsTUFBTSxFQUFFO2FBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUxQiwrR0FBK0c7UUFDL0csTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxhQUFhLENBQUMsQ0FBQztRQUMvRixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0MscUdBQXFHO1FBQ3JHLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDaEcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsZ0RBQWdEO1FBQ2hELGdCQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgQ2FyZGFub1dhc20gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuXG5kZXNjcmliZSgnQURBIFRva2VuIE9wZXJhdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhZGEnKSk7XG5cbiAgY29uc3QgcmVjZWl2ZXJBZGRyZXNzID0gdGVzdERhdGEucmF3VHgub3V0cHV0QWRkcmVzczIuYWRkcmVzcztcbiAgY29uc3Qgc2VuZGVyQWRkcmVzcyA9IHRlc3REYXRhLnJhd1R4Lm91dHB1dEFkZHJlc3MxLmFkZHJlc3M7XG5cbiAgY29uc3QgcG9saWN5SWQgPSAnZTE2YzJkYzhhZTkzN2U4ZDM3OTBjN2ZkNzE2OGQ3Yjk5NDYyMWJhMTRjYTExNDE1ZjM5ZmVkNzInO1xuICBjb25zdCBwb2xpY3lTY3JpcHRIYXNoID0gQ2FyZGFub1dhc20uU2NyaXB0SGFzaC5mcm9tX2hleChwb2xpY3lJZCk7XG4gIGNvbnN0IGFzc2V0TmFtZSA9ICd0YWRhOndhdGVyJztcbiAgY29uc3QgbmFtZSA9ICdXQVRFUic7XG4gIGNvbnN0IGFzY2lpRW5jb2RlZE5hbWUgPSBCdWZmZXIuZnJvbShuYW1lLCAnYXNjaWknKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IGZpbmdlcnByaW50ID0gJ2Fzc2V0MW42OXhmNjBkMDc2MHh2bjh2MmZmZDVmcnZzbTBjbDJyOGhmamY2JztcblxuICBjb25zdCB1bnN1cHBvcnRlZFBvbGljeUlkID0gJzI3OWM5MDlmMzQ4ZTUzM2RhNTgwODg5OGY4N2Y5YTE0YmIyYzNkZmJiYWNjY2Q2MzFkOTI3YTNmJztcbiAgY29uc3QgdW5zdXBwb3J0ZWRQb2xpY3lTY3JpcHRIYXNoID0gQ2FyZGFub1dhc20uU2NyaXB0SGFzaC5mcm9tX2hleCh1bnN1cHBvcnRlZFBvbGljeUlkKTtcbiAgY29uc3QgdW5zdXBwb3J0ZWROYW1lID0gJ0JJVEdPJztcbiAgY29uc3QgdW5zdXBwb3J0ZWRBc2NpaUVuY29kZWROYW1lID0gQnVmZmVyLmZyb20odW5zdXBwb3J0ZWROYW1lLCAnYXNjaWknKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHVuc3VwcG9ydGVkRmluZ2VycHJpbnQgPSAnYXNzZXQxbThoMGdrN2Y2eDVqNXFnMHg1bTRxNWY1ajVxZzB4NW00cTVmNWonO1xuXG4gIGl0KGBzaG91bGQgYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoIHRva2VuICR7YXNzZXROYW1lfSAtIGFkYSArICR7YXNzZXROYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgZXhwZWN0ZWRDaGFuZ2VBZGEgPSAoXG4gICAgICB0b3RhbElucHV0IC1cbiAgICAgIDE1MDAwMDAgLyogbWluIGFkYSBmb3IgY2hhbmdlIHRva2VuIHV0eG8gKi8gLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciByZWNpcGllbnQgdG9rZW4gdXR4byovIC1cbiAgICAgIDE3MzU5N1xuICAgICkgLyogZmVlICovXG4gICAgICAudG9TdHJpbmcoKTtcbiAgICBjb25zdCBleHBlY3RlZENoYW5nZVRva2VuID0gJzgwJztcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcblxuICAgIC8vIENoZWNrIG91dHB1dHMgKHNob3VsZCBpbmNsdWRlIG11bHRpLWFzc2V0IGFuZCByZWd1bGFyIGNoYW5nZSlcbiAgICB0eERhdGEub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuICAgIHR4RGF0YS5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcblxuICAgIC8vIE9uZSBvdXRwdXQgc2hvdWxkIGhhdmUgdGhlIG11bHRpLWFzc2V0IGNoYW5nZSBhbmQgdGhlIG90aGVyIGZvciB0aGUgdHJhbnNmZXJcbiAgICBjb25zdCBhc3NldE91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCk7XG4gICAgYXNzZXRPdXRwdXQhLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAvLyBWZXJpZnkgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgY29uc3QgaW5wdXQgPSB0eERhdGEuaW5wdXRzWzBdO1xuICAgIGlucHV0LnRyYW5zYWN0aW9uX2lkLnNob3VsZC5lcXVhbCgnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScpO1xuICAgIGlucHV0LnRyYW5zYWN0aW9uX2luZGV4LnNob3VsZC5lcXVhbCgxKTtcblxuICAgIC8vIFZhbGlkYXRlIHJlY2VpdmVyIG91dHB1dFxuICAgIGNvbnN0IHJlY2VpdmVyT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSByZWNlaXZlckFkZHJlc3MpO1xuICAgIHJlY2VpdmVyT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgcmVjZWl2ZXJPdXRwdXRbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTUwMDAwMCcpOyAvLyBNaW5pbXVtIEFEQSBmb3IgYXNzZXQgb3V0cHV0XG4gICAgKHJlY2VpdmVyT3V0cHV0WzBdLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAudG9fc3RyKClcbiAgICAgIC5zaG91bGQuZXF1YWwocXVhbnRpdHkpO1xuXG4gICAgLy8gVmFsaWRhdGUgY2hhbmdlIG91dHB1dHMgKG9uZSB3aXRoIGFzc2V0IGFuZCBvbmUgd2l0aG91dClcbiAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSB0eERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmFkZHJlc3MgPT09IHNlbmRlckFkZHJlc3MpO1xuICAgIGNoYW5nZU91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIGNvbnN0IGNoYW5nZVdpdGhBc3NldCA9IGNoYW5nZU91dHB1dC5maW5kKChvdXRwdXQpID0+IG91dHB1dC5tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKTtcbiAgICBzaG91bGQuZXhpc3QoY2hhbmdlV2l0aEFzc2V0KTtcbiAgICBjaGFuZ2VXaXRoQXNzZXQhLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTsgLy8gTWluaW11bSBBREEgZm9yIGFzc2V0IG91dHB1dFxuICAgIChjaGFuZ2VXaXRoQXNzZXQhLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAudG9fc3RyKClcbiAgICAgIC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRDaGFuZ2VUb2tlbik7XG5cbiAgICBjb25zdCBjaGFuZ2VXaXRob3V0QXNzZXQgPSBjaGFuZ2VPdXRwdXQuZmluZCgob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgPT09IHVuZGVmaW5lZCk7XG4gICAgc2hvdWxkLmV4aXN0KGNoYW5nZVdpdGhvdXRBc3NldCk7XG4gICAgY2hhbmdlV2l0aG91dEFzc2V0IS5hbW91bnQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkQ2hhbmdlQWRhKTsgLy8gUmVtYWluaW5nIEFEQSBhZnRlciBmZWVzIGFuZCBtaW4gQURBc1xuICB9KTtcblxuICBpdChgc2hvdWxkIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCB0b2tlbiAke2Fzc2V0TmFtZX0gLSBhZGEgKyAke2Fzc2V0TmFtZX0gKyB1bnN1cHBvcnRlZCB0b2tlbmAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgICAgW3Vuc3VwcG9ydGVkRmluZ2VycHJpbnRdOiB7XG4gICAgICAgIHF1YW50aXR5OiAnMTAwMDAnLFxuICAgICAgICBwb2xpY3lfaWQ6IHVuc3VwcG9ydGVkUG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IHVuc3VwcG9ydGVkQXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBleHBlY3RlZENoYW5nZUFkYSA9IChcbiAgICAgIHRvdGFsSW5wdXQgLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciBjaGFuZ2UgdG9rZW4gdXR4byAqLyAtXG4gICAgICAxNTAwMDAwIC8qIG1pbiBhZGEgZm9yIHJlY2lwaWVudCB0b2tlbiB1dHhvKi8gLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciB1bnN1cHBvcnRlZCB0b2tlbiBjaGFuZ2UgdXR4byAqLyAtXG4gICAgICAxNzk4ODlcbiAgICApIC8qIGZlZSAqL1xuICAgICAgLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZXhwZWN0ZWRDaGFuZ2VUb2tlbiA9ICc4MCc7XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMicsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcblxuICAgIC8vIENoZWNrIG91dHB1dHMgKHNob3VsZCBpbmNsdWRlIG11bHRpLWFzc2V0IGFuZCByZWd1bGFyIGNoYW5nZSlcbiAgICB0eERhdGEub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDQpO1xuICAgIHR4RGF0YS5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcblxuICAgIC8vIE9uZSBvdXRwdXQgc2hvdWxkIGhhdmUgdGhlIG11bHRpLWFzc2V0IGNoYW5nZSBhbmQgdGhlIG90aGVyIGZvciB0aGUgdHJhbnNmZXJcbiAgICBjb25zdCBhc3NldE91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCk7XG4gICAgYXNzZXRPdXRwdXQhLmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG5cbiAgICAvLyBWZXJpZnkgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgdHhEYXRhLmlucHV0c1swXS50cmFuc2FjdGlvbl9pZC5zaG91bGQuZXF1YWwoJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnKTtcbiAgICB0eERhdGEuaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2luZGV4LnNob3VsZC5lcXVhbCgxKTtcblxuICAgIHR4RGF0YS5pbnB1dHNbMV0udHJhbnNhY3Rpb25faWQuc2hvdWxkLmVxdWFsKCczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIyJyk7XG4gICAgdHhEYXRhLmlucHV0c1sxXS50cmFuc2FjdGlvbl9pbmRleC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAvLyBWYWxpZGF0ZSByZWNlaXZlciBvdXRwdXRcbiAgICBjb25zdCByZWNlaXZlck91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gcmVjZWl2ZXJBZGRyZXNzKTtcbiAgICByZWNlaXZlck91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHJlY2VpdmVyT3V0cHV0WzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTsgLy8gTWluaW11bSBBREEgZm9yIGFzc2V0IG91dHB1dFxuICAgIChyZWNlaXZlck91dHB1dFswXS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgIC5nZXRfYXNzZXQocG9saWN5U2NyaXB0SGFzaCwgQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc2NpaUVuY29kZWROYW1lLCAnaGV4JykpKVxuICAgICAgLnRvX3N0cigpXG4gICAgICAuc2hvdWxkLmVxdWFsKHF1YW50aXR5KTtcblxuICAgIC8vIFZhbGlkYXRlIGNoYW5nZSBvdXRwdXRzIChvbmUgd2l0aCBzdXBwb3J0ZWQgdG9rZW4sIG9uZSB3aXRoIHVuc3VwcG9ydGVkIHRva2VuIGFuZCBvbmUgZm9yIHB1cmUgYWRhKVxuICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gc2VuZGVyQWRkcmVzcyk7XG4gICAgY2hhbmdlT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG5cbiAgICBjb25zdCBjaGFuZ2VXaXRoQXNzZXQgPSBjaGFuZ2VPdXRwdXQuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKTtcbiAgICBjaGFuZ2VXaXRoQXNzZXQubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICBsZXQgdG9rZW5zID0gMDtcbiAgICBjaGFuZ2VXaXRoQXNzZXQuZm9yRWFjaCgob3V0cHV0KSA9PiB7XG4gICAgICBvdXRwdXQhLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTsgLy8gTWluaW11bSBBREEgZm9yIGFzc2V0IG91dHB1dFxuICAgICAgY29uc3Qgc3VwcG9ydGVkVG9rZW5DaGFuZ2VRdHkgPSAob3V0cHV0IS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAgIC50b19zdHIoKTtcbiAgICAgIGNvbnN0IHVuc3VwcG9ydGVkVG9rZW5DaGFuZ2VRdHkgPSAob3V0cHV0IS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgICAgLmdldF9hc3NldChcbiAgICAgICAgICB1bnN1cHBvcnRlZFBvbGljeVNjcmlwdEhhc2gsXG4gICAgICAgICAgQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbSh1bnN1cHBvcnRlZEFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSlcbiAgICAgICAgKVxuICAgICAgICAudG9fc3RyKCk7XG4gICAgICBpZiAoc3VwcG9ydGVkVG9rZW5DaGFuZ2VRdHkgIT09ICcwJykge1xuICAgICAgICBzdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eS5zaG91bGQuZXF1YWwoZXhwZWN0ZWRDaGFuZ2VUb2tlbik7XG4gICAgICAgIHRva2VucysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eSEuc2hvdWxkLmVxdWFsKCcxMDAwMCcpO1xuICAgICAgICB0b2tlbnMrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0b2tlbnMuc2hvdWxkLmVxdWFsKDIpO1xuXG4gICAgY29uc3QgY2hhbmdlV2l0aG91dEFzc2V0ID0gY2hhbmdlT3V0cHV0LmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lm11bHRpQXNzZXRzID09PSB1bmRlZmluZWQpO1xuICAgIHNob3VsZC5leGlzdChjaGFuZ2VXaXRob3V0QXNzZXQpO1xuICAgIGNoYW5nZVdpdGhvdXRBc3NldCEuYW1vdW50LnNob3VsZC5lcXVhbChleHBlY3RlZENoYW5nZUFkYSk7IC8vIFJlbWFpbmluZyBBREEgYWZ0ZXIgZmVlcyBhbmQgbWluIEFEQXNcbiAgfSk7XG5cbiAgaXQoYHNob3VsZCBmYWlsIHRvIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCAke2Fzc2V0TmFtZX0gdG9rZW4gYW5kIGluc3VmZmljaWVudCBtaW5pbXVtIEFEQWAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDA7XG4gICAgY29uc3QgdG90YWxBc3NldExpc3QgPSB7XG4gICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXJcbiAgICAgIC5idWlsZCgpXG4gICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aChcbiAgICAgICAgJ0luc3VmZmljaWVudCBmdW5kczogbmVlZCBhIG1pbmltdW0gb2YgMTUwMDAwMCBsb3ZlbGFjZSBwZXIgb3V0cHV0IHRvIGNvbnN0cnVjdCB0b2tlbiB0cmFuc2FjdGlvbnMnXG4gICAgICApO1xuICB9KTtcblxuICBpdChgc2hvdWxkIGZhaWwgdG8gYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoICR7YXNzZXROYW1lfSBhbmQgaW5zdWZmaWNpZW50IHRva2VuIHF0eWAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzUnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJywgLy8gU2V0IEFEQSBhbW91bnQgdG8gMCBmb3IgdG9rZW4gdHJhbnNmZXIgKG1pbiBBREEgaXMgaGFuZGxlZCBpbiBzZGsgYnVpbGQpXG4gICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcblxuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ0luc3VmZmljaWVudCBxdHk6IG5vdCBlbm91Z2ggdG9rZW4gcXR5IHRvIGNvdmVyIHJlY2VpdmVyIG91dHB1dCcpO1xuICB9KTtcblxuICBpdChgc2hvdWxkIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCAke2Fzc2V0TmFtZX0gd2hlbiB0aGUgdG9rZW4gcXR5IGlzIGV4YWN0bHkgdGhlIHF0eSBpbiB3aXRoZHJhd2FsYCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHF1YW50aXR5ID0gJzEnO1xuICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICcxJyxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQubm90LmJlLnJlamVjdGVkKCk7XG4gIH0pO1xuXG4gIGl0KGBzaG91bGQgYnVpbGQgYSBzcG9uc29yZWQgdG9rZW4gdHJhbnNhY3Rpb24gd2hlcmUgZmVlIGFkZHJlc3Mgc3BvbnNvcnMgbWluIEFEQSBmb3IgcmVjZWl2ZXJgLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZmVlQWRkcmVzcyA9XG4gICAgICAnYWRkcl90ZXN0MXF6MmZ4djJ1bXlodHRreHl4cDh4MGRscGR0M2s2Y3duZzVweGozamhzeWR6ZXIzamN1NWQ4cHM3emV4MmsyeHQzdXF4Z2pxbm5qODN3czhsaHJuNjQ4amp4dHdxMnl0anFwJztcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3Qgc2VuZGVySW5wdXRCYWxhbmNlID0gNTAwMDAwMDtcbiAgICBjb25zdCBmZWVBZGRyZXNzSW5wdXRCYWxhbmNlID0gMjAwMDAwMDA7IC8vIEZlZSBhZGRyZXNzIGhhcyBlbm91Z2ggQURBIHRvIHNwb25zb3JcbiAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAvLyBTZW5kZXIgaW5wdXQgKGhhcyB0b2tlbnMpXG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcbiAgICAvLyBGZWUgYWRkcmVzcyBpbnB1dCAoc3BvbnNvcnMgZmVlcyBhbmQgbWluIEFEQSlcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIyJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAwLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJywgLy8gU2V0IEFEQSBhbW91bnQgdG8gMCBmb3IgdG9rZW4gdHJhbnNmZXIgKG1pbiBBREEgaXMgaGFuZGxlZCBieSBmZWUgYWRkcmVzcylcbiAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIHF1YW50aXR5LFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCBzZW5kZXJJbnB1dEJhbGFuY2UudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci5zcG9uc29yc2hpcEluZm8oe1xuICAgICAgZmVlQWRkcmVzczogZmVlQWRkcmVzcyxcbiAgICAgIGZlZUFkZHJlc3NJbnB1dEJhbGFuY2U6IGZlZUFkZHJlc3NJbnB1dEJhbGFuY2UudG9TdHJpbmcoKSxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcblxuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG5cbiAgICB0eERhdGEuaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG4gICAgdHhEYXRhLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCg0KTtcblxuICAgIC8vIFZhbGlkYXRlIHJlY2VpdmVyIG91dHB1dCAtIG1pbiBBREEgc2hvdWxkIGJlIHNwb25zb3JlZCBieSBmZWUgYWRkcmVzc1xuICAgIGNvbnN0IHJlY2VpdmVyT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSByZWNlaXZlckFkZHJlc3MpO1xuICAgIHJlY2VpdmVyT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgcmVjZWl2ZXJPdXRwdXRbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTUwMDAwMCcpOyAvLyBNaW5pbXVtIEFEQSBmb3IgYXNzZXQgb3V0cHV0IChzcG9uc29yZWQgYnkgZmVlIGFkZHJlc3MpXG4gICAgKHJlY2VpdmVyT3V0cHV0WzBdLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAudG9fc3RyKClcbiAgICAgIC5zaG91bGQuZXF1YWwocXVhbnRpdHkpO1xuXG4gICAgLy8gVmFsaWRhdGUgc2VuZGVyIGNoYW5nZSBvdXRwdXQgLSBzaG91bGQgaGF2ZSBmdWxsIHNlbmRlciBiYWxhbmNlICh0b2tlbnMgb25seSwgbm8gQURBIGRlZHVjdGlvbiBmb3IgcmVjZWl2ZXIpXG4gICAgY29uc3Qgc2VuZGVyQ2hhbmdlT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSBzZW5kZXJBZGRyZXNzKTtcbiAgICBzZW5kZXJDaGFuZ2VPdXRwdXQubGVuZ3RoLnNob3VsZC5iZS5lcXVhbCgyKTtcblxuICAgIC8vIFZhbGlkYXRlIGZlZSBhZGRyZXNzIGNoYW5nZSBvdXRwdXQgLSBzaG91bGQgaGF2ZSByZW1haW5pbmcgQURBIGFmdGVyIGZlZXMgYW5kIG1pbiBBREEgZm9yIHJlY2VpdmVyXG4gICAgY29uc3QgZmVlQWRkcmVzc0NoYW5nZU91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gZmVlQWRkcmVzcyk7XG4gICAgZmVlQWRkcmVzc0NoYW5nZU91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIC8vIEZlZSBhZGRyZXNzIGNoYW5nZSBzaG91bGQgbm90IGhhdmUgYW55IHRva2Vuc1xuICAgIHNob3VsZC5ub3QuZXhpc3QoZmVlQWRkcmVzc0NoYW5nZU91dHB1dFswXS5tdWx0aUFzc2V0cyk7XG4gIH0pO1xufSk7XG4iXX0=