@bitgo/sdk-lib-safes 1.6.0 → 1.8.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/dist/src/ed25519Pub.d.ts
CHANGED
|
@@ -38,6 +38,14 @@ export declare function encodeEd25519StrKeySecretSeed(rawSeed: Buffer): string;
|
|
|
38
38
|
export declare function isChecksumValidStrKeyEd25519Pub(pub: string): boolean;
|
|
39
39
|
/** Encode a raw 32-byte key (secret seed or public key) as an Algorand 58-character base32 value. */
|
|
40
40
|
export declare function encodeAlgoKey(bytes: Buffer): string;
|
|
41
|
+
/**
|
|
42
|
+
* Compute an Algorand multisig address from raw 32-byte ed25519 public keys, without algosdk.
|
|
43
|
+
*
|
|
44
|
+
* Matches `algosdk.multisigAddress`: `encodeAddress(SHA-512/256("MultisigAddr" ‖ version ‖ threshold ‖ pks))`.
|
|
45
|
+
* The pub-key order is the wallet's signer order and is part of the address — swapping two keys
|
|
46
|
+
* changes the address, so callers must pass [user, backup, bitgo] in wallet-creation order.
|
|
47
|
+
*/
|
|
48
|
+
export declare function algoMultisigAddress(version: number, threshold: number, pubKeys: Buffer[]): string;
|
|
41
49
|
/** Encode a raw 32-byte public key as a DER-prefixed Hedera public key (88 hex chars). */
|
|
42
50
|
export declare function encodeHbarPublicKeyDer(pub: Buffer): string;
|
|
43
51
|
/** Encode a raw 32-byte secret seed as a DER-prefixed Hedera private key (96 hex chars). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ed25519Pub.d.ts","sourceRoot":"","sources":["../../src/ed25519Pub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAwEhD,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3D;AAED,8EAA8E;AAC9E,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKhF;AAED,uEAAuE;AACvE,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAO/F;AAED,oEAAoE;AACpE,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,6FAA6F;AAC7F,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,wEAAwE;AACxE,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOlE;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnE;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOpE;AAED,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED,0FAA0F;AAC1F,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,4FAA4F;AAC5F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK5D"}
|
|
1
|
+
{"version":3,"file":"ed25519Pub.d.ts","sourceRoot":"","sources":["../../src/ed25519Pub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAwEhD,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3D;AAED,8EAA8E;AAC9E,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKhF;AAED,uEAAuE;AACvE,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAO/F;AAED,oEAAoE;AACpE,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,6FAA6F;AAC7F,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,wEAAwE;AACxE,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOlE;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnE;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOpE;AAED,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnD;AAKD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAcjG;AAED,0FAA0F;AAC1F,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,4FAA4F;AAC5F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK5D"}
|
package/dist/src/ed25519Pub.js
CHANGED
|
@@ -30,6 +30,7 @@ exports.encodeEd25519StrKeyPublicKey = encodeEd25519StrKeyPublicKey;
|
|
|
30
30
|
exports.encodeEd25519StrKeySecretSeed = encodeEd25519StrKeySecretSeed;
|
|
31
31
|
exports.isChecksumValidStrKeyEd25519Pub = isChecksumValidStrKeyEd25519Pub;
|
|
32
32
|
exports.encodeAlgoKey = encodeAlgoKey;
|
|
33
|
+
exports.algoMultisigAddress = algoMultisigAddress;
|
|
33
34
|
exports.encodeHbarPublicKeyDer = encodeHbarPublicKeyDer;
|
|
34
35
|
exports.encodeHbarPrivateKeyDer = encodeHbarPrivateKeyDer;
|
|
35
36
|
const crypto_1 = require("crypto");
|
|
@@ -200,6 +201,30 @@ function encodeAlgoKey(bytes) {
|
|
|
200
201
|
const checksum = Buffer.from(js_sha512_1.default.sha512_256.array(bytes).slice(28, 28 + ALGORAND_CHECKSUM_BYTES));
|
|
201
202
|
return base32Encode(Buffer.concat([bytes, checksum]));
|
|
202
203
|
}
|
|
204
|
+
/** The "MultisigAddr" preimage tag algosdk hashes for multisig addresses. */
|
|
205
|
+
const ALGORAND_MULTISIG_ADDRESS_PREFIX = Buffer.from('MultisigAddr', 'utf8');
|
|
206
|
+
/**
|
|
207
|
+
* Compute an Algorand multisig address from raw 32-byte ed25519 public keys, without algosdk.
|
|
208
|
+
*
|
|
209
|
+
* Matches `algosdk.multisigAddress`: `encodeAddress(SHA-512/256("MultisigAddr" ‖ version ‖ threshold ‖ pks))`.
|
|
210
|
+
* The pub-key order is the wallet's signer order and is part of the address — swapping two keys
|
|
211
|
+
* changes the address, so callers must pass [user, backup, bitgo] in wallet-creation order.
|
|
212
|
+
*/
|
|
213
|
+
function algoMultisigAddress(version, threshold, pubKeys) {
|
|
214
|
+
if (version !== 1) {
|
|
215
|
+
throw new Error(`Invalid multisig version: expected 1, got ${version}`);
|
|
216
|
+
}
|
|
217
|
+
if (!Number.isInteger(threshold) || threshold < 1 || threshold > pubKeys.length || threshold > 255) {
|
|
218
|
+
throw new Error(`Invalid multisig threshold: expected 1..${Math.min(pubKeys.length, 255)}, got ${threshold}`);
|
|
219
|
+
}
|
|
220
|
+
for (const pubKey of pubKeys) {
|
|
221
|
+
if (pubKey.length !== exports.DERIVABLE_ED25519_PUBLIC_KEY_BYTES) {
|
|
222
|
+
throw new Error('Invalid multisig public key: expected 32 bytes');
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
const preimage = Buffer.concat([ALGORAND_MULTISIG_ADDRESS_PREFIX, Buffer.from([version, threshold]), ...pubKeys]);
|
|
226
|
+
return encodeAlgoKey(Buffer.from(js_sha512_1.default.sha512_256.array(preimage)));
|
|
227
|
+
}
|
|
203
228
|
/** Encode a raw 32-byte public key as a DER-prefixed Hedera public key (88 hex chars). */
|
|
204
229
|
function encodeHbarPublicKeyDer(pub) {
|
|
205
230
|
if (pub.length !== exports.DERIVABLE_ED25519_PUBLIC_KEY_BYTES) {
|
|
@@ -214,4 +239,4 @@ function encodeHbarPrivateKeyDer(seed) {
|
|
|
214
239
|
}
|
|
215
240
|
return HBAR_PRIVATE_KEY_PREFIX + seed.toString('hex');
|
|
216
241
|
}
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lZDI1NTE5UHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7Ozs7O0FBZ0ZILHNEQUVDO0FBR0QsOERBSUM7QUFHRCw4REFLQztBQUdELDhEQU9DO0FBR0QsNERBRUM7QUFHRCx3REFLQztBQUdELHdEQUtDO0FBRUQsb0VBS0M7QUFFRCxzRUFPQztBQUVELHNFQUtDO0FBRUQsb0VBUUM7QUFFRCxzRUFRQztBQUVELDBFQU9DO0FBR0Qsc0NBTUM7QUFHRCx3REFLQztBQUdELDBEQUtDO0FBM01ELG1DQUFxQztBQUNyQywwREFBK0I7QUFFbEIsUUFBQSxrQ0FBa0MsR0FBRyxFQUFFLENBQUM7QUFDeEMsUUFBQSxrQ0FBa0MsR0FBRyxFQUFFLENBQUM7QUFDeEMsUUFBQSw0QkFBNEIsR0FBRyxHQUFHLENBQUM7QUFFaEQsTUFBTSxlQUFlLEdBQUcsa0NBQWtDLENBQUM7QUFDM0QsTUFBTSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM1QyxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzFDLE1BQU0sdUJBQXVCLEdBQUcsaUJBQWlCLENBQUM7QUFDbEQsTUFBTSx3QkFBd0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNuRCxNQUFNLHlCQUF5QixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekMsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsMEJBQTBCLENBQUM7QUFDMUQsTUFBTSx1QkFBdUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUVuRSxTQUFTLFlBQVksQ0FBQyxLQUFhO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENB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LDBDQUFrQyxFQUFFLENBQUM7UUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxPQUFPLHNCQUFzQixHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELDRGQUE0RjtBQUM1RixTQUFnQix1QkFBdUIsQ0FBQyxJQUFZO0lBQ2xELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSywwQ0FBa0MsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsT0FBTyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICpcbiAqIEVkMjU1MTkgc2FmZS1yb290IHB1YmxpYyBkZXJpdmF0aW9uIG1hdGVyaWFsIGFuZCBTdGVsbGFyIHVzZXIta2V5IGNvZGVjcy5cbiAqXG4gKiBTYWZlIGJhY2t1cCBhbmQgQml0R28gcm9vdHMgc3RvcmUgcmF3IHB1YmxpYyBrZXkgKDMyIGJ5dGVzKSB8fCByYXcgY2hhaW4gY29kZSAoMzIgYnl0ZXMpLFxuICogZW5jb2RlZCB0b2dldGhlciBhcyBjYW5vbmljYWwgdW5wYWRkZWQgUkZDIDQ2NDggYmFzZTMyLiBDb2luLXNwZWNpZmljIHB1YmxpYy1rZXkgZW5jb2RpbmdzIGFyZVxuICogYXBwbGllZCBvbmx5IHRvIGRlcml2ZWQgd2FsbGV0IGNoaWxkcmVuLlxuICpcbiAqIFRoZSBXQVNNIHNvZnQtZGVyaXZhdGlvbiAoYHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlgKSBzdGF5cyBpbiBzZGstY29yZSdzXG4gKiBiaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIg4oCUIGl0IG5lZWRzIEVkMjU1MTlCSVAzMi9FZGRzYSBhbmQgaXMgbm90IHBhcnQgb2YgdGhpcyBsZWFmLlxuICovXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBzaGE1MTIgZnJvbSAnanMtc2hhNTEyJztcblxuZXhwb3J0IGNvbnN0IERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMgPSAzMjtcbmV4cG9ydCBjb25zdCBERVJJVkFCTEVfRUQyNTUxOV9DSEFJTl9DT0RFX0JZVEVTID0gMzI7XG5leHBvcnQgY29uc3QgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSCA9IDEwMztcblxuY29uc3QgQkFTRTMyX0FMUEhBQkVUID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMjM0NTY3JztcbmNvbnN0IEJBU0UzMl9ST09UX1JFR0VYID0gL15bQS1aMi03XXsxMDN9JC87XG5jb25zdCBDSEFJTl9DT0RFX1JFR0VYID0gL15bQS1aMi03XXs1Mn0kLztcbmNvbnN0IFNUUktFWV9QVUJMSUNfS0VZX1JFR0VYID0gL15HW0EtWjItN117NTV9JC87XG5jb25zdCBTVFJLRVlfU0VDUkVUX1NFRURfUkVHRVggPSAvXlNbQS1aMi03XXs1NX0kLztcbmNvbnN0IFNUUktFWV9WRVJTSU9OX1BVQkxJQ19LRVkgPSA2IDw8IDM7XG5jb25zdCBTVFJLRVlfVkVSU0lPTl9TRUNSRVRfU0VFRCA9IDE4IDw8IDM7XG5jb25zdCBTVFJLRVlfREVDT0RFRF9CWVRFUyA9IDM1O1xuY29uc3QgQUxHT1JBTkRfQ0hFQ0tTVU1fQllURVMgPSA0O1xuY29uc3QgSEJBUl9QVUJMSUNfS0VZX1BSRUZJWCA9ICczMDJhMzAwNTA2MDMyYjY1NzAwMzIxMDAnO1xuY29uc3QgSEJBUl9QUklWQVRFX0tFWV9QUkVGSVggPSAnMzAyZTAyMDEwMDMwMDUwNjAzMmI2NTcwMDQyMjA0MjAnO1xuXG5mdW5jdGlvbiBiYXNlMzJEZWNvZGUoaW5wdXQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5hbGxvYyhNYXRoLmZsb29yKChpbnB1dC5sZW5ndGggKiA1KSAvIDgpKTtcbiAgbGV0IGJpdHMgPSAwO1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZm9yIChjb25zdCBjaGFyIG9mIGlucHV0KSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgNSkgfCBCQVNFMzJfQUxQSEFCRVQuaW5kZXhPZihjaGFyKTtcbiAgICBiaXRzICs9IDU7XG4gICAgaWYgKGJpdHMgPj0gOCkge1xuICAgICAgYml0cyAtPSA4O1xuICAgICAgb3V0cHV0W29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gYml0cykgJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBiYXNlMzJFbmNvZGUoZGF0YTogQnVmZmVyKTogc3RyaW5nIHtcbiAgbGV0IGJpdHMgPSAwO1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgb3V0cHV0ID0gJyc7XG4gIGZvciAoY29uc3QgYnl0ZSBvZiBkYXRhKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgfCBieXRlO1xuICAgIGJpdHMgKz0gODtcbiAgICB3aGlsZSAoYml0cyA+PSA1KSB7XG4gICAgICBiaXRzIC09IDU7XG4gICAgICBvdXRwdXQgKz0gQkFTRTMyX0FMUEhBQkVUWyh2YWx1ZSA+Pj4gYml0cykgJiAweDFmXTtcbiAgICB9XG4gIH1cbiAgaWYgKGJpdHMgPiAwKSB7XG4gICAgb3V0cHV0ICs9IEJBU0UzMl9BTFBIQUJFVFsodmFsdWUgPDwgKDUgLSBiaXRzKSkgJiAweDFmXTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBjcmMxNlhtb2RlbShkYXRhOiBCdWZmZXIpOiBudW1iZXIge1xuICBsZXQgY3JjID0gMDtcbiAgZm9yIChjb25zdCBieXRlIG9mIGRhdGEpIHtcbiAgICBjcmMgXj0gYnl0ZSA8PCA4O1xuICAgIGZvciAobGV0IGJpdCA9IDA7IGJpdCA8IDg7IGJpdCsrKSB7XG4gICAgICBjcmMgPSBjcmMgJiAweDgwMDAgPyAoKGNyYyA8PCAxKSBeIDB4MTAyMSkgJiAweGZmZmYgOiAoY3JjIDw8IDEpICYgMHhmZmZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JjO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVTdHJLZXkodmFsdWU6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogQnVmZmVyIHtcbiAgY29uc3QgZGVjb2RlZCA9IGJhc2UzMkRlY29kZSh2YWx1ZSk7XG4gIGlmIChcbiAgICBkZWNvZGVkLmxlbmd0aCAhPT0gU1RSS0VZX0RFQ09ERURfQllURVMgfHxcbiAgICBkZWNvZGVkWzBdICE9PSB2ZXJzaW9uIHx8XG4gICAgYmFzZTMyRW5jb2RlKGRlY29kZWQpICE9PSB2YWx1ZSB8fFxuICAgIGNyYzE2WG1vZGVtKGRlY29kZWQuc3ViYXJyYXkoMCwgU1RSS0VZX0RFQ09ERURfQllURVMgLSAyKSkgIT09IGRlY29kZWQucmVhZFVJbnQxNkxFKFNUUktFWV9ERUNPREVEX0JZVEVTIC0gMilcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVkMjU1MTkgU3RyS2V5ICR7bGFiZWx9YCk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZWQuc3ViYXJyYXkoMSwgMzMpO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGZvciBjYW5vbmljYWwgYmFzZTMyLWVuY29kZWQgNjQtYnl0ZSBwdWJsaWMgZGVyaXZhdGlvbiBtYXRlcmlhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rlcml2YWJsZUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJBU0UzMl9ST09UX1JFR0VYLnRlc3QocHViKSAmJiBiYXNlMzJFbmNvZGUoYmFzZTMyRGVjb2RlKHB1YikpID09PSBwdWI7XG59XG5cbi8qKiBUaHJvd3MgdW5sZXNzIHRoZSB2YWx1ZSBpcyBjYW5vbmljYWwgYmFzZTMyLWVuY29kZWQgNjQtYnl0ZSByb290IG1hdGVyaWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydERlcml2YWJsZUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFpc0Rlcml2YWJsZUVkMjU1MTlQdWIocHViKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWI6IGV4cGVjdGVkIDY0IGJ5dGVzIG9mIGNhbm9uaWNhbCBiYXNlMzInKTtcbiAgfVxufVxuXG4vKiogQ29tcG9zZSByYXcgcHVibGljLWtleSBhbmQgY2hhaW4tY29kZSBieXRlcyBpbnRvIG9uZSBiYXNlMzIgcm9vdCB2YWx1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHB1YjogQnVmZmVyLCBjaGFpbkNvZGU6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGlmIChwdWIubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTIHx8IGNoYWluQ29kZS5sZW5ndGggIT09IERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViOiBleHBlY3RlZCAzMi1ieXRlIHB1YmxpYyBrZXkgYW5kIGNoYWluIGNvZGUgYnVmZmVycycpO1xuICB9XG4gIHJldHVybiBiYXNlMzJFbmNvZGUoQnVmZmVyLmNvbmNhdChbcHViLCBjaGFpbkNvZGVdKSk7XG59XG5cbi8qKiBEZWNvZGUgYSBiYXNlMzIgcm9vdCBpbnRvIHJhdyBwdWJsaWMta2V5IGFuZCBjaGFpbi1jb2RlIGJ1ZmZlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yihjb21wb3NpdGU6IHN0cmluZyk6IHsgcHViOiBCdWZmZXI7IGNoYWluQ29kZTogQnVmZmVyIH0ge1xuICBhc3NlcnREZXJpdmFibGVFZDI1NTE5UHViKGNvbXBvc2l0ZSk7XG4gIGNvbnN0IGRlY29kZWQgPSBiYXNlMzJEZWNvZGUoY29tcG9zaXRlKTtcbiAgcmV0dXJuIHtcbiAgICBwdWI6IGRlY29kZWQuc3ViYXJyYXkoMCwgREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUyksXG4gICAgY2hhaW5Db2RlOiBkZWNvZGVkLnN1YmFycmF5KERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMpLFxuICB9O1xufVxuXG4vKiogR2VuZXJhdGUgYSBmcmVzaCByYXcgMzItYnl0ZSBjaGFpbiBjb2RlIGZvciByb290IGNvbXBvc2l0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSgpOiBCdWZmZXIge1xuICByZXR1cm4gcmFuZG9tQnl0ZXMoREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUyk7XG59XG5cbi8qKiBFbmNvZGUgYSByYXcgMzItYnl0ZSBjaGFpbiBjb2RlIGFzIGNhbm9uaWNhbCB1bnBhZGRlZCBSRkMgNDY0OCBiYXNlMzIgKDUyIGNoYXJhY3RlcnMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUVkMjU1MTlDaGFpbkNvZGUoY2hhaW5Db2RlOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAoY2hhaW5Db2RlLmxlbmd0aCAhPT0gREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlZDI1NTE5IGNoYWluIGNvZGU6IGV4cGVjdGVkIDMyIGJ5dGVzJyk7XG4gIH1cbiAgcmV0dXJuIGJhc2UzMkVuY29kZShjaGFpbkNvZGUpO1xufVxuXG4vKiogRGVjb2RlIGEgY2Fub25pY2FsIGJhc2UzMiBjaGFpbiBjb2RlIGludG8gaXRzIHJhdyAzMi1ieXRlIGJ1ZmZlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVFZDI1NTE5Q2hhaW5Db2RlKGNoYWluQ29kZTogc3RyaW5nKTogQnVmZmVyIHtcbiAgaWYgKCFDSEFJTl9DT0RFX1JFR0VYLnRlc3QoY2hhaW5Db2RlKSB8fCBiYXNlMzJFbmNvZGUoYmFzZTMyRGVjb2RlKGNoYWluQ29kZSkpICE9PSBjaGFpbkNvZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWQyNTUxOSBjaGFpbiBjb2RlOiBleHBlY3RlZCBjYW5vbmljYWwgNTItY2hhcmFjdGVyIGJhc2UzMicpO1xuICB9XG4gIHJldHVybiBiYXNlMzJEZWNvZGUoY2hhaW5Db2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkocHViOiBzdHJpbmcpOiBCdWZmZXIge1xuICBpZiAoIVNUUktFWV9QVUJMSUNfS0VZX1JFR0VYLnRlc3QocHViKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlZDI1NTE5IFN0cktleSBwdWJsaWMga2V5Jyk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZVN0cktleShwdWIsIFNUUktFWV9WRVJTSU9OX1BVQkxJQ19LRVksICdwdWJsaWMga2V5Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleShwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkocHViKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChzZWVkOiBzdHJpbmcpOiBCdWZmZXIge1xuICBpZiAoIVNUUktFWV9TRUNSRVRfU0VFRF9SRUdFWC50ZXN0KHNlZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVkMjU1MTkgU3RyS2V5IHNlY3JldCBzZWVkJyk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZVN0cktleShzZWVkLCBTVFJLRVlfVkVSU0lPTl9TRUNSRVRfU0VFRCwgJ3NlY3JldCBzZWVkJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KHJhd1B1YjogQnVmZmVyKTogc3RyaW5nIHtcbiAgaWYgKHJhd1B1Yi5sZW5ndGggIT09IERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VkMjU1MTkgcHVibGljIGtleSBtdXN0IGJlIDMyIGJ5dGVzJyk7XG4gIH1cbiAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFtTVFJLRVlfVkVSU0lPTl9QVUJMSUNfS0VZXSksIHJhd1B1Yl0pO1xuICBjb25zdCBjaGVja3N1bSA9IEJ1ZmZlci5hbGxvYygyKTtcbiAgY2hlY2tzdW0ud3JpdGVVSW50MTZMRShjcmMxNlhtb2RlbShwYXlsb2FkKSwgMCk7XG4gIHJldHVybiBiYXNlMzJFbmNvZGUoQnVmZmVyLmNvbmNhdChbcGF5bG9hZCwgY2hlY2tzdW1dKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChyYXdTZWVkOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAocmF3U2VlZC5sZW5ndGggIT09IERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VkMjU1MTkgc2VjcmV0IHNlZWQgbXVzdCBiZSAzMiBieXRlcycpO1xuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbU1RSS0VZX1ZFUlNJT05fU0VDUkVUX1NFRURdKSwgcmF3U2VlZF0pO1xuICBjb25zdCBjaGVja3N1bSA9IEJ1ZmZlci5hbGxvYygyKTtcbiAgY2hlY2tzdW0ud3JpdGVVSW50MTZMRShjcmMxNlhtb2RlbShwYXlsb2FkKSwgMCk7XG4gIHJldHVybiBiYXNlMzJFbmNvZGUoQnVmZmVyLmNvbmNhdChbcGF5bG9hZCwgY2hlY2tzdW1dKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NoZWNrc3VtVmFsaWRTdHJLZXlFZDI1NTE5UHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShwdWIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIEVuY29kZSBhIHJhdyAzMi1ieXRlIGtleSAoc2VjcmV0IHNlZWQgb3IgcHVibGljIGtleSkgYXMgYW4gQWxnb3JhbmQgNTgtY2hhcmFjdGVyIGJhc2UzMiB2YWx1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVBbGdvS2V5KGJ5dGVzOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAoYnl0ZXMubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlZDI1NTE5IGtleSBtdXN0IGJlIDMyIGJ5dGVzJyk7XG4gIH1cbiAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuZnJvbShzaGE1MTIuc2hhNTEyXzI1Ni5hcnJheShieXRlcykuc2xpY2UoMjgsIDI4ICsgQUxHT1JBTkRfQ0hFQ0tTVU1fQllURVMpKTtcbiAgcmV0dXJuIGJhc2UzMkVuY29kZShCdWZmZXIuY29uY2F0KFtieXRlcywgY2hlY2tzdW1dKSk7XG59XG5cbi8qKiBFbmNvZGUgYSByYXcgMzItYnl0ZSBwdWJsaWMga2V5IGFzIGEgREVSLXByZWZpeGVkIEhlZGVyYSBwdWJsaWMga2V5ICg4OCBoZXggY2hhcnMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUhiYXJQdWJsaWNLZXlEZXIocHViOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAocHViLmxlbmd0aCAhPT0gREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUykge1xuICAgIHRocm93IG5ldyBFcnJvcignZWQyNTUxOSBwdWJsaWMga2V5IG11c3QgYmUgMzIgYnl0ZXMnKTtcbiAgfVxuICByZXR1cm4gSEJBUl9QVUJMSUNfS0VZX1BSRUZJWCArIHB1Yi50b1N0cmluZygnaGV4Jyk7XG59XG5cbi8qKiBFbmNvZGUgYSByYXcgMzItYnl0ZSBzZWNyZXQgc2VlZCBhcyBhIERFUi1wcmVmaXhlZCBIZWRlcmEgcHJpdmF0ZSBrZXkgKDk2IGhleCBjaGFycykuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlSGJhclByaXZhdGVLZXlEZXIoc2VlZDogQnVmZmVyKTogc3RyaW5nIHtcbiAgaWYgKHNlZWQubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlZDI1NTE5IHNlY3JldCBzZWVkIG11c3QgYmUgMzIgYnl0ZXMnKTtcbiAgfVxuICByZXR1cm4gSEJBUl9QUklWQVRFX0tFWV9QUkVGSVggKyBzZWVkLnRvU3RyaW5nKCdoZXgnKTtcbn1cbiJdfQ==
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lZDI1NTE5UHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7Ozs7O0FBZ0ZILHNEQUVDO0FBR0QsOERBSUM7QUFHRCw4REFLQztBQUdELDhEQU9DO0FBR0QsNERBRUM7QUFHRCx3REFLQztBQUdELHdEQUtDO0FBRUQsb0VBS0M7QUFFRCxzRUFPQztBQUVELHNFQUtDO0FBRUQsb0VBUUM7QUFFRCxzRUFRQztBQUVELDBFQU9DO0FBR0Qsc0NBTUM7QUFZRCxrREFjQztBQUdELHdEQUtDO0FBR0QsMERBS0M7QUFyT0QsbUNBQXFDO0FBQ3JDLDBEQUErQjtBQUVsQixRQUFBLGtDQUFrQyxHQUFHLEVBQUUsQ0FBQztBQUN4QyxRQUFBLGtDQUFrQyxHQUFHLEVBQUUsQ0FBQztBQUN4QyxRQUFBLDRCQUE0QixHQUFHLEdBQUcsQ0FBQztBQUVoRCxNQUFNLGVBQWUsR0FBRyxrQ0FBa0MsQ0FBQztBQUMzRCxNQUFNLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDMUMsTUFBTSx1QkFBdUIsR0FBRyxpQkFBaUIsQ0FBQztBQUNsRCxNQUFNLHdCQUF3QixHQUFHLGlCQUFpQixDQUFDO0FBQ25ELE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxNQUFNLDBCQUEwQixHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFDbEMsTUFBTSxzQkFBc0IsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLHVCQUF1QixHQUFHLGtDQUFrQyxDQUFDO0FBRW5FLFNBQVMsWUFBWSxDQUFDLEtBQWE7SUFDakMsTUFBTSxNQUFNLEdBQUcsTUFBTSxD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Q0FBa0MsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxzQkFBc0IsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCw0RkFBNEY7QUFDNUYsU0FBZ0IsdUJBQXVCLENBQUMsSUFBWTtJQUNsRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssMENBQWtDLEVBQUUsQ0FBQztRQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELE9BQU8sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqXG4gKiBFZDI1NTE5IHNhZmUtcm9vdCBwdWJsaWMgZGVyaXZhdGlvbiBtYXRlcmlhbCBhbmQgU3RlbGxhciB1c2VyLWtleSBjb2RlY3MuXG4gKlxuICogU2FmZSBiYWNrdXAgYW5kIEJpdEdvIHJvb3RzIHN0b3JlIHJhdyBwdWJsaWMga2V5ICgzMiBieXRlcykgfHwgcmF3IGNoYWluIGNvZGUgKDMyIGJ5dGVzKSxcbiAqIGVuY29kZWQgdG9nZXRoZXIgYXMgY2Fub25pY2FsIHVucGFkZGVkIFJGQyA0NjQ4IGJhc2UzMi4gQ29pbi1zcGVjaWZpYyBwdWJsaWMta2V5IGVuY29kaW5ncyBhcmVcbiAqIGFwcGxpZWQgb25seSB0byBkZXJpdmVkIHdhbGxldCBjaGlsZHJlbi5cbiAqXG4gKiBUaGUgV0FTTSBzb2Z0LWRlcml2YXRpb24gKGBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5YCkgc3RheXMgaW4gc2RrLWNvcmUnc1xuICogYml0Z28vc2FmZS9kZXJpdmFibGVFZDI1NTE5UHViIOKAlCBpdCBuZWVkcyBFZDI1NTE5QklQMzIvRWRkc2EgYW5kIGlzIG5vdCBwYXJ0IG9mIHRoaXMgbGVhZi5cbiAqL1xuXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgc2hhNTEyIGZyb20gJ2pzLXNoYTUxMic7XG5cbmV4cG9ydCBjb25zdCBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTID0gMzI7XG5leHBvcnQgY29uc3QgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUyA9IDMyO1xuZXhwb3J0IGNvbnN0IERFUklWQUJMRV9FRDI1NTE5X1BVQl9MRU5HVEggPSAxMDM7XG5cbmNvbnN0IEJBU0UzMl9BTFBIQUJFVCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2Nyc7XG5jb25zdCBCQVNFMzJfUk9PVF9SRUdFWCA9IC9eW0EtWjItN117MTAzfSQvO1xuY29uc3QgQ0hBSU5fQ09ERV9SRUdFWCA9IC9eW0EtWjItN117NTJ9JC87XG5jb25zdCBTVFJLRVlfUFVCTElDX0tFWV9SRUdFWCA9IC9eR1tBLVoyLTddezU1fSQvO1xuY29uc3QgU1RSS0VZX1NFQ1JFVF9TRUVEX1JFR0VYID0gL15TW0EtWjItN117NTV9JC87XG5jb25zdCBTVFJLRVlfVkVSU0lPTl9QVUJMSUNfS0VZID0gNiA8PCAzO1xuY29uc3QgU1RSS0VZX1ZFUlNJT05fU0VDUkVUX1NFRUQgPSAxOCA8PCAzO1xuY29uc3QgU1RSS0VZX0RFQ09ERURfQllURVMgPSAzNTtcbmNvbnN0IEFMR09SQU5EX0NIRUNLU1VNX0JZVEVTID0gNDtcbmNvbnN0IEhCQVJfUFVCTElDX0tFWV9QUkVGSVggPSAnMzAyYTMwMDUwNjAzMmI2NTcwMDMyMTAwJztcbmNvbnN0IEhCQVJfUFJJVkFURV9LRVlfUFJFRklYID0gJzMwMmUwMjAxMDAzMDA1MDYwMzJiNjU3MDA0MjIwNDIwJztcblxuZnVuY3Rpb24gYmFzZTMyRGVjb2RlKGlucHV0OiBzdHJpbmcpOiBCdWZmZXIge1xuICBjb25zdCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MoTWF0aC5mbG9vcigoaW5wdXQubGVuZ3RoICogNSkgLyA4KSk7XG4gIGxldCBiaXRzID0gMDtcbiAgbGV0IHZhbHVlID0gMDtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGZvciAoY29uc3QgY2hhciBvZiBpbnB1dCkge1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDUpIHwgQkFTRTMyX0FMUEhBQkVULmluZGV4T2YoY2hhcik7XG4gICAgYml0cyArPSA1O1xuICAgIGlmIChiaXRzID49IDgpIHtcbiAgICAgIGJpdHMgLT0gODtcbiAgICAgIG91dHB1dFtvZmZzZXQrK10gPSAodmFsdWUgPj4+IGJpdHMpICYgMHhmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gYmFzZTMyRW5jb2RlKGRhdGE6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGxldCBiaXRzID0gMDtcbiAgbGV0IHZhbHVlID0gMDtcbiAgbGV0IG91dHB1dCA9ICcnO1xuICBmb3IgKGNvbnN0IGJ5dGUgb2YgZGF0YSkge1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDgpIHwgYnl0ZTtcbiAgICBiaXRzICs9IDg7XG4gICAgd2hpbGUgKGJpdHMgPj0gNSkge1xuICAgICAgYml0cyAtPSA1O1xuICAgICAgb3V0cHV0ICs9IEJBU0UzMl9BTFBIQUJFVFsodmFsdWUgPj4+IGJpdHMpICYgMHgxZl07XG4gICAgfVxuICB9XG4gIGlmIChiaXRzID4gMCkge1xuICAgIG91dHB1dCArPSBCQVNFMzJfQUxQSEFCRVRbKHZhbHVlIDw8ICg1IC0gYml0cykpICYgMHgxZl07XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gY3JjMTZYbW9kZW0oZGF0YTogQnVmZmVyKTogbnVtYmVyIHtcbiAgbGV0IGNyYyA9IDA7XG4gIGZvciAoY29uc3QgYnl0ZSBvZiBkYXRhKSB7XG4gICAgY3JjIF49IGJ5dGUgPDwgODtcbiAgICBmb3IgKGxldCBiaXQgPSAwOyBiaXQgPCA4OyBiaXQrKykge1xuICAgICAgY3JjID0gY3JjICYgMHg4MDAwID8gKChjcmMgPDwgMSkgXiAweDEwMjEpICYgMHhmZmZmIDogKGNyYyA8PCAxKSAmIDB4ZmZmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyYztcbn1cblxuZnVuY3Rpb24gZGVjb2RlU3RyS2V5KHZhbHVlOiBzdHJpbmcsIHZlcnNpb246IG51bWJlciwgbGFiZWw6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IGRlY29kZWQgPSBiYXNlMzJEZWNvZGUodmFsdWUpO1xuICBpZiAoXG4gICAgZGVjb2RlZC5sZW5ndGggIT09IFNUUktFWV9ERUNPREVEX0JZVEVTIHx8XG4gICAgZGVjb2RlZFswXSAhPT0gdmVyc2lvbiB8fFxuICAgIGJhc2UzMkVuY29kZShkZWNvZGVkKSAhPT0gdmFsdWUgfHxcbiAgICBjcmMxNlhtb2RlbShkZWNvZGVkLnN1YmFycmF5KDAsIFNUUktFWV9ERUNPREVEX0JZVEVTIC0gMikpICE9PSBkZWNvZGVkLnJlYWRVSW50MTZMRShTVFJLRVlfREVDT0RFRF9CWVRFUyAtIDIpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlZDI1NTE5IFN0cktleSAke2xhYmVsfWApO1xuICB9XG4gIHJldHVybiBkZWNvZGVkLnN1YmFycmF5KDEsIDMzKTtcbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBmb3IgY2Fub25pY2FsIGJhc2UzMi1lbmNvZGVkIDY0LWJ5dGUgcHVibGljIGRlcml2YXRpb24gbWF0ZXJpYWwuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZXJpdmFibGVFZDI1NTE5UHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBCQVNFMzJfUk9PVF9SRUdFWC50ZXN0KHB1YikgJiYgYmFzZTMyRW5jb2RlKGJhc2UzMkRlY29kZShwdWIpKSA9PT0gcHViO1xufVxuXG4vKiogVGhyb3dzIHVubGVzcyB0aGUgdmFsdWUgaXMgY2Fub25pY2FsIGJhc2UzMi1lbmNvZGVkIDY0LWJ5dGUgcm9vdCBtYXRlcmlhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnREZXJpdmFibGVFZDI1NTE5UHViKHB1Yjogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghaXNEZXJpdmFibGVFZDI1NTE5UHViKHB1YikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViOiBleHBlY3RlZCA2NCBieXRlcyBvZiBjYW5vbmljYWwgYmFzZTMyJyk7XG4gIH1cbn1cblxuLyoqIENvbXBvc2UgcmF3IHB1YmxpYy1rZXkgYW5kIGNoYWluLWNvZGUgYnl0ZXMgaW50byBvbmUgYmFzZTMyIHJvb3QgdmFsdWUuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihwdWI6IEJ1ZmZlciwgY2hhaW5Db2RlOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAocHViLmxlbmd0aCAhPT0gREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUyB8fCBjaGFpbkNvZGUubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9DSEFJTl9DT0RFX0JZVEVTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRlcml2YWJsZSBlZDI1NTE5IHB1YjogZXhwZWN0ZWQgMzItYnl0ZSBwdWJsaWMga2V5IGFuZCBjaGFpbiBjb2RlIGJ1ZmZlcnMnKTtcbiAgfVxuICByZXR1cm4gYmFzZTMyRW5jb2RlKEJ1ZmZlci5jb25jYXQoW3B1YiwgY2hhaW5Db2RlXSkpO1xufVxuXG4vKiogRGVjb2RlIGEgYmFzZTMyIHJvb3QgaW50byByYXcgcHVibGljLWtleSBhbmQgY2hhaW4tY29kZSBidWZmZXJzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIoY29tcG9zaXRlOiBzdHJpbmcpOiB7IHB1YjogQnVmZmVyOyBjaGFpbkNvZGU6IEJ1ZmZlciB9IHtcbiAgYXNzZXJ0RGVyaXZhYmxlRWQyNTUxOVB1Yihjb21wb3NpdGUpO1xuICBjb25zdCBkZWNvZGVkID0gYmFzZTMyRGVjb2RlKGNvbXBvc2l0ZSk7XG4gIHJldHVybiB7XG4gICAgcHViOiBkZWNvZGVkLnN1YmFycmF5KDAsIERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMpLFxuICAgIGNoYWluQ29kZTogZGVjb2RlZC5zdWJhcnJheShERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTKSxcbiAgfTtcbn1cblxuLyoqIEdlbmVyYXRlIGEgZnJlc2ggcmF3IDMyLWJ5dGUgY2hhaW4gY29kZSBmb3Igcm9vdCBjb21wb3NpdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUVkMjU1MTlDaGFpbkNvZGUoKTogQnVmZmVyIHtcbiAgcmV0dXJuIHJhbmRvbUJ5dGVzKERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMpO1xufVxuXG4vKiogRW5jb2RlIGEgcmF3IDMyLWJ5dGUgY2hhaW4gY29kZSBhcyBjYW5vbmljYWwgdW5wYWRkZWQgUkZDIDQ2NDggYmFzZTMyICg1MiBjaGFyYWN0ZXJzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVFZDI1NTE5Q2hhaW5Db2RlKGNoYWluQ29kZTogQnVmZmVyKTogc3RyaW5nIHtcbiAgaWYgKGNoYWluQ29kZS5sZW5ndGggIT09IERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWQyNTUxOSBjaGFpbiBjb2RlOiBleHBlY3RlZCAzMiBieXRlcycpO1xuICB9XG4gIHJldHVybiBiYXNlMzJFbmNvZGUoY2hhaW5Db2RlKTtcbn1cblxuLyoqIERlY29kZSBhIGNhbm9uaWNhbCBiYXNlMzIgY2hhaW4gY29kZSBpbnRvIGl0cyByYXcgMzItYnl0ZSBidWZmZXIuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRWQyNTUxOUNoYWluQ29kZShjaGFpbkNvZGU6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGlmICghQ0hBSU5fQ09ERV9SRUdFWC50ZXN0KGNoYWluQ29kZSkgfHwgYmFzZTMyRW5jb2RlKGJhc2UzMkRlY29kZShjaGFpbkNvZGUpKSAhPT0gY2hhaW5Db2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVkMjU1MTkgY2hhaW4gY29kZTogZXhwZWN0ZWQgY2Fub25pY2FsIDUyLWNoYXJhY3RlciBiYXNlMzInKTtcbiAgfVxuICByZXR1cm4gYmFzZTMyRGVjb2RlKGNoYWluQ29kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KHB1Yjogc3RyaW5nKTogQnVmZmVyIHtcbiAgaWYgKCFTVFJLRVlfUFVCTElDX0tFWV9SRUdFWC50ZXN0KHB1YikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWQyNTUxOSBTdHJLZXkgcHVibGljIGtleScpO1xuICB9XG4gIHJldHVybiBkZWNvZGVTdHJLZXkocHViLCBTVFJLRVlfVkVSU0lPTl9QVUJMSUNfS0VZLCAncHVibGljIGtleScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KHB1Yik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoc2VlZDogc3RyaW5nKTogQnVmZmVyIHtcbiAgaWYgKCFTVFJLRVlfU0VDUkVUX1NFRURfUkVHRVgudGVzdChzZWVkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlZDI1NTE5IFN0cktleSBzZWNyZXQgc2VlZCcpO1xuICB9XG4gIHJldHVybiBkZWNvZGVTdHJLZXkoc2VlZCwgU1RSS0VZX1ZFUlNJT05fU0VDUkVUX1NFRUQsICdzZWNyZXQgc2VlZCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShyYXdQdWI6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGlmIChyYXdQdWIubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlZDI1NTE5IHB1YmxpYyBrZXkgbXVzdCBiZSAzMiBieXRlcycpO1xuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbU1RSS0VZX1ZFUlNJT05fUFVCTElDX0tFWV0pLCByYXdQdWJdKTtcbiAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2MoMik7XG4gIGNoZWNrc3VtLndyaXRlVUludDE2TEUoY3JjMTZYbW9kZW0ocGF5bG9hZCksIDApO1xuICByZXR1cm4gYmFzZTMyRW5jb2RlKEJ1ZmZlci5jb25jYXQoW3BheWxvYWQsIGNoZWNrc3VtXSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQocmF3U2VlZDogQnVmZmVyKTogc3RyaW5nIHtcbiAgaWYgKHJhd1NlZWQubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlZDI1NTE5IHNlY3JldCBzZWVkIG11c3QgYmUgMzIgYnl0ZXMnKTtcbiAgfVxuICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oW1NUUktFWV9WRVJTSU9OX1NFQ1JFVF9TRUVEXSksIHJhd1NlZWRdKTtcbiAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2MoMik7XG4gIGNoZWNrc3VtLndyaXRlVUludDE2TEUoY3JjMTZYbW9kZW0ocGF5bG9hZCksIDApO1xuICByZXR1cm4gYmFzZTMyRW5jb2RlKEJ1ZmZlci5jb25jYXQoW3BheWxvYWQsIGNoZWNrc3VtXSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDaGVja3N1bVZhbGlkU3RyS2V5RWQyNTUxOVB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkocHViKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKiBFbmNvZGUgYSByYXcgMzItYnl0ZSBrZXkgKHNlY3JldCBzZWVkIG9yIHB1YmxpYyBrZXkpIGFzIGFuIEFsZ29yYW5kIDU4LWNoYXJhY3RlciBiYXNlMzIgdmFsdWUuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlQWxnb0tleShieXRlczogQnVmZmVyKTogc3RyaW5nIHtcbiAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUykge1xuICAgIHRocm93IG5ldyBFcnJvcignZWQyNTUxOSBrZXkgbXVzdCBiZSAzMiBieXRlcycpO1xuICB9XG4gIGNvbnN0IGNoZWNrc3VtID0gQnVmZmVyLmZyb20oc2hhNTEyLnNoYTUxMl8yNTYuYXJyYXkoYnl0ZXMpLnNsaWNlKDI4LCAyOCArIEFMR09SQU5EX0NIRUNLU1VNX0JZVEVTKSk7XG4gIHJldHVybiBiYXNlMzJFbmNvZGUoQnVmZmVyLmNvbmNhdChbYnl0ZXMsIGNoZWNrc3VtXSkpO1xufVxuXG4vKiogVGhlIFwiTXVsdGlzaWdBZGRyXCIgcHJlaW1hZ2UgdGFnIGFsZ29zZGsgaGFzaGVzIGZvciBtdWx0aXNpZyBhZGRyZXNzZXMuICovXG5jb25zdCBBTEdPUkFORF9NVUxUSVNJR19BRERSRVNTX1BSRUZJWCA9IEJ1ZmZlci5mcm9tKCdNdWx0aXNpZ0FkZHInLCAndXRmOCcpO1xuXG4vKipcbiAqIENvbXB1dGUgYW4gQWxnb3JhbmQgbXVsdGlzaWcgYWRkcmVzcyBmcm9tIHJhdyAzMi1ieXRlIGVkMjU1MTkgcHVibGljIGtleXMsIHdpdGhvdXQgYWxnb3Nkay5cbiAqXG4gKiBNYXRjaGVzIGBhbGdvc2RrLm11bHRpc2lnQWRkcmVzc2A6IGBlbmNvZGVBZGRyZXNzKFNIQS01MTIvMjU2KFwiTXVsdGlzaWdBZGRyXCIg4oCWIHZlcnNpb24g4oCWIHRocmVzaG9sZCDigJYgcGtzKSlgLlxuICogVGhlIHB1Yi1rZXkgb3JkZXIgaXMgdGhlIHdhbGxldCdzIHNpZ25lciBvcmRlciBhbmQgaXMgcGFydCBvZiB0aGUgYWRkcmVzcyDigJQgc3dhcHBpbmcgdHdvIGtleXNcbiAqIGNoYW5nZXMgdGhlIGFkZHJlc3MsIHNvIGNhbGxlcnMgbXVzdCBwYXNzIFt1c2VyLCBiYWNrdXAsIGJpdGdvXSBpbiB3YWxsZXQtY3JlYXRpb24gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGdvTXVsdGlzaWdBZGRyZXNzKHZlcnNpb246IG51bWJlciwgdGhyZXNob2xkOiBudW1iZXIsIHB1YktleXM6IEJ1ZmZlcltdKTogc3RyaW5nIHtcbiAgaWYgKHZlcnNpb24gIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbXVsdGlzaWcgdmVyc2lvbjogZXhwZWN0ZWQgMSwgZ290ICR7dmVyc2lvbn1gKTtcbiAgfVxuICBpZiAoIU51bWJlci5pc0ludGVnZXIodGhyZXNob2xkKSB8fCB0aHJlc2hvbGQgPCAxIHx8IHRocmVzaG9sZCA+IHB1YktleXMubGVuZ3RoIHx8IHRocmVzaG9sZCA+IDI1NSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtdWx0aXNpZyB0aHJlc2hvbGQ6IGV4cGVjdGVkIDEuLiR7TWF0aC5taW4ocHViS2V5cy5sZW5ndGgsIDI1NSl9LCBnb3QgJHt0aHJlc2hvbGR9YCk7XG4gIH1cbiAgZm9yIChjb25zdCBwdWJLZXkgb2YgcHViS2V5cykge1xuICAgIGlmIChwdWJLZXkubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbXVsdGlzaWcgcHVibGljIGtleTogZXhwZWN0ZWQgMzIgYnl0ZXMnKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcHJlaW1hZ2UgPSBCdWZmZXIuY29uY2F0KFtBTEdPUkFORF9NVUxUSVNJR19BRERSRVNTX1BSRUZJWCwgQnVmZmVyLmZyb20oW3ZlcnNpb24sIHRocmVzaG9sZF0pLCAuLi5wdWJLZXlzXSk7XG4gIHJldHVybiBlbmNvZGVBbGdvS2V5KEJ1ZmZlci5mcm9tKHNoYTUxMi5zaGE1MTJfMjU2LmFycmF5KHByZWltYWdlKSkpO1xufVxuXG4vKiogRW5jb2RlIGEgcmF3IDMyLWJ5dGUgcHVibGljIGtleSBhcyBhIERFUi1wcmVmaXhlZCBIZWRlcmEgcHVibGljIGtleSAoODggaGV4IGNoYXJzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVIYmFyUHVibGljS2V5RGVyKHB1YjogQnVmZmVyKTogc3RyaW5nIHtcbiAgaWYgKHB1Yi5sZW5ndGggIT09IERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VkMjU1MTkgcHVibGljIGtleSBtdXN0IGJlIDMyIGJ5dGVzJyk7XG4gIH1cbiAgcmV0dXJuIEhCQVJfUFVCTElDX0tFWV9QUkVGSVggKyBwdWIudG9TdHJpbmcoJ2hleCcpO1xufVxuXG4vKiogRW5jb2RlIGEgcmF3IDMyLWJ5dGUgc2VjcmV0IHNlZWQgYXMgYSBERVItcHJlZml4ZWQgSGVkZXJhIHByaXZhdGUga2V5ICg5NiBoZXggY2hhcnMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUhiYXJQcml2YXRlS2V5RGVyKHNlZWQ6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGlmIChzZWVkLmxlbmd0aCAhPT0gREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUykge1xuICAgIHRocm93IG5ldyBFcnJvcignZWQyNTUxOSBzZWNyZXQgc2VlZCBtdXN0IGJlIDMyIGJ5dGVzJyk7XG4gIH1cbiAgcmV0dXJuIEhCQVJfUFJJVkFURV9LRVlfUFJFRklYICsgc2VlZC50b1N0cmluZygnaGV4Jyk7XG59XG4iXX0=
|