@bitgo/sdk-core 8.2.0 → 8.3.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.
- package/CHANGELOG.md +14 -0
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +13 -4
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +53 -8
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +17 -17
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +18 -18
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +32 -35
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
- package/dist/src/bitgo/bitgoBase.d.ts +0 -1
- package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
- package/dist/src/bitgo/bitgoBase.js +1 -1
- package/dist/src/bitgo/enterprise/enterprise.d.ts +11 -8
- package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
- package/dist/src/bitgo/enterprise/enterprise.js +16 -4
- package/dist/src/bitgo/enterprise/iEnterprise.d.ts +10 -3
- package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
- package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
- package/dist/src/bitgo/tss/common.d.ts +2 -2
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +1 -1
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +3 -3
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/ecdsa.js +2 -2
- package/dist/src/bitgo/tss/ecdsa/types.d.ts +2 -2
- package/dist/src/bitgo/tss/ecdsa/types.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +16 -22
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +52 -92
- package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +2 -21
- package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts +13 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/iWallets.d.ts +1 -1
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +1 -1
- package/dist/src/bitgo/wallet/wallet.d.ts +9 -1
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +13 -1
- package/dist/tsconfig.tsbuildinfo +899 -754
- package/package.json +4 -4
- package/LICENSE +0 -191
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [8.3.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-core@8.2.0...@bitgo/sdk-core@8.3.0) (2023-05-03)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **sdk-core:** fix incorrect check verifying range proof ([3c74334](https://github.com/BitGo/BitGoJS/commit/3c74334721a1517b474540f38a7443368f0e8e3b))
|
|
11
|
+
- **sdk-core:** fix url path of fetching tss config API ([0d61a31](https://github.com/BitGo/BitGoJS/commit/0d61a31f3dfd6b5e892bbeb38889f56540a12cda))
|
|
12
|
+
- **sdk-core:** use coin agnostic url for get challenges ([3661ff8](https://github.com/BitGo/BitGoJS/commit/3661ff8a8fcf52d8290c5fff54339c53938bdcbf))
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
- **sdk-core:** enable signing with enterprise challenge ([68391c1](https://github.com/BitGo/BitGoJS/commit/68391c1b165ae63f67ef37f2ea2344aeb21cc9d8))
|
|
17
|
+
- **sdk-core:** move ntilde (de/se)rialize methods ([5ee0e41](https://github.com/BitGo/BitGoJS/commit/5ee0e41f8aff8bbc232f6c504a3938dd1e27cba1))
|
|
18
|
+
- **sdk-core:** save enterprise data on get ([58109d3](https://github.com/BitGo/BitGoJS/commit/58109d3a916d09c0e29072fbaecc442fea930873))
|
|
19
|
+
|
|
6
20
|
# [8.2.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-core@8.1.0...@bitgo/sdk-core@8.2.0) (2023-04-25)
|
|
7
21
|
|
|
8
22
|
### Features
|
|
@@ -3,7 +3,7 @@ import HDTree from '../../hdTree';
|
|
|
3
3
|
import { Hash } from 'crypto';
|
|
4
4
|
import { Secp256k1Curve } from '../../curves';
|
|
5
5
|
import Shamir from '../../shamir';
|
|
6
|
-
import { DShare, KeyCombined,
|
|
6
|
+
import { DShare, KeyCombined, KeyCombinedWithNtilde, KeyShare, NShare, OShare, PShare, Signature, SignCombine, SignCombineRT, SignConvert, SignConvertRT, SignShareRT, SShare, SubkeyShare, XShare, XShareWithNtilde, YShare, YShareWithNtilde, SerializedNtilde, DeserializedNtilde } from './types';
|
|
7
7
|
/**
|
|
8
8
|
* ECDSA TSS implementation supporting 2:n Threshold
|
|
9
9
|
*/
|
|
@@ -53,11 +53,11 @@ export default class Ecdsa {
|
|
|
53
53
|
* @param {XShare} xShare Private xShare of signer
|
|
54
54
|
* @param {YShare} yShare YShare of the other participant involved in
|
|
55
55
|
* this signing operation
|
|
56
|
-
* @param challenge
|
|
56
|
+
* @param {SerializedNtilde} challenge
|
|
57
57
|
* @returns {KeyCombined} The new XShare and YShares with the amended
|
|
58
58
|
* challenge values
|
|
59
59
|
*/
|
|
60
|
-
appendChallenge(xShare: XShare, yShare: YShare, challenge?:
|
|
60
|
+
appendChallenge(xShare: XShare, yShare: YShare, challenge?: SerializedNtilde): Promise<KeyCombinedWithNtilde>;
|
|
61
61
|
/**
|
|
62
62
|
* Create signing shares.
|
|
63
63
|
* @param {xShare} xShare Private xShare of current participant signer
|
|
@@ -65,7 +65,7 @@ export default class Ecdsa {
|
|
|
65
65
|
* @returns {SignShareRT} Returns the participant private w-share
|
|
66
66
|
* and k-share to be distributed to other participant signer
|
|
67
67
|
*/
|
|
68
|
-
signShare(xShare: XShare |
|
|
68
|
+
signShare(xShare: XShare | XShareWithNtilde, yShare: YShareWithNtilde): Promise<SignShareRT>;
|
|
69
69
|
/**
|
|
70
70
|
* Perform multiplicitive-to-additive (MtA) share conversion with another
|
|
71
71
|
* signer.
|
|
@@ -104,5 +104,14 @@ export default class Ecdsa {
|
|
|
104
104
|
* @returns {boolean} True if signature is valid; False otherwise
|
|
105
105
|
*/
|
|
106
106
|
verify(message: Buffer, signature: Signature, hash?: Hash, shouldHash?: boolean): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Deserializes a challenge and it's proofs from hex strings to bigint
|
|
109
|
+
*/
|
|
110
|
+
static deserializeNtilde(challenge: SerializedNtilde): DeserializedNtilde;
|
|
111
|
+
/**
|
|
112
|
+
* Serializes a challenge and it's proofs from big int to hex strings.
|
|
113
|
+
* @param challenge
|
|
114
|
+
*/
|
|
115
|
+
static serializeNtilde(challenge: DeserializedNtilde): SerializedNtilde;
|
|
107
116
|
}
|
|
108
117
|
//# sourceMappingURL=ecdsa.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../../../../../src/account-lib/mpc/tss/ecdsa/ecdsa.ts"],"names":[],"mappings":";AAGA,OAAO,MAAgC,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAc,IAAI,EAAe,MAAM,QAAQ,CAAC;AAIvD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,OAAO,EAGL,MAAM,EAEN,WAAW,EACX,qBAAqB,EACrB,QAAQ,EAGR,MAAM,EACN,MAAM,EACN,MAAM,
|
|
1
|
+
{"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../../../../../src/account-lib/mpc/tss/ecdsa/ecdsa.ts"],"names":[],"mappings":";AAGA,OAAO,MAAgC,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAc,IAAI,EAAe,MAAM,QAAQ,CAAC;AAIvD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,OAAO,EAGL,MAAM,EAEN,WAAW,EACX,qBAAqB,EACrB,QAAQ,EAGR,MAAM,EACN,MAAM,EACN,MAAM,EAEN,SAAS,EACT,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,MAAM,EACN,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,MAAM,EACN,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAQjB;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,MAAM,CAAC,KAAK,EAAE,cAAc,CAAwB;IACpD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAe;IACpC,MAAM,CAAC,MAAM,EAAE,MAAM,CAA2B;IAChD;;;;;;;;;OASG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,UAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkEnH;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW;IAiD1D;;;;;;;OAOG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW;IAkEvE;;;;;;OAMG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAqB9D;;;;;;;;;OASG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAoBnH;;;;;;OAMG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IA8ElG;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IAqS9D;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa;IAiC/C;;;;;;;;OAQG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,UAAO,GAAG,MAAM;IAwBvF;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS;IAqB/C;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,UAAO,GAAG,OAAO;IAatF;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,kBAAkB;IAqBzE;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,kBAAkB,GAAG,gBAAgB;CAoBxE"}
|
|
@@ -34,7 +34,7 @@ const curves_1 = require("../../curves");
|
|
|
34
34
|
const shamir_1 = __importDefault(require("../../shamir"));
|
|
35
35
|
const rangeProof = __importStar(require("./rangeproof"));
|
|
36
36
|
const _5n = BigInt(5);
|
|
37
|
-
function
|
|
37
|
+
function hasNtilde(share) {
|
|
38
38
|
return 'ntilde' in share;
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
@@ -252,17 +252,15 @@ class Ecdsa {
|
|
|
252
252
|
* @param {XShare} xShare Private xShare of signer
|
|
253
253
|
* @param {YShare} yShare YShare of the other participant involved in
|
|
254
254
|
* this signing operation
|
|
255
|
-
* @param challenge
|
|
255
|
+
* @param {SerializedNtilde} challenge
|
|
256
256
|
* @returns {KeyCombined} The new XShare and YShares with the amended
|
|
257
257
|
* challenge values
|
|
258
258
|
*/
|
|
259
259
|
async appendChallenge(xShare, yShare, challenge) {
|
|
260
260
|
if (!challenge) {
|
|
261
|
-
challenge = await rangeProof.
|
|
261
|
+
challenge = Ecdsa.serializeNtilde(await rangeProof.generateNtilde(3072));
|
|
262
262
|
}
|
|
263
|
-
const ntilde =
|
|
264
|
-
const h1 = util_1.bigIntToBufferBE(challenge.h1, 384).toString('hex');
|
|
265
|
-
const h2 = util_1.bigIntToBufferBE(challenge.h2, 384).toString('hex');
|
|
263
|
+
const { ntilde, h1, h2 } = challenge;
|
|
266
264
|
return {
|
|
267
265
|
xShare: { ...xShare, ntilde, h1, h2 },
|
|
268
266
|
yShares: {
|
|
@@ -287,7 +285,7 @@ class Ecdsa {
|
|
|
287
285
|
async signShare(xShare, yShare) {
|
|
288
286
|
const pk = util_1.getPaillierPublicKey(crypto_2.hexToBigInt(xShare.n));
|
|
289
287
|
// Generate a challenge if ntilde is not present in the xShare.
|
|
290
|
-
if (!
|
|
288
|
+
if (!hasNtilde(xShare)) {
|
|
291
289
|
xShare = (await this.appendChallenge(xShare, yShare)).xShare;
|
|
292
290
|
}
|
|
293
291
|
const k = Ecdsa.curve.scalarRandom();
|
|
@@ -681,9 +679,56 @@ class Ecdsa {
|
|
|
681
679
|
util_1.bigIntToBufferBE(crypto_2.hexToBigInt(signature['s']), 32),
|
|
682
680
|
]), crypto_2.hexToBigInt(signature['y']));
|
|
683
681
|
}
|
|
682
|
+
/**
|
|
683
|
+
* Deserializes a challenge and it's proofs from hex strings to bigint
|
|
684
|
+
*/
|
|
685
|
+
static deserializeNtilde(challenge) {
|
|
686
|
+
const deserializedNtilde = {
|
|
687
|
+
ntilde: crypto_2.hexToBigInt(challenge.ntilde),
|
|
688
|
+
h1: crypto_2.hexToBigInt(challenge.h1),
|
|
689
|
+
h2: crypto_2.hexToBigInt(challenge.h2),
|
|
690
|
+
};
|
|
691
|
+
if (challenge.ntildeProof) {
|
|
692
|
+
deserializedNtilde.ntildeProof = {
|
|
693
|
+
h1WrtH2: {
|
|
694
|
+
alpha: crypto_2.convertHexArrToBigIntArr(challenge.ntildeProof.h1WrtH2.alpha),
|
|
695
|
+
t: crypto_2.convertHexArrToBigIntArr(challenge.ntildeProof.h1WrtH2.t),
|
|
696
|
+
},
|
|
697
|
+
h2WrtH1: {
|
|
698
|
+
alpha: crypto_2.convertHexArrToBigIntArr(challenge.ntildeProof.h2WrtH1.alpha),
|
|
699
|
+
t: crypto_2.convertHexArrToBigIntArr(challenge.ntildeProof.h2WrtH1.t),
|
|
700
|
+
},
|
|
701
|
+
};
|
|
702
|
+
}
|
|
703
|
+
return deserializedNtilde;
|
|
704
|
+
}
|
|
705
|
+
/**
|
|
706
|
+
* Serializes a challenge and it's proofs from big int to hex strings.
|
|
707
|
+
* @param challenge
|
|
708
|
+
*/
|
|
709
|
+
static serializeNtilde(challenge) {
|
|
710
|
+
const serializedNtilde = {
|
|
711
|
+
ntilde: crypto_2.bigIntToHex(challenge.ntilde),
|
|
712
|
+
h1: crypto_2.bigIntToHex(challenge.h1),
|
|
713
|
+
h2: crypto_2.bigIntToHex(challenge.h2),
|
|
714
|
+
};
|
|
715
|
+
if (challenge.ntildeProof) {
|
|
716
|
+
serializedNtilde.ntildeProof = {
|
|
717
|
+
h1WrtH2: {
|
|
718
|
+
alpha: crypto_2.convertBigIntArrToHexArr(challenge.ntildeProof.h1WrtH2.alpha),
|
|
719
|
+
t: crypto_2.convertBigIntArrToHexArr(challenge.ntildeProof.h1WrtH2.t),
|
|
720
|
+
},
|
|
721
|
+
h2WrtH1: {
|
|
722
|
+
alpha: crypto_2.convertBigIntArrToHexArr(challenge.ntildeProof.h2WrtH1.alpha),
|
|
723
|
+
t: crypto_2.convertBigIntArrToHexArr(challenge.ntildeProof.h2WrtH1.t),
|
|
724
|
+
},
|
|
725
|
+
};
|
|
726
|
+
}
|
|
727
|
+
return serializedNtilde;
|
|
728
|
+
}
|
|
684
729
|
}
|
|
685
730
|
exports.default = Ecdsa;
|
|
686
731
|
Ecdsa.curve = new curves_1.Secp256k1Curve();
|
|
687
732
|
Ecdsa.hdTree = new hdTree_1.BIP32();
|
|
688
733
|
Ecdsa.shamir = new shamir_1.default(Ecdsa.curve);
|
|
689
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYWNjb3VudC1saWIvbXBjL3Rzcy9lY2RzYS9lY2RzYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBa0Q7QUFDbEQsdUVBQXlEO0FBQ3pELHVEQUF5QztBQUN6Qyx5Q0FBNEQ7QUFDNUQsbUNBQXVEO0FBQ3ZELDhDQUF3QztBQUN4QyxpREFBbUQ7QUFDbkQscUNBQXlHO0FBQ3pHLHlDQUE4QztBQUM5QywwREFBa0M7QUFDbEMseURBQTJDO0FBOEIzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdEIsU0FBUyxTQUFTLENBQUMsS0FBc0I7SUFDdkMsT0FBTyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQzNCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQXFCLEtBQUs7SUFJeEI7Ozs7Ozs7OztPQVNHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFhLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUFFLElBQWEsRUFBRSxJQUFJLEdBQUcsS0FBSzs7UUFDN0YsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ25GLE1BQU0seUJBQXlCLENBQUM7U0FDakM7UUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7U0FDakU7UUFFRCxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtZQUM1QixrRUFBa0U7WUFDbEUsbUJBQW1CLEdBQUcs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QU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFO2dCQUM1QixVQUFVLEVBQUU7b0JBQ1YsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDakQsSUFBSSxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDdkQsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDakQsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDakQsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDakQsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDakQsRUFBRSxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDbEQsRUFBRSxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDbkQsRUFBRSxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDbkQsRUFBRSxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDbkQsQ0FBQyxFQUFF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QixDQUFDO0lBQ0osQ0FBQzs7QUFsd0JILHdCQW13QkM7QUFsd0JRLFdBQUssR0FBbUIsSUFBSSx1QkFBYyxFQUFFLENBQUM7QUFDN0MsWUFBTSxHQUFXLElBQUksY0FBSyxFQUFFLENBQUM7QUFDN0IsWUFBTSxHQUFXLElBQUksZ0JBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYWlsbGllckJpZ2ludCBmcm9tICdwYWlsbGllci1iaWdpbnQnO1xuaW1wb3J0ICogYXMgYmlnaW50Q3J5cHRvVXRpbHMgZnJvbSAnYmlnaW50LWNyeXB0by11dGlscyc7XG5pbXBvcnQgKiBhcyBzZWNwIGZyb20gJ0Bub2JsZS9zZWNwMjU2azEnO1xuaW1wb3J0IEhEVHJlZSwgeyBCSVAzMiwgY2hhaW5jb2RlQmFzZSB9IGZyb20gJy4uLy4uL2hkVHJlZSc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoLCBIYXNoLCByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBoZXhUb0JpZ0ludCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvY3J5cHRvJztcbmltcG9ydCB7IGJpZ0ludEZyb21CdWZmZXJCRSwgYmlnSW50RnJvbVU4QUJFLCBiaWdJbnRUb0J1ZmZlckJFLCBnZXRQYWlsbGllclB1YmxpY0tleSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgU2VjcDI1NmsxQ3VydmUgfSBmcm9tICcuLi8uLi9jdXJ2ZXMnO1xuaW1wb3J0IFNoYW1pciBmcm9tICcuLi8uLi9zaGFtaXInO1xuaW1wb3J0ICogYXMgcmFuZ2VQcm9vZiBmcm9tICcuL3JhbmdlcHJvb2YnO1xuaW1wb3J0IHtcbiAgQVNoYXJlLFxuICBCU2hhcmUsXG4gIERTaGFyZSxcbiAgR1NoYXJlLFxuICBLZXlDb21iaW5lZCxcbiAgS2V5Q29tYmluZWRXaXRoTlRpbGRlLFxuICBLZXlTaGFyZSxcbiAgS1NoYXJlLFxuICBNVVNoYXJlLFxuICBOU2hhcmUsXG4gIE5UaWxkZSxcbiAgT1NoYXJlLFxuICBQU2hhcmUsXG4gIFJhbmdlUHJvb2ZXaXRoQ2hlY2ssXG4gIFNpZ25hdHVyZSxcbiAgU2lnbkNvbWJpbmUsXG4gIFNpZ25Db21iaW5lUlQsXG4gIFNpZ25Db252ZXJ0LFxuICBTaWduQ29udmVydFJULFxuICBTaWduU2hhcmVSVCxcbiAgU1NoYXJlLFxuICBTdWJrZXlTaGFyZSxcbiAgWFNoYXJlLFxuICBYU2hhcmVXaXRoTlRpbGRlLFxuICBZU2hhcmUsXG4gIFlTaGFyZVdpdGhOVGlsZGUsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBfNW4gPSBCaWdJbnQoNSk7XG5cbmZ1bmN0aW9uIGhhc05UaWxkZShzaGFyZTogWFNoYXJlIHwgWVNoYXJlKTogc2hhcmUgaXMgWFNoYXJlV2l0aE5UaWxkZSB8IFlTaGFyZVdpdGhOVGlsZGUge1xuICByZXR1cm4gJ250aWxkZScgaW4gc2hhcmU7XG59XG5cbi8qKlxuICogRUNEU0EgVFNTIGltcGxlbWVudGF0aW9uIHN1cHBvcnRpbmcgMjpuIFRocmVzaG9sZFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFY2RzYSB7XG4gIHN0YXRpYyBjdXJ2ZTogU2VjcDI1NmsxQ3VydmUgPSBuZXcgU2VjcDI1NmsxQ3VydmUoKTtcbiAgc3RhdGljIGhkVHJlZTogSERUcmVlID0gbmV3IEJJUDMyKCk7XG4gIHN0YXRpYyBzaGFtaXI6IFNoYW1pciA9IG5ldyBTaGFtaXIoRWNkc2EuY3VydmUpO1xuICAvKipcbiAgICogR2VuZXJhdGUgc2hhcmVzIGZvciBwYXJ0aWNpcGFudCBhdCBpbmRleCBhbmQgc3BsaXQga2V5cyBgKHRocmVzaG9sZCxudW1TaGFyZXMpYCB3YXlzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggcGFydGljaXBhbnQgaW5kZXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRocmVzaG9sZCBTaWduaW5nIHRocmVzaG9sZFxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtU2hhcmVzICBOdW1iZXIgb2Ygc2hhcmVzXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzZWVkIG9wdGlvbmFsIDY0IGJ5dGUgc2VlZCB0byB1c2UgZm9yIGtleSBnZW5lcmF0aW9uXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gc3luYyBvcHRpb25hbCBzeW5jIGZsYWcsIGlmIHRydWUgdGhlbiBhIHN5bmNocm9ub3VzIHZlcnNpb24gb2YgUGFpbGxpZXIga2V5IGdlbmVyYXRpb24gaXMgdXNlZCB0aGF0IGRvZXMgbm90IHNwYXduIFdvcmtlciB0aHJlYWRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxLZXlTaGFyZT59IFJldHVybnMgdGhlIHByaXZhdGUgcC1zaGFyZVxuICAgKiBhbmQgbi1zaGFyZXMgdG8gYmUgZGlzdHJpYnV0ZWQgdG8gcGFydGljaXBhbnRzIGF0IHRoZWlyIGNvcnJlc3BvbmRpbmcgaW5kZXguXG4gICAqL1xuICBhc3luYyBrZXlTaGFyZShpbmRleDogbnVtYmVyLCB0aHJlc2hvbGQ6IG51bWJlciwgbnVtU2hhcmVzOiBudW1iZXIsIHNlZWQ/OiBCdWZmZXIsIHN5bmMgPSBmYWxzZSk6IFByb21pc2U8S2V5U2hhcmU+IHtcbiAgICBpZiAoIShpbmRleCA+IDAgJiYgaW5kZXggPD0gbnVtU2hhcmVzICYmIHRocmVzaG9sZCA8PSBudW1TaGFyZXMgJiYgdGhyZXNob2xkID09PSAyKSkge1xuICAgICAgdGhyb3cgJ0ludmFsaWQgS2V5U2hhcmUgQ29uZmlnJztcbiAgICB9XG5cbiAgICBpZiAoc2VlZCAmJiBzZWVkLmxlbmd0aCA8IDY0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlZWQgbXVzdCBoYXZlIGEgbGVuZ3RoIG9mIGF0IGxlYXN0IDY0IGJ5dGVzJyk7XG4gICAgfVxuXG4gICAgbGV0IHNlZWRXaXRoVmFsaWRMZW5ndGggPSBzZWVkO1xuICAgIGlmIChzZWVkICYmIHNlZWQubGVuZ3RoID4gNjQpIHtcbiAgICAgIC8vIGlmIHNlZWQgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiA2NCBieXRlcywgaGFzaCBzZWVkIHRvIDY0IGJ5dGVzLlxuICAgICAgc2VlZFdpdGhWYWxpZExlbmd0aCA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZWVkKS5kaWdlc3QoKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBhZGRpdGl2ZWx5IGhvbW9tb3JwaGljIGVuY3J5cHRpb24ga2V5LlxuICAgIGxldCBwYWlsbGllcktleVBhaXI6IHBhaWxsaWVyQmlnaW50LktleVBhaXI7XG4gICAgaWYgKCFzeW5jKSB7XG4gICAgICBwYWlsbGllcktleVBhaXIgPSBhd2FpdCBwYWlsbGllckJpZ2ludC5nZW5lcmF0ZVJhbmRvbUtleXMoMzA3MiwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhaWxsaWVyS2V5UGFpciA9IHBhaWxsaWVyQmlnaW50LmdlbmVyYXRlUmFuZG9tS2V5c1N5bmMoMzA3MiwgdHJ1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHsgcHVibGljS2V5LCBwcml2YXRlS2V5IH0gPSBwYWlsbGllcktleVBhaXI7XG4gICAgLy8gQWNjZXB0IGEgNjQgYnl0ZSBzZWVkIGFuZCBjcmVhdGUgYW4gZXh0ZW5kZWQgcHJpdmF0ZSBrZXkgZnJvbSB0aGF0IHNlZWRcbiAgICBjb25zdCBzZWNyZXRLZXkgPSBzZWVkV2l0aFZhbGlkTGVuZ3RoICYmIGJpcDMyLmZyb21TZWVkKHNlZWRXaXRoVmFsaWRMZW5ndGgpO1xuICAgIGNvbnN0IHUgPVxuICAgICAgKHNlY3JldEtleSAmJiBzZWNyZXRLZXkucHJpdmF0ZUtleSAmJiBiaWdJbnRGcm9tVThBQkUobmV3IFVpbnQ4QXJyYXkoc2VjcmV0S2V5LnByaXZhdGVLZXkpKSkgPz9cbiAgICAgIEVjZHNhLmN1cnZlLnNjYWxhclJhbmRvbSgpO1xuICAgIGNvbnN0IHkgPSBFY2RzYS5jdXJ2ZS5iYXNlUG9pbnRNdWx0KHUpO1xuICAgIGNvbnN0IGNoYWluY29kZSA9IChzZWNyZXRLZXkgJiYgc2VjcmV0S2V5LmNoYWluQ29kZSkgPz8gcmFuZG9tQnl0ZXMoMzIpO1xuICAgIC8vIENvbXB1dGUgc2VjcmV0IHNoYXJlcyBvZiB0aGUgcHJpdmF0ZSBrZXlcbiAgICBjb25zdCB7IHNoYXJlczogdVNoYXJlcywgdiB9ID0gRWNkc2Euc2hhbWlyLnNwbGl0KHUsIHRocmVzaG9sZCwgbnVtU2hhcmVzKTtcbiAgICBjb25zdCBjdXJyZW50UGFydGljaXBhbnQ6IFBTaGFyZSA9IHtcbiAgICAgIGk6IGluZGV4LFxuICAgICAgdDogdGhyZXNob2xkLFxuICAgICAgYzogbnVtU2hhcmVzLFxuICAgICAgbDogYmlnSW50VG9CdWZmZXJCRShwcml2YXRlS2V5LmxhbWJkYSwgMTkyKS50b1N0cmluZygnaGV4JyksXG4gICAgICBtOiBiaWdJbnRUb0J1ZmZlckJFKHByaXZhdGVLZXkubXUsIDE5MikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgbjogYmlnSW50VG9CdWZmZXJCRShwdWJsaWNLZXkubiwgMzg0KS50b1N0cmluZygnaGV4JyksXG4gICAgICB5OiBiaWdJbnRUb0J1ZmZlckJFKHksIDMzKS50b1N0cmluZygnaGV4JyksXG4gICAgICB1OiBiaWdJbnRUb0J1ZmZlckJFKHVTaGFyZXNbaW5kZXhdLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgdXU6IHUudG9TdHJpbmcoKSxcbiAgICAgIGNoYWluY29kZTogY2hhaW5jb2RlLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICAgIGNvbnN0IGtleVNoYXJlOiBLZXlTaGFyZSA9IHtcbiAgICAgIHBTaGFyZTogY3VycmVudFBhcnRpY2lwYW50LFxuICAgICAgblNoYXJlczoge30sXG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qgc2hhcmUgaW4gdVNoYXJlcykge1xuICAgICAgY29uc3QgcGFydGljaXBhbnRJbmRleCA9IHBhcnNlSW50KHNoYXJlLCAxMCk7XG4gICAgICBpZiAocGFydGljaXBhbnRJbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgICAga2V5U2hhcmUublNoYXJlc1twYXJ0aWNpcGFudEluZGV4XSA9IHtcbiAgICAgICAgICBpOiBwYXJ0aWNpcGFudEluZGV4LFxuICAgICAgICAgIGo6IGN1cnJlbnRQYXJ0aWNpcGFudFsnaSddLFxuICAgICAgICAgIG46IHB1YmxpY0tleS5uLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICB5OiBiaWdJbnRUb0J1ZmZlckJFKHksIDMzKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgdjogYmlnSW50VG9CdWZmZXJCRSh2WzBdLCAzMykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHU6IGJpZ0ludFRvQnVmZmVyQkUodVNoYXJlc1twYXJ0aWNpcGFudEluZGV4XSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBjaGFpbmNvZGU6IGNoYWluY29kZS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0gYXMgTlNoYXJlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5U2hhcmU7XG4gIH1cblxuICAvKipcbiAgICogQ29tYmluZSBkYXRhIHNoYXJlZCBkdXJpbmcgdGhlIGtleSBnZW5lcmF0aW9uIHByb3RvY29sLlxuICAgKiBAcGFyYW0ge0tleVNoYXJlfSBwYXJ0aWNpcGFudFNoYXJlcyBwcml2YXRlIHAtc2hhcmUgYW5kXG4gICAqIG4tc2hhcmVzIHJlY2VpdmVkIGZyb20gYWxsIG90aGVyIHBhcnRpY2lwYW50cy5cbiAgICogQHJldHVybnMge0tleUNvbWJpbmVkfSBSZXR1cm5zIHRoZSBwYXJ0aWNpcGFudCBwcml2YXRlIHgtc2hhcmVcbiAgICogYW5kIHktc2hhcmVzIHRvIGJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHNpZ25pbmcgc2hhcmVzLlxuICAgKi9cbiAga2V5Q29tYmluZShwU2hhcmU6IFBTaGFyZSwgblNoYXJlczogTlNoYXJlW10pOiBLZXlDb21iaW5lZCB7XG4gICAgY29uc3QgYWxsU2hhcmVzID0gW3BTaGFyZSwgLi4ublNoYXJlc107XG4gICAgLy8gQ29tcHV0ZSB0aGUgcHVibGljIGtleS5cbiAgICBjb25zdCB5ID0gYWxsU2hhcmVzLm1hcCgocGFydGljaXBhbnQpID0+IGhleFRvQmlnSW50KHBhcnRpY2lwYW50Wyd5J10pKS5yZWR1Y2UoRWNkc2EuY3VydmUucG9pbnRBZGQpO1xuICAgIC8vIEFkZCBzZWNyZXQgc2hhcmVzXG4gICAgY29uc3QgeCA9IGFsbFNoYXJlcy5tYXAoKHBhcnRpY2lwYW50KSA9PiBoZXhUb0JpZ0ludChwYXJ0aWNpcGFudFsndSddKSkucmVkdWNlKEVjZHNhLmN1cnZlLnNjYWxhckFkZCk7XG5cbiAgICAvLyBWZXJpZnkgc2hhcmVzLlxuICAgIGZvciAoY29uc3Qgc2hhcmUgb2YgblNoYXJlcykge1xuICAgICAgaWYgKHNoYXJlLnYpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBFY2RzYS5zaGFtaXIudmVyaWZ5KGhleFRvQmlnSW50KHNoYXJlLnUpLCBbaGV4VG9CaWdJbnQoc2hhcmUueSksIGhleFRvQmlnSW50KHNoYXJlLnYhKV0sIHBTaGFyZS5pKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgdmVyaWZ5IHNoYXJlIGZyb20gcGFydGljaXBhbnQgJHtzaGFyZS5qfS4gVmVyaWZpY2F0aW9uIGVycm9yOiAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoYWluY29kZSB3aWxsIGJlIHVzZWQgaW4gZnV0dXJlIHdoZW4gd2UgYWRkIHN1cHBvcnQgZm9yIGtleSBkZXJpdmF0aW9uIGZvciBlY2RzYVxuICAgIGNvbnN0IGNoYWluY29kZXMgPSBbcFNoYXJlLCAuLi5uU2hhcmVzXS5tYXAoKHsgY2hhaW5jb2RlIH0pID0+IGJpZ0ludEZyb21CdWZmZXJCRShCdWZmZXIuZnJvbShjaGFpbmNvZGUsICdoZXgnKSkpO1xuICAgIGNvbnN0IGNoYWluY29kZSA9IGNoYWluY29kZXMucmVkdWNlKFxuICAgICAgKGFjYywgY2hhaW5jb2RlKSA9PlxuICAgICAgICAoYWNjICsgY2hhaW5jb2RlKSAlIEJpZ0ludCgnMHgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnKSAvLyAyXjI1NlxuICAgICk7XG5cbiAgICBjb25zdCBwYXJ0aWNpcGFudHM6IEtleUNvbWJpbmVkID0ge1xuICAgICAgeFNoYXJlOiB7XG4gICAgICAgIGk6IHBTaGFyZS5pLFxuICAgICAgICBsOiBwU2hhcmUubCxcbiAgICAgICAgbTogcFNoYXJlLm0sXG4gICAgICAgIG46IHBTaGFyZS5uLFxuICAgICAgICB5OiBiaWdJbnRUb0J1ZmZlckJFKHksIDMzKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHg6IGJpZ0ludFRvQnVmZmVyQkUoeCwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgY2hhaW5jb2RlOiBiaWdJbnRUb0J1ZmZlckJFKGNoYWluY29kZSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0sXG4gICAgICB5U2hhcmVzOiB7fSxcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBzaGFyZSBpbiBuU2hhcmVzKSB7XG4gICAgICBjb25zdCBwYXJ0aWNpcGFudEluZGV4ID0gblNoYXJlc1tzaGFyZV1bJ2onXTtcbiAgICAgIHBhcnRpY2lwYW50cy55U2hhcmVzW3BhcnRpY2lwYW50SW5kZXhdID0ge1xuICAgICAgICBpOiBwU2hhcmUuaSxcbiAgICAgICAgajogblNoYXJlc1tzaGFyZV1bJ2onXSxcbiAgICAgICAgbjogblNoYXJlc1tzaGFyZV1bJ24nXSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBwYXJ0aWNpcGFudHM7XG4gIH1cblxuICAvKipcbiAgICogRGVyaXZlIHNoYXJlcyBmb3IgYSBCSVAtMzIgc3Via2V5LlxuICAgKiBAcGFyYW0ge1BTaGFyZX0gVGhlIHVzZXIncyBwLXNoYXJlLlxuICAgKiBAcGFyYW0ge05TaGFyZVtdfSBUaGUgbi1zaGFyZXMgcmVjZWl2ZWQgZnJvbSB0aGUgb3RoZXIgcGFydGljaXBhbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gVGhlIEJJUC0zMiBwYXRoIHRvIGRlcml2ZS5cbiAgICogQHJldHVybnMge1N1YmtleVNoYXJlfSBSZXR1cm5zIHRoZSBwcml2YXRlIHgtc2hhcmUgYW5kIG4tc2hhcmVzIHRvXG4gICAqIGJlIGRpc3RyaWJ1dGVkIHRvIHBhcnRpY2lwYW50cyBhdCB0aGVpciBjb3JyZXNwb25kaW5nIGluZGV4LlxuICAgKi9cbiAga2V5RGVyaXZlKHBTaGFyZTogUFNoYXJlLCBuU2hhcmVzOiBOU2hhcmVbXSwgcGF0aDogc3RyaW5nKTogU3Via2V5U2hhcmUge1xuICAgIGNvbnN0IHlWYWx1ZXMgPSBbcFNoYXJlLCAuLi5uU2hhcmVzXS5tYXAoKHNoYXJlKSA9PiBoZXhUb0JpZ0ludChzaGFyZS55KSk7XG4gICAgY29uc3QgeSA9IHlWYWx1ZXMucmVkdWNlKChwYXJ0aWFsLCBzaGFyZSkgPT4gRWNkc2EuY3VydmUucG9pbnRBZGQocGFydGlhbCwgc2hhcmUpKTtcbiAgICBjb25zdCB1ID0gQmlnSW50KHBTaGFyZS51dSk7XG4gICAgbGV0IGNvbnRyaWJDaGFpbmNvZGUgPSBoZXhUb0JpZ0ludChwU2hhcmUuY2hhaW5jb2RlKTtcbiAgICBjb25zdCBjaGFpbmNvZGVzID0gW2NvbnRyaWJDaGFpbmNvZGUsIC4uLm5TaGFyZXMubWFwKCh7IGNoYWluY29kZSB9KSA9PiBoZXhUb0JpZ0ludChjaGFpbmNvZGUpKV07XG4gICAgY29uc3QgY2hhaW5jb2RlID0gY2hhaW5jb2Rlcy5yZWR1Y2UoKGFjYywgY2hhaW5jb2RlKSA9PiAoYWNjICsgY2hhaW5jb2RlKSAlIGNoYWluY29kZUJhc2UpO1xuXG4gICAgLy8gVmVyaWZ5IHNoYXJlcy5cbiAgICBmb3IgKGNvbnN0IHNoYXJlIG9mIG5TaGFyZXMpIHtcbiAgICAgIGlmIChzaGFyZS52KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRWNkc2Euc2hhbWlyLnZlcmlmeShoZXhUb0JpZ0ludChzaGFyZS51KSwgW2hleFRvQmlnSW50KHNoYXJlLnkpLCBoZXhUb0JpZ0ludChzaGFyZS52ISldLCBwU2hhcmUuaSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHZlcmlmeSBzaGFyZSBmcm9tIHBhcnRpY2lwYW50ICR7c2hhcmUuan0uIFZlcmlmaWNhdGlvbiBlcnJvcjogJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZXJpdmUgc3Via2V5LlxuICAgIGNvbnN0IHN1YmtleSA9IEVjZHNhLmhkVHJlZS5wcml2YXRlRGVyaXZlKHsgcGs6IHksIHNrOiB1LCBjaGFpbmNvZGUgfSwgcGF0aCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgbmV3IHB1YmxpYyBrZXkgY29udHJpYnV0aW9uLlxuICAgIGNvbnN0IGNvbnRyaWJZID0gRWNkc2EuY3VydmUuYmFzZVBvaW50TXVsdChzdWJrZXkuc2spO1xuXG4gICAgLy8gQ2FsY3VsYXRlIG5ldyBjaGFpbmNvZGUgY29udHJpYnV0aW9uLlxuICAgIGNvbnN0IGNoYWluY29kZURlbHRhID0gKGNoYWluY29kZUJhc2UgKyBzdWJrZXkuY2hhaW5jb2RlIC0gY2hhaW5jb2RlKSAlIGNoYWluY29kZUJhc2U7XG4gICAgY29udHJpYkNoYWluY29kZSA9IChjb250cmliQ2hhaW5jb2RlICsgY2hhaW5jb2RlRGVsdGEpICUgY2hhaW5jb2RlQmFzZTtcblxuICAgIC8vIENhbGN1bGF0ZSBuZXcgdSB2YWx1ZXMuXG4gICAgY29uc3QgeyBzaGFyZXM6IHNwbGl0X3UsIHYgfSA9IEVjZHNhLnNoYW1pci5zcGxpdChzdWJrZXkuc2ssIHBTaGFyZS50IHx8IDIsIHBTaGFyZS5jIHx8IDMpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIG5ldyBzaWduaW5nIGtleS5cbiAgICBjb25zdCB4ID0gW3NwbGl0X3VbcFNoYXJlLmldLCAuLi5uU2hhcmVzLm1hcCgoeyB1IH0pID0+IGhleFRvQmlnSW50KHUpKV0ucmVkdWNlKEVjZHNhLmN1cnZlLnNjYWxhckFkZCk7XG5cbiAgICBjb25zdCBQX2k6IFhTaGFyZSA9IHtcbiAgICAgIGk6IHBTaGFyZS5pLFxuICAgICAgbDogcFNoYXJlLmwsXG4gICAgICBtOiBwU2hhcmUubSxcbiAgICAgIG46IHBTaGFyZS5uLFxuICAgICAgeTogYmlnSW50VG9CdWZmZXJCRShzdWJrZXkucGssIDMzKS50b1N0cmluZygnaGV4JyksXG4gICAgICB4OiBiaWdJbnRUb0J1ZmZlckJFKHgsIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICBjaGFpbmNvZGU6IGJpZ0ludFRvQnVmZmVyQkUoc3Via2V5LmNoYWluY29kZSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hhcmVzOiBTdWJrZXlTaGFyZSA9IHtcbiAgICAgIHhTaGFyZTogUF9pLFxuICAgICAgblNoYXJlczoge30sXG4gICAgfTtcblxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IG5TaGFyZXMubGVuZ3RoOyBpbmQrKykge1xuICAgICAgY29uc3QgUF9qID0gblNoYXJlc1tpbmRdO1xuICAgICAgc2hhcmVzLm5TaGFyZXNbUF9qLmpdID0ge1xuICAgICAgICBpOiBQX2ouaixcbiAgICAgICAgajogUF9pLmksXG4gICAgICAgIG46IFBfai5uLFxuICAgICAgICB1OiBiaWdJbnRUb0J1ZmZlckJFKHNwbGl0X3VbUF9qLmpdLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB5OiBiaWdJbnRUb0J1ZmZlckJFKGNvbnRyaWJZLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB2OiBiaWdJbnRUb0J1ZmZlckJFKHZbMF0sIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIGNoYWluY29kZTogYmlnSW50VG9CdWZmZXJCRShjb250cmliQ2hhaW5jb2RlLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcml2ZXMgYSBjaGlsZCBjb21tb24ga2V5Y2hhaW4gZnJvbSBjb21tb24ga2V5Y2hhaW5cbiAgICpcbiAgICogQHBhcmFtIHtjb21tb25LZXljaGFpbn0gVGhlIGNvbW1vbiBrZXljaGFpbiBhcyBhIGhleCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7cGF0aH0gVGhlIEJJUC0zMiBwYXRoIHRvIGRlcml2ZS5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgZGVyaXZlZCBjb21tb24ga2V5Y2hhaW4gYXMgYSBoZXggc3RyaW5nLlxuICAgKi9cbiAgZGVyaXZlVW5oYXJkZW5lZChjb21tb25LZXljaGFpbjogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChFY2RzYS5oZFRyZWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZGVyaXZlIGtleSB3aXRob3V0IEhEVHJlZSBpbXBsZW1lbnRhdGlvblwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXljaGFpbiA9IEJ1ZmZlci5mcm9tKGNvbW1vbktleWNoYWluLCAnaGV4Jyk7XG5cbiAgICBjb25zdCBkZXJpdmVkUHVibGljS2V5Y2hhaW4gPSBFY2RzYS5oZFRyZWUucHVibGljRGVyaXZlKFxuICAgICAge1xuICAgICAgICBwazogYmlnSW50RnJvbUJ1ZmZlckJFKGtleWNoYWluLnNsaWNlKDAsIDMzKSksXG4gICAgICAgIGNoYWluY29kZTogYmlnSW50RnJvbUJ1ZmZlckJFKGtleWNoYWluLnNsaWNlKDMzKSksXG4gICAgICB9LFxuICAgICAgcGF0aFxuICAgICk7XG5cbiAgICBjb25zdCBkZXJpdmVkUGsgPSBiaWdJbnRUb0J1ZmZlckJFKGRlcml2ZWRQdWJsaWNLZXljaGFpbi5waywgMzMpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBkZXJpdmVkQ2hhaW5jb2RlID0gYmlnSW50VG9CdWZmZXJCRShkZXJpdmVkUHVibGljS2V5Y2hhaW4uY2hhaW5jb2RlLCAzMikudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRQayArIGRlcml2ZWRDaGFpbmNvZGU7XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIGdpdmVuIHJhbmdlIHByb29mIGNoYWxsZW5nZSB0byB0aGUgc2hhcmVzIHByZXZpb3VzbHkgY3JlYXRlZFxuICAgKiBieSAja2V5Q29tYmluZS4gR2VuZXJhdGVzIGEgbmV3IGNoYWxsZW5nZSBpZiBub3QgcHJvdmlkZWQuXG4gICAqIEBwYXJhbSB7WFNoYXJlfSB4U2hhcmUgUHJpdmF0ZSB4U2hhcmUgb2Ygc2lnbmVyXG4gICAqIEBwYXJhbSB7WVNoYXJlfSB5U2hhcmUgWVNoYXJlIG9mIHRoZSBvdGhlciBwYXJ0aWNpcGFudCBpbnZvbHZlZCBpblxuICAgKiB0aGlzIHNpZ25pbmcgb3BlcmF0aW9uXG4gICAqIEBwYXJhbSBjaGFsbGVuZ2VcbiAgICogQHJldHVybnMge0tleUNvbWJpbmVkfSBUaGUgbmV3IFhTaGFyZSBhbmQgWVNoYXJlcyB3aXRoIHRoZSBhbWVuZGVkXG4gICAqIGNoYWxsZW5nZSB2YWx1ZXNcbiAgICovXG4gIGFzeW5jIGFwcGVuZENoYWxsZW5nZSh4U2hhcmU6IFhTaGFyZSwgeVNoYXJlOiBZU2hhcmUsIGNoYWxsZW5nZT86IE5UaWxkZSk6IFByb21pc2U8S2V5Q29tYmluZWRXaXRoTlRpbGRlPiB7XG4gICAgaWYgKCFjaGFsbGVuZ2UpIHtcbiAgICAgIGNoYWxsZW5nZSA9IGF3YWl0IHJhbmdlUHJvb2YuZ2VuZXJhdGVOVGlsZGUoMzA3Mik7XG4gICAgfVxuICAgIGNvbnN0IG50aWxkZSA9IGJpZ0ludFRvQnVmZmVyQkUoY2hhbGxlbmdlLm50aWxkZSwgMzg0KS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgaDEgPSBiaWdJbnRUb0J1ZmZlckJFKGNoYWxsZW5nZS5oMSwgMzg0KS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgaDIgPSBiaWdJbnRUb0J1ZmZlckJFKGNoYWxsZW5nZS5oMiwgMzg0KS50b1N0cmluZygnaGV4Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHhTaGFyZTogeyAuLi54U2hhcmUsIG50aWxkZSwgaDEsIGgyIH0sXG4gICAgICB5U2hhcmVzOiB7XG4gICAgICAgIFt5U2hhcmUual06IHtcbiAgICAgICAgICBpOiB5U2hhcmUuaixcbiAgICAgICAgICBqOiB5U2hhcmUuaSxcbiAgICAgICAgICBuOiB4U2hhcmUubixcbiAgICAgICAgICBudGlsZGUsXG4gICAgICAgICAgaDEsXG4gICAgICAgICAgaDIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHNpZ25pbmcgc2hhcmVzLlxuICAgKiBAcGFyYW0ge3hTaGFyZX0geFNoYXJlIFByaXZhdGUgeFNoYXJlIG9mIGN1cnJlbnQgcGFydGljaXBhbnQgc2lnbmVyXG4gICAqIEBwYXJhbSB7WVNoYXJlfSB5U2hhcmUgeVNoYXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50IHNpZ25lclxuICAgKiBAcmV0dXJucyB7U2lnblNoYXJlUlR9IFJldHVybnMgdGhlIHBhcnRpY2lwYW50IHByaXZhdGUgdy1zaGFyZVxuICAgKiBhbmQgay1zaGFyZSB0byBiZSBkaXN0cmlidXRlZCB0byBvdGhlciBwYXJ0aWNpcGFudCBzaWduZXJcbiAgICovXG4gIGFzeW5jIHNpZ25TaGFyZSh4U2hhcmU6IFhTaGFyZSB8IFhTaGFyZVdpdGhOVGlsZGUsIHlTaGFyZTogWVNoYXJlV2l0aE5UaWxkZSk6IFByb21pc2U8U2lnblNoYXJlUlQ+IHtcbiAgICBjb25zdCBwayA9IGdldFBhaWxsaWVyUHVibGljS2V5KGhleFRvQmlnSW50KHhTaGFyZS5uKSk7XG5cbiAgICAvLyBHZW5lcmF0ZSBhIGNoYWxsZW5nZSBpZiBudGlsZGUgaXMgbm90IHByZXNlbnQgaW4gdGhlIHhTaGFyZS5cbiAgICBpZiAoIWhhc05UaWxkZSh4U2hhcmUpKSB7XG4gICAgICB4U2hhcmUgPSAoYXdhaXQgdGhpcy5hcHBlbmRDaGFsbGVuZ2UoeFNoYXJlLCB5U2hhcmUpKS54U2hhcmU7XG4gICAgfVxuXG4gICAgY29uc3QgayA9IEVjZHNhLmN1cnZlLnNjYWxhclJhbmRvbSgpO1xuICAgIGNvbnN0IHJrID0gYXdhaXQgcmFuZ2VQcm9vZi5yYW5kb21Db1ByaW1lVG8ocGsubik7XG4gICAgY29uc3QgY2sgPSBway5lbmNyeXB0KGssIHJrKTtcbiAgICBjb25zdCBnYW1tYSA9IEVjZHNhLmN1cnZlLnNjYWxhclJhbmRvbSgpO1xuXG4gICAgY29uc3QgZCA9IEVjZHNhLmN1cnZlLnNjYWxhck11bHQoRWNkc2EuY3VydmUuc2NhbGFyU3ViKEJpZ0ludCh5U2hhcmUuaiksIEJpZ0ludCh4U2hhcmUuaSkpLCBCaWdJbnQoeFNoYXJlLmkpKTtcblxuICAgIGNvbnN0IHcgPSBbXG4gICAgICBFY2RzYS5jdXJ2ZS5zY2FsYXJNdWx0KEJpZ0ludCh5U2hhcmUuaiksIEJpZ0ludCh4U2hhcmUuaSkpLFxuICAgICAgaGV4VG9CaWdJbnQoeFNoYXJlWyd4J10pLFxuICAgICAgRWNkc2EuY3VydmUuc2NhbGFySW52ZXJ0KGQpLFxuICAgIF0ucmVkdWNlKEVjZHNhLmN1cnZlLnNjYWxhck11bHQpO1xuXG4gICAgY29uc3QgeyBudGlsZGU6IG50aWxkZWEsIGgxOiBoMWEsIGgyOiBoMmEgfSA9IHhTaGFyZSBhcyBYU2hhcmVXaXRoTlRpbGRlO1xuXG4gICAgY29uc3Qgc2lnbmVyczogU2lnblNoYXJlUlQgPSB7XG4gICAgICB3U2hhcmU6IHtcbiAgICAgICAgaTogeFNoYXJlLmksXG4gICAgICAgIGw6IHhTaGFyZS5sLFxuICAgICAgICBtOiB4U2hhcmUubSxcbiAgICAgICAgbjogeFNoYXJlLm4sXG4gICAgICAgIHk6IHhTaGFyZS55LFxuICAgICAgICBudGlsZGU6IG50aWxkZWEsXG4gICAgICAgIGgxOiBoMWEsXG4gICAgICAgIGgyOiBoMmEsXG4gICAgICAgIGs6IGJpZ0ludFRvQnVmZmVyQkUoaywgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgY2s6IGJpZ0ludFRvQnVmZmVyQkUoY2ssIDc2OCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB3OiBiaWdJbnRUb0J1ZmZlckJFKHcsIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIGdhbW1hOiBiaWdJbnRUb0J1ZmZlckJFKGdhbW1hLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfSxcbiAgICAgIGtTaGFyZToge30gYXMgS1NoYXJlLFxuICAgIH07XG5cbiAgICBjb25zdCB7IG50aWxkZTogbnRpbGRlYiwgaDE6IGgxYiwgaDI6IGgyYiB9ID0geVNoYXJlO1xuICAgIGNvbnN0IHByb29mID0gYXdhaXQgcmFuZ2VQcm9vZi5wcm92ZShcbiAgICAgIEVjZHNhLmN1cnZlLFxuICAgICAgMzA3MixcbiAgICAgIHBrLFxuICAgICAge1xuICAgICAgICBudGlsZGU6IGhleFRvQmlnSW50KG50aWxkZWIpLFxuICAgICAgICBoMTogaGV4VG9CaWdJbnQoaDFiKSxcbiAgICAgICAgaDI6IGhleFRvQmlnSW50KGgyYiksXG4gICAgICB9LFxuICAgICAgY2ssXG4gICAgICBrLFxuICAgICAgcmtcbiAgICApO1xuICAgIGNvbnN0IHByb29mU2hhcmUgPSB7XG4gICAgICB6OiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnosIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgdTogYmlnSW50VG9CdWZmZXJCRShwcm9vZi51LCA3NjgpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHc6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudywgMzg0KS50b1N0cmluZygnaGV4JyksXG4gICAgICBzOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnMsIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgczE6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YuczEsIDk2KS50b1N0cmluZygnaGV4JyksXG4gICAgICBzMjogYmlnSW50VG9CdWZmZXJCRShwcm9vZi5zMiwgNDgwKS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcblxuICAgIHNpZ25lcnMua1NoYXJlID0ge1xuICAgICAgaTogeVNoYXJlLmosXG4gICAgICBqOiB4U2hhcmUuaSxcbiAgICAgIG46IHBrLm4udG9TdHJpbmcoMTYpLFxuICAgICAgbnRpbGRlOiBudGlsZGVhLFxuICAgICAgaDE6IGgxYSxcbiAgICAgIGgyOiBoMmEsXG4gICAgICBrOiBiaWdJbnRUb0J1ZmZlckJFKGNrLCA3NjgpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHByb29mOiBwcm9vZlNoYXJlLFxuICAgIH07XG5cbiAgICByZXR1cm4gc2lnbmVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIG11bHRpcGxpY2l0aXZlLXRvLWFkZGl0aXZlIChNdEEpIHNoYXJlIGNvbnZlcnNpb24gd2l0aCBhbm90aGVyXG4gICAqIHNpZ25lci5cbiAgICogQHBhcmFtIHtTaWduQ29udmVydH1cbiAgICogQHJldHVybnMge1NpZ25Db252ZXJ0UlR9XG4gICAqL1xuICBhc3luYyBzaWduQ29udmVydChzaGFyZXM6IFNpZ25Db252ZXJ0KTogUHJvbWlzZTxTaWduQ29udmVydFJUPiB7XG4gICAgbGV0IHNoYXJlUGFydGljaXBhbnQ6IFBhcnRpYWw8QlNoYXJlPiB8IFBhcnRpYWw8R1NoYXJlPiwgc2hhcmVUb0JlU2VudDogUGFydGlhbDxBU2hhcmU+IHwgTVVTaGFyZTtcbiAgICBsZXQgaXNHYW1tYVNoYXJlID0gZmFsc2U7XG4gICAgbGV0IGtTaGFyZTogUGFydGlhbDxLU2hhcmU+ID0ge307XG4gICAgaWYgKHNoYXJlcy54U2hhcmUgJiYgc2hhcmVzLnlTaGFyZSAmJiBzaGFyZXMua1NoYXJlKSB7XG4gICAgICBjb25zdCB4U2hhcmUgPSBzaGFyZXMueFNoYXJlOyAvLyBjdXJyZW50UGFydGljaXBhbnQgc2VjcmV0IHhTaGFyZVxuICAgICAgY29uc3QgeVNoYXJlID0ge1xuICAgICAgICAuLi5zaGFyZXMueVNoYXJlLFxuICAgICAgICBudGlsZGU6IHNoYXJlcy5rU2hhcmUubnRpbGRlLFxuICAgICAgICBoMTogc2hhcmVzLmtTaGFyZS5oMSxcbiAgICAgICAgaDI6IHNoYXJlcy5rU2hhcmUuaDIsXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2lnblNoYXJlID0gYXdhaXQgdGhpcy5zaWduU2hhcmUoeFNoYXJlLCB5U2hhcmUpO1xuICAgICAga1NoYXJlID0gc2lnblNoYXJlLmtTaGFyZTtcbiAgICAgIHNoYXJlVG9CZVNlbnQgPSB7IC4uLnNoYXJlcy5rU2hhcmUgfSBhcyBQYXJ0aWFsPEFTaGFyZT47XG4gICAgICBzaGFyZVBhcnRpY2lwYW50ID0geyAuLi5zaWduU2hhcmUud1NoYXJlIH0gYXMgUGFydGlhbDxCU2hhcmU+O1xuICAgIH0gZWxzZSBpZiAoKHNoYXJlcy5iU2hhcmUgJiYgc2hhcmVzLm11U2hhcmUpIHx8IChzaGFyZXMuYVNoYXJlICYmIHNoYXJlcy53U2hhcmUpKSB7XG4gICAgICBpc0dhbW1hU2hhcmUgPSB0cnVlO1xuICAgICAgc2hhcmVUb0JlU2VudCA9IHNoYXJlcy5hU2hhcmUgPyAoeyAuLi5zaGFyZXMuYVNoYXJlIH0gYXMgTVVTaGFyZSkgOiAoeyAuLi5zaGFyZXMubXVTaGFyZSB9IGFzIE1VU2hhcmUpO1xuICAgICAgc2hhcmVQYXJ0aWNpcGFudCA9IHNoYXJlcy53U2hhcmUgPyAoeyAuLi5zaGFyZXMud1NoYXJlIH0gYXMgUGFydGlhbDxHU2hhcmU+KSA6ICh7IC4uLnNoYXJlcy5iU2hhcmUgfSBhcyBHU2hhcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29uZmlnIGZvciBTaWduIENvbnZlcnQnKTtcbiAgICB9XG4gICAgaWYgKHNoYXJlUGFydGljaXBhbnQuaSAhPT0gc2hhcmVUb0JlU2VudC5pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NoYXJlcyBmcm9tIHNhbWUgcGFydGljaXBhbnQnKTtcbiAgICB9XG4gICAgaWYgKChzaGFyZVRvQmVTZW50IGFzIEFTaGFyZSkuYWxwaGEpIHtcbiAgICAgIGNvbnN0IGJTaGFyZVBhcnRpY2lwYW50ID0gc2hhcmVQYXJ0aWNpcGFudCBhcyBCU2hhcmU7XG4gICAgICBjb25zdCBhU2hhcmVUb0JlU2VudCA9IHNoYXJlVG9CZVNlbnQgYXMgQVNoYXJlO1xuICAgICAgY29uc3QgcGthID0gZ2V0UGFpbGxpZXJQdWJsaWNLZXkoaGV4VG9CaWdJbnQoYlNoYXJlUGFydGljaXBhbnQubikpO1xuICAgICAgbGV0IG50aWxkZWEsIGgxYSwgaDJhLCBjaztcbiAgICAgIGlmIChiU2hhcmVQYXJ0aWNpcGFudC5udGlsZGUpIHtcbiAgICAgICAgbnRpbGRlYSA9IGhleFRvQmlnSW50KGJTaGFyZVBhcnRpY2lwYW50Lm50aWxkZSk7XG4gICAgICAgIGgxYSA9IGhleFRvQmlnSW50KGJTaGFyZVBhcnRpY2lwYW50LmgxKTtcbiAgICAgICAgaDJhID0gaGV4VG9CaWdJbnQoYlNoYXJlUGFydGljaXBhbnQuaDIpO1xuICAgICAgICBjayA9IGhleFRvQmlnSW50KGJTaGFyZVBhcnRpY2lwYW50LmNrKTtcbiAgICAgIH1cbiAgICAgIC8vIFZlcmlmeSAkXFxnYW1tYV9pIFxcaW4gWl97Tl4yfSQuXG4gICAgICBpZiAoXG4gICAgICAgICFyYW5nZVByb29mLnZlcmlmeVdpdGhDaGVjayhcbiAgICAgICAgICBFY2RzYS5jdXJ2ZSxcbiAgICAgICAgICAzMDcyLFxuICAgICAgICAgIHBrYSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBudGlsZGU6IG50aWxkZWEsXG4gICAgICAgICAgICBoMTogaDFhLFxuICAgICAgICAgICAgaDI6IGgyYSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHo6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LmdhbW1hUHJvb2YueiksXG4gICAgICAgICAgICB6cHJtOiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5nYW1tYVByb29mLnpwcm0pLFxuICAgICAgICAgICAgdDogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuZ2FtbWFQcm9vZi50KSxcbiAgICAgICAgICAgIHY6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LmdhbW1hUHJvb2YudiksXG4gICAgICAgICAgICB3OiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5nYW1tYVByb29mLncpLFxuICAgICAgICAgICAgczogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuZ2FtbWFQcm9vZi5zKSxcbiAgICAgICAgICAgIHMxOiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5nYW1tYVByb29mLnMxKSxcbiAgICAgICAgICAgIHMyOiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5nYW1tYVByb29mLnMyKSxcbiAgICAgICAgICAgIHQxOiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5nYW1tYVByb29mLnQxKSxcbiAgICAgICAgICAgIHQyOiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5nYW1tYVByb29mLnQyKSxcbiAgICAgICAgICAgIHU6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LmdhbW1hUHJvb2YudSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjayxcbiAgICAgICAgICBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5hbHBoYSksXG4gICAgICAgICAgaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuZ2FtbWFQcm9vZi54KVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgdmVyaWZ5IHNpZ25pbmcgc2hhcmUgZm9yIGdhbW1hIHByb29mJyk7XG4gICAgICB9XG4gICAgICAvLyBWZXJpZnkgJFxcd19pIFxcaW4gWl97Tl4yfSQuXG4gICAgICBpZiAoXG4gICAgICAgICFyYW5nZVByb29mLnZlcmlmeVdpdGhDaGVjayhcbiAgICAgICAgICBFY2RzYS5jdXJ2ZSxcbiAgICAgICAgICAzMDcyLFxuICAgICAgICAgIHBrYSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBudGlsZGU6IG50aWxkZWEsXG4gICAgICAgICAgICBoMTogaDFhLFxuICAgICAgICAgICAgaDI6IGgyYSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHo6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LndQcm9vZi56KSxcbiAgICAgICAgICAgIHpwcm06IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LndQcm9vZi56cHJtKSxcbiAgICAgICAgICAgIHQ6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LndQcm9vZi50KSxcbiAgICAgICAgICAgIHY6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LndQcm9vZi52KSxcbiAgICAgICAgICAgIHc6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LndQcm9vZi53KSxcbiAgICAgICAgICAgIHM6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LndQcm9vZi5zKSxcbiAgICAgICAgICAgIHMxOiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC53UHJvb2YuczEpLFxuICAgICAgICAgICAgczI6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LndQcm9vZi5zMiksXG4gICAgICAgICAgICB0MTogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQud1Byb29mLnQxKSxcbiAgICAgICAgICAgIHQyOiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC53UHJvb2YudDIpLFxuICAgICAgICAgICAgdTogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQud1Byb29mLnUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2ssXG4gICAgICAgICAgaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQubXUpLFxuICAgICAgICAgIGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LndQcm9vZi54KVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgdmVyaWZ5IHNoYXJlIGZvciB3UHJvb2YnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNrID0gbmV3IHBhaWxsaWVyQmlnaW50LlByaXZhdGVLZXkoXG4gICAgICAgIGhleFRvQmlnSW50KGJTaGFyZVBhcnRpY2lwYW50LmwgYXMgc3RyaW5nKSxcbiAgICAgICAgaGV4VG9CaWdJbnQoYlNoYXJlUGFydGljaXBhbnQubSBhcyBzdHJpbmcpLFxuICAgICAgICBwa2FcbiAgICAgICk7XG4gICAgICBjb25zdCBnU2hhcmVQYXJ0aWNpcGFudCA9IHNoYXJlUGFydGljaXBhbnQgYXMgR1NoYXJlO1xuICAgICAgY29uc3QgbXVTaGFyZVRvQmVTZW50ID0gc2hhcmVUb0JlU2VudCBhcyBNVVNoYXJlO1xuICAgICAgY29uc3QgYWxwaGEgPSBzay5kZWNyeXB0KGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LmFscGhhKSk7XG4gICAgICBnU2hhcmVQYXJ0aWNpcGFudC5hbHBoYSA9IGJpZ0ludFRvQnVmZmVyQkUoRWNkc2EuY3VydmUuc2NhbGFyUmVkdWNlKGFscGhhKSwgMzIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IG11ID0gc2suZGVjcnlwdChoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5tdSBhcyBzdHJpbmcpKTsgLy8gcmVjaGVjayBlbmNyeXB0ZWQgbnVtYmVyXG4gICAgICBnU2hhcmVQYXJ0aWNpcGFudC5tdSA9IGJpZ0ludFRvQnVmZmVyQkUoRWNkc2EuY3VydmUuc2NhbGFyUmVkdWNlKG11KSwgMzIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IHBhcnRpYWxTaGFyZVBhcnRpY2lwYW50ID0gc2hhcmVQYXJ0aWNpcGFudCBhcyBQYXJ0aWFsPEdTaGFyZT47XG4gICAgICBjb25zdCBwYXJ0aWFsU2hhcmVUb0JlU2VudCA9IG11U2hhcmVUb0JlU2VudCBhcyBQYXJ0aWFsPE1VU2hhcmU+O1xuICAgICAgZGVsZXRlIHBhcnRpYWxTaGFyZVBhcnRpY2lwYW50Lmw7XG4gICAgICBkZWxldGUgcGFydGlhbFNoYXJlUGFydGljaXBhbnQubTtcbiAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVUb0JlU2VudC5hbHBoYTtcbiAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVUb0JlU2VudC5tdTtcbiAgICB9XG4gICAgaWYgKChzaGFyZVRvQmVTZW50IGFzIEFTaGFyZSkuaykge1xuICAgICAgY29uc3QgYlNoYXJlUGFydGljaXBhbnQgPSBzaGFyZVBhcnRpY2lwYW50IGFzIEJTaGFyZTtcbiAgICAgIGNvbnN0IGFTaGFyZVRvQmVTZW50ID0gc2hhcmVUb0JlU2VudCBhcyBBU2hhcmU7XG4gICAgICBjb25zdCBuID0gaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQubik7IC8vIFBhaWxsaWVyIHB1YiBmcm9tIG90aGVyIHNpZ25lclxuICAgICAgY29uc3QgcGthID0gZ2V0UGFpbGxpZXJQdWJsaWNLZXkobik7XG4gICAgICBsZXQgbnRpbGRlYSwgaDFhLCBoMmEsIG50aWxkZWIsIGgxYiwgaDJiO1xuICAgICAgaWYgKGFTaGFyZVRvQmVTZW50Lm50aWxkZSkge1xuICAgICAgICBudGlsZGVhID0gaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQubnRpbGRlKTtcbiAgICAgICAgaDFhID0gaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuaDEpO1xuICAgICAgICBoMmEgPSBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5oMik7XG4gICAgICAgIG50aWxkZWIgPSBoZXhUb0JpZ0ludChiU2hhcmVQYXJ0aWNpcGFudC5udGlsZGUpO1xuICAgICAgICBoMWIgPSBoZXhUb0JpZ0ludChiU2hhcmVQYXJ0aWNpcGFudC5oMSk7XG4gICAgICAgIGgyYiA9IGhleFRvQmlnSW50KGJTaGFyZVBhcnRpY2lwYW50LmgyKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGsgPSBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5rKTtcbiAgICAgIGlmIChcbiAgICAgICAgIXJhbmdlUHJvb2YudmVyaWZ5KFxuICAgICAgICAgIEVjZHNhLmN1cnZlLFxuICAgICAgICAgIDMwNzIsXG4gICAgICAgICAgcGthLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG50aWxkZTogbnRpbGRlYixcbiAgICAgICAgICAgIGgxOiBoMWIsXG4gICAgICAgICAgICBoMjogaDJiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgejogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQucHJvb2YueiksXG4gICAgICAgICAgICB1OiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5wcm9vZi51KSxcbiAgICAgICAgICAgIHc6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LnByb29mLncpLFxuICAgICAgICAgICAgczogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQucHJvb2YucyksXG4gICAgICAgICAgICBzMTogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQucHJvb2YuczEpLFxuICAgICAgICAgICAgczI6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LnByb29mLnMyKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGtcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHZlcmlmeSBzaWduaW5nIEEgc2hhcmUgcHJvb2YnKTtcbiAgICAgIH1cbiAgICAgIC8vIE10QSAka19qLCBcXGdhbW1hX2kkLlxuICAgICAgY29uc3QgYmV0YTAgPSBiaWdpbnRDcnlwdG9VdGlscy5yYW5kQmV0d2VlbihFY2RzYS5jdXJ2ZS5vcmRlcigpICoqIF81bik7XG4gICAgICBiU2hhcmVQYXJ0aWNpcGFudC5iZXRhID0gYmlnSW50VG9CdWZmZXJCRShFY2RzYS5jdXJ2ZS5zY2FsYXJOZWdhdGUoRWNkc2EuY3VydmUuc2NhbGFyUmVkdWNlKGJldGEwKSksIDMyKS50b1N0cmluZyhcbiAgICAgICAgJ2hleCdcbiAgICAgICk7XG4gICAgICBjb25zdCBnID0gaGV4VG9CaWdJbnQoYlNoYXJlUGFydGljaXBhbnQuZ2FtbWEpO1xuICAgICAgY29uc3QgcmIgPSBhd2FpdCByYW5nZVByb29mLnJhbmRvbUNvUHJpbWVUbyhwa2Eubik7XG4gICAgICBjb25zdCBjYiA9IHBrYS5lbmNyeXB0KGJldGEwLCByYik7XG4gICAgICBjb25zdCBhbHBoYSA9IHBrYS5hZGRpdGlvbihwa2EubXVsdGlwbHkoaywgZyksIGNiKTtcbiAgICAgIGFTaGFyZVRvQmVTZW50LmFscGhhID0gYmlnSW50VG9CdWZmZXJCRShhbHBoYSwgMzIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIC8vIFByb3ZlICRcXGdhbW1hX2kgXFxpbiBaX3tOXjJ9JC5cbiAgICAgIGNvbnN0IGd4ID0gRWNkc2EuY3VydmUuYmFzZVBvaW50TXVsdChnKTtcbiAgICAgIGxldCBwcm9vZjogUmFuZ2VQcm9vZldpdGhDaGVjaztcbiAgICAgIHByb29mID0gYXdhaXQgcmFuZ2VQcm9vZi5wcm92ZVdpdGhDaGVjayhcbiAgICAgICAgRWNkc2EuY3VydmUsXG4gICAgICAgIDMwNzIsXG4gICAgICAgIHBrYSxcbiAgICAgICAge1xuICAgICAgICAgIG50aWxkZTogbnRpbGRlYSxcbiAgICAgICAgICBoMTogaDFhLFxuICAgICAgICAgIGgyOiBoMmEsXG4gICAgICAgIH0sXG4gICAgICAgIGssXG4gICAgICAgIGFscGhhLFxuICAgICAgICBnLFxuICAgICAgICBiZXRhMCxcbiAgICAgICAgcmIsXG4gICAgICAgIGd4XG4gICAgICApO1xuICAgICAgT2JqZWN0LmFzc2lnbihhU2hhcmVUb0JlU2VudCwge1xuICAgICAgICBnYW1tYVByb29mOiB7XG4gICAgICAgICAgejogYmlnSW50VG9CdWZmZXJCRShwcm9vZi56LCAzODQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB6cHJtOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnpwcm0sIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHQ6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudCwgMzg0KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgdjogYmlnSW50VG9CdWZmZXJCRShwcm9vZi52LCA3NjgpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB3OiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLncsIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHM6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YucywgMzg0KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgczE6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YuczEsIDk2KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgczI6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YuczIsIDQ4MCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHQxOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnQxLCAyMjQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB0MjogYmlnSW50VG9CdWZmZXJCRShwcm9vZi50MiwgNDgwKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgdTogYmlnSW50VG9CdWZmZXJCRShwcm9vZi51LCAzMykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHg6IGJpZ0ludFRvQnVmZmVyQkUoZ3gsIDMzKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIC8vIE10QSAka19qLCB3X2kkLlxuICAgICAgY29uc3QgbnUwID0gYmlnaW50Q3J5cHRvVXRpbHMucmFuZEJldHdlZW4oRWNkc2EuY3VydmUub3JkZXIoKSAqKiBfNW4pO1xuICAgICAgc2hhcmVQYXJ0aWNpcGFudC5udSA9IGJpZ0ludFRvQnVmZmVyQkUoRWNkc2EuY3VydmUuc2NhbGFyTmVnYXRlKEVjZHNhLmN1cnZlLnNjYWxhclJlZHVjZShudTApKSwgMzIpLnRvU3RyaW5nKFxuICAgICAgICAnaGV4J1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHcgPSBoZXhUb0JpZ0ludChiU2hhcmVQYXJ0aWNpcGFudC53KTtcbiAgICAgIGNvbnN0IHJuID0gYXdhaXQgcmFuZ2VQcm9vZi5yYW5kb21Db1ByaW1lVG8ocGthLm4pO1xuICAgICAgY29uc3QgY24gPSBwa2EuZW5jcnlwdChudTAsIHJuKTtcbiAgICAgIGNvbnN0IG11ID0gcGthLmFkZGl0aW9uKHBrYS5tdWx0aXBseShrLCB3KSwgY24pO1xuICAgICAgc2hhcmVUb0JlU2VudC5tdSA9IGJpZ0ludFRvQnVmZmVyQkUobXUsIDMyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAvLyBQcm92ZSAkXFx3X2kgXFxpbiBaX3tOXjJ9JC5cbiAgICAgIGNvbnN0IHd4ID0gRWNkc2EuY3VydmUuYmFzZVBvaW50TXVsdCh3KTtcbiAgICAgIHByb29mID0gYXdhaXQgcmFuZ2VQcm9vZi5wcm92ZVdpdGhDaGVjayhcbiAgICAgICAgRWNkc2EuY3VydmUsXG4gICAgICAgIDMwNzIsXG4gICAgICAgIHBrYSxcbiAgICAgICAge1xuICAgICAgICAgIG50aWxkZTogbnRpbGRlYSxcbiAgICAgICAgICBoMTogaDFhLFxuICAgICAgICAgIGgyOiBoMmEsXG4gICAgICAgIH0sXG4gICAgICAgIGssXG4gICAgICAgIGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50Lm11KSxcbiAgICAgICAgdyxcbiAgICAgICAgbnUwLFxuICAgICAgICBybixcbiAgICAgICAgd3hcbiAgICAgICk7XG4gICAgICBPYmplY3QuYXNzaWduKHNoYXJlVG9CZVNlbnQsIHtcbiAgICAgICAgd1Byb29mOiB7XG4gICAgICAgICAgejogYmlnSW50VG9CdWZmZXJCRShwcm9vZi56LCAzODQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB6cHJtOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnpwcm0sIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHQ6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudCwgMzg0KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgdjogYmlnSW50VG9CdWZmZXJCRShwcm9vZi52LCA3NjgpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB3OiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLncsIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHM6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YucywgMzg0KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgczE6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YuczEsIDk2KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgczI6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YuczIsIDQ4MCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHQxOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnQxLCAyMjQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB0MjogYmlnSW50VG9CdWZmZXJCRShwcm9vZi50MiwgNDgwKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgdTogYmlnSW50VG9CdWZmZXJCRShwcm9vZi51LCAzMykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHg6IGJpZ0ludFRvQnVmZmVyQkUod3gsIDMzKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGlmICgoc2hhcmVQYXJ0aWNpcGFudCBhcyBHU2hhcmUpLmFscGhhKSB7XG4gICAgICAgIGNvbnN0IHBhcnRpYWxTaGFyZVBhcnRpY2lwYW50ID0gc2hhcmVQYXJ0aWNpcGFudCBhcyBQYXJ0aWFsPEJTaGFyZT47XG4gICAgICAgIGNvbnN0IHBhcnRpYWxTaGFyZVRvQmVTZW50ID0gc2hhcmVUb0JlU2VudCBhcyBQYXJ0aWFsPEFTaGFyZT47XG4gICAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVQYXJ0aWNpcGFudC5udGlsZGU7XG4gICAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVQYXJ0aWNpcGFudC5oMTtcbiAgICAgICAgZGVsZXRlIHBhcnRpYWxTaGFyZVBhcnRpY2lwYW50LmgyO1xuICAgICAgICBkZWxldGUgcGFydGlhbFNoYXJlUGFydGljaXBhbnQuY2s7XG4gICAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVUb0JlU2VudC5uO1xuICAgICAgICBkZWxldGUgcGFydGlhbFNoYXJlVG9CZVNlbnQubnRpbGRlO1xuICAgICAgICBkZWxldGUgcGFydGlhbFNoYXJlVG9CZVNlbnQuaDE7XG4gICAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVUb0JlU2VudC5oMjtcbiAgICAgICAgZGVsZXRlIHBhcnRpYWxTaGFyZVRvQmVTZW50Lms7XG4gICAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVUb0JlU2VudC5wcm9vZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2hhcmVUb0JlU2VudCwge1xuICAgICAgICAgIG46IGtTaGFyZS5uLFxuICAgICAgICAgIG50aWxkZTogYmlnSW50VG9CdWZmZXJCRShudGlsZGViLCAzODQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBoMTogYmlnSW50VG9CdWZmZXJCRShoMWIsIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIGgyOiBiaWdJbnRUb0J1ZmZlckJFKGgyYiwgMzg0KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgazoga1NoYXJlLmssXG4gICAgICAgICAgcHJvb2Y6IGtTaGFyZS5wcm9vZixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghKCdhbHBoYScgaW4gc2hhcmVUb0JlU2VudCkgJiYgISgnaycgaW4gc2hhcmVUb0JlU2VudCkpIHtcbiAgICAgIGNvbnN0IHBhcnRpYWxTaGFyZVBhcnRpY2lwYW50ID0gc2hhcmVQYXJ0aWNpcGFudCBhcyBQYXJ0aWFsPEJTaGFyZT47XG4gICAgICBkZWxldGUgcGFydGlhbFNoYXJlUGFydGljaXBhbnQubnRpbGRlO1xuICAgICAgZGVsZXRlIHBhcnRpYWxTaGFyZVBhcnRpY2lwYW50LmgxO1xuICAgICAgZGVsZXRlIHBhcnRpYWxTaGFyZVBhcnRpY2lwYW50LmgyO1xuICAgICAgZGVsZXRlIHBhcnRpYWxTaGFyZVBhcnRpY2lwYW50LmNrO1xuICAgICAgY29uc3QgbXVTaGFyZVRvQmVTZW50ID0gc2hhcmVUb0JlU2VudCBhcyBNVVNoYXJlO1xuICAgICAgc2hhcmVUb0JlU2VudCA9IHtcbiAgICAgICAgaTogbXVTaGFyZVRvQmVTZW50LmksXG4gICAgICAgIGo6IG11U2hhcmVUb0JlU2VudC5qLFxuICAgICAgfSBhcyBNVVNoYXJlO1xuICAgIH1cbiAgICBbc2hhcmVUb0JlU2VudC5pLCBzaGFyZVRvQmVTZW50LmpdID0gW3NoYXJlVG9CZVNlbnQuaiwgc2hhcmVUb0JlU2VudC5pXTtcbiAgICBpZiAoaXNHYW1tYVNoYXJlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtdVNoYXJlOiBzaGFyZVRvQmVTZW50IGFzIE1VU2hhcmUsXG4gICAgICAgIGdTaGFyZTogc2hhcmVQYXJ0aWNpcGFudCBhcyBHU2hhcmUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYVNoYXJlOiBzaGFyZVRvQmVTZW50IGFzIEFTaGFyZSxcbiAgICAgIGJTaGFyZTogc2hhcmVQYXJ0aWNpcGFudCBhcyBCU2hhcmUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21iaW5lIGdhbW1hIHNoYXJlcyB0byBnZXQgdGhlIHByaXZhdGUgb21pY3JvbiAvIGRlbHRhIHNoYXJlc1xuICAgKiBAcGFyYW0ge1NpZ25Db21iaW5lfSBzaGFyZXNcbiAgICogQHJldHVybnMge1NpZ25Db21iaW5lUlR9XG4gICAqL1xuICBzaWduQ29tYmluZShzaGFyZXM6IFNpZ25Db21iaW5lKTogU2lnbkNvbWJpbmVSVCB7XG4gICAgY29uc3QgZ1NoYXJlID0gc2hhcmVzLmdTaGFyZTtcbiAgICBjb25zdCBTID0gc2hhcmVzLnNpZ25JbmRleDtcbiAgICBjb25zdCBnYW1tYSA9IGhleFRvQmlnSW50KGdTaGFyZS5nYW1tYSk7XG4gICAgY29uc3QgYWxwaGEgPSBoZXhUb0JpZ0ludChnU2hhcmUuYWxwaGEpO1xuICAgIGNvbnN0IGJldGEgPSBoZXhUb0JpZ0ludChnU2hhcmUuYmV0YSk7XG4gICAgY29uc3QgbXUgPSBoZXhUb0JpZ0ludChnU2hhcmUubXUpO1xuICAgIGNvbnN0IG51ID0gaGV4VG9CaWdJbnQoZ1NoYXJlLm51KTtcbiAgICBjb25zdCBrID0gaGV4VG9CaWdJbnQoZ1NoYXJlLmspO1xuICAgIGNvbnN0IHcgPSBoZXhUb0JpZ0ludChnU2hhcmUudyk7XG5cbiAgICBjb25zdCBkZWx0YSA9IEVjZHNhLmN1cnZlLnNjYWxhckFkZChFY2RzYS5jdXJ2ZS5zY2FsYXJNdWx0KGssIGdhbW1hKSwgRWNkc2EuY3VydmUuc2NhbGFyQWRkKGFscGhhLCBiZXRhKSk7XG4gICAgY29uc3Qgb21pY3JvbiA9IEVjZHNhLmN1cnZlLnNjYWxhckFkZChFY2RzYS5jdXJ2ZS5zY2FsYXJNdWx0KGssIHcpLCBFY2RzYS5jdXJ2ZS5zY2FsYXJBZGQobXUsIG51KSk7XG4gICAgY29uc3QgR2FtbWEgPSBFY2RzYS5jdXJ2ZS5iYXNlUG9pbnRNdWx0KGdhbW1hKTtcblxuICAgIHJldHVybiB7XG4gICAgICBvU2hhcmU6IHtcbiAgICAgICAgaTogZ1NoYXJlLmksXG4gICAgICAgIHk6IGdTaGFyZS55LFxuICAgICAgICBrOiBiaWdJbnRUb0J1ZmZlckJFKGssIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIG9taWNyb246IGJpZ0ludFRvQnVmZmVyQkUob21pY3JvbiwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgZGVsdGE6IGJpZ0ludFRvQnVmZmVyQkUoZGVsdGEsIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIEdhbW1hOiBiaWdJbnRUb0J1ZmZlckJFKEdhbW1hLCAzMykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfSxcbiAgICAgIGRTaGFyZToge1xuICAgICAgICBpOiBTLmksXG4gICAgICAgIGo6IGdTaGFyZS5pLFxuICAgICAgICBkZWx0YTogYmlnSW50VG9CdWZmZXJCRShkZWx0YSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgR2FtbWE6IGJpZ0ludFRvQnVmZmVyQkUoR2FtbWEsIDMzKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBNIE1lc3NhZ2UgdG8gYmUgc2lnbmVkXG4gICAqIEBwYXJhbSB7T1NoYXJlfSBvU2hhcmUgcHJpdmF0ZSBvbWljcm9uIHNoYXJlIG9mIGN1cnJlbnQgcGFydGljaXBhbnRcbiAgICogQHBhcmFtIHtEU2hhcmV9IGRTaGFyZSBkZWx0YSBzaGFyZSByZWNlaXZlZCBmcm9tIHRoZSBvdGhlciBwYXJ0aWNpcGFudFxuICAgKiBAcGFyYW0ge0hhc2h9IGhhc2ggaGFzaGluZyBhbGdvcml0aG0gaW1wbGVtZW50aW5nIE5vZGVgcyBzdGFuZGFyZCBjcnlwdG8gaGFzaCBpbnRlcmZhY2VcbiAgICogQHBhcmFtIHtib29sZWFufSBzaG91bGRIYXNoIGlmIHRydWUsIHdlIGhhc2ggdGhlIHByb3ZpZGVkIGJ1ZmZlciBiZWZvcmUgc2lnbmluZ1xuICAgKiBAcmV0dXJucyB7U1NoYXJlfVxuICAgKi9cbiAgc2lnbihNOiBCdWZmZXIsIG9TaGFyZTogT1NoYXJlLCBkU2hhcmU6IERTaGFyZSwgaGFzaD86IEhhc2gsIHNob3VsZEhhc2ggPSB0cnVlKTogU1NoYXJlIHtcbiAgICBjb25zdCBtID0gc2hvdWxkSGFzaCA/IChoYXNoIHx8IGNyZWF0ZUhhc2goJ3NoYTI1NicpKS51cGRhdGUoTSkuZGlnZXN0KCkgOiBNO1xuXG4gICAgY29uc3QgZGVsdGEgPSBFY2RzYS5jdXJ2ZS5zY2FsYXJBZGQoaGV4VG9CaWdJbnQob1NoYXJlLmRlbHRhKSwgaGV4VG9CaWdJbnQoZFNoYXJlLmRlbHRhKSk7XG5cbiAgICBjb25zdCBSID0gRWNkc2EuY3VydmUucG9pbnRNdWx0aXBseShcbiAgICAgIEVjZHNhLmN1cnZlLnBvaW50QWRkKGhleFRvQmlnSW50KG9TaGFyZS5HYW1tYSksIGhleFRvQmlnSW50KGRTaGFyZS5HYW1tYSkpLFxuICAgICAgRWNkc2EuY3VydmUuc2NhbGFySW52ZXJ0KGRlbHRhKVxuICAgICk7XG4gICAgY29uc3QgcG9pbnRSID0gc2VjcC5Qb2ludC5mcm9tSGV4KGJpZ0ludFRvQnVmZmVyQkUoUiwgMzIpKTtcbiAgICBjb25zdCByID0gcG9pbnRSLng7XG5cbiAgICBjb25zdCBzID0gRWNkc2EuY3VydmUuc2NhbGFyQWRkKFxuICAgICAgRWNkc2EuY3VydmUuc2NhbGFyTXVsdChiaWdJbnRGcm9tVThBQkUobSksIGhleFRvQmlnSW50KG9TaGFyZS5rKSksXG4gICAgICBFY2RzYS5jdXJ2ZS5zY2FsYXJNdWx0KHIsIGhleFRvQmlnSW50KG9TaGFyZS5vbWljcm9uKSlcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBpOiBvU2hhcmUuaSxcbiAgICAgIHk6IG9TaGFyZS55LFxuICAgICAgUjogcG9pbnRSLnRvSGV4KHRydWUpLFxuICAgICAgczogYmlnSW50VG9CdWZmZXJCRShzLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGZ1bGwgc2lnbmF0dXJlIGJ5IGNvbWJpbmluZyBTaWduIFNoYXJlc1xuICAgKiBAcGFyYW0ge1NTaGFyZVtdfSBzaGFyZXNcbiAgICogQHJldHVybnMge1NpZ25hdHVyZX1cbiAgICovXG4gIGNvbnN0cnVjdFNpZ25hdHVyZShzaGFyZXM6IFNTaGFyZVtdKTogU2lnbmF0dXJlIHtcbiAgICAvLyBFdmVyeSBSIG11c3QgbWF0Y2guXG4gICAgY29uc3QgUiA9IHNoYXJlc1swXVsnUiddO1xuICAgIGNvbnN0IGlzUk1hdGNoaW5nID0gc2hhcmVzLm1hcCgoc2hhcmUpID0+IHNoYXJlWydSJ10gPT09IFIpLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiKTtcbiAgICBpZiAoIWlzUk1hdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1IgdmFsdWUgc2hvdWxkIGJlIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBsZXQgcyA9IHNoYXJlcy5tYXAoKHNoYXJlKSA9PiBoZXhUb0JpZ0ludChzaGFyZVsncyddKSkucmVkdWNlKEVjZHNhLmN1cnZlLnNjYWxhckFkZCk7XG4gICAgY29uc3QgcmVjaWQgPSAoUi5zbGljZSgwLCAyKSA9PT0gJzAzJyA/IDEgOiAwKSBeIChzID4gRWNkc2EuY3VydmUub3JkZXIoKSAvIEJpZ0ludCgyKSA/IDEgOiAwKTtcblxuICAgIC8vIE5vcm1hbGl6ZSBzLlxuICAgIHMgPSBzID4gRWNkc2EuY3VydmUub3JkZXIoKSAvIEJpZ0ludCgyKSA/IEVjZHNhLmN1cnZlLm9yZGVyKCkgLSBzIDogcztcbiAgICByZXR1cm4ge1xuICAgICAgeTogc2hhcmVzWzBdWyd5J10sXG4gICAgICByOiBSLnNsaWNlKDIpLFxuICAgICAgczogYmlnSW50VG9CdWZmZXJCRShzLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgcmVjaWQ6IHJlY2lkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IGVjZHNhIHNpZ25hdHVyZXNcbiAgICogQHBhcmFtIHtCdWZmZXJ9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtTaWduYXR1cmUgfSBzaWduYXR1cmVcbiAgICogQHBhcmFtIHtIYXNofSBoYXNoIGhhc2hpbmcgYWxnb3JpdGhtIGltcGxlbWVudGluZyBOb2RlYHMgc3RhbmRhcmQgY3J5cHRvIGhhc2ggaW50ZXJmYWNlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkSGFzaCBpZiB0cnVlLCB3ZSBoYXNoIHRoZSBwcm92aWRlZCBidWZmZXIgYmVmb3JlIHZlcmlmeWluZ1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBzaWduYXR1cmUgaXMgdmFsaWQ7IEZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgdmVyaWZ5KG1lc3NhZ2U6IEJ1ZmZlciwgc2lnbmF0dXJlOiBTaWduYXR1cmUsIGhhc2g/OiBIYXNoLCBzaG91bGRIYXNoID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1lc3NhZ2VUb1ZlcmlmeSA9IHNob3VsZEhhc2ggPyAoaGFzaCB8fCBjcmVhdGVIYXNoKCdzaGEyNTYnKSkudXBkYXRlKG1lc3NhZ2UpLmRpZ2VzdCgpIDogbWVzc2FnZTtcbiAgICByZXR1cm4gRWNkc2EuY3VydmUudmVyaWZ5KFxuICAgICAgbWVzc2FnZVRvVmVyaWZ5LFxuICAgICAgQnVmZmVyLmNvbmNhdChbXG4gICAgICAgIEJ1ZmZlci5mcm9tKFtzaWduYXR1cmVbJ3JlY2lkJ11dKSxcbiAgICAgICAgYmlnSW50VG9CdWZmZXJCRShoZXhUb0JpZ0ludChzaWduYXR1cmVbJ3InXSksIDMyKSxcbiAgICAgICAgYmlnSW50VG9CdWZmZXJCRShoZXhUb0JpZ0ludChzaWduYXR1cmVbJ3MnXSksIDMyKSxcbiAgICAgIF0pLFxuICAgICAgaGV4VG9CaWdJbnQoc2lnbmF0dXJlWyd5J10pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
734
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYWNjb3VudC1saWIvbXBjL3Rzcy9lY2RzYS9lY2RzYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBa0Q7QUFDbEQsdUVBQXlEO0FBQ3pELHVEQUF5QztBQUN6Qyx5Q0FBNEQ7QUFDNUQsbUNBQXVEO0FBQ3ZELDhDQUF3QztBQUN4QyxpREFBb0g7QUFDcEgscUNBQXlHO0FBQ3pHLHlDQUE4QztBQUM5QywwREFBa0M7QUFDbEMseURBQTJDO0FBK0IzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdEIsU0FBUyxTQUFTLENBQUMsS0FBc0I7SUFDdkMsT0FBTyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQzNCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQXFCLEtBQUs7SUFJeEI7Ozs7Ozs7OztPQVNHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFhLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUFFLElBQWEsRUFBRSxJQUFJLEdBQUcsS0FBSzs7UUFDN0YsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ25GLE1BQU0seUJBQXlCLENBQUM7U0FDakM7UUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7U0FDakU7UUFFRCxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtZQUM1QixrRUFBa0U7WUFDbEUsbUJBQW1CLEdBQUcs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QUFRLENBQUMsS0FBSyxDQUFDO29CQUN2RCxDQUFDLEVBQUUsdUJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNqRCxDQUFDLEVBQUUsdUJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNqRCxDQUFDLEVBQUUsdUJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNqRCxDQUFDLEVBQUUsdUJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNqRCxFQUFFLEVBQUUsdUJBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNsRCxFQUFFLEVBQUUsdUJBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNuRCxFQUFFLEVBQUUsdUJBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNuRCxFQUFFLEVBQUUsdUJBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNuRCxDQUFDLEVBQUUsdUJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNoRCxDQUFDLEVBQUUsdUJBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7aUJBQzVDO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsa0JBQWtCO1lBQ2xCLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3RFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyx1QkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FDMUcsS0FBSyxDQUNOLENBQUM7WUFDRixNQUFNLENBQUMsR0FBRyxvQkFBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sRUFBRSxHQUFHLE1BQU0sVUFBVSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkQsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoRCxhQUFhLENBQUMsRUFBRSxHQUFHLHVCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUQsNEJBQTRCO1lBQzVCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLEtBQUssR0FBRyxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQ3JDLEtBQUssQ0FBQyxLQUFLLEVBQ1gsSUFBSSxFQUNKLEdBQUcsRUFDSDtnQkFDRSxNQUFNLEVBQUUsT0FBTztnQkFDZixFQUFFLEVBQUUsR0FBRztnQkFDUCxFQUFFLEVBQUUsR0FBRzthQUNSLEVBQ0QsQ0FBQyxFQUNELG9CQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUM5QixDQUFDLEVBQ0QsR0FBRyxFQUNILEVBQUUsRUFDRixFQUFFLENBQ0gsQ0FBQztZQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO2dCQUMzQixNQUFNLEVBQUU7b0JBQ04sQ0FBQyxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDakQsSUFBSSxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDdkQsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDakQsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDakQsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDakQsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDakQsRUFBRSxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDbEQsRUFBRSxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDbkQsRUFBRSxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDbkQsRUFBRSxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLEVB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QztpQkFDN0Q7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLEtBQUssRUFBRSxpQ0FBd0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQ3BFLENBQUMsRUFBRSxpQ0FBd0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQzdEO2FBQ0YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDOztBQWp6Qkgsd0JBa3pCQztBQWp6QlEsV0FBSyxHQUFtQixJQUFJLHVCQUFjLEVBQUUsQ0FBQztBQUM3QyxZQUFNLEdBQVcsSUFBSSxjQUFLLEVBQUUsQ0FBQztBQUM3QixZQUFNLEdBQVcsSUFBSSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhaWxsaWVyQmlnaW50IGZyb20gJ3BhaWxsaWVyLWJpZ2ludCc7XG5pbXBvcnQgKiBhcyBiaWdpbnRDcnlwdG9VdGlscyBmcm9tICdiaWdpbnQtY3J5cHRvLXV0aWxzJztcbmltcG9ydCAqIGFzIHNlY3AgZnJvbSAnQG5vYmxlL3NlY3AyNTZrMSc7XG5pbXBvcnQgSERUcmVlLCB7IEJJUDMyLCBjaGFpbmNvZGVCYXNlIH0gZnJvbSAnLi4vLi4vaGRUcmVlJztcbmltcG9ydCB7IGNyZWF0ZUhhc2gsIEhhc2gsIHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGJpZ0ludFRvSGV4LCBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIsIGNvbnZlcnRIZXhBcnJUb0JpZ0ludEFyciwgaGV4VG9CaWdJbnQgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NyeXB0byc7XG5pbXBvcnQgeyBiaWdJbnRGcm9tQnVmZmVyQkUsIGJpZ0ludEZyb21VOEFCRSwgYmlnSW50VG9CdWZmZXJCRSwgZ2V0UGFpbGxpZXJQdWJsaWNLZXkgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IFNlY3AyNTZrMUN1cnZlIH0gZnJvbSAnLi4vLi4vY3VydmVzJztcbmltcG9ydCBTaGFtaXIgZnJvbSAnLi4vLi4vc2hhbWlyJztcbmltcG9ydCAqIGFzIHJhbmdlUHJvb2YgZnJvbSAnLi9yYW5nZXByb29mJztcbmltcG9ydCB7XG4gIEFTaGFyZSxcbiAgQlNoYXJlLFxuICBEU2hhcmUsXG4gIEdTaGFyZSxcbiAgS2V5Q29tYmluZWQsXG4gIEtleUNvbWJpbmVkV2l0aE50aWxkZSxcbiAgS2V5U2hhcmUsXG4gIEtTaGFyZSxcbiAgTVVTaGFyZSxcbiAgTlNoYXJlLFxuICBPU2hhcmUsXG4gIFBTaGFyZSxcbiAgUmFuZ2VQcm9vZldpdGhDaGVjayxcbiAgU2lnbmF0dXJlLFxuICBTaWduQ29tYmluZSxcbiAgU2lnbkNvbWJpbmVSVCxcbiAgU2lnbkNvbnZlcnQsXG4gIFNpZ25Db252ZXJ0UlQsXG4gIFNpZ25TaGFyZVJULFxuICBTU2hhcmUsXG4gIFN1YmtleVNoYXJlLFxuICBYU2hhcmUsXG4gIFhTaGFyZVdpdGhOdGlsZGUsXG4gIFlTaGFyZSxcbiAgWVNoYXJlV2l0aE50aWxkZSxcbiAgU2VyaWFsaXplZE50aWxkZSxcbiAgRGVzZXJpYWxpemVkTnRpbGRlLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgXzVuID0gQmlnSW50KDUpO1xuXG5mdW5jdGlvbiBoYXNOdGlsZGUoc2hhcmU6IFhTaGFyZSB8IFlTaGFyZSk6IHNoYXJlIGlzIFhTaGFyZVdpdGhOdGlsZGUgfCBZU2hhcmVXaXRoTnRpbGRlIHtcbiAgcmV0dXJuICdudGlsZGUnIGluIHNoYXJlO1xufVxuXG4vKipcbiAqIEVDRFNBIFRTUyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0aW5nIDI6biBUaHJlc2hvbGRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWNkc2Ege1xuICBzdGF0aWMgY3VydmU6IFNlY3AyNTZrMUN1cnZlID0gbmV3IFNlY3AyNTZrMUN1cnZlKCk7XG4gIHN0YXRpYyBoZFRyZWU6IEhEVHJlZSA9IG5ldyBCSVAzMigpO1xuICBzdGF0aWMgc2hhbWlyOiBTaGFtaXIgPSBuZXcgU2hhbWlyKEVjZHNhLmN1cnZlKTtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNoYXJlcyBmb3IgcGFydGljaXBhbnQgYXQgaW5kZXggYW5kIHNwbGl0IGtleXMgYCh0aHJlc2hvbGQsbnVtU2hhcmVzKWAgd2F5cy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IHBhcnRpY2lwYW50IGluZGV4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGQgU2lnbmluZyB0aHJlc2hvbGRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bVNoYXJlcyAgTnVtYmVyIG9mIHNoYXJlc1xuICAgKiBAcGFyYW0ge0J1ZmZlcn0gc2VlZCBvcHRpb25hbCA2NCBieXRlIHNlZWQgdG8gdXNlIGZvciBrZXkgZ2VuZXJhdGlvblxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHN5bmMgb3B0aW9uYWwgc3luYyBmbGFnLCBpZiB0cnVlIHRoZW4gYSBzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIFBhaWxsaWVyIGtleSBnZW5lcmF0aW9uIGlzIHVzZWQgdGhhdCBkb2VzIG5vdCBzcGF3biBXb3JrZXIgdGhyZWFkcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8S2V5U2hhcmU+fSBSZXR1cm5zIHRoZSBwcml2YXRlIHAtc2hhcmVcbiAgICogYW5kIG4tc2hhcmVzIHRvIGJlIGRpc3RyaWJ1dGVkIHRvIHBhcnRpY2lwYW50cyBhdCB0aGVpciBjb3JyZXNwb25kaW5nIGluZGV4LlxuICAgKi9cbiAgYXN5bmMga2V5U2hhcmUoaW5kZXg6IG51bWJlciwgdGhyZXNob2xkOiBudW1iZXIsIG51bVNoYXJlczogbnVtYmVyLCBzZWVkPzogQnVmZmVyLCBzeW5jID0gZmFsc2UpOiBQcm9taXNlPEtleVNoYXJlPiB7XG4gICAgaWYgKCEoaW5kZXggPiAwICYmIGluZGV4IDw9IG51bVNoYXJlcyAmJiB0aHJlc2hvbGQgPD0gbnVtU2hhcmVzICYmIHRocmVzaG9sZCA9PT0gMikpIHtcbiAgICAgIHRocm93ICdJbnZhbGlkIEtleVNoYXJlIENvbmZpZyc7XG4gICAgfVxuXG4gICAgaWYgKHNlZWQgJiYgc2VlZC5sZW5ndGggPCA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWVkIG11c3QgaGF2ZSBhIGxlbmd0aCBvZiBhdCBsZWFzdCA2NCBieXRlcycpO1xuICAgIH1cblxuICAgIGxldCBzZWVkV2l0aFZhbGlkTGVuZ3RoID0gc2VlZDtcbiAgICBpZiAoc2VlZCAmJiBzZWVkLmxlbmd0aCA+IDY0KSB7XG4gICAgICAvLyBpZiBzZWVkIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gNjQgYnl0ZXMsIGhhc2ggc2VlZCB0byA2NCBieXRlcy5cbiAgICAgIHNlZWRXaXRoVmFsaWRMZW5ndGggPSBjcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUoc2VlZCkuZGlnZXN0KCk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgYWRkaXRpdmVseSBob21vbW9ycGhpYyBlbmNyeXB0aW9uIGtleS5cbiAgICBsZXQgcGFpbGxpZXJLZXlQYWlyOiBwYWlsbGllckJpZ2ludC5LZXlQYWlyO1xuICAgIGlmICghc3luYykge1xuICAgICAgcGFpbGxpZXJLZXlQYWlyID0gYXdhaXQgcGFpbGxpZXJCaWdpbnQuZ2VuZXJhdGVSYW5kb21LZXlzKDMwNzIsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYWlsbGllcktleVBhaXIgPSBwYWlsbGllckJpZ2ludC5nZW5lcmF0ZVJhbmRvbUtleXNTeW5jKDMwNzIsIHRydWUpO1xuICAgIH1cbiAgICBjb25zdCB7IHB1YmxpY0tleSwgcHJpdmF0ZUtleSB9ID0gcGFpbGxpZXJLZXlQYWlyO1xuICAgIC8vIEFjY2VwdCBhIDY0IGJ5dGUgc2VlZCBhbmQgY3JlYXRlIGFuIGV4dGVuZGVkIHByaXZhdGUga2V5IGZyb20gdGhhdCBzZWVkXG4gICAgY29uc3Qgc2VjcmV0S2V5ID0gc2VlZFdpdGhWYWxpZExlbmd0aCAmJiBiaXAzMi5mcm9tU2VlZChzZWVkV2l0aFZhbGlkTGVuZ3RoKTtcbiAgICBjb25zdCB1ID1cbiAgICAgIChzZWNyZXRLZXkgJiYgc2VjcmV0S2V5LnByaXZhdGVLZXkgJiYgYmlnSW50RnJvbVU4QUJFKG5ldyBVaW50OEFycmF5KHNlY3JldEtleS5wcml2YXRlS2V5KSkpID8/XG4gICAgICBFY2RzYS5jdXJ2ZS5zY2FsYXJSYW5kb20oKTtcbiAgICBjb25zdCB5ID0gRWNkc2EuY3VydmUuYmFzZVBvaW50TXVsdCh1KTtcbiAgICBjb25zdCBjaGFpbmNvZGUgPSAoc2VjcmV0S2V5ICYmIHNlY3JldEtleS5jaGFpbkNvZGUpID8/IHJhbmRvbUJ5dGVzKDMyKTtcbiAgICAvLyBDb21wdXRlIHNlY3JldCBzaGFyZXMgb2YgdGhlIHByaXZhdGUga2V5XG4gICAgY29uc3QgeyBzaGFyZXM6IHVTaGFyZXMsIHYgfSA9IEVjZHNhLnNoYW1pci5zcGxpdCh1LCB0aHJlc2hvbGQsIG51bVNoYXJlcyk7XG4gICAgY29uc3QgY3VycmVudFBhcnRpY2lwYW50OiBQU2hhcmUgPSB7XG4gICAgICBpOiBpbmRleCxcbiAgICAgIHQ6IHRocmVzaG9sZCxcbiAgICAgIGM6IG51bVNoYXJlcyxcbiAgICAgIGw6IGJpZ0ludFRvQnVmZmVyQkUocHJpdmF0ZUtleS5sYW1iZGEsIDE5MikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgbTogYmlnSW50VG9CdWZmZXJCRShwcml2YXRlS2V5Lm11LCAxOTIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIG46IGJpZ0ludFRvQnVmZmVyQkUocHVibGljS2V5Lm4sIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgeTogYmlnSW50VG9CdWZmZXJCRSh5LCAzMykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgdTogYmlnSW50VG9CdWZmZXJCRSh1U2hhcmVzW2luZGV4XSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHV1OiB1LnRvU3RyaW5nKCksXG4gICAgICBjaGFpbmNvZGU6IGNoYWluY29kZS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgICBjb25zdCBrZXlTaGFyZTogS2V5U2hhcmUgPSB7XG4gICAgICBwU2hhcmU6IGN1cnJlbnRQYXJ0aWNpcGFudCxcbiAgICAgIG5TaGFyZXM6IHt9LFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHNoYXJlIGluIHVTaGFyZXMpIHtcbiAgICAgIGNvbnN0IHBhcnRpY2lwYW50SW5kZXggPSBwYXJzZUludChzaGFyZSwgMTApO1xuICAgICAgaWYgKHBhcnRpY2lwYW50SW5kZXggIT09IGluZGV4KSB7XG4gICAgICAgIGtleVNoYXJlLm5TaGFyZXNbcGFydGljaXBhbnRJbmRleF0gPSB7XG4gICAgICAgICAgaTogcGFydGljaXBhbnRJbmRleCxcbiAgICAgICAgICBqOiBjdXJyZW50UGFydGljaXBhbnRbJ2knXSxcbiAgICAgICAgICBuOiBwdWJsaWNLZXkubi50b1N0cmluZygxNiksXG4gICAgICAgICAgeTogYmlnSW50VG9CdWZmZXJCRSh5LCAzMykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHY6IGJpZ0ludFRvQnVmZmVyQkUodlswXSwgMzMpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB1OiBiaWdJbnRUb0J1ZmZlckJFKHVTaGFyZXNbcGFydGljaXBhbnRJbmRleF0sIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgY2hhaW5jb2RlOiBjaGFpbmNvZGUudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9IGFzIE5TaGFyZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGtleVNoYXJlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmUgZGF0YSBzaGFyZWQgZHVyaW5nIHRoZSBrZXkgZ2VuZXJhdGlvbiBwcm90b2NvbC5cbiAgICogQHBhcmFtIHtLZXlTaGFyZX0gcGFydGljaXBhbnRTaGFyZXMgcHJpdmF0ZSBwLXNoYXJlIGFuZFxuICAgKiBuLXNoYXJlcyByZWNlaXZlZCBmcm9tIGFsbCBvdGhlciBwYXJ0aWNpcGFudHMuXG4gICAqIEByZXR1cm5zIHtLZXlDb21iaW5lZH0gUmV0dXJucyB0aGUgcGFydGljaXBhbnQgcHJpdmF0ZSB4LXNoYXJlXG4gICAqIGFuZCB5LXNoYXJlcyB0byBiZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyBzaWduaW5nIHNoYXJlcy5cbiAgICovXG4gIGtleUNvbWJpbmUocFNoYXJlOiBQU2hhcmUsIG5TaGFyZXM6IE5TaGFyZVtdKTogS2V5Q29tYmluZWQge1xuICAgIGNvbnN0IGFsbFNoYXJlcyA9IFtwU2hhcmUsIC4uLm5TaGFyZXNdO1xuICAgIC8vIENvbXB1dGUgdGhlIHB1YmxpYyBrZXkuXG4gICAgY29uc3QgeSA9IGFsbFNoYXJlcy5tYXAoKHBhcnRpY2lwYW50KSA9PiBoZXhUb0JpZ0ludChwYXJ0aWNpcGFudFsneSddKSkucmVkdWNlKEVjZHNhLmN1cnZlLnBvaW50QWRkKTtcbiAgICAvLyBBZGQgc2VjcmV0IHNoYXJlc1xuICAgIGNvbnN0IHggPSBhbGxTaGFyZXMubWFwKChwYXJ0aWNpcGFudCkgPT4gaGV4VG9CaWdJbnQocGFydGljaXBhbnRbJ3UnXSkpLnJlZHVjZShFY2RzYS5jdXJ2ZS5zY2FsYXJBZGQpO1xuXG4gICAgLy8gVmVyaWZ5IHNoYXJlcy5cbiAgICBmb3IgKGNvbnN0IHNoYXJlIG9mIG5TaGFyZXMpIHtcbiAgICAgIGlmIChzaGFyZS52KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRWNkc2Euc2hhbWlyLnZlcmlmeShoZXhUb0JpZ0ludChzaGFyZS51KSwgW2hleFRvQmlnSW50KHNoYXJlLnkpLCBoZXhUb0JpZ0ludChzaGFyZS52ISldLCBwU2hhcmUuaSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHZlcmlmeSBzaGFyZSBmcm9tIHBhcnRpY2lwYW50ICR7c2hhcmUuan0uIFZlcmlmaWNhdGlvbiBlcnJvcjogJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGFpbmNvZGUgd2lsbCBiZSB1c2VkIGluIGZ1dHVyZSB3aGVuIHdlIGFkZCBzdXBwb3J0IGZvciBrZXkgZGVyaXZhdGlvbiBmb3IgZWNkc2FcbiAgICBjb25zdCBjaGFpbmNvZGVzID0gW3BTaGFyZSwgLi4ublNoYXJlc10ubWFwKCh7IGNoYWluY29kZSB9KSA9PiBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oY2hhaW5jb2RlLCAnaGV4JykpKTtcbiAgICBjb25zdCBjaGFpbmNvZGUgPSBjaGFpbmNvZGVzLnJlZHVjZShcbiAgICAgIChhY2MsIGNoYWluY29kZSkgPT5cbiAgICAgICAgKGFjYyArIGNoYWluY29kZSkgJSBCaWdJbnQoJzB4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJykgLy8gMl4yNTZcbiAgICApO1xuXG4gICAgY29uc3QgcGFydGljaXBhbnRzOiBLZXlDb21iaW5lZCA9IHtcbiAgICAgIHhTaGFyZToge1xuICAgICAgICBpOiBwU2hhcmUuaSxcbiAgICAgICAgbDogcFNoYXJlLmwsXG4gICAgICAgIG06IHBTaGFyZS5tLFxuICAgICAgICBuOiBwU2hhcmUubixcbiAgICAgICAgeTogYmlnSW50VG9CdWZmZXJCRSh5LCAzMykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB4OiBiaWdJbnRUb0J1ZmZlckJFKHgsIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIGNoYWluY29kZTogYmlnSW50VG9CdWZmZXJCRShjaGFpbmNvZGUsIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9LFxuICAgICAgeVNoYXJlczoge30sXG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qgc2hhcmUgaW4gblNoYXJlcykge1xuICAgICAgY29uc3QgcGFydGljaXBhbnRJbmRleCA9IG5TaGFyZXNbc2hhcmVdWydqJ107XG4gICAgICBwYXJ0aWNpcGFudHMueVNoYXJlc1twYXJ0aWNpcGFudEluZGV4XSA9IHtcbiAgICAgICAgaTogcFNoYXJlLmksXG4gICAgICAgIGo6IG5TaGFyZXNbc2hhcmVdWydqJ10sXG4gICAgICAgIG46IG5TaGFyZXNbc2hhcmVdWyduJ10sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcGFydGljaXBhbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcml2ZSBzaGFyZXMgZm9yIGEgQklQLTMyIHN1YmtleS5cbiAgICogQHBhcmFtIHtQU2hhcmV9IFRoZSB1c2VyJ3MgcC1zaGFyZS5cbiAgICogQHBhcmFtIHtOU2hhcmVbXX0gVGhlIG4tc2hhcmVzIHJlY2VpdmVkIGZyb20gdGhlIG90aGVyIHBhcnRpY2lwYW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFRoZSBCSVAtMzIgcGF0aCB0byBkZXJpdmUuXG4gICAqIEByZXR1cm5zIHtTdWJrZXlTaGFyZX0gUmV0dXJucyB0aGUgcHJpdmF0ZSB4LXNoYXJlIGFuZCBuLXNoYXJlcyB0b1xuICAgKiBiZSBkaXN0cmlidXRlZCB0byBwYXJ0aWNpcGFudHMgYXQgdGhlaXIgY29ycmVzcG9uZGluZyBpbmRleC5cbiAgICovXG4gIGtleURlcml2ZShwU2hhcmU6IFBTaGFyZSwgblNoYXJlczogTlNoYXJlW10sIHBhdGg6IHN0cmluZyk6IFN1YmtleVNoYXJlIHtcbiAgICBjb25zdCB5VmFsdWVzID0gW3BTaGFyZSwgLi4ublNoYXJlc10ubWFwKChzaGFyZSkgPT4gaGV4VG9CaWdJbnQoc2hhcmUueSkpO1xuICAgIGNvbnN0IHkgPSB5VmFsdWVzLnJlZHVjZSgocGFydGlhbCwgc2hhcmUpID0+IEVjZHNhLmN1cnZlLnBvaW50QWRkKHBhcnRpYWwsIHNoYXJlKSk7XG4gICAgY29uc3QgdSA9IEJpZ0ludChwU2hhcmUudXUpO1xuICAgIGxldCBjb250cmliQ2hhaW5jb2RlID0gaGV4VG9CaWdJbnQocFNoYXJlLmNoYWluY29kZSk7XG4gICAgY29uc3QgY2hhaW5jb2RlcyA9IFtjb250cmliQ2hhaW5jb2RlLCAuLi5uU2hhcmVzLm1hcCgoeyBjaGFpbmNvZGUgfSkgPT4gaGV4VG9CaWdJbnQoY2hhaW5jb2RlKSldO1xuICAgIGNvbnN0IGNoYWluY29kZSA9IGNoYWluY29kZXMucmVkdWNlKChhY2MsIGNoYWluY29kZSkgPT4gKGFjYyArIGNoYWluY29kZSkgJSBjaGFpbmNvZGVCYXNlKTtcblxuICAgIC8vIFZlcmlmeSBzaGFyZXMuXG4gICAgZm9yIChjb25zdCBzaGFyZSBvZiBuU2hhcmVzKSB7XG4gICAgICBpZiAoc2hhcmUudikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEVjZHNhLnNoYW1pci52ZXJpZnkoaGV4VG9CaWdJbnQoc2hhcmUudSksIFtoZXhUb0JpZ0ludChzaGFyZS55KSwgaGV4VG9CaWdJbnQoc2hhcmUudiEpXSwgcFNoYXJlLmkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCB2ZXJpZnkgc2hhcmUgZnJvbSBwYXJ0aWNpcGFudCAke3NoYXJlLmp9LiBWZXJpZmljYXRpb24gZXJyb3I6ICR7ZXJyfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVyaXZlIHN1YmtleS5cbiAgICBjb25zdCBzdWJrZXkgPSBFY2RzYS5oZFRyZWUucHJpdmF0ZURlcml2ZSh7IHBrOiB5LCBzazogdSwgY2hhaW5jb2RlIH0sIHBhdGgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIG5ldyBwdWJsaWMga2V5IGNvbnRyaWJ1dGlvbi5cbiAgICBjb25zdCBjb250cmliWSA9IEVjZHNhLmN1cnZlLmJhc2VQb2ludE11bHQoc3Via2V5LnNrKTtcblxuICAgIC8vIENhbGN1bGF0ZSBuZXcgY2hhaW5jb2RlIGNvbnRyaWJ1dGlvbi5cbiAgICBjb25zdCBjaGFpbmNvZGVEZWx0YSA9IChjaGFpbmNvZGVCYXNlICsgc3Via2V5LmNoYWluY29kZSAtIGNoYWluY29kZSkgJSBjaGFpbmNvZGVCYXNlO1xuICAgIGNvbnRyaWJDaGFpbmNvZGUgPSAoY29udHJpYkNoYWluY29kZSArIGNoYWluY29kZURlbHRhKSAlIGNoYWluY29kZUJhc2U7XG5cbiAgICAvLyBDYWxjdWxhdGUgbmV3IHUgdmFsdWVzLlxuICAgIGNvbnN0IHsgc2hhcmVzOiBzcGxpdF91LCB2IH0gPSBFY2RzYS5zaGFtaXIuc3BsaXQoc3Via2V5LnNrLCBwU2hhcmUudCB8fCAyLCBwU2hhcmUuYyB8fCAzKTtcblxuICAgIC8vIENhbGN1bGF0ZSBuZXcgc2lnbmluZyBrZXkuXG4gICAgY29uc3QgeCA9IFtzcGxpdF91W3BTaGFyZS5pXSwgLi4ublNoYXJlcy5tYXAoKHsgdSB9KSA9PiBoZXhUb0JpZ0ludCh1KSldLnJlZHVjZShFY2RzYS5jdXJ2ZS5zY2FsYXJBZGQpO1xuXG4gICAgY29uc3QgUF9pOiBYU2hhcmUgPSB7XG4gICAgICBpOiBwU2hhcmUuaSxcbiAgICAgIGw6IHBTaGFyZS5sLFxuICAgICAgbTogcFNoYXJlLm0sXG4gICAgICBuOiBwU2hhcmUubixcbiAgICAgIHk6IGJpZ0ludFRvQnVmZmVyQkUoc3Via2V5LnBrLCAzMykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgeDogYmlnSW50VG9CdWZmZXJCRSh4LCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgY2hhaW5jb2RlOiBiaWdJbnRUb0J1ZmZlckJFKHN1YmtleS5jaGFpbmNvZGUsIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcblxuICAgIGNvbnN0IHNoYXJlczogU3Via2V5U2hhcmUgPSB7XG4gICAgICB4U2hhcmU6IFBfaSxcbiAgICAgIG5TaGFyZXM6IHt9LFxuICAgIH07XG5cbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBuU2hhcmVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgIGNvbnN0IFBfaiA9IG5TaGFyZXNbaW5kXTtcbiAgICAgIHNoYXJlcy5uU2hhcmVzW1Bfai5qXSA9IHtcbiAgICAgICAgaTogUF9qLmosXG4gICAgICAgIGo6IFBfaS5pLFxuICAgICAgICBuOiBQX2oubixcbiAgICAgICAgdTogYmlnSW50VG9CdWZmZXJCRShzcGxpdF91W1Bfai5qXSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgeTogYmlnSW50VG9CdWZmZXJCRShjb250cmliWSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdjogYmlnSW50VG9CdWZmZXJCRSh2WzBdLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBjaGFpbmNvZGU6IGJpZ0ludFRvQnVmZmVyQkUoY29udHJpYkNoYWluY29kZSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYXJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJpdmVzIGEgY2hpbGQgY29tbW9uIGtleWNoYWluIGZyb20gY29tbW9uIGtleWNoYWluXG4gICAqXG4gICAqIEBwYXJhbSB7Y29tbW9uS2V5Y2hhaW59IFRoZSBjb21tb24ga2V5Y2hhaW4gYXMgYSBoZXggc3RyaW5nLlxuICAgKiBAcGFyYW0ge3BhdGh9IFRoZSBCSVAtMzIgcGF0aCB0byBkZXJpdmUuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGRlcml2ZWQgY29tbW9uIGtleWNoYWluIGFzIGEgaGV4IHN0cmluZy5cbiAgICovXG4gIGRlcml2ZVVuaGFyZGVuZWQoY29tbW9uS2V5Y2hhaW46IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoRWNkc2EuaGRUcmVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGRlcml2ZSBrZXkgd2l0aG91dCBIRFRyZWUgaW1wbGVtZW50YXRpb25cIik7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5Y2hhaW4gPSBCdWZmZXIuZnJvbShjb21tb25LZXljaGFpbiwgJ2hleCcpO1xuXG4gICAgY29uc3QgZGVyaXZlZFB1YmxpY0tleWNoYWluID0gRWNkc2EuaGRUcmVlLnB1YmxpY0Rlcml2ZShcbiAgICAgIHtcbiAgICAgICAgcGs6IGJpZ0ludEZyb21CdWZmZXJCRShrZXljaGFpbi5zbGljZSgwLCAzMykpLFxuICAgICAgICBjaGFpbmNvZGU6IGJpZ0ludEZyb21CdWZmZXJCRShrZXljaGFpbi5zbGljZSgzMykpLFxuICAgICAgfSxcbiAgICAgIHBhdGhcbiAgICApO1xuXG4gICAgY29uc3QgZGVyaXZlZFBrID0gYmlnSW50VG9CdWZmZXJCRShkZXJpdmVkUHVibGljS2V5Y2hhaW4ucGssIDMzKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgZGVyaXZlZENoYWluY29kZSA9IGJpZ0ludFRvQnVmZmVyQkUoZGVyaXZlZFB1YmxpY0tleWNoYWluLmNoYWluY29kZSwgMzIpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIHJldHVybiBkZXJpdmVkUGsgKyBkZXJpdmVkQ2hhaW5jb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgYSBnaXZlbiByYW5nZSBwcm9vZiBjaGFsbGVuZ2UgdG8gdGhlIHNoYXJlcyBwcmV2aW91c2x5IGNyZWF0ZWRcbiAgICogYnkgI2tleUNvbWJpbmUuIEdlbmVyYXRlcyBhIG5ldyBjaGFsbGVuZ2UgaWYgbm90IHByb3ZpZGVkLlxuICAgKiBAcGFyYW0ge1hTaGFyZX0geFNoYXJlIFByaXZhdGUgeFNoYXJlIG9mIHNpZ25lclxuICAgKiBAcGFyYW0ge1lTaGFyZX0geVNoYXJlIFlTaGFyZSBvZiB0aGUgb3RoZXIgcGFydGljaXBhbnQgaW52b2x2ZWQgaW5cbiAgICogdGhpcyBzaWduaW5nIG9wZXJhdGlvblxuICAgKiBAcGFyYW0ge1NlcmlhbGl6ZWROdGlsZGV9IGNoYWxsZW5nZVxuICAgKiBAcmV0dXJucyB7S2V5Q29tYmluZWR9IFRoZSBuZXcgWFNoYXJlIGFuZCBZU2hhcmVzIHdpdGggdGhlIGFtZW5kZWRcbiAgICogY2hhbGxlbmdlIHZhbHVlc1xuICAgKi9cbiAgYXN5bmMgYXBwZW5kQ2hhbGxlbmdlKHhTaGFyZTogWFNoYXJlLCB5U2hhcmU6IFlTaGFyZSwgY2hhbGxlbmdlPzogU2VyaWFsaXplZE50aWxkZSk6IFByb21pc2U8S2V5Q29tYmluZWRXaXRoTnRpbGRlPiB7XG4gICAgaWYgKCFjaGFsbGVuZ2UpIHtcbiAgICAgIGNoYWxsZW5nZSA9IEVjZHNhLnNlcmlhbGl6ZU50aWxkZShhd2FpdCByYW5nZVByb29mLmdlbmVyYXRlTnRpbGRlKDMwNzIpKTtcbiAgICB9XG4gICAgY29uc3QgeyBudGlsZGUsIGgxLCBoMiB9ID0gY2hhbGxlbmdlO1xuICAgIHJldHVybiB7XG4gICAgICB4U2hhcmU6IHsgLi4ueFNoYXJlLCBudGlsZGUsIGgxLCBoMiB9LFxuICAgICAgeVNoYXJlczoge1xuICAgICAgICBbeVNoYXJlLmpdOiB7XG4gICAgICAgICAgaTogeVNoYXJlLmosXG4gICAgICAgICAgajogeVNoYXJlLmksXG4gICAgICAgICAgbjogeFNoYXJlLm4sXG4gICAgICAgICAgbnRpbGRlLFxuICAgICAgICAgIGgxLFxuICAgICAgICAgIGgyLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBzaWduaW5nIHNoYXJlcy5cbiAgICogQHBhcmFtIHt4U2hhcmV9IHhTaGFyZSBQcml2YXRlIHhTaGFyZSBvZiBjdXJyZW50IHBhcnRpY2lwYW50IHNpZ25lclxuICAgKiBAcGFyYW0ge1lTaGFyZX0geVNoYXJlIHlTaGFyZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudCBzaWduZXJcbiAgICogQHJldHVybnMge1NpZ25TaGFyZVJUfSBSZXR1cm5zIHRoZSBwYXJ0aWNpcGFudCBwcml2YXRlIHctc2hhcmVcbiAgICogYW5kIGstc2hhcmUgdG8gYmUgZGlzdHJpYnV0ZWQgdG8gb3RoZXIgcGFydGljaXBhbnQgc2lnbmVyXG4gICAqL1xuICBhc3luYyBzaWduU2hhcmUoeFNoYXJlOiBYU2hhcmUgfCBYU2hhcmVXaXRoTnRpbGRlLCB5U2hhcmU6IFlTaGFyZVdpdGhOdGlsZGUpOiBQcm9taXNlPFNpZ25TaGFyZVJUPiB7XG4gICAgY29uc3QgcGsgPSBnZXRQYWlsbGllclB1YmxpY0tleShoZXhUb0JpZ0ludCh4U2hhcmUubikpO1xuXG4gICAgLy8gR2VuZXJhdGUgYSBjaGFsbGVuZ2UgaWYgbnRpbGRlIGlzIG5vdCBwcmVzZW50IGluIHRoZSB4U2hhcmUuXG4gICAgaWYgKCFoYXNOdGlsZGUoeFNoYXJlKSkge1xuICAgICAgeFNoYXJlID0gKGF3YWl0IHRoaXMuYXBwZW5kQ2hhbGxlbmdlKHhTaGFyZSwgeVNoYXJlKSkueFNoYXJlO1xuICAgIH1cblxuICAgIGNvbnN0IGsgPSBFY2RzYS5jdXJ2ZS5zY2FsYXJSYW5kb20oKTtcbiAgICBjb25zdCByayA9IGF3YWl0IHJhbmdlUHJvb2YucmFuZG9tQ29QcmltZVRvKHBrLm4pO1xuICAgIGNvbnN0IGNrID0gcGsuZW5jcnlwdChrLCByayk7XG4gICAgY29uc3QgZ2FtbWEgPSBFY2RzYS5jdXJ2ZS5zY2FsYXJSYW5kb20oKTtcblxuICAgIGNvbnN0IGQgPSBFY2RzYS5jdXJ2ZS5zY2FsYXJNdWx0KEVjZHNhLmN1cnZlLnNjYWxhclN1YihCaWdJbnQoeVNoYXJlLmopLCBCaWdJbnQoeFNoYXJlLmkpKSwgQmlnSW50KHhTaGFyZS5pKSk7XG5cbiAgICBjb25zdCB3ID0gW1xuICAgICAgRWNkc2EuY3VydmUuc2NhbGFyTXVsdChCaWdJbnQoeVNoYXJlLmopLCBCaWdJbnQoeFNoYXJlLmkpKSxcbiAgICAgIGhleFRvQmlnSW50KHhTaGFyZVsneCddKSxcbiAgICAgIEVjZHNhLmN1cnZlLnNjYWxhckludmVydChkKSxcbiAgICBdLnJlZHVjZShFY2RzYS5jdXJ2ZS5zY2FsYXJNdWx0KTtcblxuICAgIGNvbnN0IHsgbnRpbGRlOiBudGlsZGVhLCBoMTogaDFhLCBoMjogaDJhIH0gPSB4U2hhcmUgYXMgWFNoYXJlV2l0aE50aWxkZTtcblxuICAgIGNvbnN0IHNpZ25lcnM6IFNpZ25TaGFyZVJUID0ge1xuICAgICAgd1NoYXJlOiB7XG4gICAgICAgIGk6IHhTaGFyZS5pLFxuICAgICAgICBsOiB4U2hhcmUubCxcbiAgICAgICAgbTogeFNoYXJlLm0sXG4gICAgICAgIG46IHhTaGFyZS5uLFxuICAgICAgICB5OiB4U2hhcmUueSxcbiAgICAgICAgbnRpbGRlOiBudGlsZGVhLFxuICAgICAgICBoMTogaDFhLFxuICAgICAgICBoMjogaDJhLFxuICAgICAgICBrOiBiaWdJbnRUb0J1ZmZlckJFKGssIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIGNrOiBiaWdJbnRUb0J1ZmZlckJFKGNrLCA3NjgpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdzogYmlnSW50VG9CdWZmZXJCRSh3LCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBnYW1tYTogYmlnSW50VG9CdWZmZXJCRShnYW1tYSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0sXG4gICAgICBrU2hhcmU6IHt9IGFzIEtTaGFyZSxcbiAgICB9O1xuXG4gICAgY29uc3QgeyBudGlsZGU6IG50aWxkZWIsIGgxOiBoMWIsIGgyOiBoMmIgfSA9IHlTaGFyZTtcbiAgICBjb25zdCBwcm9vZiA9IGF3YWl0IHJhbmdlUHJvb2YucHJvdmUoXG4gICAgICBFY2RzYS5jdXJ2ZSxcbiAgICAgIDMwNzIsXG4gICAgICBwayxcbiAgICAgIHtcbiAgICAgICAgbnRpbGRlOiBoZXhUb0JpZ0ludChudGlsZGViKSxcbiAgICAgICAgaDE6IGhleFRvQmlnSW50KGgxYiksXG4gICAgICAgIGgyOiBoZXhUb0JpZ0ludChoMmIpLFxuICAgICAgfSxcbiAgICAgIGNrLFxuICAgICAgayxcbiAgICAgIHJrXG4gICAgKTtcbiAgICBjb25zdCBwcm9vZlNoYXJlID0ge1xuICAgICAgejogYmlnSW50VG9CdWZmZXJCRShwcm9vZi56LCAzODQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHU6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudSwgNzY4KS50b1N0cmluZygnaGV4JyksXG4gICAgICB3OiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLncsIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgczogYmlnSW50VG9CdWZmZXJCRShwcm9vZi5zLCAzODQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHMxOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnMxLCA5NikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgczI6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YuczIsIDQ4MCkudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG5cbiAgICBzaWduZXJzLmtTaGFyZSA9IHtcbiAgICAgIGk6IHlTaGFyZS5qLFxuICAgICAgajogeFNoYXJlLmksXG4gICAgICBuOiBway5uLnRvU3RyaW5nKDE2KSxcbiAgICAgIG50aWxkZTogbnRpbGRlYSxcbiAgICAgIGgxOiBoMWEsXG4gICAgICBoMjogaDJhLFxuICAgICAgazogYmlnSW50VG9CdWZmZXJCRShjaywgNzY4KS50b1N0cmluZygnaGV4JyksXG4gICAgICBwcm9vZjogcHJvb2ZTaGFyZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNpZ25lcnM7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBtdWx0aXBsaWNpdGl2ZS10by1hZGRpdGl2ZSAoTXRBKSBzaGFyZSBjb252ZXJzaW9uIHdpdGggYW5vdGhlclxuICAgKiBzaWduZXIuXG4gICAqIEBwYXJhbSB7U2lnbkNvbnZlcnR9XG4gICAqIEByZXR1cm5zIHtTaWduQ29udmVydFJUfVxuICAgKi9cbiAgYXN5bmMgc2lnbkNvbnZlcnQoc2hhcmVzOiBTaWduQ29udmVydCk6IFByb21pc2U8U2lnbkNvbnZlcnRSVD4ge1xuICAgIGxldCBzaGFyZVBhcnRpY2lwYW50OiBQYXJ0aWFsPEJTaGFyZT4gfCBQYXJ0aWFsPEdTaGFyZT4sIHNoYXJlVG9CZVNlbnQ6IFBhcnRpYWw8QVNoYXJlPiB8IE1VU2hhcmU7XG4gICAgbGV0IGlzR2FtbWFTaGFyZSA9IGZhbHNlO1xuICAgIGxldCBrU2hhcmU6IFBhcnRpYWw8S1NoYXJlPiA9IHt9O1xuICAgIGlmIChzaGFyZXMueFNoYXJlICYmIHNoYXJlcy55U2hhcmUgJiYgc2hhcmVzLmtTaGFyZSkge1xuICAgICAgY29uc3QgeFNoYXJlID0gc2hhcmVzLnhTaGFyZTsgLy8gY3VycmVudFBhcnRpY2lwYW50IHNlY3JldCB4U2hhcmVcbiAgICAgIGNvbnN0IHlTaGFyZSA9IHtcbiAgICAgICAgLi4uc2hhcmVzLnlTaGFyZSxcbiAgICAgICAgbnRpbGRlOiBzaGFyZXMua1NoYXJlLm50aWxkZSxcbiAgICAgICAgaDE6IHNoYXJlcy5rU2hhcmUuaDEsXG4gICAgICAgIGgyOiBzaGFyZXMua1NoYXJlLmgyLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNpZ25TaGFyZSA9IGF3YWl0IHRoaXMuc2lnblNoYXJlKHhTaGFyZSwgeVNoYXJlKTtcbiAgICAgIGtTaGFyZSA9IHNpZ25TaGFyZS5rU2hhcmU7XG4gICAgICBzaGFyZVRvQmVTZW50ID0geyAuLi5zaGFyZXMua1NoYXJlIH0gYXMgUGFydGlhbDxBU2hhcmU+O1xuICAgICAgc2hhcmVQYXJ0aWNpcGFudCA9IHsgLi4uc2lnblNoYXJlLndTaGFyZSB9IGFzIFBhcnRpYWw8QlNoYXJlPjtcbiAgICB9IGVsc2UgaWYgKChzaGFyZXMuYlNoYXJlICYmIHNoYXJlcy5tdVNoYXJlKSB8fCAoc2hhcmVzLmFTaGFyZSAmJiBzaGFyZXMud1NoYXJlKSkge1xuICAgICAgaXNHYW1tYVNoYXJlID0gdHJ1ZTtcbiAgICAgIHNoYXJlVG9CZVNlbnQgPSBzaGFyZXMuYVNoYXJlID8gKHsgLi4uc2hhcmVzLmFTaGFyZSB9IGFzIE1VU2hhcmUpIDogKHsgLi4uc2hhcmVzLm11U2hhcmUgfSBhcyBNVVNoYXJlKTtcbiAgICAgIHNoYXJlUGFydGljaXBhbnQgPSBzaGFyZXMud1NoYXJlID8gKHsgLi4uc2hhcmVzLndTaGFyZSB9IGFzIFBhcnRpYWw8R1NoYXJlPikgOiAoeyAuLi5zaGFyZXMuYlNoYXJlIH0gYXMgR1NoYXJlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbmZpZyBmb3IgU2lnbiBDb252ZXJ0Jyk7XG4gICAgfVxuICAgIGlmIChzaGFyZVBhcnRpY2lwYW50LmkgIT09IHNoYXJlVG9CZVNlbnQuaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaGFyZXMgZnJvbSBzYW1lIHBhcnRpY2lwYW50Jyk7XG4gICAgfVxuICAgIGlmICgoc2hhcmVUb0JlU2VudCBhcyBBU2hhcmUpLmFscGhhKSB7XG4gICAgICBjb25zdCBiU2hhcmVQYXJ0aWNpcGFudCA9IHNoYXJlUGFydGljaXBhbnQgYXMgQlNoYXJlO1xuICAgICAgY29uc3QgYVNoYXJlVG9CZVNlbnQgPSBzaGFyZVRvQmVTZW50IGFzIEFTaGFyZTtcbiAgICAgIGNvbnN0IHBrYSA9IGdldFBhaWxsaWVyUHVibGljS2V5KGhleFRvQmlnSW50KGJTaGFyZVBhcnRpY2lwYW50Lm4pKTtcbiAgICAgIGxldCBudGlsZGVhLCBoMWEsIGgyYSwgY2s7XG4gICAgICBpZiAoYlNoYXJlUGFydGljaXBhbnQubnRpbGRlKSB7XG4gICAgICAgIG50aWxkZWEgPSBoZXhUb0JpZ0ludChiU2hhcmVQYXJ0aWNpcGFudC5udGlsZGUpO1xuICAgICAgICBoMWEgPSBoZXhUb0JpZ0ludChiU2hhcmVQYXJ0aWNpcGFudC5oMSk7XG4gICAgICAgIGgyYSA9IGhleFRvQmlnSW50KGJTaGFyZVBhcnRpY2lwYW50LmgyKTtcbiAgICAgICAgY2sgPSBoZXhUb0JpZ0ludChiU2hhcmVQYXJ0aWNpcGFudC5jayk7XG4gICAgICB9XG4gICAgICAvLyBWZXJpZnkgJFxcZ2FtbWFfaSBcXGluIFpfe05eMn0kLlxuICAgICAgaWYgKFxuICAgICAgICAhcmFuZ2VQcm9vZi52ZXJpZnlXaXRoQ2hlY2soXG4gICAgICAgICAgRWNkc2EuY3VydmUsXG4gICAgICAgICAgMzA3MixcbiAgICAgICAgICBwa2EsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbnRpbGRlOiBudGlsZGVhLFxuICAgICAgICAgICAgaDE6IGgxYSxcbiAgICAgICAgICAgIGgyOiBoMmEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB6OiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5nYW1tYVByb29mLnopLFxuICAgICAgICAgICAgenBybTogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuZ2FtbWFQcm9vZi56cHJtKSxcbiAgICAgICAgICAgIHQ6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LmdhbW1hUHJvb2YudCksXG4gICAgICAgICAgICB2OiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5nYW1tYVByb29mLnYpLFxuICAgICAgICAgICAgdzogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuZ2FtbWFQcm9vZi53KSxcbiAgICAgICAgICAgIHM6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LmdhbW1hUHJvb2YucyksXG4gICAgICAgICAgICBzMTogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuZ2FtbWFQcm9vZi5zMSksXG4gICAgICAgICAgICBzMjogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuZ2FtbWFQcm9vZi5zMiksXG4gICAgICAgICAgICB0MTogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuZ2FtbWFQcm9vZi50MSksXG4gICAgICAgICAgICB0MjogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuZ2FtbWFQcm9vZi50MiksXG4gICAgICAgICAgICB1OiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5nYW1tYVByb29mLnUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2ssXG4gICAgICAgICAgaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuYWxwaGEpLFxuICAgICAgICAgIGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LmdhbW1hUHJvb2YueClcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHZlcmlmeSBzaWduaW5nIHNoYXJlIGZvciBnYW1tYSBwcm9vZicpO1xuICAgICAgfVxuICAgICAgLy8gVmVyaWZ5ICRcXHdfaSBcXGluIFpfe05eMn0kLlxuICAgICAgaWYgKFxuICAgICAgICAhcmFuZ2VQcm9vZi52ZXJpZnlXaXRoQ2hlY2soXG4gICAgICAgICAgRWNkc2EuY3VydmUsXG4gICAgICAgICAgMzA3MixcbiAgICAgICAgICBwa2EsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbnRpbGRlOiBudGlsZGVhLFxuICAgICAgICAgICAgaDE6IGgxYSxcbiAgICAgICAgICAgIGgyOiBoMmEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB6OiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC53UHJvb2YueiksXG4gICAgICAgICAgICB6cHJtOiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC53UHJvb2YuenBybSksXG4gICAgICAgICAgICB0OiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC53UHJvb2YudCksXG4gICAgICAgICAgICB2OiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC53UHJvb2YudiksXG4gICAgICAgICAgICB3OiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC53UHJvb2YudyksXG4gICAgICAgICAgICBzOiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC53UHJvb2YucyksXG4gICAgICAgICAgICBzMTogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQud1Byb29mLnMxKSxcbiAgICAgICAgICAgIHMyOiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC53UHJvb2YuczIpLFxuICAgICAgICAgICAgdDE6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LndQcm9vZi50MSksXG4gICAgICAgICAgICB0MjogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQud1Byb29mLnQyKSxcbiAgICAgICAgICAgIHU6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LndQcm9vZi51KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNrLFxuICAgICAgICAgIGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50Lm11KSxcbiAgICAgICAgICBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC53UHJvb2YueClcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHZlcmlmeSBzaGFyZSBmb3Igd1Byb29mJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBzayA9IG5ldyBwYWlsbGllckJpZ2ludC5Qcml2YXRlS2V5KFxuICAgICAgICBoZXhUb0JpZ0ludChiU2hhcmVQYXJ0aWNpcGFudC5sIGFzIHN0cmluZyksXG4gICAgICAgIGhleFRvQmlnSW50KGJTaGFyZVBhcnRpY2lwYW50Lm0gYXMgc3RyaW5nKSxcbiAgICAgICAgcGthXG4gICAgICApO1xuICAgICAgY29uc3QgZ1NoYXJlUGFydGljaXBhbnQgPSBzaGFyZVBhcnRpY2lwYW50IGFzIEdTaGFyZTtcbiAgICAgIGNvbnN0IG11U2hhcmVUb0JlU2VudCA9IHNoYXJlVG9CZVNlbnQgYXMgTVVTaGFyZTtcbiAgICAgIGNvbnN0IGFscGhhID0gc2suZGVjcnlwdChoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5hbHBoYSkpO1xuICAgICAgZ1NoYXJlUGFydGljaXBhbnQuYWxwaGEgPSBiaWdJbnRUb0J1ZmZlckJFKEVjZHNhLmN1cnZlLnNjYWxhclJlZHVjZShhbHBoYSksIDMyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBtdSA9IHNrLmRlY3J5cHQoaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQubXUgYXMgc3RyaW5nKSk7IC8vIHJlY2hlY2sgZW5jcnlwdGVkIG51bWJlclxuICAgICAgZ1NoYXJlUGFydGljaXBhbnQubXUgPSBiaWdJbnRUb0J1ZmZlckJFKEVjZHNhLmN1cnZlLnNjYWxhclJlZHVjZShtdSksIDMyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBwYXJ0aWFsU2hhcmVQYXJ0aWNpcGFudCA9IHNoYXJlUGFydGljaXBhbnQgYXMgUGFydGlhbDxHU2hhcmU+O1xuICAgICAgY29uc3QgcGFydGlhbFNoYXJlVG9CZVNlbnQgPSBtdVNoYXJlVG9CZVNlbnQgYXMgUGFydGlhbDxNVVNoYXJlPjtcbiAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVQYXJ0aWNpcGFudC5sO1xuICAgICAgZGVsZXRlIHBhcnRpYWxTaGFyZVBhcnRpY2lwYW50Lm07XG4gICAgICBkZWxldGUgcGFydGlhbFNoYXJlVG9CZVNlbnQuYWxwaGE7XG4gICAgICBkZWxldGUgcGFydGlhbFNoYXJlVG9CZVNlbnQubXU7XG4gICAgfVxuICAgIGlmICgoc2hhcmVUb0JlU2VudCBhcyBBU2hhcmUpLmspIHtcbiAgICAgIGNvbnN0IGJTaGFyZVBhcnRpY2lwYW50ID0gc2hhcmVQYXJ0aWNpcGFudCBhcyBCU2hhcmU7XG4gICAgICBjb25zdCBhU2hhcmVUb0JlU2VudCA9IHNoYXJlVG9CZVNlbnQgYXMgQVNoYXJlO1xuICAgICAgY29uc3QgbiA9IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50Lm4pOyAvLyBQYWlsbGllciBwdWIgZnJvbSBvdGhlciBzaWduZXJcbiAgICAgIGNvbnN0IHBrYSA9IGdldFBhaWxsaWVyUHVibGljS2V5KG4pO1xuICAgICAgbGV0IG50aWxkZWEsIGgxYSwgaDJhLCBudGlsZGViLCBoMWIsIGgyYjtcbiAgICAgIGlmIChhU2hhcmVUb0JlU2VudC5udGlsZGUpIHtcbiAgICAgICAgbnRpbGRlYSA9IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50Lm50aWxkZSk7XG4gICAgICAgIGgxYSA9IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LmgxKTtcbiAgICAgICAgaDJhID0gaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuaDIpO1xuICAgICAgICBudGlsZGViID0gaGV4VG9CaWdJbnQoYlNoYXJlUGFydGljaXBhbnQubnRpbGRlKTtcbiAgICAgICAgaDFiID0gaGV4VG9CaWdJbnQoYlNoYXJlUGFydGljaXBhbnQuaDEpO1xuICAgICAgICBoMmIgPSBoZXhUb0JpZ0ludChiU2hhcmVQYXJ0aWNpcGFudC5oMik7XG4gICAgICB9XG4gICAgICBjb25zdCBrID0gaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQuayk7XG4gICAgICBpZiAoXG4gICAgICAgICFyYW5nZVByb29mLnZlcmlmeShcbiAgICAgICAgICBFY2RzYS5jdXJ2ZSxcbiAgICAgICAgICAzMDcyLFxuICAgICAgICAgIHBrYSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBudGlsZGU6IG50aWxkZWIsXG4gICAgICAgICAgICBoMTogaDFiLFxuICAgICAgICAgICAgaDI6IGgyYixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHo6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LnByb29mLnopLFxuICAgICAgICAgICAgdTogaGV4VG9CaWdJbnQoYVNoYXJlVG9CZVNlbnQucHJvb2YudSksXG4gICAgICAgICAgICB3OiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5wcm9vZi53KSxcbiAgICAgICAgICAgIHM6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LnByb29mLnMpLFxuICAgICAgICAgICAgczE6IGhleFRvQmlnSW50KGFTaGFyZVRvQmVTZW50LnByb29mLnMxKSxcbiAgICAgICAgICAgIHMyOiBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5wcm9vZi5zMiksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBrXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCB2ZXJpZnkgc2lnbmluZyBBIHNoYXJlIHByb29mJyk7XG4gICAgICB9XG4gICAgICAvLyBNdEEgJGtfaiwgXFxnYW1tYV9pJC5cbiAgICAgIGNvbnN0IGJldGEwID0gYmlnaW50Q3J5cHRvVXRpbHMucmFuZEJldHdlZW4oRWNkc2EuY3VydmUub3JkZXIoKSAqKiBfNW4pO1xuICAgICAgYlNoYXJlUGFydGljaXBhbnQuYmV0YSA9IGJpZ0ludFRvQnVmZmVyQkUoRWNkc2EuY3VydmUuc2NhbGFyTmVnYXRlKEVjZHNhLmN1cnZlLnNjYWxhclJlZHVjZShiZXRhMCkpLCAzMikudG9TdHJpbmcoXG4gICAgICAgICdoZXgnXG4gICAgICApO1xuICAgICAgY29uc3QgZyA9IGhleFRvQmlnSW50KGJTaGFyZVBhcnRpY2lwYW50LmdhbW1hKTtcbiAgICAgIGNvbnN0IHJiID0gYXdhaXQgcmFuZ2VQcm9vZi5yYW5kb21Db1ByaW1lVG8ocGthLm4pO1xuICAgICAgY29uc3QgY2IgPSBwa2EuZW5jcnlwdChiZXRhMCwgcmIpO1xuICAgICAgY29uc3QgYWxwaGEgPSBwa2EuYWRkaXRpb24ocGthLm11bHRpcGx5KGssIGcpLCBjYik7XG4gICAgICBhU2hhcmVUb0JlU2VudC5hbHBoYSA9IGJpZ0ludFRvQnVmZmVyQkUoYWxwaGEsIDMyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAvLyBQcm92ZSAkXFxnYW1tYV9pIFxcaW4gWl97Tl4yfSQuXG4gICAgICBjb25zdCBneCA9IEVjZHNhLmN1cnZlLmJhc2VQb2ludE11bHQoZyk7XG4gICAgICBsZXQgcHJvb2Y6IFJhbmdlUHJvb2ZXaXRoQ2hlY2s7XG4gICAgICBwcm9vZiA9IGF3YWl0IHJhbmdlUHJvb2YucHJvdmVXaXRoQ2hlY2soXG4gICAgICAgIEVjZHNhLmN1cnZlLFxuICAgICAgICAzMDcyLFxuICAgICAgICBwa2EsXG4gICAgICAgIHtcbiAgICAgICAgICBudGlsZGU6IG50aWxkZWEsXG4gICAgICAgICAgaDE6IGgxYSxcbiAgICAgICAgICBoMjogaDJhLFxuICAgICAgICB9LFxuICAgICAgICBrLFxuICAgICAgICBhbHBoYSxcbiAgICAgICAgZyxcbiAgICAgICAgYmV0YTAsXG4gICAgICAgIHJiLFxuICAgICAgICBneFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5hc3NpZ24oYVNoYXJlVG9CZVNlbnQsIHtcbiAgICAgICAgZ2FtbWFQcm9vZjoge1xuICAgICAgICAgIHo6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YueiwgMzg0KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgenBybTogYmlnSW50VG9CdWZmZXJCRShwcm9vZi56cHJtLCAzODQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB0OiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnQsIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHY6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudiwgNzY4KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgdzogYmlnSW50VG9CdWZmZXJCRShwcm9vZi53LCAzODQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBzOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnMsIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHMxOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnMxLCA5NikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHMyOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnMyLCA0ODApLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB0MTogYmlnSW50VG9CdWZmZXJCRShwcm9vZi50MSwgMjI0KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgdDI6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudDIsIDQ4MCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHU6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudSwgMzMpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB4OiBiaWdJbnRUb0J1ZmZlckJFKGd4LCAzMykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICAvLyBNdEEgJGtfaiwgd19pJC5cbiAgICAgIGNvbnN0IG51MCA9IGJpZ2ludENyeXB0b1V0aWxzLnJhbmRCZXR3ZWVuKEVjZHNhLmN1cnZlLm9yZGVyKCkgKiogXzVuKTtcbiAgICAgIHNoYXJlUGFydGljaXBhbnQubnUgPSBiaWdJbnRUb0J1ZmZlckJFKEVjZHNhLmN1cnZlLnNjYWxhck5lZ2F0ZShFY2RzYS5jdXJ2ZS5zY2FsYXJSZWR1Y2UobnUwKSksIDMyKS50b1N0cmluZyhcbiAgICAgICAgJ2hleCdcbiAgICAgICk7XG4gICAgICBjb25zdCB3ID0gaGV4VG9CaWdJbnQoYlNoYXJlUGFydGljaXBhbnQudyk7XG4gICAgICBjb25zdCBybiA9IGF3YWl0IHJhbmdlUHJvb2YucmFuZG9tQ29QcmltZVRvKHBrYS5uKTtcbiAgICAgIGNvbnN0IGNuID0gcGthLmVuY3J5cHQobnUwLCBybik7XG4gICAgICBjb25zdCBtdSA9IHBrYS5hZGRpdGlvbihwa2EubXVsdGlwbHkoaywgdyksIGNuKTtcbiAgICAgIHNoYXJlVG9CZVNlbnQubXUgPSBiaWdJbnRUb0J1ZmZlckJFKG11LCAzMikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgLy8gUHJvdmUgJFxcd19pIFxcaW4gWl97Tl4yfSQuXG4gICAgICBjb25zdCB3eCA9IEVjZHNhLmN1cnZlLmJhc2VQb2ludE11bHQodyk7XG4gICAgICBwcm9vZiA9IGF3YWl0IHJhbmdlUHJvb2YucHJvdmVXaXRoQ2hlY2soXG4gICAgICAgIEVjZHNhLmN1cnZlLFxuICAgICAgICAzMDcyLFxuICAgICAgICBwa2EsXG4gICAgICAgIHtcbiAgICAgICAgICBudGlsZGU6IG50aWxkZWEsXG4gICAgICAgICAgaDE6IGgxYSxcbiAgICAgICAgICBoMjogaDJhLFxuICAgICAgICB9LFxuICAgICAgICBrLFxuICAgICAgICBoZXhUb0JpZ0ludChhU2hhcmVUb0JlU2VudC5tdSksXG4gICAgICAgIHcsXG4gICAgICAgIG51MCxcbiAgICAgICAgcm4sXG4gICAgICAgIHd4XG4gICAgICApO1xuICAgICAgT2JqZWN0LmFzc2lnbihzaGFyZVRvQmVTZW50LCB7XG4gICAgICAgIHdQcm9vZjoge1xuICAgICAgICAgIHo6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YueiwgMzg0KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgenBybTogYmlnSW50VG9CdWZmZXJCRShwcm9vZi56cHJtLCAzODQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB0OiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnQsIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHY6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudiwgNzY4KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgdzogYmlnSW50VG9CdWZmZXJCRShwcm9vZi53LCAzODQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBzOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnMsIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHMxOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnMxLCA5NikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHMyOiBiaWdJbnRUb0J1ZmZlckJFKHByb29mLnMyLCA0ODApLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB0MTogYmlnSW50VG9CdWZmZXJCRShwcm9vZi50MSwgMjI0KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgdDI6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudDIsIDQ4MCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHU6IGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudSwgMzMpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB4OiBiaWdJbnRUb0J1ZmZlckJFKHd4LCAzMykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBpZiAoKHNoYXJlUGFydGljaXBhbnQgYXMgR1NoYXJlKS5hbHBoYSkge1xuICAgICAgICBjb25zdCBwYXJ0aWFsU2hhcmVQYXJ0aWNpcGFudCA9IHNoYXJlUGFydGljaXBhbnQgYXMgUGFydGlhbDxCU2hhcmU+O1xuICAgICAgICBjb25zdCBwYXJ0aWFsU2hhcmVUb0JlU2VudCA9IHNoYXJlVG9CZVNlbnQgYXMgUGFydGlhbDxBU2hhcmU+O1xuICAgICAgICBkZWxldGUgcGFydGlhbFNoYXJlUGFydGljaXBhbnQubnRpbGRlO1xuICAgICAgICBkZWxldGUgcGFydGlhbFNoYXJlUGFydGljaXBhbnQuaDE7XG4gICAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVQYXJ0aWNpcGFudC5oMjtcbiAgICAgICAgZGVsZXRlIHBhcnRpYWxTaGFyZVBhcnRpY2lwYW50LmNrO1xuICAgICAgICBkZWxldGUgcGFydGlhbFNoYXJlVG9CZVNlbnQubjtcbiAgICAgICAgZGVsZXRlIHBhcnRpYWxTaGFyZVRvQmVTZW50Lm50aWxkZTtcbiAgICAgICAgZGVsZXRlIHBhcnRpYWxTaGFyZVRvQmVTZW50LmgxO1xuICAgICAgICBkZWxldGUgcGFydGlhbFNoYXJlVG9CZVNlbnQuaDI7XG4gICAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVUb0JlU2VudC5rO1xuICAgICAgICBkZWxldGUgcGFydGlhbFNoYXJlVG9CZVNlbnQucHJvb2Y7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuYXNzaWduKHNoYXJlVG9CZVNlbnQsIHtcbiAgICAgICAgICBuOiBrU2hhcmUubixcbiAgICAgICAgICBudGlsZGU6IGJpZ0ludFRvQnVmZmVyQkUobnRpbGRlYiwgMzg0KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgaDE6IGJpZ0ludFRvQnVmZmVyQkUoaDFiLCAzODQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBoMjogYmlnSW50VG9CdWZmZXJCRShoMmIsIDM4NCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIGs6IGtTaGFyZS5rLFxuICAgICAgICAgIHByb29mOiBrU2hhcmUucHJvb2YsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISgnYWxwaGEnIGluIHNoYXJlVG9CZVNlbnQpICYmICEoJ2snIGluIHNoYXJlVG9CZVNlbnQpKSB7XG4gICAgICBjb25zdCBwYXJ0aWFsU2hhcmVQYXJ0aWNpcGFudCA9IHNoYXJlUGFydGljaXBhbnQgYXMgUGFydGlhbDxCU2hhcmU+O1xuICAgICAgZGVsZXRlIHBhcnRpYWxTaGFyZVBhcnRpY2lwYW50Lm50aWxkZTtcbiAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVQYXJ0aWNpcGFudC5oMTtcbiAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVQYXJ0aWNpcGFudC5oMjtcbiAgICAgIGRlbGV0ZSBwYXJ0aWFsU2hhcmVQYXJ0aWNpcGFudC5jaztcbiAgICAgIGNvbnN0IG11U2hhcmVUb0JlU2VudCA9IHNoYXJlVG9CZVNlbnQgYXMgTVVTaGFyZTtcbiAgICAgIHNoYXJlVG9CZVNlbnQgPSB7XG4gICAgICAgIGk6IG11U2hhcmVUb0JlU2VudC5pLFxuICAgICAgICBqOiBtdVNoYXJlVG9CZVNlbnQuaixcbiAgICAgIH0gYXMgTVVTaGFyZTtcbiAgICB9XG4gICAgW3NoYXJlVG9CZVNlbnQuaSwgc2hhcmVUb0JlU2VudC5qXSA9IFtzaGFyZVRvQmVTZW50LmosIHNoYXJlVG9CZVNlbnQuaV07XG4gICAgaWYgKGlzR2FtbWFTaGFyZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbXVTaGFyZTogc2hhcmVUb0JlU2VudCBhcyBNVVNoYXJlLFxuICAgICAgICBnU2hhcmU6IHNoYXJlUGFydGljaXBhbnQgYXMgR1NoYXJlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGFTaGFyZTogc2hhcmVUb0JlU2VudCBhcyBBU2hhcmUsXG4gICAgICBiU2hhcmU6IHNoYXJlUGFydGljaXBhbnQgYXMgQlNoYXJlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29tYmluZSBnYW1tYSBzaGFyZXMgdG8gZ2V0IHRoZSBwcml2YXRlIG9taWNyb24gLyBkZWx0YSBzaGFyZXNcbiAgICogQHBhcmFtIHtTaWduQ29tYmluZX0gc2hhcmVzXG4gICAqIEByZXR1cm5zIHtTaWduQ29tYmluZVJUfVxuICAgKi9cbiAgc2lnbkNvbWJpbmUoc2hhcmVzOiBTaWduQ29tYmluZSk6IFNpZ25Db21iaW5lUlQge1xuICAgIGNvbnN0IGdTaGFyZSA9IHNoYXJlcy5nU2hhcmU7XG4gICAgY29uc3QgUyA9IHNoYXJlcy5zaWduSW5kZXg7XG4gICAgY29uc3QgZ2FtbWEgPSBoZXhUb0JpZ0ludChnU2hhcmUuZ2FtbWEpO1xuICAgIGNvbnN0IGFscGhhID0gaGV4VG9CaWdJbnQoZ1NoYXJlLmFscGhhKTtcbiAgICBjb25zdCBiZXRhID0gaGV4VG9CaWdJbnQoZ1NoYXJlLmJldGEpO1xuICAgIGNvbnN0IG11ID0gaGV4VG9CaWdJbnQoZ1NoYXJlLm11KTtcbiAgICBjb25zdCBudSA9IGhleFRvQmlnSW50KGdTaGFyZS5udSk7XG4gICAgY29uc3QgayA9IGhleFRvQmlnSW50KGdTaGFyZS5rKTtcbiAgICBjb25zdCB3ID0gaGV4VG9CaWdJbnQoZ1NoYXJlLncpO1xuXG4gICAgY29uc3QgZGVsdGEgPSBFY2RzYS5jdXJ2ZS5zY2FsYXJBZGQoRWNkc2EuY3VydmUuc2NhbGFyTXVsdChrLCBnYW1tYSksIEVjZHNhLmN1cnZlLnNjYWxhckFkZChhbHBoYSwgYmV0YSkpO1xuICAgIGNvbnN0IG9taWNyb24gPSBFY2RzYS5jdXJ2ZS5zY2FsYXJBZGQoRWNkc2EuY3VydmUuc2NhbGFyTXVsdChrLCB3KSwgRWNkc2EuY3VydmUuc2NhbGFyQWRkKG11LCBudSkpO1xuICAgIGNvbnN0IEdhbW1hID0gRWNkc2EuY3VydmUuYmFzZVBvaW50TXVsdChnYW1tYSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb1NoYXJlOiB7XG4gICAgICAgIGk6IGdTaGFyZS5pLFxuICAgICAgICB5OiBnU2hhcmUueSxcbiAgICAgICAgazogYmlnSW50VG9CdWZmZXJCRShrLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBvbWljcm9uOiBiaWdJbnRUb0J1ZmZlckJFKG9taWNyb24sIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIGRlbHRhOiBiaWdJbnRUb0J1ZmZlckJFKGRlbHRhLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBHYW1tYTogYmlnSW50VG9CdWZmZXJCRShHYW1tYSwgMzMpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0sXG4gICAgICBkU2hhcmU6IHtcbiAgICAgICAgaTogUy5pLFxuICAgICAgICBqOiBnU2hhcmUuaSxcbiAgICAgICAgZGVsdGE6IGJpZ0ludFRvQnVmZmVyQkUoZGVsdGEsIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIEdhbW1hOiBiaWdJbnRUb0J1ZmZlckJFKEdhbW1hLCAzMykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gTSBNZXNzYWdlIHRvIGJlIHNpZ25lZFxuICAgKiBAcGFyYW0ge09TaGFyZX0gb1NoYXJlIHByaXZhdGUgb21pY3JvbiBzaGFyZSBvZiBjdXJyZW50IHBhcnRpY2lwYW50XG4gICAqIEBwYXJhbSB7RFNoYXJlfSBkU2hhcmUgZGVsdGEgc2hhcmUgcmVjZWl2ZWQgZnJvbSB0aGUgb3RoZXIgcGFydGljaXBhbnRcbiAgICogQHBhcmFtIHtIYXNofSBoYXNoIGhhc2hpbmcgYWxnb3JpdGhtIGltcGxlbWVudGluZyBOb2RlYHMgc3RhbmRhcmQgY3J5cHRvIGhhc2ggaW50ZXJmYWNlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkSGFzaCBpZiB0cnVlLCB3ZSBoYXNoIHRoZSBwcm92aWRlZCBidWZmZXIgYmVmb3JlIHNpZ25pbmdcbiAgICogQHJldHVybnMge1NTaGFyZX1cbiAgICovXG4gIHNpZ24oTTogQnVmZmVyLCBvU2hhcmU6IE9TaGFyZSwgZFNoYXJlOiBEU2hhcmUsIGhhc2g/OiBIYXNoLCBzaG91bGRIYXNoID0gdHJ1ZSk6IFNTaGFyZSB7XG4gICAgY29uc3QgbSA9IHNob3VsZEhhc2ggPyAoaGFzaCB8fCBjcmVhdGVIYXNoKCdzaGEyNTYnKSkudXBkYXRlKE0pLmRpZ2VzdCgpIDogTTtcblxuICAgIGNvbnN0IGRlbHRhID0gRWNkc2EuY3VydmUuc2NhbGFyQWRkKGhleFRvQmlnSW50KG9TaGFyZS5kZWx0YSksIGhleFRvQmlnSW50KGRTaGFyZS5kZWx0YSkpO1xuXG4gICAgY29uc3QgUiA9IEVjZHNhLmN1cnZlLnBvaW50TXVsdGlwbHkoXG4gICAgICBFY2RzYS5jdXJ2ZS5wb2ludEFkZChoZXhUb0JpZ0ludChvU2hhcmUuR2FtbWEpLCBoZXhUb0JpZ0ludChkU2hhcmUuR2FtbWEpKSxcbiAgICAgIEVjZHNhLmN1cnZlLnNjYWxhckludmVydChkZWx0YSlcbiAgICApO1xuICAgIGNvbnN0IHBvaW50UiA9IHNlY3AuUG9pbnQuZnJvbUhleChiaWdJbnRUb0J1ZmZlckJFKFIsIDMyKSk7XG4gICAgY29uc3QgciA9IHBvaW50Ui54O1xuXG4gICAgY29uc3QgcyA9IEVjZHNhLmN1cnZlLnNjYWxhckFkZChcbiAgICAgIEVjZHNhLmN1cnZlLnNjYWxhck11bHQoYmlnSW50RnJvbVU4QUJFKG0pLCBoZXhUb0JpZ0ludChvU2hhcmUuaykpLFxuICAgICAgRWNkc2EuY3VydmUuc2NhbGFyTXVsdChyLCBoZXhUb0JpZ0ludChvU2hhcmUub21pY3JvbikpXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgaTogb1NoYXJlLmksXG4gICAgICB5OiBvU2hhcmUueSxcbiAgICAgIFI6IHBvaW50Ui50b0hleCh0cnVlKSxcbiAgICAgIHM6IGJpZ0ludFRvQnVmZmVyQkUocywgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBmdWxsIHNpZ25hdHVyZSBieSBjb21iaW5pbmcgU2lnbiBTaGFyZXNcbiAgICogQHBhcmFtIHtTU2hhcmVbXX0gc2hhcmVzXG4gICAqIEByZXR1cm5zIHtTaWduYXR1cmV9XG4gICAqL1xuICBjb25zdHJ1Y3RTaWduYXR1cmUoc2hhcmVzOiBTU2hhcmVbXSk6IFNpZ25hdHVyZSB7XG4gICAgLy8gRXZlcnkgUiBtdXN0IG1hdGNoLlxuICAgIGNvbnN0IFIgPSBzaGFyZXNbMF1bJ1InXTtcbiAgICBjb25zdCBpc1JNYXRjaGluZyA9IHNoYXJlcy5tYXAoKHNoYXJlKSA9PiBzaGFyZVsnUiddID09PSBSKS5yZWR1Y2UoKGEsIGIpID0+IGEgJiYgYik7XG4gICAgaWYgKCFpc1JNYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSIHZhbHVlIHNob3VsZCBiZSBjb25zaXN0ZW50IGFjcm9zcyBhbGwgc2hhcmVzJyk7XG4gICAgfVxuXG4gICAgbGV0IHMgPSBzaGFyZXMubWFwKChzaGFyZSkgPT4gaGV4VG9CaWdJbnQoc2hhcmVbJ3MnXSkpLnJlZHVjZShFY2RzYS5jdXJ2ZS5zY2FsYXJBZGQpO1xuICAgIGNvbnN0IHJlY2lkID0gKFIuc2xpY2UoMCwgMikgPT09ICcwMycgPyAxIDogMCkgXiAocyA+IEVjZHNhLmN1cnZlLm9yZGVyKCkgLyBCaWdJbnQoMikgPyAxIDogMCk7XG5cbiAgICAvLyBOb3JtYWxpemUgcy5cbiAgICBzID0gcyA+IEVjZHNhLmN1cnZlLm9yZGVyKCkgLyBCaWdJbnQoMikgPyBFY2RzYS5jdXJ2ZS5vcmRlcigpIC0gcyA6IHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHk6IHNoYXJlc1swXVsneSddLFxuICAgICAgcjogUi5zbGljZSgyKSxcbiAgICAgIHM6IGJpZ0ludFRvQnVmZmVyQkUocywgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHJlY2lkOiByZWNpZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSBlY2RzYSBzaWduYXR1cmVzXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7U2lnbmF0dXJlIH0gc2lnbmF0dXJlXG4gICAqIEBwYXJhbSB7SGFzaH0gaGFzaCBoYXNoaW5nIGFsZ29yaXRobSBpbXBsZW1lbnRpbmcgTm9kZWBzIHN0YW5kYXJkIGNyeXB0byBoYXNoIGludGVyZmFjZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZEhhc2ggaWYgdHJ1ZSwgd2UgaGFzaCB0aGUgcHJvdmlkZWQgYnVmZmVyIGJlZm9yZSB2ZXJpZnlpbmdcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgc2lnbmF0dXJlIGlzIHZhbGlkOyBGYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZlcmlmeShtZXNzYWdlOiBCdWZmZXIsIHNpZ25hdHVyZTogU2lnbmF0dXJlLCBoYXNoPzogSGFzaCwgc2hvdWxkSGFzaCA9IHRydWUpOiBib29sZWFuIHtcbiAgICBjb25zdCBtZXNzYWdlVG9WZXJpZnkgPSBzaG91bGRIYXNoID8gKGhhc2ggfHwgY3JlYXRlSGFzaCgnc2hhMjU2JykpLnVwZGF0ZShtZXNzYWdlKS5kaWdlc3QoKSA6IG1lc3NhZ2U7XG4gICAgcmV0dXJuIEVjZHNhLmN1cnZlLnZlcmlmeShcbiAgICAgIG1lc3NhZ2VUb1ZlcmlmeSxcbiAgICAgIEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICBCdWZmZXIuZnJvbShbc2lnbmF0dXJlWydyZWNpZCddXSksXG4gICAgICAgIGJpZ0ludFRvQnVmZmVyQkUoaGV4VG9CaWdJbnQoc2lnbmF0dXJlWydyJ10pLCAzMiksXG4gICAgICAgIGJpZ0ludFRvQnVmZmVyQkUoaGV4VG9CaWdJbnQoc2lnbmF0dXJlWydzJ10pLCAzMiksXG4gICAgICBdKSxcbiAgICAgIGhleFRvQmlnSW50KHNpZ25hdHVyZVsneSddKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIGEgY2hhbGxlbmdlIGFuZCBpdCdzIHByb29mcyBmcm9tIGhleCBzdHJpbmdzIHRvIGJpZ2ludFxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplTnRpbGRlKGNoYWxsZW5nZTogU2VyaWFsaXplZE50aWxkZSk6IERlc2VyaWFsaXplZE50aWxkZSB7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkTnRpbGRlOiBEZXNlcmlhbGl6ZWROdGlsZGUgPSB7XG4gICAgICBudGlsZGU6IGhleFRvQmlnSW50KGNoYWxsZW5nZS5udGlsZGUpLFxuICAgICAgaDE6IGhleFRvQmlnSW50KGNoYWxsZW5nZS5oMSksXG4gICAgICBoMjogaGV4VG9CaWdJbnQoY2hhbGxlbmdlLmgyKSxcbiAgICB9O1xuICAgIGlmIChjaGFsbGVuZ2UubnRpbGRlUHJvb2YpIHtcbiAgICAgIGRlc2VyaWFsaXplZE50aWxkZS5udGlsZGVQcm9vZiA9IHtcbiAgICAgICAgaDFXcnRIMjoge1xuICAgICAgICAgIGFscGhhOiBjb252ZXJ0SGV4QXJyVG9CaWdJbnRBcnIoY2hhbGxlbmdlLm50aWxkZVByb29mLmgxV3J0SDIuYWxwaGEpLFxuICAgICAgICAgIHQ6IGNvbnZlcnRIZXhBcnJUb0JpZ0ludEFycihjaGFsbGVuZ2UubnRpbGRlUHJvb2YuaDFXcnRIMi50KSxcbiAgICAgICAgfSxcbiAgICAgICAgaDJXcnRIMToge1xuICAgICAgICAgIGFscGhhOiBjb252ZXJ0SGV4QXJyVG9CaWdJbnRBcnIoY2hhbGxlbmdlLm50aWxkZVByb29mLmgyV3J0SDEuYWxwaGEpLFxuICAgICAgICAgIHQ6IGNvbnZlcnRIZXhBcnJUb0JpZ0ludEFycihjaGFsbGVuZ2UubnRpbGRlUHJvb2YuaDJXcnRIMS50KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBkZXNlcmlhbGl6ZWROdGlsZGU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIGNoYWxsZW5nZSBhbmQgaXQncyBwcm9vZnMgZnJvbSBiaWcgaW50IHRvIGhleCBzdHJpbmdzLlxuICAgKiBAcGFyYW0gY2hhbGxlbmdlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplTnRpbGRlKGNoYWxsZW5nZTogRGVzZXJpYWxpemVkTnRpbGRlKTogU2VyaWFsaXplZE50aWxkZSB7XG4gICAgY29uc3Qgc2VyaWFsaXplZE50aWxkZTogU2VyaWFsaXplZE50aWxkZSA9IHtcbiAgICAgIG50aWxkZTogYmlnSW50VG9IZXgoY2hhbGxlbmdlLm50aWxkZSksXG4gICAgICBoMTogYmlnSW50VG9IZXgoY2hhbGxlbmdlLmgxKSxcbiAgICAgIGgyOiBiaWdJbnRUb0hleChjaGFsbGVuZ2UuaDIpLFxuICAgIH07XG4gICAgaWYgKGNoYWxsZW5nZS5udGlsZGVQcm9vZikge1xuICAgICAgc2VyaWFsaXplZE50aWxkZS5udGlsZGVQcm9vZiA9IHtcbiAgICAgICAgaDFXcnRIMjoge1xuICAgICAgICAgIGFscGhhOiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIoY2hhbGxlbmdlLm50aWxkZVByb29mLmgxV3J0SDIuYWxwaGEpLFxuICAgICAgICAgIHQ6IGNvbnZlcnRCaWdJbnRBcnJUb0hleEFycihjaGFsbGVuZ2UubnRpbGRlUHJvb2YuaDFXcnRIMi50KSxcbiAgICAgICAgfSxcbiAgICAgICAgaDJXcnRIMToge1xuICAgICAgICAgIGFscGhhOiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIoY2hhbGxlbmdlLm50aWxkZVByb29mLmgyV3J0SDEuYWxwaGEpLFxuICAgICAgICAgIHQ6IGNvbnZlcnRCaWdJbnRBcnJUb0hleEFycihjaGFsbGVuZ2UubnRpbGRlUHJvb2YuaDJXcnRIMS50KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzZXJpYWxpemVkTnRpbGRlO1xuICB9XG59XG4iXX0=
|