@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.357 → 8.2.1-alpha.358

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.
Files changed (98) hide show
  1. package/dist/tsconfig.tsbuildinfo +1 -1
  2. package/package.json +3 -3
  3. package/dist/src/curves/constant.d.ts +0 -2
  4. package/dist/src/curves/constant.d.ts.map +0 -1
  5. package/dist/src/curves/constant.js +0 -6
  6. package/dist/src/curves/ed25519.d.ts +0 -20
  7. package/dist/src/curves/ed25519.d.ts.map +0 -1
  8. package/dist/src/curves/ed25519.js +0 -72
  9. package/dist/src/curves/ed25519Bip32HdTree.d.ts +0 -10
  10. package/dist/src/curves/ed25519Bip32HdTree.d.ts.map +0 -1
  11. package/dist/src/curves/ed25519Bip32HdTree.js +0 -85
  12. package/dist/src/curves/index.d.ts +0 -8
  13. package/dist/src/curves/index.d.ts.map +0 -1
  14. package/dist/src/curves/index.js +0 -24
  15. package/dist/src/curves/secp256k1.d.ts +0 -18
  16. package/dist/src/curves/secp256k1.d.ts.map +0 -1
  17. package/dist/src/curves/secp256k1.js +0 -61
  18. package/dist/src/curves/secp256k1Bip32HdTree.d.ts +0 -8
  19. package/dist/src/curves/secp256k1Bip32HdTree.d.ts.map +0 -1
  20. package/dist/src/curves/secp256k1Bip32HdTree.js +0 -54
  21. package/dist/src/curves/types.d.ts +0 -35
  22. package/dist/src/curves/types.d.ts.map +0 -1
  23. package/dist/src/curves/types.js +0 -3
  24. package/dist/src/curves/util.d.ts +0 -4
  25. package/dist/src/curves/util.d.ts.map +0 -1
  26. package/dist/src/curves/util.js +0 -42
  27. package/dist/src/hashCommitment.d.ts +0 -16
  28. package/dist/src/hashCommitment.d.ts.map +0 -1
  29. package/dist/src/hashCommitment.js +0 -44
  30. package/dist/src/index.d.ts +0 -9
  31. package/dist/src/index.d.ts.map +0 -1
  32. package/dist/src/index.js +0 -48
  33. package/dist/src/openssl/index.d.ts +0 -2
  34. package/dist/src/openssl/index.d.ts.map +0 -1
  35. package/dist/src/openssl/index.js +0 -18
  36. package/dist/src/openssl/openssl.d.ts +0 -8
  37. package/dist/src/openssl/openssl.d.ts.map +0 -1
  38. package/dist/src/openssl/openssl.js +0 -37
  39. package/dist/src/safePrime.d.ts +0 -3
  40. package/dist/src/safePrime.d.ts.map +0 -1
  41. package/dist/src/safePrime.js +0 -19
  42. package/dist/src/schnorrProof.d.ts +0 -21
  43. package/dist/src/schnorrProof.d.ts.map +0 -1
  44. package/dist/src/schnorrProof.js +0 -61
  45. package/dist/src/shamir/index.d.ts +0 -3
  46. package/dist/src/shamir/index.d.ts.map +0 -1
  47. package/dist/src/shamir/index.js +0 -19
  48. package/dist/src/shamir/shamir.d.ts +0 -38
  49. package/dist/src/shamir/shamir.d.ts.map +0 -1
  50. package/dist/src/shamir/shamir.js +0 -136
  51. package/dist/src/shamir/types.d.ts +0 -5
  52. package/dist/src/shamir/types.d.ts.map +0 -1
  53. package/dist/src/shamir/types.js +0 -3
  54. package/dist/src/tss/ecdsa/index.d.ts +0 -6
  55. package/dist/src/tss/ecdsa/index.d.ts.map +0 -1
  56. package/dist/src/tss/ecdsa/index.js +0 -42
  57. package/dist/src/tss/ecdsa/paillierproof.d.ts +0 -24
  58. package/dist/src/tss/ecdsa/paillierproof.d.ts.map +0 -1
  59. package/dist/src/tss/ecdsa/paillierproof.js +0 -86
  60. package/dist/src/tss/ecdsa/primes.d.ts +0 -2
  61. package/dist/src/tss/ecdsa/primes.d.ts.map +0 -1
  62. package/dist/src/tss/ecdsa/primes.js +0 -1846
  63. package/dist/src/tss/ecdsa/rangeproof.d.ts +0 -79
  64. package/dist/src/tss/ecdsa/rangeproof.d.ts.map +0 -1
  65. package/dist/src/tss/ecdsa/rangeproof.js +0 -394
  66. package/dist/src/tss/ecdsa/types.d.ts +0 -142
  67. package/dist/src/tss/ecdsa/types.d.ts.map +0 -1
  68. package/dist/src/tss/ecdsa/types.js +0 -130
  69. package/dist/src/tss/ecdsa/zkVProof.d.ts +0 -24
  70. package/dist/src/tss/ecdsa/zkVProof.d.ts.map +0 -1
  71. package/dist/src/tss/ecdsa/zkVProof.js +0 -70
  72. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts +0 -42
  73. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts.map +0 -1
  74. package/dist/src/tss/ecdsa-dkls/commsLayer.js +0 -235
  75. package/dist/src/tss/ecdsa-dkls/dkg.d.ts +0 -57
  76. package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +0 -1
  77. package/dist/src/tss/ecdsa-dkls/dkg.js +0 -321
  78. package/dist/src/tss/ecdsa-dkls/dsg.d.ts +0 -47
  79. package/dist/src/tss/ecdsa-dkls/dsg.d.ts.map +0 -1
  80. package/dist/src/tss/ecdsa-dkls/dsg.js +0 -266
  81. package/dist/src/tss/ecdsa-dkls/index.d.ts +0 -6
  82. package/dist/src/tss/ecdsa-dkls/index.d.ts.map +0 -1
  83. package/dist/src/tss/ecdsa-dkls/index.js +0 -42
  84. package/dist/src/tss/ecdsa-dkls/types.d.ts +0 -118
  85. package/dist/src/tss/ecdsa-dkls/types.d.ts.map +0 -1
  86. package/dist/src/tss/ecdsa-dkls/types.js +0 -165
  87. package/dist/src/tss/ecdsa-dkls/util.d.ts +0 -26
  88. package/dist/src/tss/ecdsa-dkls/util.d.ts.map +0 -1
  89. package/dist/src/tss/ecdsa-dkls/util.js +0 -276
  90. package/dist/src/tss/index.d.ts +0 -3
  91. package/dist/src/tss/index.d.ts.map +0 -1
  92. package/dist/src/tss/index.js +0 -19
  93. package/dist/src/types.d.ts +0 -13
  94. package/dist/src/types.d.ts.map +0 -1
  95. package/dist/src/types.js +0 -3
  96. package/dist/src/util.d.ts +0 -58
  97. package/dist/src/util.d.ts.map +0 -1
  98. package/dist/src/util.js +0 -164
