@bitgo-beta/sdk-coin-xtz 1.1.1-beta.232 → 1.1.1-beta.2321
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/index.js +23 -9
- package/dist/src/lib/iface.d.ts +36 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.js +23 -9
- package/dist/src/lib/keyPair.js +41 -27
- package/dist/src/lib/multisigUtils.js +36 -23
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +72 -40
- package/dist/src/lib/transactionBuilder.d.ts +2 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +17 -16
- package/dist/src/lib/transferBuilder.js +1 -1
- package/dist/src/lib/utils.d.ts +42 -27
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +70 -38
- package/dist/src/xtz.d.ts +50 -5
- package/dist/src/xtz.d.ts.map +1 -1
- package/dist/src/xtz.js +281 -8
- package/dist/test/fixtures.d.ts +571 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +656 -0
- package/dist/test/resources.d.ts +451 -0
- package/dist/test/resources.d.ts.map +1 -0
- package/dist/test/resources.js +349 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +142 -0
- package/dist/test/unit/offlineTransactionBuilder.d.ts +2 -0
- package/dist/test/unit/offlineTransactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/offlineTransactionBuilder.js +332 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +124 -0
- package/dist/test/unit/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder.js +656 -0
- package/dist/test/unit/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transferBuilder.js +82 -0
- package/dist/test/unit/util.d.ts +2 -0
- package/dist/test/unit/util.d.ts.map +1 -0
- package/dist/test/unit/util.js +198 -0
- package/dist/test/unit/xtz.d.ts +2 -0
- package/dist/test/unit/xtz.d.ts.map +1 -0
- package/dist/test/unit/xtz.js +290 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +19 -14
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -118
|
@@ -110,17 +110,17 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
110
110
|
if (this._publicKeyToReveal) {
|
|
111
111
|
contents.push(this.buildPublicKeyRevelationOperation());
|
|
112
112
|
}
|
|
113
|
-
contents = contents.concat(await this.buildSendTransactionContent());
|
|
113
|
+
contents = contents.concat((await this.buildSendTransactionContent()));
|
|
114
114
|
break;
|
|
115
115
|
case sdk_core_1.TransactionType.AddressInitialization:
|
|
116
116
|
if (this._publicKeyToReveal) {
|
|
117
117
|
contents.push(this.buildPublicKeyRevelationOperation());
|
|
118
118
|
}
|
|
119
|
-
contents
|
|
119
|
+
contents.push(this.buildForwarderDeploymentContent());
|
|
120
120
|
break;
|
|
121
121
|
case sdk_core_1.TransactionType.SingleSigSend:
|
|
122
122
|
// No support for revelation txns as primary use case is to send from fee address
|
|
123
|
-
contents = contents.concat(await this.buildSendTransactionContent());
|
|
123
|
+
contents = contents.concat((await this.buildSendTransactionContent()));
|
|
124
124
|
break;
|
|
125
125
|
default:
|
|
126
126
|
throw new sdk_core_1.BuildTransactionError('Unsupported transaction type');
|
|
@@ -150,7 +150,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
150
150
|
* @param {string} blockId A block hash to use as branch reference
|
|
151
151
|
*/
|
|
152
152
|
branch(blockId) {
|
|
153
|
-
if (!utils_1.isValidBlockHash(blockId)) {
|
|
153
|
+
if (!(0, utils_1.isValidBlockHash)(blockId)) {
|
|
154
154
|
throw new sdk_core_1.BuildTransactionError('Invalid block hash ' + blockId);
|
|
155
155
|
}
|
|
156
156
|
this._blockHeader = blockId;
|
|
@@ -226,7 +226,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
226
226
|
if (this._type !== sdk_core_1.TransactionType.AddressInitialization) {
|
|
227
227
|
throw new sdk_core_1.BuildTransactionError('Forwarder destination can only be set for address initialization transactions');
|
|
228
228
|
}
|
|
229
|
-
if (!utils_1.isValidOriginatedAddress(contractAddress)) {
|
|
229
|
+
if (!(0, utils_1.isValidOriginatedAddress)(contractAddress)) {
|
|
230
230
|
throw new sdk_core_1.BuildTransactionError('Forwarder destination can only be an originated address');
|
|
231
231
|
}
|
|
232
232
|
this._forwarderDestination = contractAddress;
|
|
@@ -249,12 +249,13 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
249
249
|
this._publicKeyToReveal = keyPair.getKeys().pub;
|
|
250
250
|
}
|
|
251
251
|
/**
|
|
252
|
-
* Build a reveal operation for the source account
|
|
252
|
+
* Build a reveal operation for the source account using the set fee parameters,
|
|
253
|
+
* or default fees if not specified.
|
|
253
254
|
*
|
|
254
255
|
* @returns {RevealOp} A Tezos reveal operation
|
|
255
256
|
*/
|
|
256
257
|
buildPublicKeyRevelationOperation() {
|
|
257
|
-
const operation = multisigUtils_1.revealOperation(this._counter.toString(), this._sourceAddress, this._publicKeyToReveal);
|
|
258
|
+
const operation = (0, multisigUtils_1.revealOperation)(this._counter.toString(), this._sourceAddress, this._publicKeyToReveal, this._fee?.fee, this._fee?.gasLimit, this._fee?.storageLimit);
|
|
258
259
|
this._counter = this._counter.plus(1);
|
|
259
260
|
return operation;
|
|
260
261
|
}
|
|
@@ -272,7 +273,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
272
273
|
if (this._walletOwnerPublicKeys.length >= DEFAULT_M) {
|
|
273
274
|
throw new sdk_core_1.BuildTransactionError('A maximum of ' + DEFAULT_M + ' owners can be set for a multisig wallet');
|
|
274
275
|
}
|
|
275
|
-
if (!utils_1.isValidPublicKey(publicKey)) {
|
|
276
|
+
if (!(0, utils_1.isValidPublicKey)(publicKey)) {
|
|
276
277
|
throw new sdk_core_1.BuildTransactionError('Invalid public key: ' + publicKey);
|
|
277
278
|
}
|
|
278
279
|
if (this._walletOwnerPublicKeys.includes(publicKey)) {
|
|
@@ -299,7 +300,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
299
300
|
* @returns {Operation} A Tezos origination operation
|
|
300
301
|
*/
|
|
301
302
|
buildWalletInitializationOperations() {
|
|
302
|
-
const originationOp = multisigUtils_1.genericMultisigOriginationOperation(this._counter.toString(), this._sourceAddress, this._fee.fee, this._fee.gasLimit || utils_1.DEFAULT_GAS_LIMIT.ORIGINATION.toString(), this._fee.storageLimit || utils_1.DEFAULT_STORAGE_LIMIT.ORIGINATION.toString(), this._initialBalance || '0', this._walletOwnerPublicKeys, this._initialDelegate);
|
|
303
|
+
const originationOp = (0, multisigUtils_1.genericMultisigOriginationOperation)(this._counter.toString(), this._sourceAddress, this._fee.fee, this._fee.gasLimit || utils_1.DEFAULT_GAS_LIMIT.ORIGINATION.toString(), this._fee.storageLimit || utils_1.DEFAULT_STORAGE_LIMIT.ORIGINATION.toString(), this._initialBalance || '0', this._walletOwnerPublicKeys, this._initialDelegate);
|
|
303
304
|
this._counter = this._counter.plus(1);
|
|
304
305
|
return originationOp;
|
|
305
306
|
}
|
|
@@ -338,7 +339,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
338
339
|
const signatures = [];
|
|
339
340
|
// Generate the multisig contract signatures
|
|
340
341
|
for (let i = 0; i < this._multisigSignerKeyPairs.length; i++) {
|
|
341
|
-
const signature = await utils_1.sign(this._multisigSignerKeyPairs[i].key, packedData, new Uint8Array(0));
|
|
342
|
+
const signature = await (0, utils_1.sign)(this._multisigSignerKeyPairs[i].key, packedData, new Uint8Array(0));
|
|
342
343
|
const index = this._multisigSignerKeyPairs[i].index;
|
|
343
344
|
signatures.push(index ? { signature: signature.sig, index } : { signature: signature.sig });
|
|
344
345
|
}
|
|
@@ -366,13 +367,13 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
366
367
|
for (let i = 0; i < this._transfers.length; i++) {
|
|
367
368
|
const transfer = this._transfers[i].build();
|
|
368
369
|
let transactionOp;
|
|
369
|
-
if (utils_1.isValidOriginatedAddress(transfer.from)) {
|
|
370
|
+
if ((0, utils_1.isValidOriginatedAddress)(transfer.from)) {
|
|
370
371
|
// Offline transactions may not have the data to sign
|
|
371
372
|
const signatures = transfer.dataToSign ? await this.getSignatures(transfer.dataToSign) : [];
|
|
372
|
-
transactionOp = multisigUtils_1.multisigTransactionOperation(this._counter.toString(), this._sourceAddress, transfer.amount, transfer.from, transfer.counter || '0', transfer.to, signatures, transfer.fee.fee, transfer.fee.gasLimit, transfer.fee.storageLimit);
|
|
373
|
+
transactionOp = (0, multisigUtils_1.multisigTransactionOperation)(this._counter.toString(), this._sourceAddress, transfer.amount, transfer.from, transfer.counter || '0', transfer.to, signatures, transfer.fee.fee, transfer.fee.gasLimit, transfer.fee.storageLimit);
|
|
373
374
|
}
|
|
374
375
|
else {
|
|
375
|
-
transactionOp = multisigUtils_1.singlesigTransactionOperation(this._counter.toString(), this._sourceAddress, transfer.amount, transfer.to, transfer.fee.fee, transfer.fee.gasLimit, transfer.fee.storageLimit);
|
|
376
|
+
transactionOp = (0, multisigUtils_1.singlesigTransactionOperation)(this._counter.toString(), this._sourceAddress, transfer.amount, transfer.to, transfer.fee.fee, transfer.fee.gasLimit, transfer.fee.storageLimit);
|
|
376
377
|
}
|
|
377
378
|
contents.push(transactionOp);
|
|
378
379
|
this._counter = this._counter.plus(1);
|
|
@@ -387,7 +388,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
387
388
|
* @returns {OriginationOp} a Tezos transaction operation
|
|
388
389
|
*/
|
|
389
390
|
buildForwarderDeploymentContent() {
|
|
390
|
-
const operation = multisigUtils_1.forwarderOriginationOperation(this._forwarderDestination, this._counter.toString(), this._sourceAddress, this._fee.fee, this._fee.gasLimit || utils_1.DEFAULT_GAS_LIMIT.ORIGINATION.toString(), this._fee.storageLimit || utils_1.DEFAULT_STORAGE_LIMIT.ORIGINATION.toString(), this._initialBalance || '0');
|
|
391
|
+
const operation = (0, multisigUtils_1.forwarderOriginationOperation)(this._forwarderDestination, this._counter.toString(), this._sourceAddress, this._fee.fee, this._fee.gasLimit || utils_1.DEFAULT_GAS_LIMIT.ORIGINATION.toString(), this._fee.storageLimit || utils_1.DEFAULT_STORAGE_LIMIT.ORIGINATION.toString(), this._initialBalance || '0');
|
|
391
392
|
this._counter = this._counter.plus(1);
|
|
392
393
|
return operation;
|
|
393
394
|
}
|
|
@@ -402,7 +403,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
402
403
|
}
|
|
403
404
|
/** @inheritdoc */
|
|
404
405
|
validateAddress(address) {
|
|
405
|
-
if (!utils_1.isValidAddress(address.address)) {
|
|
406
|
+
if (!(0, utils_1.isValidAddress)(address.address)) {
|
|
406
407
|
throw new sdk_core_1.BuildTransactionError('Invalid address ' + address.address);
|
|
407
408
|
}
|
|
408
409
|
}
|
|
@@ -450,4 +451,4 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
450
451
|
}
|
|
451
452
|
}
|
|
452
453
|
exports.TransactionBuilder = TransactionBuilder;
|
|
453
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQTZIO0FBRTdILGdFQUFxQztBQUdyQyx1Q0FBb0M7QUFDcEMsbURBTXlCO0FBQ3pCLCtDQUE0QztBQUM1Qyx1REFBb0Q7QUFDcEQsbUNBUWlCO0FBRWpCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztBQVVwQjs7R0FFRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsaUNBQXNCO0lBMEI1RDs7OztPQUlHO0lBQ0gsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksc0JBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLGNBQXNCO1FBQ2pELDRGQUE0RjtRQUM1RixhQUFhO1FBQ2IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGNBQWMsQ0FBQztRQUM3QyxPQUFPLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLEdBQVE7UUFDbkMs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QyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsc0JBQXNCLENBQUMsY0FBbUI7UUFDeEMsMkRBQTJEO0lBQzdELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsbUJBQW1CLENBQUMsV0FBd0I7UUFDMUMsMkZBQTJGO1FBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNsQixLQUFLLDBCQUFlLENBQUMsYUFBYTtnQkFDaEMsTUFBTTtZQUNSLEtBQUssMEJBQWUsQ0FBQyxvQkFBb0I7Z0JBQ3ZDLE1BQU07WUFDUixLQUFLLDBCQUFlLENBQUMsSUFBSTtnQkFDdkIsTUFBTTtZQUNSLEtBQUssMEJBQWUsQ0FBQyxxQkFBcUI7Z0JBQ3hDLE1BQU07WUFDUixLQUFLLDBCQUFlLENBQUMsYUFBYTtnQkFDaEMsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQztJQUNELFlBQVk7SUFFWixrQkFBa0I7SUFDbEIsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXLENBQUMsV0FBd0I7UUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBcGhCRCxnREFvaEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUtleSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBTaWduaW5nRXJyb3IsIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MnO1xuaW1wb3J0IHsgRmVlLCBJbmRleGVkRGF0YSwgSW5kZXhlZFNpZ25hdHVyZSwgS2V5LCBPcGVyYXRpb24sIE9yaWdpbmF0aW9uT3AsIFJldmVhbE9wLCBUcmFuc2FjdGlvbk9wIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7XG4gIGZvcndhcmRlck9yaWdpbmF0aW9uT3BlcmF0aW9uLFxuICBnZW5lcmljTXVsdGlzaWdPcmlnaW5hdGlvbk9wZXJhdGlvbixcbiAgbXVsdGlzaWdUcmFuc2FjdGlvbk9wZXJhdGlvbixcbiAgcmV2ZWFsT3BlcmF0aW9uLFxuICBzaW5nbGVzaWdUcmFuc2FjdGlvbk9wZXJhdGlvbixcbn0gZnJvbSAnLi9tdWx0aXNpZ1V0aWxzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQge1xuICBERUZBVUxUX0dBU19MSU1JVCxcbiAgREVGQVVMVF9TVE9SQUdFX0xJTUlULFxuICBpc1ZhbGlkQWRkcmVzcyxcbiAgaXNWYWxpZEJsb2NrSGFzaCxcbiAgaXNWYWxpZE9yaWdpbmF0ZWRBZGRyZXNzLFxuICBpc1ZhbGlkUHVibGljS2V5LFxuICBzaWduLFxufSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgREVGQVVMVF9NID0gMztcblxuaW50ZXJmYWNlIERhdGFUb1NpZ25PdmVycmlkZSBleHRlbmRzIEluZGV4ZWREYXRhIHtcbiAgZGF0YVRvU2lnbjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSW5kZXhlZEtleVBhaXIgZXh0ZW5kcyBJbmRleGVkRGF0YSB7XG4gIGtleTogS2V5UGFpcjtcbn1cblxuLyoqXG4gKiBUZXpvcyB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByaXZhdGUgX3NlcmlhbGl6ZWRUcmFuc2FjdGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX3R5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgcHJpdmF0ZSBfYmxvY2tIZWFkZXI6IHN0cmluZztcbiAgcHJpdmF0ZSBfY291bnRlcjogQmlnTnVtYmVyO1xuICBwcml2YXRlIF9mZWU6IEZlZTtcbiAgcHJpdmF0ZSBfc291cmNlQWRkcmVzczogc3RyaW5nO1xuICBwcml2YXRlIF9zb3VyY2VLZXlQYWlyPzogS2V5UGFpcjtcblxuICAvLyBQdWJsaWMga2V5IHJldmVsYXRpb24gdHJhbnNhY3Rpb24gcGFyYW1ldGVyc1xuICBwcml2YXRlIF9wdWJsaWNLZXlUb1JldmVhbDogc3RyaW5nO1xuXG4gIC8vIFdhbGxldCBpbml0aWFsaXphdGlvbiB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzXG4gIHByaXZhdGUgX2luaXRpYWxCYWxhbmNlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2luaXRpYWxEZWxlZ2F0ZTogc3RyaW5nO1xuICBwcml2YXRlIF93YWxsZXRPd25lclB1YmxpY0tleXM6IHN0cmluZ1tdO1xuXG4gIC8vIFNlbmQgdHJhbnNhY3Rpb24gcGFyYW1ldGVyc1xuICBwcml2YXRlIF9tdWx0aXNpZ1NpZ25lcktleVBhaXJzOiBJbmRleGVkS2V5UGFpcltdO1xuICBwcml2YXRlIF9kYXRhVG9TaWduT3ZlcnJpZGU6IERhdGFUb1NpZ25PdmVycmlkZVtdO1xuICBwcml2YXRlIF90cmFuc2ZlcnM6IFRyYW5zZmVyQnVpbGRlcltdO1xuXG4gIC8vIEFkZHJlc3MgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVyc1xuICBwcml2YXRlIF9mb3J3YXJkZXJEZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29pbkNvbmZpZ30gX2NvaW5Db25maWcgLSBjb2luIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgdGhpcy5fY291bnRlciA9IG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgdGhpcy5fdHJhbnNmZXJzID0gW107XG4gICAgdGhpcy5fd2FsbGV0T3duZXJQdWJsaWNLZXlzID0gW107XG4gICAgdGhpcy5fbXVsdGlzaWdTaWduZXJLZXlQYWlycyA9IFtdO1xuICAgIHRoaXMuX2RhdGFUb1NpZ25PdmVycmlkZSA9IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLy8gcmVnaW9uIEJhc2UgQnVpbGRlclxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIC8vIERlY29kaW5nIHRoZSB0cmFuc2FjdGlvbiBpcyBhbiBhc3luYyBvcGVyYXRpb24sIHNvIHNhdmUgaXQgYW5kIGxlYXZlIHRoZSBkZWNvZGluZyBmb3IgdGhlXG4gICAgLy8gYnVpbGQgc3RlcFxuICAgIHRoaXMuX3NlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBzaWduZXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICAvLyBDdXJyZW50bHkgcHVibGljIGtleSByZXZlbGF0aW9uIGlzIHRoZSBvbmx5IHR5cGUgb2YgYWNjb3VudCB1cGRhdGUgdHggc3VwcG9ydGVkIGluIFRlem9zXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BY2NvdW50VXBkYXRlICYmICF0aGlzLl9wdWJsaWNLZXlUb1JldmVhbCkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignQ2Fubm90IHNpZ24gYSBwdWJsaWMga2V5IHJldmVsYXRpb24gdHJhbnNhY3Rpb24gd2l0aG91dCBwdWJsaWMga2V5Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbiAmJiB0aGlzLl93YWxsZXRPd25lclB1YmxpY0tleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdDYW5ub3Qgc2lnbiBhbiB3YWxsZXQgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb24gd2l0aG91dCBvd25lcnMnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZCAmJlxuICAgICAgdGhpcy5fdHJhbnNmZXJzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgdGhpcy5fc2VyaWFsaXplZFRyYW5zYWN0aW9uID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0Nhbm5vdCBzaWduIGFuIGVtcHR5IHNlbmQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQgJiYgKCF0aGlzLl9zb3VyY2VBZGRyZXNzIHx8IHRoaXMuX3NvdXJjZUFkZHJlc3MgIT09IHNpZ25lci5nZXRBZGRyZXNzKCkpKSB7XG4gICAgICAvLyBJZiB0aGUgc2lnbmVyIGlzIG5vdCB0aGUgc291cmNlIGFuZCBpdCBpcyBhIHNlbmQgdHJhbnNhY3Rpb24sIGFkZCBpdCB0byB0aGUgbGlzdCBvZlxuICAgICAgLy8gbXVsdGlzaWcgd2FsbGV0IHNpZ25lcnNcblxuICAgICAgLy8gVE9ETzogc3VwcG9ydCBhIGNvbWJpbmF0aW9uIG9mIGtleXMgd2l0aCBhbmQgd2l0aG91dCBjdXN0b20gaW5kZXhcbiAgICAgIGlmIChrZXkuaW5kZXggJiYga2V5LmluZGV4ID49IERFRkFVTFRfTSkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgICdDdXN0b20gaW5kZXggY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgd2FsbGV0IHRvdGFsIG51bWJlciBvZiBzaWduZXJzIChvd25lcnMpJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gTWFrZSBzdXJlIGVpdGhlciBhbGwga2V5cyBwYXNzZWQgaGF2ZSBhIGN1c3RvbSBpbmRleCBvciBub25lIG9mIHRoZW0gaGF2ZVxuICAgICAgY29uc3Qgc2hvdWxkSGF2ZUN1c3RvbUluZGV4ID0ga2V5Lmhhc093blByb3BlcnR5KCdpbmRleCcpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9tdWx0aXNpZ1NpZ25lcktleVBhaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzaG91bGRIYXZlQ3VzdG9tSW5kZXggIT09ICh0aGlzLl9tdWx0aXNpZ1NpZ25lcktleVBhaXJzW2ldLmluZGV4ICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQ3VzdG9tIGluZGV4IGhhcyB0byBiZSBzZXQgZm9yIGFsbCBtdWx0aXNpZyBjb250cmFjdCBzaWduaW5nIGtleXMgb3Igbm9uZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBtdWx0aXNpZ1NpZ25lcktleSA9IHNob3VsZEhhdmVDdXN0b21JbmRleCA/IHsga2V5OiBzaWduZXIsIGluZGV4OiBrZXkuaW5kZXggfSA6IHsga2V5OiBzaWduZXIgfTtcbiAgICAgIHRoaXMuX211bHRpc2lnU2lnbmVyS2V5UGFpcnMucHVzaChtdWx0aXNpZ1NpZ25lcktleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9zb3VyY2VLZXlQYWlyKSB7XG4gICAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0Nhbm5vdCBzaWduIG11bHRpcGxlIHRpbWVzIGEgbm9uIHNlbmQtdHlwZSB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc291cmNlS2V5UGFpciA9IHNpZ25lcjtcbiAgICB9XG5cbiAgICAvLyBTaWduaW5nIHRoZSB0cmFuc2FjdGlvbiBpcyBhbiBhc3luYyBvcGVyYXRpb24sIHNvIHNhdmUgdGhlIHNvdXJjZSBhbmQgbGVhdmUgdGhlIGFjdHVhbFxuICAgIC8vIHNpZ25pbmcgZm9yIHRoZSBidWlsZCBzdGVwXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIC8vIElmIHRoZSBmcm9tKCkgbWV0aG9kIHdhcyBjYWxsZWQsIHVzZSB0aGUgc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBhcyBhIGJhc2VcbiAgICBpZiAodGhpcy5fc2VyaWFsaXplZFRyYW5zYWN0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uLmluaXRGcm9tU2VyaWFsaXplZFRyYW5zYWN0aW9uKHRoaXMuX3NlcmlhbGl6ZWRUcmFuc2FjdGlvbik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2RhdGFUb1NpZ25PdmVycmlkZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzaWduYXR1cmVzID0gYXdhaXQgdGhpcy5nZXRTaWduYXR1cmVzKHRoaXMuX2RhdGFUb1NpZ25PdmVycmlkZVtpXS5kYXRhVG9TaWduKTtcbiAgICAgICAgYXdhaXQgdGhpcy50cmFuc2FjdGlvbi5hZGRUcmFuc2ZlclNpZ25hdHVyZShzaWduYXR1cmVzLCB0aGlzLl9kYXRhVG9TaWduT3ZlcnJpZGVbaV0uaW5kZXggfHwgaSk7XG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBtYWtlIGNoYW5nZXMgdG8gdGhlIHRyYW5zYWN0aW9uIGlmIGFueSBleHRyYSBwYXJhbWV0ZXIgaGFzIGJlZW4gc2V0IHRoZW4gc2lnbiBpdFxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgY29udGVudHM6IE9wZXJhdGlvbltdID0gW107XG4gICAgICBzd2l0Y2ggKHRoaXMuX3R5cGUpIHtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWNjb3VudFVwZGF0ZTpcbiAgICAgICAgICBpZiAodGhpcy5fcHVibGljS2V5VG9SZXZlYWwpIHtcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2godGhpcy5idWlsZFB1YmxpY0tleVJldmVsYXRpb25PcGVyYXRpb24oKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjpcbiAgICAgICAgICBpZiAodGhpcy5fcHVibGljS2V5VG9SZXZlYWwpIHtcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2godGhpcy5idWlsZFB1YmxpY0tleVJldmVsYXRpb25PcGVyYXRpb24oKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRlbnRzLnB1c2godGhpcy5idWlsZFdhbGxldEluaXRpYWxpemF0aW9uT3BlcmF0aW9ucygpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgICBpZiAodGhpcy5fcHVibGljS2V5VG9SZXZlYWwpIHtcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2godGhpcy5idWlsZFB1YmxpY0tleVJldmVsYXRpb25PcGVyYXRpb24oKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRlbnRzID0gY29udGVudHMuY29uY2F0KGF3YWl0IHRoaXMuYnVpbGRTZW5kVHJhbnNhY3Rpb25Db250ZW50KCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb246XG4gICAgICAgICAgaWYgKHRoaXMuX3B1YmxpY0tleVRvUmV2ZWFsKSB7XG4gICAgICAgICAgICBjb250ZW50cy5wdXNoKHRoaXMuYnVpbGRQdWJsaWNLZXlSZXZlbGF0aW9uT3BlcmF0aW9uKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250ZW50cyA9IGNvbnRlbnRzLmNvbmNhdCh0aGlzLmJ1aWxkRm9yd2FyZGVyRGVwbG95bWVudENvbnRlbnQoKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNpbmdsZVNpZ1NlbmQ6XG4gICAgICAgICAgLy8gTm8gc3VwcG9ydCBmb3IgcmV2ZWxhdGlvbiB0eG5zIGFzIHByaW1hcnkgdXNlIGNhc2UgaXMgdG8gc2VuZCBmcm9tIGZlZSBhZGRyZXNzXG4gICAgICAgICAgY29udGVudHMgPSBjb250ZW50cy5jb25jYXQoYXdhaXQgdGhpcy5idWlsZFNlbmRUcmFuc2FjdGlvbkNvbnRlbnQoKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgIGJyYW5jaDogdGhpcy5fYmxvY2tIZWFkZXIsXG4gICAgICAgIGNvbnRlbnRzLFxuICAgICAgfTtcblxuICAgICAgdGhpcy50cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgIC8vIEJ1aWxkIGFuZCBzaWduIGEgbmV3IHRyYW5zYWN0aW9uIGJhc2VkIG9uIHRoZSBsYXRlc3QgY2hhbmdlc1xuICAgICAgYXdhaXQgdGhpcy50cmFuc2FjdGlvbi5pbml0RnJvbVBhcnNlZFRyYW5zYWN0aW9uKHBhcnNlZFRyYW5zYWN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc291cmNlS2V5UGFpciAmJiB0aGlzLl9zb3VyY2VLZXlQYWlyLmdldEtleXMoKS5wcnYpIHtcbiAgICAgIC8vIFRPRE86IGNoZWNrIGlmIHRoZXJlIGFyZSBtb3JlIHNpZ25lcnMgdGhhbiBuZWVkZWQgZm9yIGEgc2luZ2xlc2lnIG9yIG11bHRpc2lnIHRyYW5zYWN0aW9uXG4gICAgICBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uLnNpZ24odGhpcy5fc291cmNlS2V5UGFpcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBDb21tb24gYnVpbGRlciBtZXRob2RzXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIGJyYW5jaCBpZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsb2NrSWQgQSBibG9jayBoYXNoIHRvIHVzZSBhcyBicmFuY2ggcmVmZXJlbmNlXG4gICAqL1xuICBicmFuY2goYmxvY2tJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFpc1ZhbGlkQmxvY2tIYXNoKGJsb2NrSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGJsb2NrIGhhc2ggJyArIGJsb2NrSWQpO1xuICAgIH1cbiAgICB0aGlzLl9ibG9ja0hlYWRlciA9IGJsb2NrSWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdHJhbnNhY3Rpb24gYmVpbmcgYnVpbHQuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0eXBlIC0gdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICovXG4gIHR5cGUodHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kICYmIHRoaXMuX3dhbGxldE93bmVyUHVibGljS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgbGFiZWxlZCBhcyBTZW5kIHdoZW4gb3duZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNldCcpO1xuICAgIH1cbiAgICBpZiAodHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQgJiYgdGhpcy5fdHJhbnNmZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGNvbnRhaW5zIHRyYW5zZmVycyBhbmQgY2FuIG9ubHkgYmUgbGFiZWxlZCBhcyBTZW5kJyk7XG4gICAgfVxuICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gZmVlcy4gTG93IGZlZXMgbWF5IGdldCBhIHRyYW5zYWN0aW9uIHJlamVjdGVkIG9yIG5ldmVyIHBpY2tlZCB1cCBieSBiYWtlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7RmVlfSBmZWUgQmFrZXIgZmVlcy4gTWF5IGFsc28gaW5jbHVkZSB0aGUgbWF4aW11bSBnYXMgYW5kIHN0b3JhZ2UgZmVlcyB0byBwYXlcbiAgICovXG4gIGZlZShmZWU6IEZlZSk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGZlZS5mZWUpKTtcbiAgICBpZiAoZmVlLmdhc0xpbWl0KSB7XG4gICAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihmZWUuZ2FzTGltaXQpKTtcbiAgICB9XG4gICAgaWYgKGZlZS5zdG9yYWdlTGltaXQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGZlZS5zdG9yYWdlTGltaXQpKTtcbiAgICB9XG4gICAgdGhpcy5fZmVlID0gZmVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gaW5pdGlhdG9yLiBUaGlzIGFjY291bnQgd2lsbCBwYXkgZm9yIHRoZSB0cmFuc2FjdGlvbiBmZWVzLCBidXQgaXQgd2lsbCBub3RcbiAgICogYmUgYWRkZWQgYXMgYW4gb3duZXIgb2YgYSB3YWxsZXQgaW4gYSBpbml0IHRyYW5zYWN0aW9uLCB1bmxlc3MgbWFudWFsbHkgc2V0IGFzIG9uZSBvZiB0aGVcbiAgICogb3duZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIEEgVGV6b3MgYWRkcmVzc1xuICAgKi9cbiAgc291cmNlKHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiBzb3VyY2UgfSk7XG4gICAgdGhpcy5fc291cmNlQWRkcmVzcyA9IHNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYW4gYW1vdW50IG9mIG11dGV6IHRvIHRyYW5zZmVyIGluIHRoaXMgdHJhbnNhY3Rpb24gdGhpcyB0cmFuc2FjdGlvbi4gVGhpcyBpcyBkaWZmZXJlbnQgdGhhblxuICAgKiB0aGUgYW1vdW50IHRvIHRyYW5zZmVyIGZyb20gYSBtdWx0aXNpZyB3YWxsZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgQW1vdW50IGluIG11dGV6ICgxLzEwMDAwMDAgVGV6aWVzKVxuICAgKi9cbiAgaW5pdGlhbEJhbGFuY2UoYW1vdW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbml0aWFsIGJhbGFuY2UgY2FuIG9ubHkgYmUgc2V0IGZvciB3YWxsZXQgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb25zJyk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGFtb3VudCkpO1xuICAgIHRoaXMuX2luaXRpYWxCYWxhbmNlID0gYW1vdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gY291bnRlciB0byBwcmV2ZW50IHN1Ym1pdHRpbmcgcmVwZWF0ZWQgdHJhbnNhY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY291bnRlciBUaGUgY291bnRlciB0byB1c2VcbiAgICovXG4gIGNvdW50ZXIoY291bnRlcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY291bnRlciA9IG5ldyBCaWdOdW1iZXIoY291bnRlcik7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIGEgZm9yd2FyZGVyIGNvbnRyYWN0XG4gICAqIFVzZWQgaW4gZm9yd2FyZGVyIGNvbnRyYWN0IGRlcGxveW1lbnQgYXMgZGVzdGluYXRpb24gYWRkcmVzc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udHJhY3RBZGRyZXNzIC0gY29udHJhY3QgYWRkcmVzcyB0byB1c2VcbiAgICovXG4gIGZvcndhcmRlckRlc3RpbmF0aW9uKGNvbnRyYWN0QWRkcmVzczogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ZvcndhcmRlciBkZXN0aW5hdGlvbiBjYW4gb25seSBiZSBzZXQgZm9yIGFkZHJlc3MgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb25zJyk7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZE9yaWdpbmF0ZWRBZGRyZXNzKGNvbnRyYWN0QWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ZvcndhcmRlciBkZXN0aW5hdGlvbiBjYW4gb25seSBiZSBhbiBvcmlnaW5hdGVkIGFkZHJlc3MnKTtcbiAgICB9XG4gICAgdGhpcy5fZm9yd2FyZGVyRGVzdGluYXRpb24gPSBjb250cmFjdEFkZHJlc3M7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gUHVibGljS2V5UmV2ZWxhdGlvbiBidWlsZGVyIG1ldGhvZHNcbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMga2V5IHRvIHJldmVhbC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHB1YmxpY0tleSBBIFRlem9zIHB1YmxpYyBrZXlcbiAgICovXG4gIHB1YmxpY0tleVRvUmV2ZWFsKHB1YmxpY0tleTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3B1YmxpY0tleVRvUmV2ZWFsKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdQdWJsaWMga2V5IHRvIHJldmVhbCBhbHJlYWR5IHNldDogJyArIHRoaXMuX3B1YmxpY0tleVRvUmV2ZWFsKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IHB1YmxpY0tleSB9KTtcbiAgICBpZiAoa2V5UGFpci5nZXRBZGRyZXNzKCkgIT09IHRoaXMuX3NvdXJjZUFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1B1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggdGhlIHNvdXJjZSBhZGRyZXNzOiAnICsgdGhpcy5fc291cmNlQWRkcmVzcyk7XG4gICAgfVxuICAgIHRoaXMuX3B1YmxpY0tleVRvUmV2ZWFsID0ga2V5UGFpci5nZXRLZXlzKCkucHViO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgcmV2ZWFsIG9wZXJhdGlvbiBmb3IgdGhlIHNvdXJjZSBhY2NvdW50IHdpdGggZGVmYXVsdCBmZWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UmV2ZWFsT3B9IEEgVGV6b3MgcmV2ZWFsIG9wZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFB1YmxpY0tleVJldmVsYXRpb25PcGVyYXRpb24oKTogUmV2ZWFsT3Age1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHJldmVhbE9wZXJhdGlvbih0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCksIHRoaXMuX3NvdXJjZUFkZHJlc3MsIHRoaXMuX3B1YmxpY0tleVRvUmV2ZWFsKTtcbiAgICB0aGlzLl9jb3VudGVyID0gdGhpcy5fY291bnRlci5wbHVzKDEpO1xuICAgIHJldHVybiBvcGVyYXRpb247XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIFdhbGxldEluaXRpYWxpemF0aW9uIGJ1aWxkZXIgbWV0aG9kc1xuICAvKipcbiAgICogU2V0IG9uZSBvZiB0aGUgb3duZXJzIG9mIHRoZSBtdWx0aXNpZyB3YWxsZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwdWJsaWNLZXkgQSBUZXpvcyBwdWJsaWMga2V5XG4gICAqL1xuICBvd25lcihwdWJsaWNLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ011bHRpc2lnIHdhbGxldCBvd25lciBjYW4gb25seSBiZSBzZXQgZm9yIGluaXRpYWxpemF0aW9uIHRyYW5zYWN0aW9ucycpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fd2FsbGV0T3duZXJQdWJsaWNLZXlzLmxlbmd0aCA+PSBERUZBVUxUX00pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0EgbWF4aW11bSBvZiAnICsgREVGQVVMVF9NICsgJyBvd25lcnMgY2FuIGJlIHNldCBmb3IgYSBtdWx0aXNpZyB3YWxsZXQnKTtcbiAgICB9XG4gICAgaWYgKCFpc1ZhbGlkUHVibGljS2V5KHB1YmxpY0tleSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcHVibGljIGtleTogJyArIHB1YmxpY0tleSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl93YWxsZXRPd25lclB1YmxpY0tleXMuaW5jbHVkZXMocHVibGljS2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignUmVwZWF0ZWQgb3duZXIgcHVibGljIGtleTogJyArIHB1YmxpY0tleSk7XG4gICAgfVxuICAgIHRoaXMuX3dhbGxldE93bmVyUHVibGljS2V5cy5wdXNoKHB1YmxpY0tleSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuIGluaXRpYWwgZGVsZWdhdGUgdG8gaW5pdGlhbGl6ZSB0aGlzIHdhbGxldCB0by4gVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgZGVsZWdhdGlvbiB0b1xuICAgKiBzZXQgd2hpbGUgZG9pbmcgYSBzZXBhcmF0ZSBkZWxlZ2F0aW9uIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVsZWdhdGUgVGhlIGFkZHJlc3MgdG8gZGVsZWdhdGUgdGhlIGZ1bmRzIHRvXG4gICAqL1xuICBpbml0aWFsRGVsZWdhdGUoZGVsZWdhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0luaXRpYWwgZGVsZWdhdGlvbiBjYW4gb25seSBiZSBzZXQgZm9yIHdhbGxldCBpbml0aWFsaXphdGlvbiB0cmFuc2FjdGlvbnMnKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiBkZWxlZ2F0ZSB9KTtcbiAgICB0aGlzLl9pbml0aWFsRGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbiBvcmlnaW5hdGlvbiBvcGVyYXRpb24gZm9yIGEgZ2VuZXJpYyBtdWx0aXNpZyBjb250cmFjdC5cbiAgICpcbiAgICogQHJldHVybnMge09wZXJhdGlvbn0gQSBUZXpvcyBvcmlnaW5hdGlvbiBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYnVpbGRXYWxsZXRJbml0aWFsaXphdGlvbk9wZXJhdGlvbnMoKTogT3JpZ2luYXRpb25PcCB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb25PcCA9IGdlbmVyaWNNdWx0aXNpZ09yaWdpbmF0aW9uT3BlcmF0aW9uKFxuICAgICAgdGhpcy5fY291bnRlci50b1N0cmluZygpLFxuICAgICAgdGhpcy5fc291cmNlQWRkcmVzcyxcbiAgICAgIHRoaXMuX2ZlZS5mZWUsXG4gICAgICB0aGlzLl9mZWUuZ2FzTGltaXQgfHwgREVGQVVMVF9HQVNfTElNSVQuT1JJR0lOQVRJT04udG9TdHJpbmcoKSxcbiAgICAgIHRoaXMuX2ZlZS5zdG9yYWdlTGltaXQgfHwgREVGQVVMVF9TVE9SQUdFX0xJTUlULk9SSUdJTkFUSU9OLnRvU3RyaW5nKCksXG4gICAgICB0aGlzLl9pbml0aWFsQmFsYW5jZSB8fCAnMCcsXG4gICAgICB0aGlzLl93YWxsZXRPd25lclB1YmxpY0tleXMsXG4gICAgICB0aGlzLl9pbml0aWFsRGVsZWdhdGVcbiAgICApO1xuICAgIHRoaXMuX2NvdW50ZXIgPSB0aGlzLl9jb3VudGVyLnBsdXMoMSk7XG4gICAgcmV0dXJuIG9yaWdpbmF0aW9uT3A7XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIFNlbmQgYnVpbGRlciBtZXRob2RzXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IFRyYW5zZmVyQnVpbGRlciB0byBmb3IgYSBzaW5nbGVzaWcgb3IgbXVsdGlzaWcgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgQW1vdW50IGluIG11dGV6IHRvIGJlIHRyYW5zZmVycmVkXG4gICAqIEByZXR1cm5zIHtUcmFuc2ZlckJ1aWxkZXJ9IEEgdHJhbnNmZXIgYnVpbGRlclxuICAgKi9cbiAgdHJhbnNmZXIoYW1vdW50OiBzdHJpbmcpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuU2VuZCAmJiB0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuU2luZ2xlU2lnU2VuZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNmZXJzIGNhbiBvbmx5IGJlIHNldCBmb3Igc2VuZCB0cmFuc2FjdGlvbnMnKTtcbiAgICB9XG4gICAgbGV0IHRyYW5zZmVyQnVpbGRlciA9IG5ldyBUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAvLyBJZiBzb3VyY2Ugd2FzIHNldCwgdXNlIGl0IGFzIGRlZmF1bHQgZm9yXG4gICAgaWYgKHRoaXMuX3NvdXJjZUFkZHJlc3MpIHtcbiAgICAgIHRyYW5zZmVyQnVpbGRlciA9IHRyYW5zZmVyQnVpbGRlci5mcm9tKHRoaXMuX3NvdXJjZUFkZHJlc3MpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZmVlKSB7XG4gICAgICB0cmFuc2ZlckJ1aWxkZXIgPSB0cmFuc2ZlckJ1aWxkZXIuZmVlKHRoaXMuX2ZlZS5mZWUpO1xuICAgICAgdHJhbnNmZXJCdWlsZGVyID0gdGhpcy5fZmVlLmdhc0xpbWl0ID8gdHJhbnNmZXJCdWlsZGVyLmdhc0xpbWl0KHRoaXMuX2ZlZS5nYXNMaW1pdCkgOiB0cmFuc2ZlckJ1aWxkZXI7XG4gICAgICB0cmFuc2ZlckJ1aWxkZXIgPSB0aGlzLl9mZWUuc3RvcmFnZUxpbWl0ID8gdHJhbnNmZXJCdWlsZGVyLnN0b3JhZ2VMaW1pdCh0aGlzLl9mZWUuc3RvcmFnZUxpbWl0KSA6IHRyYW5zZmVyQnVpbGRlcjtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNmZXJzLnB1c2godHJhbnNmZXJCdWlsZGVyKTtcbiAgICByZXR1cm4gdHJhbnNmZXJCdWlsZGVyLmFtb3VudChhbW91bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgc2lnbmF0dXJlcyBmb3IgdGhlIG11bHRpc2lnIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFja2VkRGF0YSBUaGUgc3RyaW5nIGluIGhleGFkZWNpbWFsIHRvIHNpZ25cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSBMaXN0IG9mIHNpZ25hdHVyZXMgZm9yIHBhY2tlZERhdGFcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0U2lnbmF0dXJlcyhwYWNrZWREYXRhOiBzdHJpbmcpOiBQcm9taXNlPEluZGV4ZWRTaWduYXR1cmVbXT4ge1xuICAgIGNvbnN0IHNpZ25hdHVyZXM6IEluZGV4ZWRTaWduYXR1cmVbXSA9IFtdO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBtdWx0aXNpZyBjb250cmFjdCBzaWduYXR1cmVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9tdWx0aXNpZ1NpZ25lcktleVBhaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKHRoaXMuX211bHRpc2lnU2lnbmVyS2V5UGFpcnNbaV0ua2V5LCBwYWNrZWREYXRhLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX211bHRpc2lnU2lnbmVyS2V5UGFpcnNbaV0uaW5kZXg7XG4gICAgICBzaWduYXR1cmVzLnB1c2goaW5kZXggPyB7IHNpZ25hdHVyZTogc2lnbmF0dXJlLnNpZywgaW5kZXggfSA6IHsgc2lnbmF0dXJlOiBzaWduYXR1cmUuc2lnIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgZGF0YSB0byBzaWduIGZvciBhIHNwZWNpZmljIHRyYW5zZmVyLiBVc2VkIGZvciBvZmZsaW5lIHNpZ25pbmcgdG8gcGFzcyB0aGVcbiAgICogcmVzcGVjdGl2ZSBkYXRhVG9TaWduIGZvciB0cmFuc2ZlciBhdCBhIHBhcnRpY3VsYXIgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7RGF0YVRvU2lnbk92ZXJyaWRlfSBkYXRhIC0gZGF0YSB0byBvdmVycmlkZVxuICAgKi9cbiAgb3ZlcnJpZGVEYXRhVG9TaWduKGRhdGE6IERhdGFUb1NpZ25PdmVycmlkZSk6IHZvaWQge1xuICAgIGlmICghZGF0YS5pbmRleCkge1xuICAgICAgZGF0YS5pbmRleCA9IHRoaXMuX2RhdGFUb1NpZ25PdmVycmlkZS5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuX2RhdGFUb1NpZ25PdmVycmlkZS5wdXNoKGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgdHJhbnNhY3Rpb24gb3BlcmF0aW9uIGZvciBhIGdlbmVyaWMgbXVsdGlzaWcgY29udHJhY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFRyYW5zYWN0aW9uT3BbXT59IEEgVGV6b3MgdHJhbnNhY3Rpb24gb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGJ1aWxkU2VuZFRyYW5zYWN0aW9uQ29udGVudCgpOiBQcm9taXNlPFRyYW5zYWN0aW9uT3BbXT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzOiBUcmFuc2FjdGlvbk9wW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3RyYW5zZmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdHJhbnNmZXIgPSB0aGlzLl90cmFuc2ZlcnNbaV0uYnVpbGQoKTtcbiAgICAgIGxldCB0cmFuc2FjdGlvbk9wO1xuICAgICAgaWYgKGlzVmFsaWRPcmlnaW5hdGVkQWRkcmVzcyh0cmFuc2Zlci5mcm9tKSkge1xuICAgICAgICAvLyBPZmZsaW5lIHRyYW5zYWN0aW9ucyBtYXkgbm90IGhhdmUgdGhlIGRhdGEgdG8gc2lnblxuICAgICAgICBjb25zdCBzaWduYXR1cmVzID0gdHJhbnNmZXIuZGF0YVRvU2lnbiA/IGF3YWl0IHRoaXMuZ2V0U2lnbmF0dXJlcyh0cmFuc2Zlci5kYXRhVG9TaWduKSA6IFtdO1xuICAgICAgICB0cmFuc2FjdGlvbk9wID0gbXVsdGlzaWdUcmFuc2FjdGlvbk9wZXJhdGlvbihcbiAgICAgICAgICB0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgdGhpcy5fc291cmNlQWRkcmVzcyxcbiAgICAgICAgICB0cmFuc2Zlci5hbW91bnQsXG4gICAgICAgICAgdHJhbnNmZXIuZnJvbSxcbiAgICAgICAgICB0cmFuc2Zlci5jb3VudGVyIHx8ICcwJyxcbiAgICAgICAgICB0cmFuc2Zlci50byxcbiAgICAgICAgICBzaWduYXR1cmVzLFxuICAgICAgICAgIHRyYW5zZmVyLmZlZS5mZWUsXG4gICAgICAgICAgdHJhbnNmZXIuZmVlLmdhc0xpbWl0LFxuICAgICAgICAgIHRyYW5zZmVyLmZlZS5zdG9yYWdlTGltaXRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zYWN0aW9uT3AgPSBzaW5nbGVzaWdUcmFuc2FjdGlvbk9wZXJhdGlvbihcbiAgICAgICAgICB0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgdGhpcy5fc291cmNlQWRkcmVzcyxcbiAgICAgICAgICB0cmFuc2Zlci5hbW91bnQsXG4gICAgICAgICAgdHJhbnNmZXIudG8sXG4gICAgICAgICAgdHJhbnNmZXIuZmVlLmZlZSxcbiAgICAgICAgICB0cmFuc2Zlci5mZWUuZ2FzTGltaXQsXG4gICAgICAgICAgdHJhbnNmZXIuZmVlLnN0b3JhZ2VMaW1pdFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29udGVudHMucHVzaCh0cmFuc2FjdGlvbk9wKTtcbiAgICAgIHRoaXMuX2NvdW50ZXIgPSB0aGlzLl9jb3VudGVyLnBsdXMoMSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50cztcbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gRm9yd2FyZGVyQWRkcmVzc0RlcGxveW1lbnRcbiAgLyoqXG4gICAqIEJ1aWxkIGEgdHJhbnNhY3Rpb24gb3BlcmF0aW9uIGZvciBhIGZvcndhcmRlciBjb250cmFjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7T3JpZ2luYXRpb25PcH0gYSBUZXpvcyB0cmFuc2FjdGlvbiBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYnVpbGRGb3J3YXJkZXJEZXBsb3ltZW50Q29udGVudCgpOiBPcmlnaW5hdGlvbk9wIHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBmb3J3YXJkZXJPcmlnaW5hdGlvbk9wZXJhdGlvbihcbiAgICAgIHRoaXMuX2ZvcndhcmRlckRlc3RpbmF0aW9uLFxuICAgICAgdGhpcy5fY291bnRlci50b1N0cmluZygpLFxuICAgICAgdGhpcy5fc291cmNlQWRkcmVzcyxcbiAgICAgIHRoaXMuX2ZlZS5mZWUsXG4gICAgICB0aGlzLl9mZWUuZ2FzTGltaXQgfHwgREVGQVVMVF9HQVNfTElNSVQuT1JJR0lOQVRJT04udG9TdHJpbmcoKSxcbiAgICAgIHRoaXMuX2ZlZS5zdG9yYWdlTGltaXQgfHwgREVGQVVMVF9TVE9SQUdFX0xJTUlULk9SSUdJTkFUSU9OLnRvU3RyaW5nKCksXG4gICAgICB0aGlzLl9pbml0aWFsQmFsYW5jZSB8fCAnMCdcbiAgICApO1xuICAgIHRoaXMuX2NvdW50ZXIgPSB0aGlzLl9jb3VudGVyLnBsdXMoMSk7XG4gICAgcmV0dXJuIG9wZXJhdGlvbjtcbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBiZWxvdyBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgICAvLyBUT0RPOiB2YWxpZGF0ZSB0aGUgYW1vdW50IGlzIG5vdCBiaWdnZXIgdGhhbiB0aGUgbWF4IGFtb3VudCBpbiBUZXpvc1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XG4gICAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MgJyArIGFkZHJlc3MuYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICBpZiAoIWtleVBhaXIuZ2V0S2V5cygpLnBydikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBrZXknKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogYW55KTogdm9pZCB7XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgdGhlIHRyYW5zYWN0aW9uIGlzIGVpdGhlciBhIEpTT04gb3IgYSBoZXhcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFsbCByZXF1aXJlZCBmaWVsZHMgYXJlIHByZXNlbnQgaW4gdGhlIGJ1aWxkZXIgYmVmb3JlIGJ1aWxkSW1wbGVtZW50YXRpb25cbiAgICBzd2l0Y2ggKHRoaXMuX3R5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFjY291bnRVcGRhdGU6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb246XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb246XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2luZ2xlU2lnU2VuZDpcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGRpc3BsYXlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvaW5Db25maWcuZnVsbE5hbWU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxufVxuIl19
|
|
454
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQTZIO0FBRTdILGdFQUFxQztBQUlyQyx1Q0FBb0M7QUFDcEMsbURBTXlCO0FBQ3pCLCtDQUE0QztBQUM1Qyx1REFBb0Q7QUFDcEQsbUNBUWlCO0FBRWpCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztBQVVwQjs7R0FFRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsaUNBQXNCO0lBMEI1RDs7OztPQUlHO0lBQ0gsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksc0JBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLGNBQXNCO1FBQ2pELDRGQUE0RjtRQUM1RixhQUFhO1FBQ2IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGNBQWMsQ0FBQztRQUM3QyxPQUFPLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLEdBQVE7UUFDbkMs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ZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7WUFDdEcsZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUNwSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEMsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBa0I7UUFDNUMsTUFBTSxVQUFVLEdBQXVCLEVBQUUsQ0FBQztRQUMxQyw0Q0FBNEM7UUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3RCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsWUFBSSxFQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakcsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNwRCxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFB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bkIsS0FBSywwQkFBZSxDQUFDLGFBQWE7Z0JBQ2hDLE1BQU07WUFDUixLQUFLLDBCQUFlLENBQUMsb0JBQW9CO2dCQUN2QyxNQUFNO1lBQ1IsS0FBSywwQkFBZSxDQUFDLElBQUk7Z0JBQ3ZCLE1BQU07WUFDUixLQUFLLDBCQUFlLENBQUMscUJBQXFCO2dCQUN4QyxNQUFNO1lBQ1IsS0FBSywwQkFBZSxDQUFDLGFBQWE7Z0JBQ2hDLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztJQUNELFlBQVk7SUFFWixrQkFBa0I7SUFDbEIsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXLENBQUMsV0FBd0I7UUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBNWhCRCxnREE0aEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUtleSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBTaWduaW5nRXJyb3IsIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MnO1xuaW1wb3J0IHsgRmVlLCBJbmRleGVkRGF0YSwgSW5kZXhlZFNpZ25hdHVyZSwgS2V5LCBPcmlnaW5hdGlvbk9wLCBSZXZlYWxPcCwgVHJhbnNhY3Rpb25PcCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgT3BlcmF0aW9uQ29udGVudHMgfSBmcm9tICdAdGFxdWl0by9ycGMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQge1xuICBmb3J3YXJkZXJPcmlnaW5hdGlvbk9wZXJhdGlvbixcbiAgZ2VuZXJpY011bHRpc2lnT3JpZ2luYXRpb25PcGVyYXRpb24sXG4gIG11bHRpc2lnVHJhbnNhY3Rpb25PcGVyYXRpb24sXG4gIHJldmVhbE9wZXJhdGlvbixcbiAgc2luZ2xlc2lnVHJhbnNhY3Rpb25PcGVyYXRpb24sXG59IGZyb20gJy4vbXVsdGlzaWdVdGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9HQVNfTElNSVQsXG4gIERFRkFVTFRfU1RPUkFHRV9MSU1JVCxcbiAgaXNWYWxpZEFkZHJlc3MsXG4gIGlzVmFsaWRCbG9ja0hhc2gsXG4gIGlzVmFsaWRPcmlnaW5hdGVkQWRkcmVzcyxcbiAgaXNWYWxpZFB1YmxpY0tleSxcbiAgc2lnbixcbn0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IERFRkFVTFRfTSA9IDM7XG5cbmludGVyZmFjZSBEYXRhVG9TaWduT3ZlcnJpZGUgZXh0ZW5kcyBJbmRleGVkRGF0YSB7XG4gIGRhdGFUb1NpZ246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEluZGV4ZWRLZXlQYWlyIGV4dGVuZHMgSW5kZXhlZERhdGEge1xuICBrZXk6IEtleVBhaXI7XG59XG5cbi8qKlxuICogVGV6b3MgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcml2YXRlIF9zZXJpYWxpemVkVHJhbnNhY3Rpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuICBwcml2YXRlIF90eXBlOiBUcmFuc2FjdGlvblR5cGU7XG4gIHByaXZhdGUgX2Jsb2NrSGVhZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NvdW50ZXI6IEJpZ051bWJlcjtcbiAgcHJpdmF0ZSBfZmVlOiBGZWU7XG4gIHByaXZhdGUgX3NvdXJjZUFkZHJlc3M6IHN0cmluZztcbiAgcHJpdmF0ZSBfc291cmNlS2V5UGFpcj86IEtleVBhaXI7XG5cbiAgLy8gUHVibGljIGtleSByZXZlbGF0aW9uIHRyYW5zYWN0aW9uIHBhcmFtZXRlcnNcbiAgcHJpdmF0ZSBfcHVibGljS2V5VG9SZXZlYWw6IHN0cmluZztcblxuICAvLyBXYWxsZXQgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb24gcGFyYW1ldGVyc1xuICBwcml2YXRlIF9pbml0aWFsQmFsYW5jZTogc3RyaW5nO1xuICBwcml2YXRlIF9pbml0aWFsRGVsZWdhdGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfd2FsbGV0T3duZXJQdWJsaWNLZXlzOiBzdHJpbmdbXTtcblxuICAvLyBTZW5kIHRyYW5zYWN0aW9uIHBhcmFtZXRlcnNcbiAgcHJpdmF0ZSBfbXVsdGlzaWdTaWduZXJLZXlQYWlyczogSW5kZXhlZEtleVBhaXJbXTtcbiAgcHJpdmF0ZSBfZGF0YVRvU2lnbk92ZXJyaWRlOiBEYXRhVG9TaWduT3ZlcnJpZGVbXTtcbiAgcHJpdmF0ZSBfdHJhbnNmZXJzOiBUcmFuc2ZlckJ1aWxkZXJbXTtcblxuICAvLyBBZGRyZXNzIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnNcbiAgcHJpdmF0ZSBfZm9yd2FyZGVyRGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvaW5Db25maWd9IF9jb2luQ29uZmlnIC0gY29pbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgIHRoaXMuX2NvdW50ZXIgPSBuZXcgQmlnTnVtYmVyKDApO1xuICAgIHRoaXMuX3RyYW5zZmVycyA9IFtdO1xuICAgIHRoaXMuX3dhbGxldE93bmVyUHVibGljS2V5cyA9IFtdO1xuICAgIHRoaXMuX211bHRpc2lnU2lnbmVyS2V5UGFpcnMgPSBbXTtcbiAgICB0aGlzLl9kYXRhVG9TaWduT3ZlcnJpZGUgPSBbXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBCYXNlIEJ1aWxkZXJcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICAvLyBEZWNvZGluZyB0aGUgdHJhbnNhY3Rpb24gaXMgYW4gYXN5bmMgb3BlcmF0aW9uLCBzbyBzYXZlIGl0IGFuZCBsZWF2ZSB0aGUgZGVjb2RpbmcgZm9yIHRoZVxuICAgIC8vIGJ1aWxkIHN0ZXBcbiAgICB0aGlzLl9zZXJpYWxpemVkVHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qgc2lnbmVyID0gbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgLy8gQ3VycmVudGx5IHB1YmxpYyBrZXkgcmV2ZWxhdGlvbiBpcyB0aGUgb25seSB0eXBlIG9mIGFjY291bnQgdXBkYXRlIHR4IHN1cHBvcnRlZCBpbiBUZXpvc1xuICAgIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQWNjb3VudFVwZGF0ZSAmJiAhdGhpcy5fcHVibGljS2V5VG9SZXZlYWwpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0Nhbm5vdCBzaWduIGEgcHVibGljIGtleSByZXZlbGF0aW9uIHRyYW5zYWN0aW9uIHdpdGhvdXQgcHVibGljIGtleScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb24gJiYgdGhpcy5fd2FsbGV0T3duZXJQdWJsaWNLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignQ2Fubm90IHNpZ24gYW4gd2FsbGV0IGluaXRpYWxpemF0aW9uIHRyYW5zYWN0aW9uIHdpdGhvdXQgb3duZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQgJiZcbiAgICAgIHRoaXMuX3RyYW5zZmVycy5sZW5ndGggPT09IDAgJiZcbiAgICAgIHRoaXMuX3NlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdDYW5ub3Qgc2lnbiBhbiBlbXB0eSBzZW5kIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kICYmICghdGhpcy5fc291cmNlQWRkcmVzcyB8fCB0aGlzLl9zb3VyY2VBZGRyZXNzICE9PSBzaWduZXIuZ2V0QWRkcmVzcygpKSkge1xuICAgICAgLy8gSWYgdGhlIHNpZ25lciBpcyBub3QgdGhlIHNvdXJjZSBhbmQgaXQgaXMgYSBzZW5kIHRyYW5zYWN0aW9uLCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIG11bHRpc2lnIHdhbGxldCBzaWduZXJzXG5cbiAgICAgIC8vIFRPRE86IHN1cHBvcnQgYSBjb21iaW5hdGlvbiBvZiBrZXlzIHdpdGggYW5kIHdpdGhvdXQgY3VzdG9tIGluZGV4XG4gICAgICBpZiAoa2V5LmluZGV4ICYmIGtleS5pbmRleCA+PSBERUZBVUxUX00pIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICAnQ3VzdG9tIGluZGV4IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIHdhbGxldCB0b3RhbCBudW1iZXIgb2Ygc2lnbmVycyAob3duZXJzKSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIE1ha2Ugc3VyZSBlaXRoZXIgYWxsIGtleXMgcGFzc2VkIGhhdmUgYSBjdXN0b20gaW5kZXggb3Igbm9uZSBvZiB0aGVtIGhhdmVcbiAgICAgIGNvbnN0IHNob3VsZEhhdmVDdXN0b21JbmRleCA9IGtleS5oYXNPd25Qcm9wZXJ0eSgnaW5kZXgnKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbXVsdGlzaWdTaWduZXJLZXlQYWlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc2hvdWxkSGF2ZUN1c3RvbUluZGV4ICE9PSAodGhpcy5fbXVsdGlzaWdTaWduZXJLZXlQYWlyc1tpXS5pbmRleCAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0N1c3RvbSBpbmRleCBoYXMgdG8gYmUgc2V0IGZvciBhbGwgbXVsdGlzaWcgY29udHJhY3Qgc2lnbmluZyBrZXlzIG9yIG5vbmUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgbXVsdGlzaWdTaWduZXJLZXkgPSBzaG91bGRIYXZlQ3VzdG9tSW5kZXggPyB7IGtleTogc2lnbmVyLCBpbmRleDoga2V5LmluZGV4IH0gOiB7IGtleTogc2lnbmVyIH07XG4gICAgICB0aGlzLl9tdWx0aXNpZ1NpZ25lcktleVBhaXJzLnB1c2gobXVsdGlzaWdTaWduZXJLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fc291cmNlS2V5UGFpcikge1xuICAgICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdDYW5ub3Qgc2lnbiBtdWx0aXBsZSB0aW1lcyBhIG5vbiBzZW5kLXR5cGUgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NvdXJjZUtleVBhaXIgPSBzaWduZXI7XG4gICAgfVxuXG4gICAgLy8gU2lnbmluZyB0aGUgdHJhbnNhY3Rpb24gaXMgYW4gYXN5bmMgb3BlcmF0aW9uLCBzbyBzYXZlIHRoZSBzb3VyY2UgYW5kIGxlYXZlIHRoZSBhY3R1YWxcbiAgICAvLyBzaWduaW5nIGZvciB0aGUgYnVpbGQgc3RlcFxuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICAvLyBJZiB0aGUgZnJvbSgpIG1ldGhvZCB3YXMgY2FsbGVkLCB1c2UgdGhlIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24gYXMgYSBiYXNlXG4gICAgaWYgKHRoaXMuX3NlcmlhbGl6ZWRUcmFuc2FjdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy50cmFuc2FjdGlvbi5pbml0RnJvbVNlcmlhbGl6ZWRUcmFuc2FjdGlvbih0aGlzLl9zZXJpYWxpemVkVHJhbnNhY3Rpb24pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9kYXRhVG9TaWduT3ZlcnJpZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlcyA9IGF3YWl0IHRoaXMuZ2V0U2lnbmF0dXJlcyh0aGlzLl9kYXRhVG9TaWduT3ZlcnJpZGVbaV0uZGF0YVRvU2lnbik7XG4gICAgICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb24uYWRkVHJhbnNmZXJTaWduYXR1cmUoc2lnbmF0dXJlcywgdGhpcy5fZGF0YVRvU2lnbk92ZXJyaWRlW2ldLmluZGV4IHx8IGkpO1xuICAgICAgfVxuICAgICAgLy8gVE9ETzogbWFrZSBjaGFuZ2VzIHRvIHRoZSB0cmFuc2FjdGlvbiBpZiBhbnkgZXh0cmEgcGFyYW1ldGVyIGhhcyBiZWVuIHNldCB0aGVuIHNpZ24gaXRcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvbnRlbnRzOiBPcGVyYXRpb25Db250ZW50c1tdID0gW107XG4gICAgICBzd2l0Y2ggKHRoaXMuX3R5cGUpIHtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWNjb3VudFVwZGF0ZTpcbiAgICAgICAgICBpZiAodGhpcy5fcHVibGljS2V5VG9SZXZlYWwpIHtcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2godGhpcy5idWlsZFB1YmxpY0tleVJldmVsYXRpb25PcGVyYXRpb24oKSBhcyBPcGVyYXRpb25Db250ZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjpcbiAgICAgICAgICBpZiAodGhpcy5fcHVibGljS2V5VG9SZXZlYWwpIHtcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2godGhpcy5idWlsZFB1YmxpY0tleVJldmVsYXRpb25PcGVyYXRpb24oKSBhcyBPcGVyYXRpb25Db250ZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRlbnRzLnB1c2godGhpcy5idWlsZFdhbGxldEluaXRpYWxpemF0aW9uT3BlcmF0aW9ucygpIGFzIE9wZXJhdGlvbkNvbnRlbnRzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgICBpZiAodGhpcy5fcHVibGljS2V5VG9SZXZlYWwpIHtcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2godGhpcy5idWlsZFB1YmxpY0tleVJldmVsYXRpb25PcGVyYXRpb24oKSBhcyBPcGVyYXRpb25Db250ZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRlbnRzID0gY29udGVudHMuY29uY2F0KChhd2FpdCB0aGlzLmJ1aWxkU2VuZFRyYW5zYWN0aW9uQ29udGVudCgpKSBhcyBPcGVyYXRpb25Db250ZW50c1tdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uOlxuICAgICAgICAgIGlmICh0aGlzLl9wdWJsaWNLZXlUb1JldmVhbCkge1xuICAgICAgICAgICAgY29udGVudHMucHVzaCh0aGlzLmJ1aWxkUHVibGljS2V5UmV2ZWxhdGlvbk9wZXJhdGlvbigpIGFzIE9wZXJhdGlvbkNvbnRlbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGVudHMucHVzaCh0aGlzLmJ1aWxkRm9yd2FyZGVyRGVwbG95bWVudENvbnRlbnQoKSBhcyBPcGVyYXRpb25Db250ZW50cyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNpbmdsZVNpZ1NlbmQ6XG4gICAgICAgICAgLy8gTm8gc3VwcG9ydCBmb3IgcmV2ZWxhdGlvbiB0eG5zIGFzIHByaW1hcnkgdXNlIGNhc2UgaXMgdG8gc2VuZCBmcm9tIGZlZSBhZGRyZXNzXG4gICAgICAgICAgY29udGVudHMgPSBjb250ZW50cy5jb25jYXQoKGF3YWl0IHRoaXMuYnVpbGRTZW5kVHJhbnNhY3Rpb25Db250ZW50KCkpIGFzIE9wZXJhdGlvbkNvbnRlbnRzW10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1Vuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0ge1xuICAgICAgICBicmFuY2g6IHRoaXMuX2Jsb2NrSGVhZGVyLFxuICAgICAgICBjb250ZW50cyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICAvLyBCdWlsZCBhbmQgc2lnbiBhIG5ldyB0cmFuc2FjdGlvbiBiYXNlZCBvbiB0aGUgbGF0ZXN0IGNoYW5nZXNcbiAgICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb24uaW5pdEZyb21QYXJzZWRUcmFuc2FjdGlvbihwYXJzZWRUcmFuc2FjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NvdXJjZUtleVBhaXIgJiYgdGhpcy5fc291cmNlS2V5UGFpci5nZXRLZXlzKCkucHJ2KSB7XG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB0aGVyZSBhcmUgbW9yZSBzaWduZXJzIHRoYW4gbmVlZGVkIGZvciBhIHNpbmdsZXNpZyBvciBtdWx0aXNpZyB0cmFuc2FjdGlvblxuICAgICAgYXdhaXQgdGhpcy50cmFuc2FjdGlvbi5zaWduKHRoaXMuX3NvdXJjZUtleVBhaXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQ29tbW9uIGJ1aWxkZXIgbWV0aG9kc1xuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiBicmFuY2ggaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBibG9ja0lkIEEgYmxvY2sgaGFzaCB0byB1c2UgYXMgYnJhbmNoIHJlZmVyZW5jZVxuICAgKi9cbiAgYnJhbmNoKGJsb2NrSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghaXNWYWxpZEJsb2NrSGFzaChibG9ja0lkKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBibG9jayBoYXNoICcgKyBibG9ja0lkKTtcbiAgICB9XG4gICAgdGhpcy5fYmxvY2tIZWFkZXIgPSBibG9ja0lkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRyYW5zYWN0aW9uIGJlaW5nIGJ1aWx0LlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHlwZSAtIHR5cGUgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqL1xuICB0eXBlKHR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIGlmICh0eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZCAmJiB0aGlzLl93YWxsZXRPd25lclB1YmxpY0tleXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2Fubm90IGJlIGxhYmVsZWQgYXMgU2VuZCB3aGVuIG93bmVycyBoYXZlIGFscmVhZHkgYmVlbiBzZXQnKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kICYmIHRoaXMuX3RyYW5zZmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjb250YWlucyB0cmFuc2ZlcnMgYW5kIGNhbiBvbmx5IGJlIGxhYmVsZWQgYXMgU2VuZCcpO1xuICAgIH1cbiAgICB0aGlzLl90eXBlID0gdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIGZlZXMuIExvdyBmZWVzIG1heSBnZXQgYSB0cmFuc2FjdGlvbiByZWplY3RlZCBvciBuZXZlciBwaWNrZWQgdXAgYnkgYmFrZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0ZlZX0gZmVlIEJha2VyIGZlZXMuIE1heSBhbHNvIGluY2x1ZGUgdGhlIG1heGltdW0gZ2FzIGFuZCBzdG9yYWdlIGZlZXMgdG8gcGF5XG4gICAqL1xuICBmZWUoZmVlOiBGZWUpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihmZWUuZmVlKSk7XG4gICAgaWYgKGZlZS5nYXNMaW1pdCkge1xuICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoZmVlLmdhc0xpbWl0KSk7XG4gICAgfVxuICAgIGlmIChmZWUuc3RvcmFnZUxpbWl0KSB7XG4gICAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihmZWUuc3RvcmFnZUxpbWl0KSk7XG4gICAgfVxuICAgIHRoaXMuX2ZlZSA9IGZlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIGluaXRpYXRvci4gVGhpcyBhY2NvdW50IHdpbGwgcGF5IGZvciB0aGUgdHJhbnNhY3Rpb24gZmVlcywgYnV0IGl0IHdpbGwgbm90XG4gICAqIGJlIGFkZGVkIGFzIGFuIG93bmVyIG9mIGEgd2FsbGV0IGluIGEgaW5pdCB0cmFuc2FjdGlvbiwgdW5sZXNzIG1hbnVhbGx5IHNldCBhcyBvbmUgb2YgdGhlXG4gICAqIG93bmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBBIFRlem9zIGFkZHJlc3NcbiAgICovXG4gIHNvdXJjZShzb3VyY2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogc291cmNlIH0pO1xuICAgIHRoaXMuX3NvdXJjZUFkZHJlc3MgPSBzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuIGFtb3VudCBvZiBtdXRleiB0byB0cmFuc2ZlciBpbiB0aGlzIHRyYW5zYWN0aW9uIHRoaXMgdHJhbnNhY3Rpb24uIFRoaXMgaXMgZGlmZmVyZW50IHRoYW5cbiAgICogdGhlIGFtb3VudCB0byB0cmFuc2ZlciBmcm9tIGEgbXVsdGlzaWcgd2FsbGV0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW1vdW50IEFtb3VudCBpbiBtdXRleiAoMS8xMDAwMDAwIFRlemllcylcbiAgICovXG4gIGluaXRpYWxCYWxhbmNlKGFtb3VudDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW5pdGlhbCBiYWxhbmNlIGNhbiBvbmx5IGJlIHNldCBmb3Igd2FsbGV0IGluaXRpYWxpemF0aW9uIHRyYW5zYWN0aW9ucycpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihhbW91bnQpKTtcbiAgICB0aGlzLl9pbml0aWFsQmFsYW5jZSA9IGFtb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIGNvdW50ZXIgdG8gcHJldmVudCBzdWJtaXR0aW5nIHJlcGVhdGVkIHRyYW5zYWN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvdW50ZXIgVGhlIGNvdW50ZXIgdG8gdXNlXG4gICAqL1xuICBjb3VudGVyKGNvdW50ZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2NvdW50ZXIgPSBuZXcgQmlnTnVtYmVyKGNvdW50ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiBhIGZvcndhcmRlciBjb250cmFjdFxuICAgKiBVc2VkIGluIGZvcndhcmRlciBjb250cmFjdCBkZXBsb3ltZW50IGFzIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0QWRkcmVzcyAtIGNvbnRyYWN0IGFkZHJlc3MgdG8gdXNlXG4gICAqL1xuICBmb3J3YXJkZXJEZXN0aW5hdGlvbihjb250cmFjdEFkZHJlc3M6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdGb3J3YXJkZXIgZGVzdGluYXRpb24gY2FuIG9ubHkgYmUgc2V0IGZvciBhZGRyZXNzIGluaXRpYWxpemF0aW9uIHRyYW5zYWN0aW9ucycpO1xuICAgIH1cbiAgICBpZiAoIWlzVmFsaWRPcmlnaW5hdGVkQWRkcmVzcyhjb250cmFjdEFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdGb3J3YXJkZXIgZGVzdGluYXRpb24gY2FuIG9ubHkgYmUgYW4gb3JpZ2luYXRlZCBhZGRyZXNzJyk7XG4gICAgfVxuICAgIHRoaXMuX2ZvcndhcmRlckRlc3RpbmF0aW9uID0gY29udHJhY3RBZGRyZXNzO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIFB1YmxpY0tleVJldmVsYXRpb24gYnVpbGRlciBtZXRob2RzXG4gIC8qKlxuICAgKiBUaGUgcHVibGljIGtleSB0byByZXZlYWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwdWJsaWNLZXkgQSBUZXpvcyBwdWJsaWMga2V5XG4gICAqL1xuICBwdWJsaWNLZXlUb1JldmVhbChwdWJsaWNLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wdWJsaWNLZXlUb1JldmVhbCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignUHVibGljIGtleSB0byByZXZlYWwgYWxyZWFkeSBzZXQ6ICcgKyB0aGlzLl9wdWJsaWNLZXlUb1JldmVhbCk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiBwdWJsaWNLZXkgfSk7XG4gICAgaWYgKGtleVBhaXIuZ2V0QWRkcmVzcygpICE9PSB0aGlzLl9zb3VyY2VBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdQdWJsaWMga2V5IGRvZXMgbm90IG1hdGNoIHRoZSBzb3VyY2UgYWRkcmVzczogJyArIHRoaXMuX3NvdXJjZUFkZHJlc3MpO1xuICAgIH1cbiAgICB0aGlzLl9wdWJsaWNLZXlUb1JldmVhbCA9IGtleVBhaXIuZ2V0S2V5cygpLnB1YjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIHJldmVhbCBvcGVyYXRpb24gZm9yIHRoZSBzb3VyY2UgYWNjb3VudCB1c2luZyB0aGUgc2V0IGZlZSBwYXJhbWV0ZXJzLFxuICAgKiBvciBkZWZhdWx0IGZlZXMgaWYgbm90IHNwZWNpZmllZC5cbiAgICpcbiAgICogQHJldHVybnMge1JldmVhbE9wfSBBIFRlem9zIHJldmVhbCBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYnVpbGRQdWJsaWNLZXlSZXZlbGF0aW9uT3BlcmF0aW9uKCk6IFJldmVhbE9wIHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSByZXZlYWxPcGVyYXRpb24oXG4gICAgICB0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCksXG4gICAgICB0aGlzLl9zb3VyY2VBZGRyZXNzLFxuICAgICAgdGhpcy5fcHVibGljS2V5VG9SZXZlYWwsXG4gICAgICB0aGlzLl9mZWU/LmZlZSxcbiAgICAgIHRoaXMuX2ZlZT8uZ2FzTGltaXQsXG4gICAgICB0aGlzLl9mZWU/LnN0b3JhZ2VMaW1pdFxuICAgICk7XG4gICAgdGhpcy5fY291bnRlciA9IHRoaXMuX2NvdW50ZXIucGx1cygxKTtcbiAgICByZXR1cm4gb3BlcmF0aW9uO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBXYWxsZXRJbml0aWFsaXphdGlvbiBidWlsZGVyIG1ldGhvZHNcbiAgLyoqXG4gICAqIFNldCBvbmUgb2YgdGhlIG93bmVycyBvZiB0aGUgbXVsdGlzaWcgd2FsbGV0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHVibGljS2V5IEEgVGV6b3MgcHVibGljIGtleVxuICAgKi9cbiAgb3duZXIocHVibGljS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNdWx0aXNpZyB3YWxsZXQgb3duZXIgY2FuIG9ubHkgYmUgc2V0IGZvciBpbml0aWFsaXphdGlvbiB0cmFuc2FjdGlvbnMnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3dhbGxldE93bmVyUHVibGljS2V5cy5sZW5ndGggPj0gREVGQVVMVF9NKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBIG1heGltdW0gb2YgJyArIERFRkFVTFRfTSArICcgb3duZXJzIGNhbiBiZSBzZXQgZm9yIGEgbXVsdGlzaWcgd2FsbGV0Jyk7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHB1YmxpYyBrZXk6ICcgKyBwdWJsaWNLZXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fd2FsbGV0T3duZXJQdWJsaWNLZXlzLmluY2x1ZGVzKHB1YmxpY0tleSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1JlcGVhdGVkIG93bmVyIHB1YmxpYyBrZXk6ICcgKyBwdWJsaWNLZXkpO1xuICAgIH1cbiAgICB0aGlzLl93YWxsZXRPd25lclB1YmxpY0tleXMucHVzaChwdWJsaWNLZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbiBpbml0aWFsIGRlbGVnYXRlIHRvIGluaXRpYWxpemUgdGhpcyB3YWxsZXQgdG8uIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIGRlbGVnYXRpb24gdG9cbiAgICogc2V0IHdoaWxlIGRvaW5nIGEgc2VwYXJhdGUgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlbGVnYXRlIFRoZSBhZGRyZXNzIHRvIGRlbGVnYXRlIHRoZSBmdW5kcyB0b1xuICAgKi9cbiAgaW5pdGlhbERlbGVnYXRlKGRlbGVnYXRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbml0aWFsIGRlbGVnYXRpb24gY2FuIG9ubHkgYmUgc2V0IGZvciB3YWxsZXQgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb25zJyk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogZGVsZWdhdGUgfSk7XG4gICAgdGhpcy5faW5pdGlhbERlbGVnYXRlID0gZGVsZWdhdGU7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW4gb3JpZ2luYXRpb24gb3BlcmF0aW9uIGZvciBhIGdlbmVyaWMgbXVsdGlzaWcgY29udHJhY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPcGVyYXRpb259IEEgVGV6b3Mgb3JpZ2luYXRpb24gb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkV2FsbGV0SW5pdGlhbGl6YXRpb25PcGVyYXRpb25zKCk6IE9yaWdpbmF0aW9uT3Age1xuICAgIGNvbnN0IG9yaWdpbmF0aW9uT3AgPSBnZW5lcmljTXVsdGlzaWdPcmlnaW5hdGlvbk9wZXJhdGlvbihcbiAgICAgIHRoaXMuX2NvdW50ZXIudG9TdHJpbmcoKSxcbiAgICAgIHRoaXMuX3NvdXJjZUFkZHJlc3MsXG4gICAgICB0aGlzLl9mZWUuZmVlLFxuICAgICAgdGhpcy5fZmVlLmdhc0xpbWl0IHx8IERFRkFVTFRfR0FTX0xJTUlULk9SSUdJTkFUSU9OLnRvU3RyaW5nKCksXG4gICAgICB0aGlzLl9mZWUuc3RvcmFnZUxpbWl0IHx8IERFRkFVTFRfU1RPUkFHRV9MSU1JVC5PUklHSU5BVElPTi50b1N0cmluZygpLFxuICAgICAgdGhpcy5faW5pdGlhbEJhbGFuY2UgfHwgJzAnLFxuICAgICAgdGhpcy5fd2FsbGV0T3duZXJQdWJsaWNLZXlzLFxuICAgICAgdGhpcy5faW5pdGlhbERlbGVnYXRlXG4gICAgKTtcbiAgICB0aGlzLl9jb3VudGVyID0gdGhpcy5fY291bnRlci5wbHVzKDEpO1xuICAgIHJldHVybiBvcmlnaW5hdGlvbk9wO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBTZW5kIGJ1aWxkZXIgbWV0aG9kc1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBUcmFuc2ZlckJ1aWxkZXIgdG8gZm9yIGEgc2luZ2xlc2lnIG9yIG11bHRpc2lnIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW1vdW50IEFtb3VudCBpbiBtdXRleiB0byBiZSB0cmFuc2ZlcnJlZFxuICAgKiBAcmV0dXJucyB7VHJhbnNmZXJCdWlsZGVyfSBBIHRyYW5zZmVyIGJ1aWxkZXJcbiAgICovXG4gIHRyYW5zZmVyKGFtb3VudDogc3RyaW5nKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQgJiYgdGhpcy5fdHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlNpbmdsZVNpZ1NlbmQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zZmVycyBjYW4gb25seSBiZSBzZXQgZm9yIHNlbmQgdHJhbnNhY3Rpb25zJyk7XG4gICAgfVxuICAgIGxldCB0cmFuc2ZlckJ1aWxkZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgLy8gSWYgc291cmNlIHdhcyBzZXQsIHVzZSBpdCBhcyBkZWZhdWx0IGZvclxuICAgIGlmICh0aGlzLl9zb3VyY2VBZGRyZXNzKSB7XG4gICAgICB0cmFuc2ZlckJ1aWxkZXIgPSB0cmFuc2ZlckJ1aWxkZXIuZnJvbSh0aGlzLl9zb3VyY2VBZGRyZXNzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZlZSkge1xuICAgICAgdHJhbnNmZXJCdWlsZGVyID0gdHJhbnNmZXJCdWlsZGVyLmZlZSh0aGlzLl9mZWUuZmVlKTtcbiAgICAgIHRyYW5zZmVyQnVpbGRlciA9IHRoaXMuX2ZlZS5nYXNMaW1pdCA/IHRyYW5zZmVyQnVpbGRlci5nYXNMaW1pdCh0aGlzLl9mZWUuZ2FzTGltaXQpIDogdHJhbnNmZXJCdWlsZGVyO1xuICAgICAgdHJhbnNmZXJCdWlsZGVyID0gdGhpcy5fZmVlLnN0b3JhZ2VMaW1pdCA/IHRyYW5zZmVyQnVpbGRlci5zdG9yYWdlTGltaXQodGhpcy5fZmVlLnN0b3JhZ2VMaW1pdCkgOiB0cmFuc2ZlckJ1aWxkZXI7XG4gICAgfVxuICAgIHRoaXMuX3RyYW5zZmVycy5wdXNoKHRyYW5zZmVyQnVpbGRlcik7XG4gICAgcmV0dXJuIHRyYW5zZmVyQnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHNpZ25hdHVyZXMgZm9yIHRoZSBtdWx0aXNpZyB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhY2tlZERhdGEgVGhlIHN0cmluZyBpbiBoZXhhZGVjaW1hbCB0byBzaWduXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gTGlzdCBvZiBzaWduYXR1cmVzIGZvciBwYWNrZWREYXRhXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFNpZ25hdHVyZXMocGFja2VkRGF0YTogc3RyaW5nKTogUHJvbWlzZTxJbmRleGVkU2lnbmF0dXJlW10+IHtcbiAgICBjb25zdCBzaWduYXR1cmVzOiBJbmRleGVkU2lnbmF0dXJlW10gPSBbXTtcbiAgICAvLyBHZW5lcmF0ZSB0aGUgbXVsdGlzaWcgY29udHJhY3Qgc2lnbmF0dXJlc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbXVsdGlzaWdTaWduZXJLZXlQYWlycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgc2lnbih0aGlzLl9tdWx0aXNpZ1NpZ25lcktleVBhaXJzW2ldLmtleSwgcGFja2VkRGF0YSwgbmV3IFVpbnQ4QXJyYXkoMCkpO1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9tdWx0aXNpZ1NpZ25lcktleVBhaXJzW2ldLmluZGV4O1xuICAgICAgc2lnbmF0dXJlcy5wdXNoKGluZGV4ID8geyBzaWduYXR1cmU6IHNpZ25hdHVyZS5zaWcsIGluZGV4IH0gOiB7IHNpZ25hdHVyZTogc2lnbmF0dXJlLnNpZyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25hdHVyZXM7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIGRhdGEgdG8gc2lnbiBmb3IgYSBzcGVjaWZpYyB0cmFuc2Zlci4gVXNlZCBmb3Igb2ZmbGluZSBzaWduaW5nIHRvIHBhc3MgdGhlXG4gICAqIHJlc3BlY3RpdmUgZGF0YVRvU2lnbiBmb3IgdHJhbnNmZXIgYXQgYSBwYXJ0aWN1bGFyIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge0RhdGFUb1NpZ25PdmVycmlkZX0gZGF0YSAtIGRhdGEgdG8gb3ZlcnJpZGVcbiAgICovXG4gIG92ZXJyaWRlRGF0YVRvU2lnbihkYXRhOiBEYXRhVG9TaWduT3ZlcnJpZGUpOiB2b2lkIHtcbiAgICBpZiAoIWRhdGEuaW5kZXgpIHtcbiAgICAgIGRhdGEuaW5kZXggPSB0aGlzLl9kYXRhVG9TaWduT3ZlcnJpZGUubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhVG9TaWduT3ZlcnJpZGUucHVzaChkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIHRyYW5zYWN0aW9uIG9wZXJhdGlvbiBmb3IgYSBnZW5lcmljIG11bHRpc2lnIGNvbnRyYWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUcmFuc2FjdGlvbk9wW10+fSBBIFRlem9zIHRyYW5zYWN0aW9uIG9wZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBidWlsZFNlbmRUcmFuc2FjdGlvbkNvbnRlbnQoKTogUHJvbWlzZTxUcmFuc2FjdGlvbk9wW10+IHtcbiAgICBjb25zdCBjb250ZW50czogVHJhbnNhY3Rpb25PcFtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90cmFuc2ZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRyYW5zZmVyID0gdGhpcy5fdHJhbnNmZXJzW2ldLmJ1aWxkKCk7XG4gICAgICBsZXQgdHJhbnNhY3Rpb25PcDtcbiAgICAgIGlmIChpc1ZhbGlkT3JpZ2luYXRlZEFkZHJlc3ModHJhbnNmZXIuZnJvbSkpIHtcbiAgICAgICAgLy8gT2ZmbGluZSB0cmFuc2FjdGlvbnMgbWF5IG5vdCBoYXZlIHRoZSBkYXRhIHRvIHNpZ25cbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlcyA9IHRyYW5zZmVyLmRhdGFUb1NpZ24gPyBhd2FpdCB0aGlzLmdldFNpZ25hdHVyZXModHJhbnNmZXIuZGF0YVRvU2lnbikgOiBbXTtcbiAgICAgICAgdHJhbnNhY3Rpb25PcCA9IG11bHRpc2lnVHJhbnNhY3Rpb25PcGVyYXRpb24oXG4gICAgICAgICAgdGhpcy5fY291bnRlci50b1N0cmluZygpLFxuICAgICAgICAgIHRoaXMuX3NvdXJjZUFkZHJlc3MsXG4gICAgICAgICAgdHJhbnNmZXIuYW1vdW50LFxuICAgICAgICAgIHRyYW5zZmVyLmZyb20sXG4gICAgICAgICAgdHJhbnNmZXIuY291bnRlciB8fCAnMCcsXG4gICAgICAgICAgdHJhbnNmZXIudG8sXG4gICAgICAgICAgc2lnbmF0dXJlcyxcbiAgICAgICAgICB0cmFuc2Zlci5mZWUuZmVlLFxuICAgICAgICAgIHRyYW5zZmVyLmZlZS5nYXNMaW1pdCxcbiAgICAgICAgICB0cmFuc2Zlci5mZWUuc3RvcmFnZUxpbWl0XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2FjdGlvbk9wID0gc2luZ2xlc2lnVHJhbnNhY3Rpb25PcGVyYXRpb24oXG4gICAgICAgICAgdGhpcy5fY291bnRlci50b1N0cmluZygpLFxuICAgICAgICAgIHRoaXMuX3NvdXJjZUFkZHJlc3MsXG4gICAgICAgICAgdHJhbnNmZXIuYW1vdW50LFxuICAgICAgICAgIHRyYW5zZmVyLnRvLFxuICAgICAgICAgIHRyYW5zZmVyLmZlZS5mZWUsXG4gICAgICAgICAgdHJhbnNmZXIuZmVlLmdhc0xpbWl0LFxuICAgICAgICAgIHRyYW5zZmVyLmZlZS5zdG9yYWdlTGltaXRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnRzLnB1c2godHJhbnNhY3Rpb25PcCk7XG4gICAgICB0aGlzLl9jb3VudGVyID0gdGhpcy5fY291bnRlci5wbHVzKDEpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudHM7XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEZvcndhcmRlckFkZHJlc3NEZXBsb3ltZW50XG4gIC8qKlxuICAgKiBCdWlsZCBhIHRyYW5zYWN0aW9uIG9wZXJhdGlvbiBmb3IgYSBmb3J3YXJkZXIgY29udHJhY3RcbiAgICpcbiAgICogQHJldHVybnMge09yaWdpbmF0aW9uT3B9IGEgVGV6b3MgdHJhbnNhY3Rpb24gb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRm9yd2FyZGVyRGVwbG95bWVudENvbnRlbnQoKTogT3JpZ2luYXRpb25PcCB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gZm9yd2FyZGVyT3JpZ2luYXRpb25PcGVyYXRpb24oXG4gICAgICB0aGlzLl9mb3J3YXJkZXJEZXN0aW5hdGlvbixcbiAgICAgIHRoaXMuX2NvdW50ZXIudG9TdHJpbmcoKSxcbiAgICAgIHRoaXMuX3NvdXJjZUFkZHJlc3MsXG4gICAgICB0aGlzLl9mZWUuZmVlLFxuICAgICAgdGhpcy5fZmVlLmdhc0xpbWl0IHx8IERFRkFVTFRfR0FTX0xJTUlULk9SSUdJTkFUSU9OLnRvU3RyaW5nKCksXG4gICAgICB0aGlzLl9mZWUuc3RvcmFnZUxpbWl0IHx8IERFRkFVTFRfU1RPUkFHRV9MSU1JVC5PUklHSU5BVElPTi50b1N0cmluZygpLFxuICAgICAgdGhpcy5faW5pdGlhbEJhbGFuY2UgfHwgJzAnXG4gICAgKTtcbiAgICB0aGlzLl9jb3VudGVyID0gdGhpcy5fY291bnRlci5wbHVzKDEpO1xuICAgIHJldHVybiBvcGVyYXRpb247XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgYmVsb3cgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgdGhlIGFtb3VudCBpcyBub3QgYmlnZ2VyIHRoYW4gdGhlIG1heCBhbW91bnQgaW4gVGV6b3NcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xuICAgIGlmICghaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhZGRyZXNzICcgKyBhZGRyZXNzLmFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgaWYgKCFrZXlQYWlyLmdldEtleXMoKS5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IGFueSk6IHZvaWQge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIHRoZSB0cmFuc2FjdGlvbiBpcyBlaXRoZXIgYSBKU09OIG9yIGEgaGV4XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICAvLyBUT0RPOiB2YWxpZGF0ZSBhbGwgcmVxdWlyZWQgZmllbGRzIGFyZSBwcmVzZW50IGluIHRoZSBidWlsZGVyIGJlZm9yZSBidWlsZEltcGxlbWVudGF0aW9uXG4gICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BY2NvdW50VXBkYXRlOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNpbmdsZVNpZ1NlbmQ6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb2luQ29uZmlnLmZ1bGxOYW1lO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gIH1cbn1cbiJdfQ==
|
|
@@ -61,4 +61,4 @@ class TransferBuilder {
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
exports.TransferBuilder = TransferBuilder;
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQTZEO0FBRzdELDhCQUE4QjtBQUM5QixzQ0FBc0M7QUFDdEMsTUFBYSxlQUFlO0lBVzFCLE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFZO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWU7UUFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsRUFBRSxDQUFDLE9BQWU7UUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVc7UUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNoQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxRQUFRLENBQUMsUUFBZ0I7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWSxDQUFDLFlBQW9CO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUFrQjtRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBZTtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRSxNQUFNLElBQUksZ0NBQXFCLENBQzdCLHlHQUF5RyxDQUMxRyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUN2QixFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDbkIsR0FBRyxFQUFFO2dCQUNILEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZCxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3hCLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTthQUNqQztZQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDdkIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTVFRCwwQ0E0RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2ZlckRhdGEgfSBmcm9tICcuL2lmYWNlJztcblxuLyoqIFRlem9zIHRyYW5zZmVyIGJ1aWxkZXIuICovXG4vLyBUT0RPOiBpbXBsZW1lbnQgQmFzZVRyYW5zZmVyQnVpbGRlclxuZXhwb3J0IGNsYXNzIFRyYW5zZmVyQnVpbGRlciB7XG4gIHByaXZhdGUgX2Ftb3VudDogc3RyaW5nO1xuICBwcml2YXRlIF9jb2luOiBzdHJpbmc7XG4gIHByaXZhdGUgX3RvQWRkcmVzczogc3RyaW5nO1xuICBwcml2YXRlIF9mcm9tQWRkcmVzczogc3RyaW5nO1xuICBwcml2YXRlIF9mZWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZ2FzTGltaXQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfc3RvcmFnZUxpbWl0OiBzdHJpbmc7XG4gIHByaXZhdGUgX2RhdGFUb1NpZ246IHN0cmluZztcbiAgcHJpdmF0ZSBfY291bnRlcjogc3RyaW5nO1xuXG4gIGFtb3VudChhbW91bnQ6IHN0cmluZyk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fYW1vdW50ID0gYW1vdW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29pbihjb2luOiBzdHJpbmcpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHRoaXMuX2NvaW4gPSBjb2luO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnJvbShhZGRyZXNzOiBzdHJpbmcpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHRoaXMuX2Zyb21BZGRyZXNzID0gYWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRvKGFkZHJlc3M6IHN0cmluZyk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fdG9BZGRyZXNzID0gYWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZlZShmZWU6IHN0cmluZyk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fZmVlID0gZmVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2FzTGltaXQoZ2FzTGltaXQ6IHN0cmluZyk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fZ2FzTGltaXQgPSBnYXNMaW1pdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0b3JhZ2VMaW1pdChzdG9yYWdlTGltaXQ6IHN0cmluZyk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fc3RvcmFnZUxpbWl0ID0gc3RvcmFnZUxpbWl0O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZGF0YVRvU2lnbihkYXRhVG9TaWduOiBzdHJpbmcpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHRoaXMuX2RhdGFUb1NpZ24gPSBkYXRhVG9TaWduO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY291bnRlcihjb3VudGVyOiBzdHJpbmcpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHRoaXMuX2NvdW50ZXIgPSBjb3VudGVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYnVpbGQoKTogVHJhbnNmZXJEYXRhIHtcbiAgICBpZiAoIXRoaXMuX2Ftb3VudCB8fCAhdGhpcy5fZnJvbUFkZHJlc3MgfHwgIXRoaXMuX3RvQWRkcmVzcyB8fCAhdGhpcy5fZmVlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAnTWlzc2luZyB0cmFuc2ZlciBtYW5kYXRvcnkgZmllbGRzLiBBbW91bnQsIGZyb20gYWRkcmVzcywgZGVzdGluYXRpb24gKHRvKSBhZGRyZXNzIGFuZCBmZWUgYXJlIG1hbmRhdG9yeSdcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhbW91bnQ6IHRoaXMuX2Ftb3VudCxcbiAgICAgIGNvaW46IHRoaXMuX2NvaW4sXG4gICAgICBmcm9tOiB0aGlzLl9mcm9tQWRkcmVzcyxcbiAgICAgIHRvOiB0aGlzLl90b0FkZHJlc3MsXG4gICAgICBmZWU6IHtcbiAgICAgICAgZmVlOiB0aGlzLl9mZWUsXG4gICAgICAgIGdhc0xpbWl0OiB0aGlzLl9nYXNMaW1pdCxcbiAgICAgICAgc3RvcmFnZUxpbWl0OiB0aGlzLl9zdG9yYWdlTGltaXQsXG4gICAgICB9LFxuICAgICAgZGF0YVRvU2lnbjogdGhpcy5fZGF0YVRvU2lnbixcbiAgICAgIGNvdW50ZXI6IHRoaXMuX2NvdW50ZXIsXG4gICAgfTtcbiAgfVxufVxuIl19
|
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { HashType, SignResponse } from './iface';
|
|
3
2
|
import { KeyPair } from './keyPair';
|
|
4
|
-
export declare const DEFAULT_WATERMARK: Uint8Array
|
|
3
|
+
export declare const DEFAULT_WATERMARK: Uint8Array<ArrayBuffer>;
|
|
5
4
|
/**
|
|
6
5
|
* Encode the payload to base58 with a specific Tezos prefix.
|
|
7
6
|
*
|
|
@@ -144,103 +143,103 @@ export declare function decodeKey(hash: string, hashType: HashType): Buffer;
|
|
|
144
143
|
export declare function decodeSignature(signature: string, hashType: HashType): Buffer;
|
|
145
144
|
export declare const hashTypes: {
|
|
146
145
|
tz1: {
|
|
147
|
-
prefix: Buffer
|
|
146
|
+
prefix: Buffer<ArrayBuffer>;
|
|
148
147
|
byteLength: number;
|
|
149
148
|
};
|
|
150
149
|
tz2: {
|
|
151
|
-
prefix: Buffer
|
|
150
|
+
prefix: Buffer<ArrayBuffer>;
|
|
152
151
|
byteLength: number;
|
|
153
152
|
};
|
|
154
153
|
tz3: {
|
|
155
|
-
prefix: Buffer
|
|
154
|
+
prefix: Buffer<ArrayBuffer>;
|
|
156
155
|
byteLength: number;
|
|
157
156
|
};
|
|
158
157
|
KT: {
|
|
159
|
-
prefix: Buffer
|
|
158
|
+
prefix: Buffer<ArrayBuffer>;
|
|
160
159
|
byteLength: number;
|
|
161
160
|
};
|
|
162
161
|
edpk: {
|
|
163
|
-
prefix: Buffer
|
|
162
|
+
prefix: Buffer<ArrayBuffer>;
|
|
164
163
|
byteLength: number;
|
|
165
164
|
};
|
|
166
165
|
edsk2: {
|
|
167
|
-
prefix: Buffer
|
|
166
|
+
prefix: Buffer<ArrayBuffer>;
|
|
168
167
|
byteLength: number;
|
|
169
168
|
};
|
|
170
169
|
spsk: {
|
|
171
|
-
prefix: Buffer
|
|
170
|
+
prefix: Buffer<ArrayBuffer>;
|
|
172
171
|
byteLength: number;
|
|
173
172
|
};
|
|
174
173
|
p2sk: {
|
|
175
|
-
prefix: Buffer
|
|
174
|
+
prefix: Buffer<ArrayBuffer>;
|
|
176
175
|
byteLength: number;
|
|
177
176
|
};
|
|
178
177
|
b: {
|
|
179
|
-
prefix: Buffer
|
|
178
|
+
prefix: Buffer<ArrayBuffer>;
|
|
180
179
|
byteLength: number;
|
|
181
180
|
};
|
|
182
181
|
o: {
|
|
183
|
-
prefix: Buffer
|
|
182
|
+
prefix: Buffer<ArrayBuffer>;
|
|
184
183
|
byteLength: number;
|
|
185
184
|
};
|
|
186
185
|
Lo: {
|
|
187
|
-
prefix: Buffer
|
|
186
|
+
prefix: Buffer<ArrayBuffer>;
|
|
188
187
|
byteLength: number;
|
|
189
188
|
};
|
|
190
189
|
LLo: {
|
|
191
|
-
prefix: Buffer
|
|
190
|
+
prefix: Buffer<ArrayBuffer>;
|
|
192
191
|
byteLength: number;
|
|
193
192
|
};
|
|
194
193
|
P: {
|
|
195
|
-
prefix: Buffer
|
|
194
|
+
prefix: Buffer<ArrayBuffer>;
|
|
196
195
|
byteLength: number;
|
|
197
196
|
};
|
|
198
197
|
Co: {
|
|
199
|
-
prefix: Buffer
|
|
198
|
+
prefix: Buffer<ArrayBuffer>;
|
|
200
199
|
byteLength: number;
|
|
201
200
|
};
|
|
202
201
|
sppk: {
|
|
203
|
-
prefix: Buffer
|
|
202
|
+
prefix: Buffer<ArrayBuffer>;
|
|
204
203
|
byteLength: number;
|
|
205
204
|
};
|
|
206
205
|
p2pk: {
|
|
207
|
-
prefix: Buffer
|
|
206
|
+
prefix: Buffer<ArrayBuffer>;
|
|
208
207
|
byteLength: number;
|
|
209
208
|
};
|
|
210
209
|
edesk: {
|
|
211
|
-
prefix: Buffer
|
|
210
|
+
prefix: Buffer<ArrayBuffer>;
|
|
212
211
|
byteLength: number;
|
|
213
212
|
};
|
|
214
213
|
edsk: {
|
|
215
|
-
prefix: Buffer
|
|
214
|
+
prefix: Buffer<ArrayBuffer>;
|
|
216
215
|
byteLength: number;
|
|
217
216
|
};
|
|
218
217
|
edsig: {
|
|
219
|
-
prefix: Buffer
|
|
218
|
+
prefix: Buffer<ArrayBuffer>;
|
|
220
219
|
byteLength: number;
|
|
221
220
|
};
|
|
222
221
|
spsig1: {
|
|
223
|
-
prefix: Buffer
|
|
222
|
+
prefix: Buffer<ArrayBuffer>;
|
|
224
223
|
byteLength: number;
|
|
225
224
|
};
|
|
226
225
|
p2sig: {
|
|
227
|
-
prefix: Buffer
|
|
226
|
+
prefix: Buffer<ArrayBuffer>;
|
|
228
227
|
byteLength: number;
|
|
229
228
|
};
|
|
230
229
|
sig: {
|
|
231
|
-
prefix: Buffer
|
|
230
|
+
prefix: Buffer<ArrayBuffer>;
|
|
232
231
|
byteLength: number;
|
|
233
232
|
};
|
|
234
233
|
Net: {
|
|
235
|
-
prefix: Buffer
|
|
234
|
+
prefix: Buffer<ArrayBuffer>;
|
|
236
235
|
byteLength: number;
|
|
237
236
|
};
|
|
238
237
|
nce: {
|
|
239
|
-
prefix: Buffer
|
|
238
|
+
prefix: Buffer<ArrayBuffer>;
|
|
240
239
|
byteLength: number;
|
|
241
240
|
};
|
|
242
241
|
id: {
|
|
243
|
-
prefix: Buffer
|
|
242
|
+
prefix: Buffer<ArrayBuffer>;
|
|
244
243
|
byteLength: number;
|
|
245
244
|
};
|
|
246
245
|
};
|
|
@@ -262,4 +261,20 @@ export declare enum DEFAULT_STORAGE_LIMIT {
|
|
|
262
261
|
TRANSFER = 257,
|
|
263
262
|
REVEAL = 0
|
|
264
263
|
}
|
|
264
|
+
export declare enum TRANSACTION_FEE {
|
|
265
|
+
ORIGINATION = 47640,
|
|
266
|
+
TRANSFER = 47640,
|
|
267
|
+
REVEAL = 1420
|
|
268
|
+
}
|
|
269
|
+
export declare enum TRANSACTION_STORAGE_LIMIT {
|
|
270
|
+
ORIGINATION = 3000,
|
|
271
|
+
TRANSFER = 300,
|
|
272
|
+
REVEAL = 5
|
|
273
|
+
}
|
|
274
|
+
export declare enum TRANSACTION_GAS_LIMIT {
|
|
275
|
+
ORIGINATION = 4600,
|
|
276
|
+
TRANSFER = 6000,
|
|
277
|
+
CONTRACT_TRANSFER = 20000,
|
|
278
|
+
REVEAL = 1500
|
|
279
|
+
}
|
|
265
280
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|