@bitgo/sdk-coin-zeta 3.7.43 → 3.7.45
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/dist/src/zeta.d.ts +15 -1
- package/dist/src/zeta.d.ts.map +1 -1
- package/dist/src/zeta.js +79 -1
- package/dist/test/unit/zeta.js +61 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -8
package/dist/src/zeta.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CosmosCoin, CosmosKeyPair, GasAmountDetails } from '@bitgo/abstract-cosmos';
|
|
2
|
-
import { BaseCoin, BitGoBase } from '@bitgo/sdk-core';
|
|
2
|
+
import { BaseCoin, BitGoBase, VerifyTransactionOptions } from '@bitgo/sdk-core';
|
|
3
3
|
import { BaseCoin as StaticsBaseCoin } from '@bitgo/statics';
|
|
4
4
|
import { TransactionBuilderFactory } from './lib';
|
|
5
5
|
export declare class Zeta extends CosmosCoin {
|
|
@@ -24,5 +24,19 @@ export declare class Zeta extends CosmosCoin {
|
|
|
24
24
|
getAddressFromPublicKey(publicKey: string): string;
|
|
25
25
|
/** @inheritDoc **/
|
|
26
26
|
protected getAccountDetails(senderAddress: string): Promise<string[]>;
|
|
27
|
+
/**
|
|
28
|
+
* @inheritDoc
|
|
29
|
+
*
|
|
30
|
+
* Overrides CosmosCoin.verifyTransaction to fix a ZETA-specific gap: recipients can carry
|
|
31
|
+
* their memo folded into the address as `address?memoId=X` (the BitGo combined
|
|
32
|
+
* address+memo convention - see getAddressDetails), but explainTransaction() always
|
|
33
|
+
* reports the plain on-chain address plus a separate `memo` field. The base class
|
|
34
|
+
* compares the two sides as raw strings, so any memo-tagged recipient fails verification
|
|
35
|
+
* even when the transaction was built correctly - this reproduced a live incident where a
|
|
36
|
+
* client could never sign a correctly-built, pending ZETA transaction to a memo'd
|
|
37
|
+
* recipient. Normalize both sides to the same {address, amount, memo?} shape before
|
|
38
|
+
* comparing.
|
|
39
|
+
*/
|
|
40
|
+
verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
|
|
27
41
|
}
|
|
28
42
|
//# sourceMappingURL=zeta.d.ts.map
|
package/dist/src/zeta.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zeta.d.ts","sourceRoot":"","sources":["../../src/zeta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"zeta.d.ts","sourceRoot":"","sources":["../../src/zeta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAiC,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC/G,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAmB,MAAM,gBAAgB,CAAC;AAG9E,OAAO,EAAW,yBAAyB,EAAE,MAAM,OAAO,CAAC;AAI3D,qBAAa,IAAK,SAAQ,UAAU;IAClC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,mBAAmB;IACnB,UAAU,IAAI,yBAAyB;IAIvC,mBAAmB;IACnB,aAAa,IAAI,MAAM,GAAG,MAAM;IAIhC,mBAAmB;IACnB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC,mBAAmB;IACnB,SAAS,CAAC,gBAAgB,IAAI,MAAM;IAIpC,mBAAmB;IACnB,eAAe,IAAI,MAAM;IAIzB,mBAAmB;IACnB,mBAAmB,IAAI,gBAAgB;IAOvC,mBAAmB;IACnB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa;IAI5C,mBAAmB;IACnB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIlD,mBAAmB;cACH,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ3E;;;;;;;;;;;;OAYG;IACG,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;CA+B5E"}
|
package/dist/src/zeta.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
@@ -7,6 +40,8 @@ exports.Zeta = void 0;
|
|
|
7
40
|
const abstract_cosmos_1 = require("@bitgo/abstract-cosmos");
|
|
8
41
|
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
9
42
|
const statics_1 = require("@bitgo/statics");
|
|
43
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
44
|
+
const _ = __importStar(require("lodash"));
|
|
10
45
|
const lib_1 = require("./lib");
|
|
11
46
|
const constants_1 = require("./lib/constants");
|
|
12
47
|
const utils_1 = __importDefault(require("./lib/utils"));
|
|
@@ -64,6 +99,49 @@ class Zeta extends abstract_cosmos_1.CosmosCoin {
|
|
|
64
99
|
}
|
|
65
100
|
return [response.body.account.base_account.account_number, response.body.account.base_account.sequence];
|
|
66
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* @inheritDoc
|
|
104
|
+
*
|
|
105
|
+
* Overrides CosmosCoin.verifyTransaction to fix a ZETA-specific gap: recipients can carry
|
|
106
|
+
* their memo folded into the address as `address?memoId=X` (the BitGo combined
|
|
107
|
+
* address+memo convention - see getAddressDetails), but explainTransaction() always
|
|
108
|
+
* reports the plain on-chain address plus a separate `memo` field. The base class
|
|
109
|
+
* compares the two sides as raw strings, so any memo-tagged recipient fails verification
|
|
110
|
+
* even when the transaction was built correctly - this reproduced a live incident where a
|
|
111
|
+
* client could never sign a correctly-built, pending ZETA transaction to a memo'd
|
|
112
|
+
* recipient. Normalize both sides to the same {address, amount, memo?} shape before
|
|
113
|
+
* comparing.
|
|
114
|
+
*/
|
|
115
|
+
async verifyTransaction(params) {
|
|
116
|
+
let totalAmount = new bignumber_js_1.default(0);
|
|
117
|
+
const { txPrebuild, txParams } = params;
|
|
118
|
+
const rawTx = txPrebuild.txHex;
|
|
119
|
+
if (!rawTx) {
|
|
120
|
+
throw new Error('missing required tx prebuild property txHex');
|
|
121
|
+
}
|
|
122
|
+
const transaction = await this.getBuilder().from(rawTx).build();
|
|
123
|
+
const explainedTx = transaction.explainTransaction();
|
|
124
|
+
if (txParams.recipients && txParams.recipients.length > 0) {
|
|
125
|
+
const filteredRecipients = txParams.recipients.map((recipient) => {
|
|
126
|
+
const { address, memoId } = this.getAddressDetails(recipient.address);
|
|
127
|
+
return { address, amount: recipient.amount, ...(memoId !== undefined ? { memo: memoId } : {}) };
|
|
128
|
+
});
|
|
129
|
+
const filteredOutputs = explainedTx.outputs.map((output) => _.pick(output, ['address', 'amount', 'memo']));
|
|
130
|
+
if (!_.isEqual(filteredOutputs, filteredRecipients)) {
|
|
131
|
+
throw new Error('Tx outputs does not match with expected txParams recipients');
|
|
132
|
+
}
|
|
133
|
+
// WithdrawDelegatorRewards and ContractCall transaction don't have amount
|
|
134
|
+
if (transaction.type !== sdk_core_1.TransactionType.StakingWithdraw && transaction.type !== sdk_core_1.TransactionType.ContractCall) {
|
|
135
|
+
for (const recipient of txParams.recipients) {
|
|
136
|
+
totalAmount = totalAmount.plus(recipient.amount);
|
|
137
|
+
}
|
|
138
|
+
if (!totalAmount.isEqualTo(explainedTx.outputAmount)) {
|
|
139
|
+
throw new Error('Tx total amount does not match with expected total amount field');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
67
145
|
}
|
|
68
146
|
exports.Zeta = Zeta;
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemV0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy96ZXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDREQUFxRjtBQUNyRiw4Q0FBb0U7QUFDcEUsNENBQThFO0FBQzlFLCtCQUEyRDtBQUMzRCwrQ0FBd0Q7QUFDeEQsd0RBQWdDO0FBRWhDLE1BQWEsSUFBSyxTQUFRLDRCQUFVO0lBRWxDLFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsVUFBVTtRQUNSLE9BQU8sSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLE9BQU8sZUFBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxlQUFLLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELG1CQUFtQjtJQUNULGdCQUFnQjtRQUN4QixPQUFPLHVCQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUN2RCxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLGVBQWU7UUFDYixPQUFPLGtCQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsbUJBQW1CO1FBQ2pCLE9BQU87WUFDTCxTQUFTLEVBQUUsc0JBQVU7WUFDckIsUUFBUSxFQUFFLHFCQUFTO1NBQ3BCLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLFVBQVUsQ0FBQyxTQUFpQjtRQUMxQixPQUFPLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELG1CQUFtQjtJQUNuQix1QkFBdUIsQ0FBQyxTQUFpQjtRQUN2QyxPQUFPLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELG1CQUFtQjtJQUNULEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFxQjtRQUNyRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUcsQ0FBQztDQUNGO0FBbkVELG9CQW1FQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvc21vc0NvaW4sIENvc21vc0tleVBhaXIsIEdhc0Ftb3VudERldGFpbHMgfSBmcm9tICdAYml0Z28vYWJzdHJhY3QtY29zbW9zJztcbmltcG9ydCB7IEJhc2VDb2luLCBCaXRHb0Jhc2UsIEVudmlyb25tZW50cyB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIEJhc2VVbml0LCBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEtleVBhaXIsIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL2xpYic7XG5pbXBvcnQgeyBHQVNfQU1PVU5ULCBHQVNfTElNSVQgfSBmcm9tICcuL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIFpldGEgZXh0ZW5kcyBDb3Ntb3NDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBaZXRhKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldEJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgZ2V0QmFzZUZhY3RvcigpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiAxZTE4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykgfHwgdXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIHByb3RlY3RlZCBnZXRQdWJsaWNOb2RlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS56ZXRhTm9kZVVybDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgZ2V0RGVub21pbmF0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJhc2VVbml0LlpFVEE7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldEdhc0Ftb3VudERldGFpbHMoKTogR2FzQW1vdW50RGV0YWlscyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdhc0Ftb3VudDogR0FTX0FNT1VOVCxcbiAgICAgIGdhc0xpbWl0OiBHQVNfTElNSVQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgZ2V0S2V5UGFpcihwdWJsaWNLZXk6IHN0cmluZyk6IENvc21vc0tleVBhaXIge1xuICAgIHJldHVybiBuZXcgS2V5UGFpcih7IHB1YjogcHVibGljS2V5IH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJsaWNLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBLZXlQYWlyKHsgcHViOiBwdWJsaWNLZXkgfSkuZ2V0QWRkcmVzcygpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0QWNjb3VudERldGFpbHMoc2VuZGVyQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRBY2NvdW50RnJvbU5vZGUoc2VuZGVyQWRkcmVzcyk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjY291bnQgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBbcmVzcG9uc2UuYm9keS5hY2NvdW50LmJhc2VfYWNjb3VudC5hY2NvdW50X251bWJlciwgcmVzcG9uc2UuYm9keS5hY2NvdW50LmJhc2VfYWNjb3VudC5zZXF1ZW5jZV07XG4gIH1cbn1cbiJdfQ==
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemV0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy96ZXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDREQUFxRjtBQUNyRiw4Q0FBK0c7QUFDL0csNENBQThFO0FBQzlFLGdFQUFxQztBQUNyQywwQ0FBNEI7QUFDNUIsK0JBQTJEO0FBQzNELCtDQUF3RDtBQUN4RCx3REFBZ0M7QUFFaEMsTUFBYSxJQUFLLFNBQVEsNEJBQVU7SUFFbEMsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixVQUFVO1FBQ1IsT0FBTyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsY0FBYyxDQUFDLE9BQWU7UUFDNUIsT0FBTyxlQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGVBQUssQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsbUJBQW1CO0lBQ1QsZ0JBQWdCO1FBQ3hC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QztZQUUzRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7WUFDakYsQ0FBQztZQUNELDBFQUEwRTtZQUMxRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssMEJBQWUsQ0FBQyxlQUFlLElBQUksV0FBVyxDQUFDLElBQUksS0FBSywwQkFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM5RyxLQUFLLE1BQU0sU0FBUyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDNUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO29CQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7Z0JBQ3JGLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBaEhELG9CQWdIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvc21vc0NvaW4sIENvc21vc0tleVBhaXIsIEdhc0Ftb3VudERldGFpbHMgfSBmcm9tICdAYml0Z28vYWJzdHJhY3QtY29zbW9zJztcbmltcG9ydCB7IEJhc2VDb2luLCBCaXRHb0Jhc2UsIEVudmlyb25tZW50cywgVHJhbnNhY3Rpb25UeXBlLCBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBCYXNlVW5pdCwgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBLZXlQYWlyLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9saWInO1xuaW1wb3J0IHsgR0FTX0FNT1VOVCwgR0FTX0xJTUlUIH0gZnJvbSAnLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL2xpYi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBaZXRhIGV4dGVuZHMgQ29zbW9zQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbywgc3RhdGljc0NvaW4pO1xuXG4gICAgaWYgKCFzdGF0aWNzQ29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBzdGF0aWNzQ29pbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgWmV0YShiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXRCdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldEJhc2VGYWN0b3IoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gMWUxODtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpIHx8IHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBwcm90ZWN0ZWQgZ2V0UHVibGljTm9kZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBFbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0uemV0YU5vZGVVcmw7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldERlbm9taW5hdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCYXNlVW5pdC5aRVRBO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXRHYXNBbW91bnREZXRhaWxzKCk6IEdhc0Ftb3VudERldGFpbHMge1xuICAgIHJldHVybiB7XG4gICAgICBnYXNBbW91bnQ6IEdBU19BTU9VTlQsXG4gICAgICBnYXNMaW1pdDogR0FTX0xJTUlULFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldEtleVBhaXIocHVibGljS2V5OiBzdHJpbmcpOiBDb3Ntb3NLZXlQYWlyIHtcbiAgICByZXR1cm4gbmV3IEtleVBhaXIoeyBwdWI6IHB1YmxpY0tleSB9KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgS2V5UGFpcih7IHB1YjogcHVibGljS2V5IH0pLmdldEFkZHJlc3MoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFjY291bnREZXRhaWxzKHNlbmRlckFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0QWNjb3VudEZyb21Ob2RlKHNlbmRlckFkZHJlc3MpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY2NvdW50IG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gW3Jlc3BvbnNlLmJvZHkuYWNjb3VudC5iYXNlX2FjY291bnQuYWNjb3VudF9udW1iZXIsIHJlc3BvbnNlLmJvZHkuYWNjb3VudC5iYXNlX2FjY291bnQuc2VxdWVuY2VdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqXG4gICAqIE92ZXJyaWRlcyBDb3Ntb3NDb2luLnZlcmlmeVRyYW5zYWN0aW9uIHRvIGZpeCBhIFpFVEEtc3BlY2lmaWMgZ2FwOiByZWNpcGllbnRzIGNhbiBjYXJyeVxuICAgKiB0aGVpciBtZW1vIGZvbGRlZCBpbnRvIHRoZSBhZGRyZXNzIGFzIGBhZGRyZXNzP21lbW9JZD1YYCAodGhlIEJpdEdvIGNvbWJpbmVkXG4gICAqIGFkZHJlc3MrbWVtbyBjb252ZW50aW9uIC0gc2VlIGdldEFkZHJlc3NEZXRhaWxzKSwgYnV0IGV4cGxhaW5UcmFuc2FjdGlvbigpIGFsd2F5c1xuICAgKiByZXBvcnRzIHRoZSBwbGFpbiBvbi1jaGFpbiBhZGRyZXNzIHBsdXMgYSBzZXBhcmF0ZSBgbWVtb2AgZmllbGQuIFRoZSBiYXNlIGNsYXNzXG4gICAqIGNvbXBhcmVzIHRoZSB0d28gc2lkZXMgYXMgcmF3IHN0cmluZ3MsIHNvIGFueSBtZW1vLXRhZ2dlZCByZWNpcGllbnQgZmFpbHMgdmVyaWZpY2F0aW9uXG4gICAqIGV2ZW4gd2hlbiB0aGUgdHJhbnNhY3Rpb24gd2FzIGJ1aWx0IGNvcnJlY3RseSAtIHRoaXMgcmVwcm9kdWNlZCBhIGxpdmUgaW5jaWRlbnQgd2hlcmUgYVxuICAgKiBjbGllbnQgY291bGQgbmV2ZXIgc2lnbiBhIGNvcnJlY3RseS1idWlsdCwgcGVuZGluZyBaRVRBIHRyYW5zYWN0aW9uIHRvIGEgbWVtbydkXG4gICAqIHJlY2lwaWVudC4gTm9ybWFsaXplIGJvdGggc2lkZXMgdG8gdGhlIHNhbWUge2FkZHJlc3MsIGFtb3VudCwgbWVtbz99IHNoYXBlIGJlZm9yZVxuICAgKiBjb21wYXJpbmcuXG4gICAqL1xuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCB0b3RhbEFtb3VudCA9IG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgY29uc3QgeyB0eFByZWJ1aWxkLCB0eFBhcmFtcyB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHJhd1R4ID0gdHhQcmVidWlsZC50eEhleDtcbiAgICBpZiAoIXJhd1R4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmdldEJ1aWxkZXIoKS5mcm9tKHJhd1R4KS5idWlsZCgpO1xuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gdHJhbnNhY3Rpb24uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHMgJiYgdHhQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWx0ZXJlZFJlY2lwaWVudHMgPSB0eFBhcmFtcy5yZWNpcGllbnRzLm1hcCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWRkcmVzcywgbWVtb0lkIH0gPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKHJlY2lwaWVudC5hZGRyZXNzKTtcbiAgICAgICAgcmV0dXJuIHsgYWRkcmVzcywgYW1vdW50OiByZWNpcGllbnQuYW1vdW50LCAuLi4obWVtb0lkICE9PSB1bmRlZmluZWQgPyB7IG1lbW86IG1lbW9JZCB9IDoge30pIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0cyA9IGV4cGxhaW5lZFR4Lm91dHB1dHMubWFwKChvdXRwdXQpID0+IF8ucGljayhvdXRwdXQsIFsnYWRkcmVzcycsICdhbW91bnQnLCAnbWVtbyddKSk7XG5cbiAgICAgIGlmICghXy5pc0VxdWFsKGZpbHRlcmVkT3V0cHV0cywgZmlsdGVyZWRSZWNpcGllbnRzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJyk7XG4gICAgICB9XG4gICAgICAvLyBXaXRoZHJhd0RlbGVnYXRvclJld2FyZHMgYW5kIENvbnRyYWN0Q2FsbCB0cmFuc2FjdGlvbiBkb24ndCBoYXZlIGFtb3VudFxuICAgICAgaWYgKHRyYW5zYWN0aW9uLnR5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcgJiYgdHJhbnNhY3Rpb24udHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY2lwaWVudCBvZiB0eFBhcmFtcy5yZWNpcGllbnRzKSB7XG4gICAgICAgICAgdG90YWxBbW91bnQgPSB0b3RhbEFtb3VudC5wbHVzKHJlY2lwaWVudC5hbW91bnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdG90YWxBbW91bnQuaXNFcXVhbFRvKGV4cGxhaW5lZFR4Lm91dHB1dEFtb3VudCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IHRvdGFsIGFtb3VudCBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHRvdGFsIGFtb3VudCBmaWVsZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
|
package/dist/test/unit/zeta.js
CHANGED
|
@@ -167,6 +167,66 @@ describe('Zeta', function () {
|
|
|
167
167
|
})
|
|
168
168
|
.should.rejectedWith('missing required tx prebuild property txHex');
|
|
169
169
|
});
|
|
170
|
+
it('should succeed to verify transaction with a memo-suffixed recipient address', async function () {
|
|
171
|
+
// Regression test for CSHLD-1780: recipients can carry their memo folded into the
|
|
172
|
+
// address as `address?memoId=X` (see 'should validate wallet receive address' above),
|
|
173
|
+
// but explainTransaction() always reports the plain on-chain address plus a separate
|
|
174
|
+
// memo field (see 'should explain a transfer transaction with memo'). Before the fix,
|
|
175
|
+
// comparing the raw strings directly made every memo-tagged recipient fail here even
|
|
176
|
+
// though the transaction matched exactly - this reproduces a live incident on a ZETA
|
|
177
|
+
// wallet where the client could never sign a pending, correctly-built transaction.
|
|
178
|
+
const txPrebuild = {
|
|
179
|
+
txHex: zeta_1.TEST_TX_WITH_MEMO.signedTxBase64,
|
|
180
|
+
txInfo: {},
|
|
181
|
+
};
|
|
182
|
+
const txParams = {
|
|
183
|
+
recipients: [
|
|
184
|
+
{
|
|
185
|
+
address: `${zeta_1.TEST_TX_WITH_MEMO.to}?memoId=${zeta_1.TEST_TX_WITH_MEMO.memo}`,
|
|
186
|
+
amount: zeta_1.TEST_TX_WITH_MEMO.sendAmount,
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
};
|
|
190
|
+
const verification = {};
|
|
191
|
+
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild, verification });
|
|
192
|
+
isTransactionVerified.should.equal(true);
|
|
193
|
+
});
|
|
194
|
+
it('should fail to verify transaction when the recipient memoId does not match the tx memo', async function () {
|
|
195
|
+
const txPrebuild = {
|
|
196
|
+
txHex: zeta_1.TEST_TX_WITH_MEMO.signedTxBase64,
|
|
197
|
+
txInfo: {},
|
|
198
|
+
};
|
|
199
|
+
const txParams = {
|
|
200
|
+
recipients: [
|
|
201
|
+
{
|
|
202
|
+
address: `${zeta_1.TEST_TX_WITH_MEMO.to}?memoId=999999`,
|
|
203
|
+
amount: zeta_1.TEST_TX_WITH_MEMO.sendAmount,
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
};
|
|
207
|
+
const verification = {};
|
|
208
|
+
await basecoin
|
|
209
|
+
.verifyTransaction({ txParams, txPrebuild, verification })
|
|
210
|
+
.should.be.rejectedWith('Tx outputs does not match with expected txParams recipients');
|
|
211
|
+
});
|
|
212
|
+
it('should fail to verify transaction when the recipient has no memoId but the tx has one', async function () {
|
|
213
|
+
const txPrebuild = {
|
|
214
|
+
txHex: zeta_1.TEST_TX_WITH_MEMO.signedTxBase64,
|
|
215
|
+
txInfo: {},
|
|
216
|
+
};
|
|
217
|
+
const txParams = {
|
|
218
|
+
recipients: [
|
|
219
|
+
{
|
|
220
|
+
address: zeta_1.TEST_TX_WITH_MEMO.to,
|
|
221
|
+
amount: zeta_1.TEST_TX_WITH_MEMO.sendAmount,
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
};
|
|
225
|
+
const verification = {};
|
|
226
|
+
await basecoin
|
|
227
|
+
.verifyTransaction({ txParams, txPrebuild, verification })
|
|
228
|
+
.should.be.rejectedWith('Tx outputs does not match with expected txParams recipients');
|
|
229
|
+
});
|
|
170
230
|
});
|
|
171
231
|
describe('Explain Transaction: ', () => {
|
|
172
232
|
it('should explain a transfer transaction', async function () {
|
|
@@ -451,4 +511,4 @@ describe('Zeta', function () {
|
|
|
451
511
|
});
|
|
452
512
|
});
|
|
453
513
|
});
|
|
454
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemV0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC96ZXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNERBQTJGO0FBQzNGLDRDQUEwQztBQUMxQyw4Q0FBK0M7QUFDL0Msb0RBQWlFO0FBQ2pFLDhDQUE2RjtBQUM3Riw0Q0FBdUM7QUFDdkMsZ0VBQXFDO0FBQ3JDLGlDQUFtQztBQUNuQyxrREFBMEI7QUFDMUIsbUNBQXdDO0FBQ3hDLHVEQUFxRDtBQUNyRCxnRUFBd0M7QUFDeEMsNENBUzJCO0FBQzNCLGlDQUFrQztBQUNsQyw2QkFBOEI7QUFFOUIsUUFBUSxDQUFDLE1BQU0sRUFBRTtJQUNmLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQVEsQ0FBQztJQUNiLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw4QkFBOEIsRUFBRTtRQUNqQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFD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QztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxLQUFLO1lBQ2hFLE1BQU0sUUFBUTtpQkFDWCxPQUFPLENBQUM7Z0JBQ1AsT0FBTyxFQUFFLGNBQU8sQ0FBQyxjQUFjO2dCQUMvQixTQUFTLEVBQUUsY0FBTyxDQUFDLGdCQUFnQjtnQkFDbkMsUUFBUSxFQUFFLGNBQU8sQ0FBQyxjQUFjO2dCQUNoQyxtQkFBbUIsRUFBRSxrQkFBa0I7YUFDeEMsQ0FBQztpQkFDRCxNQUFNLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSztZQUNuRCxNQUFNLFFBQVE7aUJBQ1gsT0FBTyxDQUFDO2dCQUNQLE9BQU8sRUFBRSxjQUFPLENBQUMsY0FBYztnQkFDL0IsU0FBUyxFQUFFLGNBQU8sQ0FBQyxnQkFBZ0I7Z0JBQ25DLFFBQVEsRUFBRSxjQUFPLENBQUMsY0FBYztnQkFDaEMsZ0JBQWdCLEVBQUUsY0FBTyxDQUFDLGdCQUFnQjtnQkFDMUMsbUJBQW1CLEVBQUUsa0JBQWtCO2FBQ3hDLENBQUM7aUJBQ0QsTUFBTSxDQUFDLFlBQVksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvc21vc1RyYW5zYWN0aW9uLCBSZWRlbGVnYXRlTWVzc2FnZSwgU2VuZE1lc3NhZ2UgfSBmcm9tICdAYml0Z28vYWJzdHJhY3QtY29zbW9zJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRzIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEVjZHNhUmFuZ2VQcm9vZiwgRWNkc2FUeXBlcyB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSwgbW9ja1NlcmlhbGl6ZWRDaGFsbGVuZ2VXaXRoUHJvb2ZzIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgYmVmb3JlRWFjaCB9IGZyb20gJ21vY2hhJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBUemV0YSwgWmV0YSB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBHQVNfQU1PVU5UIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHtcbiAgVEVTVF9ERUxFR0FURV9UWCxcbiAgVEVTVF9TRU5EX1RYLFxuICBURVNUX1RYX1dJVEhfTUVNTyxcbiAgVEVTVF9VTkRFTEVHQVRFX1RYLFxuICBURVNUX1dJVEhEUkFXX1JFV0FSRFNfVFgsXG4gIGFkZHJlc3MsXG4gIG1vY2tBY2NvdW50RGV0YWlsc1Jlc3BvbnNlLFxuICB3cndVc2VyLFxufSBmcm9tICcuLi9yZXNvdXJjZXMvemV0YSc7XG5pbXBvcnQgc2hvdWxkID0gcmVxdWlyZSgnc2hvdWxkJyk7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcblxuZGVzY3JpYmUoJ1pldGEnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBsZXQgYmFzZWNvaW47XG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd6ZXRhJywgWmV0YS5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0emV0YScsIFR6ZXRhLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3R6ZXRhJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHRoZSByaWdodCBpbmZvJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHpldGEgPSBiaXRnby5jb2luKCd6ZXRhJyk7XG4gICAgY29uc3QgdHpldGEgPSBiaXRnby5jb2luKCd0emV0YScpO1xuXG4gICAgemV0YS5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgnemV0YScpO1xuICAgIHpldGEuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCd6ZXRhJyk7XG4gICAgemV0YS5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnWmV0YScpO1xuICAgIHpldGEuZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTE4KTtcblxuICAgIHR6ZXRhLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0emV0YScpO1xuICAgIHR6ZXRhLmdldEZhbWlseSgpLnNob3VsZC5lcXVhbCgnemV0YScpO1xuICAgIHR6ZXRhLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdUZXN0bmV0IFpldGEnKTtcbiAgICB0emV0YS5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlMTgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2V0IGFkZHJlc3MgZGV0YWlscyB3aXRob3V0IG1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcy5ub01lbW9JZEFkZHJlc3MpO1xuICAgICAgYWRkcmVzc0RldGFpbHMuYWRkcmVzcy5zaG91bGQuZXF1YWwoYWRkcmVzcy5ub01lbW9JZEFkZHJlc3MpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChhZGRyZXNzRGV0YWlscy5tZW1vSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgYWRkcmVzcyBkZXRhaWxzIHdpdGggbWVtb0lkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzLnZhbGlkTWVtb0lkQWRkcmVzcyk7XG4gICAgICBhZGRyZXNzRGV0YWlscy5hZGRyZXNzLnNob3VsZC5lcXVhbChhZGRyZXNzLnZhbGlkTWVtb0lkQWRkcmVzcy5zcGxpdCgnPycpWzBdKTtcbiAgICAgIGFkZHJlc3NEZXRhaWxzLm1lbW9JZC5zaG91bGQuZXF1YWwoJzInKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gbXVsdGlwbGUgbWVtbyBpZCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgKCgpID0+IHtcbiAgICAgICAgYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcy5tdWx0aXBsZU1lbW9JZEFkZHJlc3MpO1xuICAgICAgfSkuc2hvdWxkLnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHdhbGxldCByZWNlaXZlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNlaXZlQWRkcmVzcyA9IHtcbiAgICAgICAgYWRkcmVzczogJ3pldGExa3RycjRqdTNhMmx1eHBjZm12NDR4cnBhNGx3eDR1ZnNhMzh3dDg/bWVtb0lkPTcnLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICByb290QWRkcmVzczogJ3pldGExa3RycjRqdTNhMmx1eHBjZm12NDR4cnBhNGx3eDR1ZnNhMzh3dDgnLFxuICAgICAgICAgIG1lbW9JRDogJzcnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgaXNWYWxpZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFjY291bnQgYWRkcmVzc2VzIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MxKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMiksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczMpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzNCksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcygnZGZqazM1eScpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3ModW5kZWZpbmVkIGFzIHVua25vd24gYXMgc3RyaW5nKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcnKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MudmFsaWRNZW1vSWRBZGRyZXNzKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5tdWx0aXBsZU1lbW9JZEFkZHJlc3MpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHZhbGlkYXRvciBhZGRyZXNzZXMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKGFkZHJlc3MudmFsaWRhdG9yQWRkcmVzczEpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcyhhZGRyZXNzLnZhbGlkYXRvckFkZHJlc3MyKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MoYWRkcmVzcy52YWxpZGF0b3JBZGRyZXNzMyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcyhhZGRyZXNzLnZhbGlkYXRvckFkZHJlc3M0KSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKCdkZmprMzV5JyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcyh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MoJycpLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgdHJhbnNhY3Rpb246ICcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IFRFU1RfU0VORF9UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfU0VORF9UWC5yZWNpcGllbnQsXG4gICAgICAgICAgICBhbW91bnQ6IFRFU1RfU0VORF9UWC5zZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBkZWxlZ2F0ZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBURVNUX0RFTEVHQVRFX1RYLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9ERUxFR0FURV9UWC52YWxpZGF0b3IsXG4gICAgICAgICAgICBhbW91bnQ6IFRFU1RfREVMRUdBVEVfVFguc2VuZEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgdmVyaWZpY2F0aW9uIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdW5kZWxlZ2F0ZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBURVNUX1VOREVMRUdBVEVfVFguc2lnbmVkVHhCYXNlNjQsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX1VOREVMRUdBVEVfVFgudmFsaWRhdG9yLFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX1VOREVMRUdBVEVfVFguc2VuZEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgdmVyaWZpY2F0aW9uIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgd2l0aGRyYXcgcmV3YXJkcyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBURVNUX1dJVEhEUkFXX1JFV0FSRFNfVFguc2lnbmVkVHhCYXNlNjQsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX1dJVEhEUkFXX1JFV0FSRFNfVFgudmFsaWRhdG9yLFxuICAgICAgICAgICAgYW1vdW50OiAnVU5BVkFJTEFCTEUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge307XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHsgcmVjaXBpZW50czogdW5kZWZpbmVkIH07XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFeHBsYWluIFRyYW5zYWN0aW9uOiAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBsYWluZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBURVNUX1NFTkRfVFguc2lnbmVkVHhCYXNlNjQsXG4gICAgICB9KTtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3R5cGUnXSxcbiAgICAgICAgaWQ6IFRFU1RfU0VORF9UWC5oYXNoLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9TRU5EX1RYLnJlY2lwaWVudCxcbiAgICAgICAgICAgIGFtb3VudDogVEVTVF9TRU5EX1RYLnNlbmRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiBURVNUX1NFTkRfVFguc2VuZEFtb3VudCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiBURVNUX1NFTkRfVFguZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQgfSxcbiAgICAgICAgdHlwZTogMCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgZGVsZWdhdGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBsYWluZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBURVNUX0RFTEVHQVRFX1RYLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgfSk7XG4gICAgICBleHBsYWluZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgZGlzcGxheU9yZGVyOiBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ10sXG4gICAgICAgIGlkOiBURVNUX0RFTEVHQVRFX1RYLmhhc2gsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX0RFTEVHQVRFX1RYLnZhbGlkYXRvcixcbiAgICAgICAgICAgIGFtb3VudDogVEVTVF9ERUxFR0FURV9UWC5zZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogVEVTVF9ERUxFR0FURV9UWC5zZW5kQW1vdW50LFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6IFRFU1RfREVMRUdBVEVfVFguZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQgfSxcbiAgICAgICAgdHlwZTogMTMsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHVuZGVsZWdhdGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBsYWluZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBURVNUX1VOREVMRUdBVEVfVFguc2lnbmVkVHhCYXNlNjQsXG4gICAgICB9KTtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3R5cGUnXSxcbiAgICAgICAgaWQ6IFRFU1RfVU5ERUxFR0FURV9UWC5oYXNoLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9VTkRFTEVHQVRFX1RYLnZhbGlkYXRvcixcbiAgICAgICAgICAgIGFtb3VudDogVEVTVF9VTkRFTEVHQVRFX1RYLnNlbmRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiBURVNUX1VOREVMRUdBVEVfVFguc2VuZEFtb3VudCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiBURVNUX1VOREVMRUdBVEVfVFguZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQgfSxcbiAgICAgICAgdHlwZTogMTcsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHdpdGhkcmF3IHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogVEVTVF9XSVRIRFJBV19SRVdBUkRTX1RYLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgfSk7XG4gICAgICBleHBsYWluZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgZGlzcGxheU9yZGVyOiBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ10sXG4gICAgICAgIGlkOiBURVNUX1dJVEhEUkFXX1JFV0FSRFNfVFguaGFzaCxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfV0lUSERSQVdfUkVXQVJEU19UWC52YWxpZGF0b3IsXG4gICAgICAgICAgICBhbW91bnQ6ICdVTkFWQUlMQUJMRScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiB1bmRlZmluZWQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogVEVTVF9XSVRIRFJBV19SRVdBUkRTX1RYLmdhc0J1ZGdldC5hbW91bnRbMF0uYW1vdW50IH0sXG4gICAgICAgIHR5cGU6IDE1LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRoIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBsYWluZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBURVNUX1RYX1dJVEhfTUVNTy5zaWduZWRUeEJhc2U2NCxcbiAgICAgIH0pO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddLFxuICAgICAgICBpZDogVEVTVF9UWF9XSVRIX01FTU8uaGFzaCxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfVFhfV0lUSF9NRU1PLnRvLFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX1RYX1dJVEhfTUVNTy5zZW5kQW1vdW50LFxuICAgICAgICAgICAgbWVtbzogVEVTVF9UWF9XSVRIX01FTU8ubWVtbyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IFRFU1RfVFhfV0lUSF9NRU1PLnNlbmRBbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogVEVTVF9UWF9XSVRIX01FTU8uZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQgfSxcbiAgICAgICAgdHlwZTogMCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGV4cGxhaW4gdHJhbnNhY3Rpb24gd2l0aCBtaXNzaW5nIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7fSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzaG91bGQuZXF1YWwoZXJyb3IubWVzc2FnZSwgJ21pc3NpbmcgcmVxdWlyZWQgdHhIZXggcGFyYW1ldGVyJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6ICdyYW5kb21TdHJpbmcnIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjonKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQYXJzZSBUcmFuc2FjdGlvbnM6ICcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0c1Jlc3BvbnNlID0ge1xuICAgICAgICBhZGRyZXNzOiBURVNUX1NFTkRfVFgucmVjaXBpZW50LFxuICAgICAgICBhbW91bnQ6IG5ldyBCaWdOdW1iZXIoVEVTVF9TRU5EX1RYLnNlbmRBbW91bnQpLnBsdXMoVEVTVF9TRU5EX1RYLmdhc0J1ZGdldC5hbW91bnRbMF0uYW1vdW50KS50b0ZpeGVkKCksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0cmFuc2Zlck91dHB1dHNSZXNwb25zZSA9IHtcbiAgICAgICAgYWRkcmVzczogVEVTVF9TRU5EX1RYLnJlY2lwaWVudCxcbiAgICAgICAgYW1vdW50OiBURVNUX1NFTkRfVFguc2VuZEFtb3VudCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4OiBURVNUX1NFTkRfVFguc2lnbmVkVHhCYXNlNjQgfSk7XG5cbiAgICAgIHBhcnNlZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBpbnB1dHM6IFt0cmFuc2ZlcklucHV0c1Jlc3BvbnNlXSxcbiAgICAgICAgb3V0cHV0czogW3RyYW5zZmVyT3V0cHV0c1Jlc3BvbnNlXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2hlbiBleHBsYWluVHJhbnNhY3Rpb24gcmVzcG9uc2UgaXMgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIoWmV0YS5wcm90b3R5cGUsICdleHBsYWluVHJhbnNhY3Rpb24nKTtcbiAgICAgIHN0dWIucmVzb2x2ZXModW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXg6IFRFU1RfU0VORF9UWC5zaWduZWRUeEJhc2U2NCB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgc3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSZWNvdmVyIHRyYW5zYWN0aW9uOiBzdWNjZXNzIHBhdGgnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2FuZEJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkFkZHJlc3MgPSB3cndVc2VyLmRlc3RpbmF0aW9uQWRkcmVzcztcbiAgICBjb25zdCBjb2luID0gY29pbnMuZ2V0KCd0emV0YScpO1xuICAgIGNvbnN0IHRlc3RCYWxhbmNlID0gW1xuICAgICAge1xuICAgICAgICBkZW5vbTogJ2F6ZXRhJyxcbiAgICAgICAgYW1vdW50OiAnMTUwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGNvbnN0IHRlc3RDaGFpbklkID0gJ3Rlc3QtY2hhaW4nO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBub2NrKEVudmlyb25tZW50cy50ZXN0LnpldGFOb2RlVXJsKVxuICAgICAgICAuZ2V0KCcvY29zbW9zL2F1dGgvdjFiZXRhMS9hY2NvdW50cy8nICsgd3J3VXNlci5zZW5kZXJBZGRyZXNzKVxuICAgICAgICAucmVwbHkoMjAwLCBtb2NrQWNjb3VudERldGFpbHNSZXNwb25zZSk7XG5cbiAgICAgIGNvbnN0IGFjY291bnRCYWxhbmNlID0gc2FuZEJveC5zdHViKFpldGEucHJvdG90eXBlLCAnZ2V0QWNjb3VudEJhbGFuY2UnIGFzIGtleW9mIFpldGEpO1xuICAgICAgYWNjb3VudEJhbGFuY2Uud2l0aEFyZ3Mod3J3VXNlci5zZW5kZXJBZGRyZXNzKS5yZXNvbHZlcyh0ZXN0QmFsYW5jZSk7XG5cbiAgICAgIGNvbnN0IGNoYWluSWQgPSBzYW5kQm94LnN0dWIoWmV0YS5wcm90b3R5cGUsICdnZXRDaGFpbklkJyBhcyBrZXlvZiBaZXRhKTtcbiAgICAgIGNoYWluSWQud2l0aEFyZ3MoKS5yZXNvbHZlcyh0ZXN0Q2hhaW5JZCk7XG5cbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZEVudENoYWxsZW5nZSA9IEVjZHNhVHlwZXMuZGVzZXJpYWxpemVOdGlsZGVXaXRoUHJvb2ZzKG1vY2tTZXJpYWxpemVkQ2hhbGxlbmdlV2l0aFByb29mcyk7XG4gICAgICBzaW5vbi5zdHViKEVjZHNhUmFuZ2VQcm9vZiwgJ2dlbmVyYXRlTnRpbGRlJykucmVzb2x2ZXMoZGVzZXJpYWxpemVkRW50Q2hhbGxlbmdlKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBzYW5kQm94LnJlc3RvcmUoKTtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciBmdW5kcyBmb3Igbm9uLWJpdGdvIHJlY292ZXJpZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogd3J3VXNlci51c2VyUHJpdmF0ZUtleSxcbiAgICAgICAgYmFja3VwS2V5OiB3cndVc2VyLmJhY2t1cFByaXZhdGVLZXksXG4gICAgICAgIGJpdGdvS2V5OiB3cndVc2VyLmJpdGdvUHVibGljS2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB3cndVc2VyLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgIH0pO1xuICAgICAgcmVzLnNob3VsZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgIHJlcy5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NlcmlhbGl6ZWRUeCcpO1xuICAgICAgc2FuZEJveC5hc3NlcnQuY2FsbGVkT25jZShiYXNlY29pbi5nZXRBY2NvdW50QmFsYW5jZSk7XG4gICAgICBzYW5kQm94LmFzc2VydC5jYWxsZWRPbmNlKGJhc2Vjb2luLmdldENoYWluSWQpO1xuXG4gICAgICBjb25zdCB0eG4gPSBuZXcgQ29zbW9zVHJhbnNhY3Rpb24oY29pbiwgdXRpbHMpO1xuICAgICAgdHhuLmVucmljaFRyYW5zYWN0aW9uRGV0YWlsc0Zyb21SYXdUcmFuc2FjdGlvbihyZXMuc2VyaWFsaXplZFR4KTtcbiAgICAgIGNvbnN0IHR4bkpzb24gPSB0eG4udG9Kc29uKCk7XG4gICAgICBjb25zdCBzZW5kTWVzc2FnZSA9IHR4bkpzb24uc2VuZE1lc3NhZ2VzWzBdLnZhbHVlIGFzIFNlbmRNZXNzYWdlO1xuICAgICAgY29uc3QgYmFsYW5jZSA9IG5ldyBCaWdOdW1iZXIodGVzdEJhbGFuY2VbMF0uYW1vdW50KTtcbiAgICAgIGNvbnN0IGdhc0Ftb3VudCA9IG5ldyBCaWdOdW1iZXIoR0FTX0FNT1VOVCk7XG4gICAgICBjb25zdCBhY3R1YWxCYWxhbmNlID0gYmFsYW5jZS5taW51cyhnYXNBbW91bnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNlbmRNZXNzYWdlLnRvQWRkcmVzcywgZGVzdGluYXRpb25BZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbChzZW5kTWVzc2FnZS5hbW91bnRbMF0uYW1vdW50LCBhY3R1YWxCYWxhbmNlLnRvRml4ZWQoKSk7XG4gICAgICBzaG91bGQuZXF1YWwoc2VuZE1lc3NhZ2UuYW1vdW50WzBdLmRlbm9tLCB0ZXN0QmFsYW5jZVswXS5kZW5vbSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlZGVsZWdhdGUgZnVuZHMgdG8gbmV3IHZhbGlkYXRvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlZGVsZWdhdGUoe1xuICAgICAgICB1c2VyS2V5OiB3cndVc2VyLnVzZXJQcml2YXRlS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IHdyd1VzZXIuYmFja3VwUHJpdmF0ZUtleSxcbiAgICAgICAgYml0Z29LZXk6IHdyd1VzZXIuYml0Z29QdWJsaWNLZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHdyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYW1vdW50VG9SZWRlbGVnYXRlOiAnMTAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICB2YWxpZGF0b3JTcmNBZGRyZXNzOiAnemV0YXZhbG9wZXIxZGhzazV2NTNoM3h3ZzQycGRnM3Iwdzd6bDgzeXhneWhzNjh2N2wnLFxuICAgICAgICB2YWxpZGF0b3JEc3RBZGRyZXNzOiAnemV0YXZhbG9wZXIxOXYwN3d2d20zenV4OXBhd2NtY2NyN2M0aGZlemFoMHI4d2hzYzYnLFxuICAgICAgfSk7XG5cbiAgICAgIHJlcy5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICByZXMuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgIHNhbmRCb3guYXNzZXJ0LmNhbGxlZE9uY2UoYmFzZWNvaW4uZ2V0Q2hhaW5JZCk7XG5cbiAgICAgIGNvbnN0IHR4biA9IG5ldyBDb3Ntb3NUcmFuc2FjdGlvbihjb2luLCB1dGlscyk7XG4gICAgICB0eG4uZW5yaWNoVHJhbnNhY3Rpb25EZXRhaWxzRnJvbVJhd1RyYW5zYWN0aW9uKHJlcy5zZXJpYWxpemVkVHgpO1xuICAgICAgY29uc3QgdHhuSnNvbiA9IHR4bi50b0pzb24oKTtcbiAgICAgIGNvbnN0IHJlZGVsZWdhdGVNZXNzYWdlID0gdHhuSnNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUgYXMgUmVkZWxlZ2F0ZU1lc3NhZ2U7XG4gICAgICBzaG91bGQuZXF1YWwocmVkZWxlZ2F0ZU1lc3NhZ2UudmFsaWRhdG9yU3JjQWRkcmVzcywgJ3pldGF2YWxvcGVyMWRoc2s1djUzaDN4d2c0MnBkZzNyMHc3emw4M3l4Z3loczY4djdsJyk7XG4gICAgICBzaG91bGQuZXF1YWwocmVkZWxlZ2F0ZU1lc3NhZ2UudmFsaWRhdG9yRHN0QWRkcmVzcywgJ3pldGF2YWxvcGVyMTl2MDd3dndtM3p1eDlwYXdjbWNjcjdjNGhmZXphaDByOHdoc2M2Jyk7XG4gICAgICBzaG91bGQuZXF1YWwocmVkZWxlZ2F0ZU1lc3NhZ2UuYW1vdW50LmFtb3VudCwgJzEwMDAwMDAwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSZWNvdmVyIHRyYW5zYWN0aW9uOiBmYWlsdXJlIHBhdGgnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2FuZEJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkFkZHJlc3MgPSB3cndVc2VyLmRlc3RpbmF0aW9uQWRkcmVzcztcbiAgICBjb25zdCB0ZXN0WmVyb0JhbGFuY2UgPSBbXG4gICAgICB7XG4gICAgICAgIGRlbm9tOiAnYXpldGEnLFxuICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgICBjb25zdCB0ZXN0Q2hhaW5JZCA9ICd0ZXN0LWNoYWluJztcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgbm9jayhFbnZpcm9ubWVudHMudGVzdC56ZXRhTm9kZVVybClcbiAgICAgICAgLmdldCgnL2Nvc21vcy9hdXRoL3YxYmV0YTEvYWNjb3VudHMvJyArIHdyd1VzZXIuc2VuZGVyQWRkcmVzcylcbiAgICAgICAgLnJlcGx5KDIwMCwgbW9ja0FjY291bnREZXRhaWxzUmVzcG9uc2UpO1xuXG4gICAgICBjb25zdCBhY2NvdW50QmFsYW5jZSA9IHNhbmRCb3guc3R1YihaZXRhLnByb3RvdHlwZSwgJ2dldEFjY291bnRCYWxhbmNlJyBhcyBrZXlvZiBaZXRhKTtcbiAgICAgIGFjY291bnRCYWxhbmNlLndpdGhBcmdzKHdyd1VzZXIuc2VuZGVyQWRkcmVzcykucmVzb2x2ZXModGVzdFplcm9CYWxhbmNlKTtcblxuICAgICAgY29uc3QgY2hhaW5JZCA9IHNhbmRCb3guc3R1YihaZXRhLnByb3RvdHlwZSwgJ2dldENoYWluSWQnIGFzIGtleW9mIFpldGEpO1xuICAgICAgY2hhaW5JZC53aXRoQXJncygpLnJlc29sdmVzKHRlc3RDaGFpbklkKTtcblxuICAgICAgY29uc3QgZGVzZXJpYWxpemVkRW50Q2hhbGxlbmdlID0gRWNkc2FUeXBlcy5kZXNlcmlhbGl6ZU50aWxkZVdpdGhQcm9vZnMobW9ja1NlcmlhbGl6ZWRDaGFsbGVuZ2VXaXRoUHJvb2ZzKTtcbiAgICAgIHNpbm9uLnN0dWIoRWNkc2FSYW5nZVByb29mLCAnZ2VuZXJhdGVOdGlsZGUnKS5yZXNvbHZlcyhkZXNlcmlhbGl6ZWRFbnRDaGFsbGVuZ2UpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBpZiBiYWNrdXBrZXkgaXMgbm90IHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAucmVjb3Zlcih7XG4gICAgICAgICAgdXNlcktleTogd3J3VXNlci51c2VyUHJpdmF0ZUtleSxcbiAgICAgICAgICBiaXRnb0tleTogd3J3VXNlci5iaXRnb1B1YmxpY0tleSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB3cndVc2VyLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnbWlzc2luZyBiYWNrdXBLZXknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYgdXNlcmtleSBpcyBub3QgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyKHtcbiAgICAgICAgICBiYWNrdXBLZXk6IHdyd1VzZXIuYmFja3VwUHJpdmF0ZUtleSxcbiAgICAgICAgICBiaXRnb0tleTogd3J3VXNlci5iaXRnb1B1YmxpY0tleSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB3cndVc2VyLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnbWlzc2luZyB1c2VyS2V5Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIHdhbGxldCBwYXNzcGhyYXNlIGlzIG5vdCBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXIoe1xuICAgICAgICAgIHVzZXJLZXk6IHdyd1VzZXIudXNlclByaXZhdGVLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiB3cndVc2VyLmJhY2t1cFByaXZhdGVLZXksXG4gICAgICAgICAgYml0Z29LZXk6IHdyd1VzZXIuYml0Z29QdWJsaWNLZXksXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnbWlzc2luZyB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBpZiB0aGVyZSBpcyBubyBiYWxhbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXIoe1xuICAgICAgICAgIHVzZXJLZXk6IHdyd1VzZXIudXNlclByaXZhdGVLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiB3cndVc2VyLmJhY2t1cFByaXZhdGVLZXksXG4gICAgICAgICAgYml0Z29LZXk6IHdyd1VzZXIuYml0Z29QdWJsaWNLZXksXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogd3J3VXNlci53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ0RpZCBub3QgaGF2ZSBlbm91Z2ggZnVuZHMgdG8gcmVjb3ZlcicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
514
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemV0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC96ZXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNERBQTJGO0FBQzNGLDRDQUEwQztBQUMxQyw4Q0FBK0M7QUFDL0Msb0RBQWlFO0FBQ2pFLDhDQUE2RjtBQUM3Riw0Q0FBdUM7QUFDdkMsZ0VBQXFDO0FBQ3JDLGlDQUFtQztBQUNuQyxrREFBMEI7QUFDMUIsbUNBQXdDO0FBQ3hDLHVEQUFxRDtBQUNyRCxnRUFBd0M7QUFDeEMsNENBUzJCO0FBQzNCLGlDQUFrQztBQUNsQyw2QkFBOEI7QUFFOUIsUUFBUSxDQUFDLE1BQU0sRUFBRTtJQUNmLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQVEsQ0FBQztJQUNiLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw4QkFBOEIsRUFBRTtRQUNqQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFD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T0FBTyxFQUFFLGNBQU8sQ0FBQyxjQUFjO2dCQUMvQixTQUFTLEVBQUUsY0FBTyxDQUFDLGdCQUFnQjtnQkFDbkMsUUFBUSxFQUFFLGNBQU8sQ0FBQyxjQUFjO2dCQUNoQyxnQkFBZ0IsRUFBRSxjQUFPLENBQUMsZ0JBQWdCO2dCQUMxQyxtQkFBbUIsRUFBRSxrQkFBa0I7YUFDeEMsQ0FBQztpQkFDRCxNQUFNLENBQUMsWUFBWSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29zbW9zVHJhbnNhY3Rpb24sIFJlZGVsZWdhdGVNZXNzYWdlLCBTZW5kTWVzc2FnZSB9IGZyb20gJ0BiaXRnby9hYnN0cmFjdC1jb3Ntb3MnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudHMgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgRWNkc2FSYW5nZVByb29mLCBFY2RzYVR5cGVzIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJLCBtb2NrU2VyaWFsaXplZENoYWxsZW5nZVdpdGhQcm9vZnMgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBiZWZvcmVFYWNoIH0gZnJvbSAnbW9jaGEnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IFR6ZXRhLCBaZXRhIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IEdBU19BTU9VTlQgfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQge1xuICBURVNUX0RFTEVHQVRFX1RYLFxuICBURVNUX1NFTkRfVFgsXG4gIFRFU1RfVFhfV0lUSF9NRU1PLFxuICBURVNUX1VOREVMRUdBVEVfVFgsXG4gIFRFU1RfV0lUSERSQVdfUkVXQVJEU19UWCxcbiAgYWRkcmVzcyxcbiAgbW9ja0FjY291bnREZXRhaWxzUmVzcG9uc2UsXG4gIHdyd1VzZXIsXG59IGZyb20gJy4uL3Jlc291cmNlcy96ZXRhJztcbmltcG9ydCBzaG91bGQgPSByZXF1aXJlKCdzaG91bGQnKTtcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuXG5kZXNjcmliZSgnWmV0YScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3pldGEnLCBaZXRhLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3R6ZXRhJywgVHpldGEuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndHpldGEnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHJpZ2h0IGluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgemV0YSA9IGJpdGdvLmNvaW4oJ3pldGEnKTtcbiAgICBjb25zdCB0emV0YSA9IGJpdGdvLmNvaW4oJ3R6ZXRhJyk7XG5cbiAgICB6ZXRhLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd6ZXRhJyk7XG4gICAgemV0YS5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ3pldGEnKTtcbiAgICB6ZXRhLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdaZXRhJyk7XG4gICAgemV0YS5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlMTgpO1xuXG4gICAgdHpldGEuZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3R6ZXRhJyk7XG4gICAgdHpldGEuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCd6ZXRhJyk7XG4gICAgdHpldGEuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgWmV0YScpO1xuICAgIHR6ZXRhLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWUxOCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZXQgYWRkcmVzcyBkZXRhaWxzIHdpdGhvdXQgbWVtb0lkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzLm5vTWVtb0lkQWRkcmVzcyk7XG4gICAgICBhZGRyZXNzRGV0YWlscy5hZGRyZXNzLnNob3VsZC5lcXVhbChhZGRyZXNzLm5vTWVtb0lkQWRkcmVzcyk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KGFkZHJlc3NEZXRhaWxzLm1lbW9JZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhZGRyZXNzIGRldGFpbHMgd2l0aCBtZW1vSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IGJhc2Vjb2luLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MudmFsaWRNZW1vSWRBZGRyZXNzKTtcbiAgICAgIGFkZHJlc3NEZXRhaWxzLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGFkZHJlc3MudmFsaWRNZW1vSWRBZGRyZXNzLnNwbGl0KCc/JylbMF0pO1xuICAgICAgYWRkcmVzc0RldGFpbHMubWVtb0lkLnNob3VsZC5lcXVhbCgnMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBtdWx0aXBsZSBtZW1vIGlkIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAoKCkgPT4ge1xuICAgICAgICBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzLm11bHRpcGxlTWVtb0lkQWRkcmVzcyk7XG4gICAgICB9KS5zaG91bGQudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgd2FsbGV0IHJlY2VpdmUgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0ge1xuICAgICAgICBhZGRyZXNzOiAnemV0YTFrdHJyNGp1M2EybHV4cGNmbXY0NHhycGE0bHd4NHVmc2EzOHd0OD9tZW1vSWQ9NycsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIHJvb3RBZGRyZXNzOiAnemV0YTFrdHJyNGp1M2EybHV4cGNmbXY0NHhycGE0bHd4NHVmc2EzOHd0OCcsXG4gICAgICAgICAgbWVtb0lEOiAnNycsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhyZWNlaXZlQWRkcmVzcyk7XG4gICAgICBpc1ZhbGlkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWNjb3VudCBhZGRyZXNzZXMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczEpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MyKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3M0KSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKCdkZmprMzV5JyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoJycpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy52YWxpZE1lbW9JZEFkZHJlc3MpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLm11bHRpcGxlTWVtb0lkQWRkcmVzcyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdmFsaWRhdG9yIGFkZHJlc3NlcyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MoYWRkcmVzcy52YWxpZGF0b3JBZGRyZXNzMSksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKGFkZHJlc3MudmFsaWRhdG9yQWRkcmVzczIpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcyhhZGRyZXNzLnZhbGlkYXRvckFkZHJlc3MzKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKGFkZHJlc3MudmFsaWRhdG9yQWRkcmVzczQpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MoJ2RmamszNXknKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIHN0cmluZyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcygnJyksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZlcmlmeSB0cmFuc2FjdGlvbjogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogVEVTVF9TRU5EX1RYLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9TRU5EX1RYLnJlY2lwaWVudCxcbiAgICAgICAgICAgIGFtb3VudDogVEVTVF9TRU5EX1RYLnNlbmRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHZlcmlmaWNhdGlvbiB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IGRlbGVnYXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IFRFU1RfREVMRUdBVEVfVFguc2lnbmVkVHhCYXNlNjQsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX0RFTEVHQVRFX1RYLnZhbGlkYXRvcixcbiAgICAgICAgICAgIGFtb3VudDogVEVTVF9ERUxFR0FURV9UWC5zZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB1bmRlbGVnYXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IFRFU1RfVU5ERUxFR0FURV9UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfVU5ERUxFR0FURV9UWC52YWxpZGF0b3IsXG4gICAgICAgICAgICBhbW91bnQ6IFRFU1RfVU5ERUxFR0FURV9UWC5zZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB3aXRoZHJhdyByZXdhcmRzIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IFRFU1RfV0lUSERSQVdfUkVXQVJEU19UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfV0lUSERSQVdfUkVXQVJEU19UWC52YWxpZGF0b3IsXG4gICAgICAgICAgICBhbW91bnQ6ICdVTkFWQUlMQUJMRScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHZlcmlmaWNhdGlvbiB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdpdGggaW52YWxpZCBwYXJhbScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7fTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0geyByZWNpcGllbnRzOiB1bmRlZmluZWQgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCBhIG1lbW8tc3VmZml4ZWQgcmVjaXBpZW50IGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIENTSExELTE3ODA6IHJlY2lwaWVudHMgY2FuIGNhcnJ5IHRoZWlyIG1lbW8gZm9sZGVkIGludG8gdGhlXG4gICAgICAvLyBhZGRyZXNzIGFzIGBhZGRyZXNzP21lbW9JZD1YYCAoc2VlICdzaG91bGQgdmFsaWRhdGUgd2FsbGV0IHJlY2VpdmUgYWRkcmVzcycgYWJvdmUpLFxuICAgICAgLy8gYnV0IGV4cGxhaW5UcmFuc2FjdGlvbigpIGFsd2F5cyByZXBvcnRzIHRoZSBwbGFpbiBvbi1jaGFpbiBhZGRyZXNzIHBsdXMgYSBzZXBhcmF0ZVxuICAgICAgLy8gbWVtbyBmaWVsZCAoc2VlICdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggbWVtbycpLiBCZWZvcmUgdGhlIGZpeCxcbiAgICAgIC8vIGNvbXBhcmluZyB0aGUgcmF3IHN0cmluZ3MgZGlyZWN0bHkgbWFkZSBldmVyeSBtZW1vLXRhZ2dlZCByZWNpcGllbnQgZmFpbCBoZXJlIGV2ZW5cbiAgICAgIC8vIHRob3VnaCB0aGUgdHJhbnNhY3Rpb24gbWF0Y2hlZCBleGFjdGx5IC0gdGhpcyByZXByb2R1Y2VzIGEgbGl2ZSBpbmNpZGVudCBvbiBhIFpFVEFcbiAgICAgIC8vIHdhbGxldCB3aGVyZSB0aGUgY2xpZW50IGNvdWxkIG5ldmVyIHNpZ24gYSBwZW5kaW5nLCBjb3JyZWN0bHktYnVpbHQgdHJhbnNhY3Rpb24uXG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogVEVTVF9UWF9XSVRIX01FTU8uc2lnbmVkVHhCYXNlNjQsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBgJHtURVNUX1RYX1dJVEhfTUVNTy50b30/bWVtb0lkPSR7VEVTVF9UWF9XSVRIX01FTU8ubWVtb31gLFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX1RYX1dJVEhfTUVNTy5zZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHRoZSByZWNpcGllbnQgbWVtb0lkIGRvZXMgbm90IG1hdGNoIHRoZSB0eCBtZW1vJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IFRFU1RfVFhfV0lUSF9NRU1PLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogYCR7VEVTVF9UWF9XSVRIX01FTU8udG99P21lbW9JZD05OTk5OTlgLFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX1RYX1dJVEhfTUVNTy5zZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgdmVyaWZpY2F0aW9uIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHRoZSByZWNpcGllbnQgaGFzIG5vIG1lbW9JZCBidXQgdGhlIHR4IGhhcyBvbmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogVEVTVF9UWF9XSVRIX01FTU8uc2lnbmVkVHhCYXNlNjQsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX1RYX1dJVEhfTUVNTy50byxcbiAgICAgICAgICAgIGFtb3VudDogVEVTVF9UWF9XSVRIX01FTU8uc2VuZEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHZlcmlmaWNhdGlvbiB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4cGxhaW4gVHJhbnNhY3Rpb246ICcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IFRFU1RfU0VORF9UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgIH0pO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddLFxuICAgICAgICBpZDogVEVTVF9TRU5EX1RYLmhhc2gsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX1NFTkRfVFgucmVjaXBpZW50LFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX1NFTkRfVFguc2VuZEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IFRFU1RfU0VORF9UWC5zZW5kQW1vdW50LFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6IFRFU1RfU0VORF9UWC5nYXNCdWRnZXQuYW1vdW50WzBdLmFtb3VudCB9LFxuICAgICAgICB0eXBlOiAwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBkZWxlZ2F0ZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IFRFU1RfREVMRUdBVEVfVFguc2lnbmVkVHhCYXNlNjQsXG4gICAgICB9KTtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3R5cGUnXSxcbiAgICAgICAgaWQ6IFRFU1RfREVMRUdBVEVfVFguaGFzaCxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfREVMRUdBVEVfVFgudmFsaWRhdG9yLFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX0RFTEVHQVRFX1RYLnNlbmRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiBURVNUX0RFTEVHQVRFX1RYLnNlbmRBbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogVEVTVF9ERUxFR0FURV9UWC5nYXNCdWRnZXQuYW1vdW50WzBdLmFtb3VudCB9LFxuICAgICAgICB0eXBlOiAxMyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgdW5kZWxlZ2F0ZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IFRFU1RfVU5ERUxFR0FURV9UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgIH0pO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddLFxuICAgICAgICBpZDogVEVTVF9VTkRFTEVHQVRFX1RYLmhhc2gsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX1VOREVMRUdBVEVfVFgudmFsaWRhdG9yLFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX1VOREVMRUdBVEVfVFguc2VuZEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IFRFU1RfVU5ERUxFR0FURV9UWC5zZW5kQW1vdW50LFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6IFRFU1RfVU5ERUxFR0FURV9UWC5nYXNCdWRnZXQuYW1vdW50WzBdLmFtb3VudCB9LFxuICAgICAgICB0eXBlOiAxNyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgd2l0aGRyYXcgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBsYWluZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBURVNUX1dJVEhEUkFXX1JFV0FSRFNfVFguc2lnbmVkVHhCYXNlNjQsXG4gICAgICB9KTtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3R5cGUnXSxcbiAgICAgICAgaWQ6IFRFU1RfV0lUSERSQVdfUkVXQVJEU19UWC5oYXNoLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9XSVRIRFJBV19SRVdBUkRTX1RYLnZhbGlkYXRvcixcbiAgICAgICAgICAgIGFtb3VudDogJ1VOQVZBSUxBQkxFJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiBURVNUX1dJVEhEUkFXX1JFV0FSRFNfVFguZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQgfSxcbiAgICAgICAgdHlwZTogMTUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IFRFU1RfVFhfV0lUSF9NRU1PLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgfSk7XG4gICAgICBleHBsYWluZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgZGlzcGxheU9yZGVyOiBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ10sXG4gICAgICAgIGlkOiBURVNUX1RYX1dJVEhfTUVNTy5oYXNoLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9UWF9XSVRIX01FTU8udG8sXG4gICAgICAgICAgICBhbW91bnQ6IFRFU1RfVFhfV0lUSF9NRU1PLnNlbmRBbW91bnQsXG4gICAgICAgICAgICBtZW1vOiBURVNUX1RYX1dJVEhfTUVNTy5tZW1vLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogVEVTVF9UWF9XSVRIX01FTU8uc2VuZEFtb3VudCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiBURVNUX1RYX1dJVEhfTUVNTy5nYXNCdWRnZXQuYW1vdW50WzBdLmFtb3VudCB9LFxuICAgICAgICB0eXBlOiAwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbiB3aXRoIG1pc3NpbmcgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHt9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnbWlzc2luZyByZXF1aXJlZCB0eEhleCBwYXJhbWV0ZXInKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBleHBsYWluIHRyYW5zYWN0aW9uIHdpdGggaW52YWxpZCBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogJ3JhbmRvbVN0cmluZycgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzaG91bGQuZXF1YWwoZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOicpLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BhcnNlIFRyYW5zYWN0aW9uczogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcGFyc2UgYSB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5wdXRzUmVzcG9uc2UgPSB7XG4gICAgICAgIGFkZHJlc3M6IFRFU1RfU0VORF9UWC5yZWNpcGllbnQsXG4gICAgICAgIGFtb3VudDogbmV3IEJpZ051bWJlcihURVNUX1NFTkRfVFguc2VuZEFtb3VudCkucGx1cyhURVNUX1NFTkRfVFguZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQpLnRvRml4ZWQoKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRyYW5zZmVyT3V0cHV0c1Jlc3BvbnNlID0ge1xuICAgICAgICBhZGRyZXNzOiBURVNUX1NFTkRfVFgucmVjaXBpZW50LFxuICAgICAgICBhbW91bnQ6IFRFU1RfU0VORF9UWC5zZW5kQW1vdW50LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXg6IFRFU1RfU0VORF9UWC5zaWduZWRUeEJhc2U2NCB9KTtcblxuICAgICAgcGFyc2VkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGlucHV0czogW3RyYW5zZmVySW5wdXRzUmVzcG9uc2VdLFxuICAgICAgICBvdXRwdXRzOiBbdHJhbnNmZXJPdXRwdXRzUmVzcG9uc2VdLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2UgYSB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aGVuIGV4cGxhaW5UcmFuc2FjdGlvbiByZXNwb25zZSBpcyB1bmRlZmluZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzdHViID0gc2lub24uc3R1YihaZXRhLnByb3RvdHlwZSwgJ2V4cGxhaW5UcmFuc2FjdGlvbicpO1xuICAgICAgc3R1Yi5yZXNvbHZlcyh1bmRlZmluZWQpO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnBhcnNlVHJhbnNhY3Rpb24oeyB0eEhleDogVEVTVF9TRU5EX1RYLnNpZ25lZFR4QmFzZTY0IH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICBzdHViLnJlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JlY292ZXIgdHJhbnNhY3Rpb246IHN1Y2Nlc3MgcGF0aCcsICgpID0+IHtcbiAgICBjb25zdCBzYW5kQm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uQWRkcmVzcyA9IHdyd1VzZXIuZGVzdGluYXRpb25BZGRyZXNzO1xuICAgIGNvbnN0IGNvaW4gPSBjb2lucy5nZXQoJ3R6ZXRhJyk7XG4gICAgY29uc3QgdGVzdEJhbGFuY2UgPSBbXG4gICAgICB7XG4gICAgICAgIGRlbm9tOiAnYXpldGEnLFxuICAgICAgICBhbW91bnQ6ICcxNTAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICB9LFxuICAgIF07XG4gICAgY29uc3QgdGVzdENoYWluSWQgPSAndGVzdC1jaGFpbic7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIG5vY2soRW52aXJvbm1lbnRzLnRlc3QuemV0YU5vZGVVcmwpXG4gICAgICAgIC5nZXQoJy9jb3Ntb3MvYXV0aC92MWJldGExL2FjY291bnRzLycgKyB3cndVc2VyLnNlbmRlckFkZHJlc3MpXG4gICAgICAgIC5yZXBseSgyMDAsIG1vY2tBY2NvdW50RGV0YWlsc1Jlc3BvbnNlKTtcblxuICAgICAgY29uc3QgYWNjb3VudEJhbGFuY2UgPSBzYW5kQm94LnN0dWIoWmV0YS5wcm90b3R5cGUsICdnZXRBY2NvdW50QmFsYW5jZScgYXMga2V5b2YgWmV0YSk7XG4gICAgICBhY2NvdW50QmFsYW5jZS53aXRoQXJncyh3cndVc2VyLnNlbmRlckFkZHJlc3MpLnJlc29sdmVzKHRlc3RCYWxhbmNlKTtcblxuICAgICAgY29uc3QgY2hhaW5JZCA9IHNhbmRCb3guc3R1YihaZXRhLnByb3RvdHlwZSwgJ2dldENoYWluSWQnIGFzIGtleW9mIFpldGEpO1xuICAgICAgY2hhaW5JZC53aXRoQXJncygpLnJlc29sdmVzKHRlc3RDaGFpbklkKTtcblxuICAgICAgY29uc3QgZGVzZXJpYWxpemVkRW50Q2hhbGxlbmdlID0gRWNkc2FUeXBlcy5kZXNlcmlhbGl6ZU50aWxkZVdpdGhQcm9vZnMobW9ja1NlcmlhbGl6ZWRDaGFsbGVuZ2VXaXRoUHJvb2ZzKTtcbiAgICAgIHNpbm9uLnN0dWIoRWNkc2FSYW5nZVByb29mLCAnZ2VuZXJhdGVOdGlsZGUnKS5yZXNvbHZlcyhkZXNlcmlhbGl6ZWRFbnRDaGFsbGVuZ2UpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIGZ1bmRzIGZvciBub24tYml0Z28gcmVjb3ZlcmllcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OiB3cndVc2VyLnVzZXJQcml2YXRlS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IHdyd1VzZXIuYmFja3VwUHJpdmF0ZUtleSxcbiAgICAgICAgYml0Z29LZXk6IHdyd1VzZXIuYml0Z29QdWJsaWNLZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHdyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgfSk7XG4gICAgICByZXMuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgcmVzLnNob3VsZC5oYXNPd25Qcm9wZXJ0eSgnc2VyaWFsaXplZFR4Jyk7XG4gICAgICBzYW5kQm94LmFzc2VydC5jYWxsZWRPbmNlKGJhc2Vjb2luLmdldEFjY291bnRCYWxhbmNlKTtcbiAgICAgIHNhbmRCb3guYXNzZXJ0LmNhbGxlZE9uY2UoYmFzZWNvaW4uZ2V0Q2hhaW5JZCk7XG5cbiAgICAgIGNvbnN0IHR4biA9IG5ldyBDb3Ntb3NUcmFuc2FjdGlvbihjb2luLCB1dGlscyk7XG4gICAgICB0eG4uZW5yaWNoVHJhbnNhY3Rpb25EZXRhaWxzRnJvbVJhd1RyYW5zYWN0aW9uKHJlcy5zZXJpYWxpemVkVHgpO1xuICAgICAgY29uc3QgdHhuSnNvbiA9IHR4bi50b0pzb24oKTtcbiAgICAgIGNvbnN0IHNlbmRNZXNzYWdlID0gdHhuSnNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUgYXMgU2VuZE1lc3NhZ2U7XG4gICAgICBjb25zdCBiYWxhbmNlID0gbmV3IEJpZ051bWJlcih0ZXN0QmFsYW5jZVswXS5hbW91bnQpO1xuICAgICAgY29uc3QgZ2FzQW1vdW50ID0gbmV3IEJpZ051bWJlcihHQVNfQU1PVU5UKTtcbiAgICAgIGNvbnN0IGFjdHVhbEJhbGFuY2UgPSBiYWxhbmNlLm1pbnVzKGdhc0Ftb3VudCk7XG4gICAgICBzaG91bGQuZXF1YWwoc2VuZE1lc3NhZ2UudG9BZGRyZXNzLCBkZXN0aW5hdGlvbkFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNlbmRNZXNzYWdlLmFtb3VudFswXS5hbW91bnQsIGFjdHVhbEJhbGFuY2UudG9GaXhlZCgpKTtcbiAgICAgIHNob3VsZC5lcXVhbChzZW5kTWVzc2FnZS5hbW91bnRbMF0uZGVub20sIHRlc3RCYWxhbmNlWzBdLmRlbm9tKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVkZWxlZ2F0ZSBmdW5kcyB0byBuZXcgdmFsaWRhdG9yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVkZWxlZ2F0ZSh7XG4gICAgICAgIHVzZXJLZXk6IHdyd1VzZXIudXNlclByaXZhdGVLZXksXG4gICAgICAgIGJhY2t1cEtleTogd3J3VXNlci5iYWNrdXBQcml2YXRlS2V5LFxuICAgICAgICBiaXRnb0tleTogd3J3VXNlci5iaXRnb1B1YmxpY0tleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogd3J3VXNlci53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhbW91bnRUb1JlZGVsZWdhdGU6ICcxMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIHZhbGlkYXRvclNyY0FkZHJlc3M6ICd6ZXRhdmFsb3BlcjFkaHNrNXY1M2gzeHdnNDJwZGczcjB3N3psODN5eGd5aHM2OHY3bCcsXG4gICAgICAgIHZhbGlkYXRvckRzdEFkZHJlc3M6ICd6ZXRhdmFsb3BlcjE5djA3d3Z3bTN6dXg5cGF3Y21jY3I3YzRoZmV6YWgwcjh3aHNjNicsXG4gICAgICB9KTtcblxuICAgICAgcmVzLnNob3VsZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgIHJlcy5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NlcmlhbGl6ZWRUeCcpO1xuICAgICAgc2FuZEJveC5hc3NlcnQuY2FsbGVkT25jZShiYXNlY29pbi5nZXRDaGFpbklkKTtcblxuICAgICAgY29uc3QgdHhuID0gbmV3IENvc21vc1RyYW5zYWN0aW9uKGNvaW4sIHV0aWxzKTtcbiAgICAgIHR4bi5lbnJpY2hUcmFuc2FjdGlvbkRldGFpbHNGcm9tUmF3VHJhbnNhY3Rpb24ocmVzLnNlcmlhbGl6ZWRUeCk7XG4gICAgICBjb25zdCB0eG5Kc29uID0gdHhuLnRvSnNvbigpO1xuICAgICAgY29uc3QgcmVkZWxlZ2F0ZU1lc3NhZ2UgPSB0eG5Kc29uLnNlbmRNZXNzYWdlc1swXS52YWx1ZSBhcyBSZWRlbGVnYXRlTWVzc2FnZTtcbiAgICAgIHNob3VsZC5lcXVhbChyZWRlbGVnYXRlTWVzc2FnZS52YWxpZGF0b3JTcmNBZGRyZXNzLCAnemV0YXZhbG9wZXIxZGhzazV2NTNoM3h3ZzQycGRnM3Iwdzd6bDgzeXhneWhzNjh2N2wnKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZWRlbGVnYXRlTWVzc2FnZS52YWxpZGF0b3JEc3RBZGRyZXNzLCAnemV0YXZhbG9wZXIxOXYwN3d2d20zenV4OXBhd2NtY2NyN2M0aGZlemFoMHI4d2hzYzYnKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZWRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50LCAnMTAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JlY292ZXIgdHJhbnNhY3Rpb246IGZhaWx1cmUgcGF0aCcsICgpID0+IHtcbiAgICBjb25zdCBzYW5kQm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uQWRkcmVzcyA9IHdyd1VzZXIuZGVzdGluYXRpb25BZGRyZXNzO1xuICAgIGNvbnN0IHRlc3RaZXJvQmFsYW5jZSA9IFtcbiAgICAgIHtcbiAgICAgICAgZGVub206ICdhemV0YScsXG4gICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGNvbnN0IHRlc3RDaGFpbklkID0gJ3Rlc3QtY2hhaW4nO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBub2NrKEVudmlyb25tZW50cy50ZXN0LnpldGFOb2RlVXJsKVxuICAgICAgICAuZ2V0KCcvY29zbW9zL2F1dGgvdjFiZXRhMS9hY2NvdW50cy8nICsgd3J3VXNlci5zZW5kZXJBZGRyZXNzKVxuICAgICAgICAucmVwbHkoMjAwLCBtb2NrQWNjb3VudERldGFpbHNSZXNwb25zZSk7XG5cbiAgICAgIGNvbnN0IGFjY291bnRCYWxhbmNlID0gc2FuZEJveC5zdHViKFpldGEucHJvdG90eXBlLCAnZ2V0QWNjb3VudEJhbGFuY2UnIGFzIGtleW9mIFpldGEpO1xuICAgICAgYWNjb3VudEJhbGFuY2Uud2l0aEFyZ3Mod3J3VXNlci5zZW5kZXJBZGRyZXNzKS5yZXNvbHZlcyh0ZXN0WmVyb0JhbGFuY2UpO1xuXG4gICAgICBjb25zdCBjaGFpbklkID0gc2FuZEJveC5zdHViKFpldGEucHJvdG90eXBlLCAnZ2V0Q2hhaW5JZCcgYXMga2V5b2YgWmV0YSk7XG4gICAgICBjaGFpbklkLndpdGhBcmdzKCkucmVzb2x2ZXModGVzdENoYWluSWQpO1xuXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRFbnRDaGFsbGVuZ2UgPSBFY2RzYVR5cGVzLmRlc2VyaWFsaXplTnRpbGRlV2l0aFByb29mcyhtb2NrU2VyaWFsaXplZENoYWxsZW5nZVdpdGhQcm9vZnMpO1xuICAgICAgc2lub24uc3R1YihFY2RzYVJhbmdlUHJvb2YsICdnZW5lcmF0ZU50aWxkZScpLnJlc29sdmVzKGRlc2VyaWFsaXplZEVudENoYWxsZW5nZSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgc2FuZEJveC5yZXN0b3JlKCk7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIGJhY2t1cGtleSBpcyBub3QgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyKHtcbiAgICAgICAgICB1c2VyS2V5OiB3cndVc2VyLnVzZXJQcml2YXRlS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiB3cndVc2VyLmJpdGdvUHVibGljS2V5LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHdyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIGJhY2t1cEtleScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBpZiB1c2Vya2V5IGlzIG5vdCBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXIoe1xuICAgICAgICAgIGJhY2t1cEtleTogd3J3VXNlci5iYWNrdXBQcml2YXRlS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiB3cndVc2VyLmJpdGdvUHVibGljS2V5LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHdyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYgd2FsbGV0IHBhc3NwaHJhc2UgaXMgbm90IHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAucmVjb3Zlcih7XG4gICAgICAgICAgdXNlcktleTogd3J3VXNlci51c2VyUHJpdmF0ZUtleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IHdyd1VzZXIuYmFja3VwUHJpdmF0ZUtleSxcbiAgICAgICAgICBiaXRnb0tleTogd3J3VXNlci5iaXRnb1B1YmxpY0tleSxcbiAgICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHdhbGxldCBwYXNzcGhyYXNlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIHRoZXJlIGlzIG5vIGJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAucmVjb3Zlcih7XG4gICAgICAgICAgdXNlcktleTogd3J3VXNlci51c2VyUHJpdmF0ZUtleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IHdyd1VzZXIuYmFja3VwUHJpdmF0ZUtleSxcbiAgICAgICAgICBiaXRnb0tleTogd3J3VXNlci5iaXRnb1B1YmxpY0tleSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB3cndVc2VyLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnRGlkIG5vdCBoYXZlIGVub3VnaCBmdW5kcyB0byByZWNvdmVyJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|