@@ -1,58 +0,0 @@
1
- import { PublicKey } from 'paillier-bigint';
2
- /**
3
- * Returns a bigint array from a hex string array
4
- * @param values
5
- */
6
- export declare function convertHexArrToBigIntArr(values: string[]): bigint[];
7
- /**
8
- * Returns a hex string array from a bigint array
9
- * @param values
10
- * @param hexLength - length to pad each big int number too
11
- */
12
- export declare function convertBigIntArrToHexArr(values: bigint[], hexLength?: number): string[];
13
- export declare function hexToBigInt(hex: string): bigint;
14
- /**
15
- * Returns an hex string of the given bigint
16
- *
17
- * @param {bigint} bigint - the bigint to be converted to hex
18
- * @param hexLength
19
- * @returns {string} - the hex value
20
- */
21
- export declare function bigIntToHex(bigint: bigint, hexLength?: number): string;
22
- export declare function bigIntToBufferLE(n: bigint, minBytes?: number): Buffer;
23
- export declare function bigIntFromBufferLE(buf: Buffer): bigint;
24
- export declare function bigIntToBufferBE(n: bigint, minBytes?: number): Buffer;
25
- export declare function bigIntFromBufferBE(buf: Buffer): bigint;
26
- export declare function bigIntFromU8ABE(buf: Uint8Array): bigint;
27
- export declare function clamp(u: bigint): bigint;
28
- /**
29
- * Function get paillier public key simple varient
30
- * @param {bigint} n
31
- * @returns {bigint}
32
- */
33
- export declare function getPaillierPublicKey(n: bigint): PublicKey;
34
- /**
35
- * Generate a random positive integer co-prime to x
36
- * @param x
37
- * @returns {Promise<bigint>}
38
- */
39
- export declare function randomPositiveCoPrimeTo(x: bigint): Promise<bigint>;
40
- /**
41
- * Generate a random positive integer coprime less than x with the same bit depth.
42
- * @param x
43
- * @returns {Promise<bigint>}
44
- */
45
- export declare function randomPositiveCoPrimeLessThan(x: bigint): Promise<bigint>;
46
- /**
47
- * Generate a random number of a given bitlength
48
- * @param bitlength
49
- * @returns {Promise<bigint>}
50
- */
51
- export declare function randomBigInt(bitlength: number): Promise<bigint>;
52
- /**
53
- * @param seed - used to construct derivation path deterministically
54
- * @param isMaster - if set, path starts with prefix `m/`
55
- * @return path `(m/)/999999/a/b` where `a` and `b` are 7-byte pseudorandom numbers based on seed
56
- */
57
- export declare function getDerivationPath(seed: string, isMaster?: boolean): string;
58
- //# sourceMappingURL=util.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAIvF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOtE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAEzD;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOxE;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU9E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAO,GAAG,MAAM,CAQvE"}
package/dist/src/util.js DELETED
@@ -1,164 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.convertHexArrToBigIntArr = convertHexArrToBigIntArr;
7
- exports.convertBigIntArrToHexArr = convertBigIntArrToHexArr;
8
- exports.hexToBigInt = hexToBigInt;
9
- exports.bigIntToHex = bigIntToHex;
10
- exports.bigIntToBufferLE = bigIntToBufferLE;
11
- exports.bigIntFromBufferLE = bigIntFromBufferLE;
12
- exports.bigIntToBufferBE = bigIntToBufferBE;
13
- exports.bigIntFromBufferBE = bigIntFromBufferBE;
14
- exports.bigIntFromU8ABE = bigIntFromU8ABE;
15
- exports.clamp = clamp;
16
- exports.getPaillierPublicKey = getPaillierPublicKey;
17
- exports.randomPositiveCoPrimeTo = randomPositiveCoPrimeTo;
18
- exports.randomPositiveCoPrimeLessThan = randomPositiveCoPrimeLessThan;
19
- exports.randomBigInt = randomBigInt;
20
- exports.getDerivationPath = getDerivationPath;
21
- const paillier_bigint_1 = require("paillier-bigint");
22
- const bigint_crypto_utils_1 = require("bigint-crypto-utils");
23
- const bigint_mod_arith_1 = require("bigint-mod-arith");
24
- const crypto_1 = __importDefault(require("crypto"));
25
- /**
26
- * Returns a bigint array from a hex string array
27
- * @param values
28
- */
29
- function convertHexArrToBigIntArr(values) {
30
- return values.map((value) => {
31
- return hexToBigInt(value);
32
- });
33
- }
34
- /**
35
- * Returns a hex string array from a bigint array
36
- * @param values
37
- * @param hexLength - length to pad each big int number too
38
- */
39
- function convertBigIntArrToHexArr(values, hexLength) {
40
- return values.map((value) => {
41
- return bigIntToHex(value, hexLength);
42
- });
43
- }
44
- function hexToBigInt(hex) {
45
- // Strangely bigint.toString(16) gives a hex string without 0x,
46
- // but it won't accept the same string without 0x to convert
47
- // to a bigint (BigInt(hex string)). So have to introduce this
48
- // check to convert to add 0x in case if hex string
49
- // doesn't have it.
50
- if (hex.slice(0, 2) === '0x') {
51
- return BigInt(hex);
52
- }
53
- return BigInt('0x' + hex);
54
- }
55
- /**
56
- * Returns an hex string of the given bigint
57
- *
58
- * @param {bigint} bigint - the bigint to be converted to hex
59
- * @param hexLength
60
- * @returns {string} - the hex value
61
- */
62
- function bigIntToHex(bigint, hexLength) {
63
- let hex = bigint.toString(16);
64
- hex = '0'.slice(0, hex.length % 2) + hex;
65
- if (hexLength) {
66
- hex = hex.padStart(hexLength, '0');
67
- }
68
- return hex;
69
- }
70
- function bigIntToBufferLE(n, minBytes) {
71
- let v = n.toString(16);
72
- v = '0'.slice(0, v.length % 2) + v;
73
- const buf = Buffer.from(v, 'hex').reverse();
74
- if (minBytes && buf.length < minBytes) {
75
- return Buffer.concat([buf, Buffer.alloc(minBytes - buf.length)]);
76
- }
77
- return buf;
78
- }
79
- function bigIntFromBufferLE(buf) {
80
- return BigInt('0x' + Buffer.from(buf).reverse().toString('hex'));
81
- }
82
- function bigIntToBufferBE(n, minBytes) {
83
- let v = n.toString(16);
84
- v = '0'.slice(0, v.length % 2) + v;
85
- const buf = Buffer.from(v, 'hex');
86
- if (minBytes && buf.length < minBytes) {
87
- return Buffer.concat([Buffer.alloc(minBytes - buf.length), buf]);
88
- }
89
- return buf;
90
- }
91
- function bigIntFromBufferBE(buf) {
92
- return BigInt('0x' + buf.toString('hex'));
93
- }
94
- function bigIntFromU8ABE(buf) {
95
- return bigIntFromBufferBE(Buffer.from(buf));
96
- }
97
- function clamp(u) {
98
- u &= BigInt('0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8');
99
- u |= BigInt('0x4000000000000000000000000000000000000000000000000000000000000000');
100
- return u;
101
- }
102
- /**
103
- * Function get paillier public key simple varient
104
- * @param {bigint} n
105
- * @returns {bigint}
106
- */
107
- function getPaillierPublicKey(n) {
108
- return new paillier_bigint_1.PublicKey(n, n + BigInt(1));
109
- }
110
- /**
111
- * Generate a random positive integer co-prime to x
112
- * @param x
113
- * @returns {Promise<bigint>}
114
- */
115
- async function randomPositiveCoPrimeTo(x) {
116
- while (true) {
117
- const y = await randomBigInt((0, bigint_crypto_utils_1.bitLength)(x));
118
- if (y > BigInt(0) && (0, bigint_mod_arith_1.gcd)(x, y) === BigInt(1)) {
119
- return y;
120
- }
121
- }
122
- }
123
- /**
124
- * Generate a random positive integer coprime less than x with the same bit depth.
125
- * @param x
126
- * @returns {Promise<bigint>}
127
- */
128
- async function randomPositiveCoPrimeLessThan(x) {
129
- if (x <= BigInt(2)) {
130
- throw new Error('x must be larger than 2');
131
- }
132
- while (true) {
133
- const y = await randomBigInt((0, bigint_crypto_utils_1.bitLength)(x));
134
- if (y > BigInt(0) && y < x && (0, bigint_mod_arith_1.gcd)(x, y) === BigInt(1)) {
135
- return y;
136
- }
137
- }
138
- }
139
- /**
140
- * Generate a random number of a given bitlength
141
- * @param bitlength
142
- * @returns {Promise<bigint>}
143
- */
144
- async function randomBigInt(bitlength) {
145
- return bigIntFromBufferBE(Buffer.from(await (0, bigint_crypto_utils_1.randBits)(bitlength, true)));
146
- }
147
- /**
148
- * @param seed - used to construct derivation path deterministically
149
- * @param isMaster - if set, path starts with prefix `m/`
150
- * @return path `(m/)/999999/a/b` where `a` and `b` are 7-byte pseudorandom numbers based on seed
151
- */
152
- function getDerivationPath(seed, isMaster = true) {
153
- const derivationPathInput = sha256(sha256(`${seed}`)).toString('hex');
154
- const derivationPathParts = [
155
- parseInt(derivationPathInput.slice(0, 7), 16),
156
- parseInt(derivationPathInput.slice(7, 14), 16),
157
- ];
158
- const prefix = isMaster ? 'm/' : '';
159
- return prefix + '999999/' + derivationPathParts.join('/');
160
- }
161
- function sha256(input) {
162
- return crypto_1.default.createHash('sha256').update(input).digest();
163
- }
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBU0EsNERBSUM7QUFPRCw0REFJQztBQUVELGtDQVVDO0FBU0Qsa0NBT0M7QUFFRCw0Q0FRQztBQUVELGdEQUVDO0FBRUQsNENBUUM7QUFFRCxnREFFQztBQUVELDBDQUVDO0FBRUQsc0JBSUM7QUFPRCxvREFFQztBQU9ELDBEQU9DO0FBT0Qsc0VBVUM7QUFPRCxvQ0FFQztBQU9ELDhDQVFDO0FBMUpELHFEQUE0QztBQUM1Qyw2REFBMEQ7QUFDMUQsdURBQXVDO0FBQ3ZDLG9EQUE0QjtBQUU1Qjs7O0dBR0c7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxNQUFnQjtJQUN2RCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMxQixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsTUFBZ0IsRUFBRSxTQUFrQjtJQUMzRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMxQixPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLEdBQVc7SUFDckMsK0RBQStEO0lBQy9ELDREQUE0RDtJQUM1RCw4REFBOEQ7SUFDOUQsbURBQW1EO0lBQ25ELG1CQUFtQjtJQUNuQixJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzdCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEdB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QUFDLFNBQWlCO0lBQ2xELE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUEsOEJBQVEsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsSUFBWSxFQUFFLFFBQVEsR0FBRyxJQUFJO0lBQzdELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEUsTUFBTSxtQkFBbUIsR0FBRztRQUMxQixRQUFRLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0MsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0tBQy9DLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3BDLE9BQU8sTUFBTSxHQUFHLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLEtBQXdCO0lBQ3RDLE9BQU8sZ0JBQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQdWJsaWNLZXkgfSBmcm9tICdwYWlsbGllci1iaWdpbnQnO1xuaW1wb3J0IHsgYml0TGVuZ3RoLCByYW5kQml0cyB9IGZyb20gJ2JpZ2ludC1jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgZ2NkIH0gZnJvbSAnYmlnaW50LW1vZC1hcml0aCc7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbi8qKlxuICogUmV0dXJucyBhIGJpZ2ludCBhcnJheSBmcm9tIGEgaGV4IHN0cmluZyBhcnJheVxuICogQHBhcmFtIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEhleEFyclRvQmlnSW50QXJyKHZhbHVlczogc3RyaW5nW10pOiBiaWdpbnRbXSB7XG4gIHJldHVybiB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiBoZXhUb0JpZ0ludCh2YWx1ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBoZXggc3RyaW5nIGFycmF5IGZyb20gYSBiaWdpbnQgYXJyYXlcbiAqIEBwYXJhbSB2YWx1ZXNcbiAqIEBwYXJhbSBoZXhMZW5ndGggLSBsZW5ndGggdG8gcGFkIGVhY2ggYmlnIGludCBudW1iZXIgdG9vXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIodmFsdWVzOiBiaWdpbnRbXSwgaGV4TGVuZ3RoPzogbnVtYmVyKTogc3RyaW5nW10ge1xuICByZXR1cm4gdmFsdWVzLm1hcCgodmFsdWUpID0+IHtcbiAgICByZXR1cm4gYmlnSW50VG9IZXgodmFsdWUsIGhleExlbmd0aCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9CaWdJbnQoaGV4OiBzdHJpbmcpOiBiaWdpbnQge1xuICAvLyBTdHJhbmdlbHkgYmlnaW50LnRvU3RyaW5nKDE2KSBnaXZlcyBhIGhleCBzdHJpbmcgd2l0aG91dCAweCxcbiAgLy8gYnV0IGl0IHdvbid0IGFjY2VwdCB0aGUgc2FtZSBzdHJpbmcgd2l0aG91dCAweCB0byBjb252ZXJ0XG4gIC8vIHRvIGEgYmlnaW50IChCaWdJbnQoaGV4IHN0cmluZykpLiBTbyBoYXZlIHRvIGludHJvZHVjZSB0aGlzXG4gIC8vIGNoZWNrIHRvIGNvbnZlcnQgdG8gYWRkIDB4IGluIGNhc2UgaWYgaGV4IHN0cmluZ1xuICAvLyBkb2Vzbid0IGhhdmUgaXQuXG4gIGlmIChoZXguc2xpY2UoMCwgMikgPT09ICcweCcpIHtcbiAgICByZXR1cm4gQmlnSW50KGhleCk7XG4gIH1cbiAgcmV0dXJuIEJpZ0ludCgnMHgnICsgaGV4KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGhleCBzdHJpbmcgb2YgdGhlIGdpdmVuIGJpZ2ludFxuICpcbiAqIEBwYXJhbSB7YmlnaW50fSBiaWdpbnQgLSB0aGUgYmlnaW50IHRvIGJlIGNvbnZlcnRlZCB0byBoZXhcbiAqIEBwYXJhbSBoZXhMZW5ndGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9IZXgoYmlnaW50OiBiaWdpbnQsIGhleExlbmd0aD86IG51bWJlcik6IHN0cmluZyB7XG4gIGxldCBoZXggPSBiaWdpbnQudG9TdHJpbmcoMTYpO1xuICBoZXggPSAnMCcuc2xpY2UoMCwgaGV4Lmxlbmd0aCAlIDIpICsgaGV4O1xuICBpZiAoaGV4TGVuZ3RoKSB7XG4gICAgaGV4ID0gaGV4LnBhZFN0YXJ0KGhleExlbmd0aCwgJzAnKTtcbiAgfVxuICByZXR1cm4gaGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9CdWZmZXJMRShuOiBiaWdpbnQsIG1pbkJ5dGVzPzogbnVtYmVyKTogQnVmZmVyIHtcbiAgbGV0IHYgPSBuLnRvU3RyaW5nKDE2KTtcbiAgdiA9ICcwJy5zbGljZSgwLCB2Lmxlbmd0aCAlIDIpICsgdjtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20odiwgJ2hleCcpLnJldmVyc2UoKTtcbiAgaWYgKG1pbkJ5dGVzICYmIGJ1Zi5sZW5ndGggPCBtaW5CeXRlcykge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIEJ1ZmZlci5hbGxvYyhtaW5CeXRlcyAtIGJ1Zi5sZW5ndGgpXSk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludEZyb21CdWZmZXJMRShidWY6IEJ1ZmZlcik6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoJzB4JyArIEJ1ZmZlci5mcm9tKGJ1ZikucmV2ZXJzZSgpLnRvU3RyaW5nKCdoZXgnKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRUb0J1ZmZlckJFKG46IGJpZ2ludCwgbWluQnl0ZXM/OiBudW1iZXIpOiBCdWZmZXIge1xuICBsZXQgdiA9IG4udG9TdHJpbmcoMTYpO1xuICB2ID0gJzAnLnNsaWNlKDAsIHYubGVuZ3RoICUgMikgKyB2O1xuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbSh2LCAnaGV4Jyk7XG4gIGlmIChtaW5CeXRlcyAmJiBidWYubGVuZ3RoIDwgbWluQnl0ZXMpIHtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmFsbG9jKG1pbkJ5dGVzIC0gYnVmLmxlbmd0aCksIGJ1Zl0pO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRGcm9tQnVmZmVyQkUoYnVmOiBCdWZmZXIpOiBiaWdpbnQge1xuICByZXR1cm4gQmlnSW50KCcweCcgKyBidWYudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludEZyb21VOEFCRShidWY6IFVpbnQ4QXJyYXkpOiBiaWdpbnQge1xuICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKGJ1ZikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAodTogYmlnaW50KTogYmlnaW50IHtcbiAgdSAmPSBCaWdJbnQoJzB4N2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOCcpO1xuICB1IHw9IEJpZ0ludCgnMHg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG4gIHJldHVybiB1O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGdldCBwYWlsbGllciBwdWJsaWMga2V5IHNpbXBsZSB2YXJpZW50XG4gKiBAcGFyYW0ge2JpZ2ludH0gblxuICogQHJldHVybnMge2JpZ2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhaWxsaWVyUHVibGljS2V5KG46IGJpZ2ludCk6IFB1YmxpY0tleSB7XG4gIHJldHVybiBuZXcgUHVibGljS2V5KG4sIG4gKyBCaWdJbnQoMSkpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHBvc2l0aXZlIGludGVnZXIgY28tcHJpbWUgdG8geFxuICogQHBhcmFtIHhcbiAqIEByZXR1cm5zIHtQcm9taXNlPGJpZ2ludD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5kb21Qb3NpdGl2ZUNvUHJpbWVUbyh4OiBiaWdpbnQpOiBQcm9taXNlPGJpZ2ludD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHkgPSBhd2FpdCByYW5kb21CaWdJbnQoYml0TGVuZ3RoKHgpKTtcbiAgICBpZiAoeSA+IEJpZ0ludCgwKSAmJiBnY2QoeCwgeSkgPT09IEJpZ0ludCgxKSkge1xuICAgICAgcmV0dXJuIHk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gcG9zaXRpdmUgaW50ZWdlciBjb3ByaW1lIGxlc3MgdGhhbiB4IHdpdGggdGhlIHNhbWUgYml0IGRlcHRoLlxuICogQHBhcmFtIHhcbiAqIEByZXR1cm5zIHtQcm9taXNlPGJpZ2ludD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5kb21Qb3NpdGl2ZUNvUHJpbWVMZXNzVGhhbih4OiBiaWdpbnQpOiBQcm9taXNlPGJpZ2ludD4ge1xuICBpZiAoeCA8PSBCaWdJbnQoMikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ggbXVzdCBiZSBsYXJnZXIgdGhhbiAyJyk7XG4gIH1cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCB5ID0gYXdhaXQgcmFuZG9tQmlnSW50KGJpdExlbmd0aCh4KSk7XG4gICAgaWYgKHkgPiBCaWdJbnQoMCkgJiYgeSA8IHggJiYgZ2NkKHgsIHkpID09PSBCaWdJbnQoMSkpIHtcbiAgICAgIHJldHVybiB5O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciBvZiBhIGdpdmVuIGJpdGxlbmd0aFxuICogQHBhcmFtIGJpdGxlbmd0aFxuICogQHJldHVybnMge1Byb21pc2U8YmlnaW50Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhbmRvbUJpZ0ludChiaXRsZW5ndGg6IG51bWJlcik6IFByb21pc2U8YmlnaW50PiB7XG4gIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYXdhaXQgcmFuZEJpdHMoYml0bGVuZ3RoLCB0cnVlKSkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBzZWVkIC0gdXNlZCB0byBjb25zdHJ1Y3QgZGVyaXZhdGlvbiBwYXRoIGRldGVybWluaXN0aWNhbGx5XG4gKiBAcGFyYW0gaXNNYXN0ZXIgLSBpZiBzZXQsIHBhdGggc3RhcnRzIHdpdGggcHJlZml4IGBtL2BcbiAqIEByZXR1cm4gcGF0aCBgKG0vKS85OTk5OTkvYS9iYCB3aGVyZSBgYWAgYW5kIGBiYCBhcmUgNy1ieXRlIHBzZXVkb3JhbmRvbSBudW1iZXJzIGJhc2VkIG9uIHNlZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlcml2YXRpb25QYXRoKHNlZWQ6IHN0cmluZywgaXNNYXN0ZXIgPSB0cnVlKTogc3RyaW5nIHtcbiAgY29uc3QgZGVyaXZhdGlvblBhdGhJbnB1dCA9IHNoYTI1NihzaGEyNTYoYCR7c2VlZH1gKSkudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aFBhcnRzID0gW1xuICAgIHBhcnNlSW50KGRlcml2YXRpb25QYXRoSW5wdXQuc2xpY2UoMCwgNyksIDE2KSxcbiAgICBwYXJzZUludChkZXJpdmF0aW9uUGF0aElucHV0LnNsaWNlKDcsIDE0KSwgMTYpLFxuICBdO1xuICBjb25zdCBwcmVmaXggPSBpc01hc3RlciA/ICdtLycgOiAnJztcbiAgcmV0dXJuIHByZWZpeCArICc5OTk5OTkvJyArIGRlcml2YXRpb25QYXRoUGFydHMuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBzaGEyNTYoaW5wdXQ6IGNyeXB0by5CaW5hcnlMaWtlKTogQnVmZmVyIHtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoaW5wdXQpLmRpZ2VzdCgpO1xufVxuIl19